From 57e7911d4e7ec2a057c5f155ad133c27e4ec93ba Mon Sep 17 00:00:00 2001 From: Release Automat <> Date: Tue, 21 May 2024 14:43:26 +0000 Subject: [PATCH] Release 0.1.0 --- LICENSE | 42 +- Packages/tlp.udonavltree/Editor.meta | 8 + Packages/tlp.udonavltree/Editor/Tests.meta | 8 + .../Tests/TLP.UdonAVLTree.Tests.Editor.asmdef | 32 + .../TLP.UdonAVLTree.Tests.Editor.asmdef.meta | 7 + Packages/tlp.udonavltree/LICENSE | 21 + Packages/tlp.udonavltree/LICENSE.meta | 3 + Packages/tlp.udonavltree/README.md | 105 + Packages/tlp.udonavltree/README.md.meta | 7 + Packages/tlp.udonavltree/Runtime.meta | 8 + .../tlp.udonavltree/Runtime/AVLTree.asset | 1000 +++++++++ .../Runtime/AVLTree.asset.meta | 8 + Packages/tlp.udonavltree/Runtime/AVLTree.cs | 1149 ++++++++++ .../tlp.udonavltree/Runtime/AVLTree.cs.meta | 11 + .../tlp.udonavltree/Runtime/AVLTreeNode.asset | 1060 +++++++++ .../Runtime/AVLTreeNode.asset.meta | 8 + .../tlp.udonavltree/Runtime/AVLTreeNode.cs | 354 ++++ .../Runtime/AVLTreeNode.cs.meta | 11 + .../tlp.udonavltree/Runtime/AssemblyInfo.cs | 4 + .../Runtime/AssemblyInfo.cs.meta | 11 + .../Runtime/ExampleAvlTreeUser.asset | 928 ++++++++ .../Runtime/ExampleAvlTreeUser.asset.meta | 8 + .../Runtime/ExampleAvlTreeUser.cs | 99 + .../Runtime/ExampleAvlTreeUser.cs.meta | 11 + .../Runtime/ExampleComparer.asset | 637 ++++++ .../Runtime/ExampleComparer.asset.meta | 8 + .../Runtime/ExampleComparer.cs | 46 + .../Runtime/ExampleComparer.cs.meta | 11 + .../Runtime/ExampleSortable.asset | 808 +++++++ .../Runtime/ExampleSortable.asset.meta | 8 + .../Runtime/ExampleSortable.cs | 50 + .../Runtime/ExampleSortable.cs.meta | 11 + Packages/tlp.udonavltree/Runtime/Prefabs.meta | 8 + .../Runtime/Prefabs/AVLTree.prefab | 118 ++ .../Runtime/Prefabs/AVLTree.prefab.meta | 7 + .../Runtime/Prefabs/TLP_Factories.prefab | 494 +++++ .../Runtime/Prefabs/TLP_Factories.prefab.meta | 7 + Packages/tlp.udonavltree/Runtime/Scenes.meta | 8 + .../Runtime/Scenes/AVLTreeDemo.unity | 1886 +++++++++++++++++ .../Runtime/Scenes/AVLTreeDemo.unity.meta | 7 + .../Runtime/TLP.UdonAVLTree.Runtime.asmdef | 17 + .../TLP.UdonAVLTree.Runtime.asmdef.meta | 7 + .../Runtime/TLP.UdonAVLTree.Runtime.asset | 16 + .../TLP.UdonAVLTree.Runtime.asset.meta | 8 + Packages/tlp.udonavltree/Runtime/Tests.meta | 8 + .../Runtime/Tests/MockComparableElement.cs | 18 + .../Tests/MockComparableElement.cs.meta | 11 + .../Tests/MockComparableElementComparer.cs | 46 + .../MockComparableElementComparer.cs.meta | 11 + .../TLP.UdonAVLTree.Tests.Runtime.asmdef | 30 + .../TLP.UdonAVLTree.Tests.Runtime.asmdef.meta | 7 + .../Runtime/Tests/TestAvlTree.cs | 145 ++ .../Runtime/Tests/TestAvlTree.cs.meta | 11 + Packages/tlp.udonavltree/package.json | 20 + Packages/tlp.udonavltree/package.json.meta | 7 + README.md | 106 +- 56 files changed, 9463 insertions(+), 22 deletions(-) create mode 100644 Packages/tlp.udonavltree/Editor.meta create mode 100644 Packages/tlp.udonavltree/Editor/Tests.meta create mode 100644 Packages/tlp.udonavltree/Editor/Tests/TLP.UdonAVLTree.Tests.Editor.asmdef create mode 100644 Packages/tlp.udonavltree/Editor/Tests/TLP.UdonAVLTree.Tests.Editor.asmdef.meta create mode 100644 Packages/tlp.udonavltree/LICENSE create mode 100644 Packages/tlp.udonavltree/LICENSE.meta create mode 100644 Packages/tlp.udonavltree/README.md create mode 100644 Packages/tlp.udonavltree/README.md.meta create mode 100644 Packages/tlp.udonavltree/Runtime.meta create mode 100644 Packages/tlp.udonavltree/Runtime/AVLTree.asset create mode 100644 Packages/tlp.udonavltree/Runtime/AVLTree.asset.meta create mode 100644 Packages/tlp.udonavltree/Runtime/AVLTree.cs create mode 100644 Packages/tlp.udonavltree/Runtime/AVLTree.cs.meta create mode 100644 Packages/tlp.udonavltree/Runtime/AVLTreeNode.asset create mode 100644 Packages/tlp.udonavltree/Runtime/AVLTreeNode.asset.meta create mode 100644 Packages/tlp.udonavltree/Runtime/AVLTreeNode.cs create mode 100644 Packages/tlp.udonavltree/Runtime/AVLTreeNode.cs.meta create mode 100644 Packages/tlp.udonavltree/Runtime/AssemblyInfo.cs create mode 100644 Packages/tlp.udonavltree/Runtime/AssemblyInfo.cs.meta create mode 100644 Packages/tlp.udonavltree/Runtime/ExampleAvlTreeUser.asset create mode 100644 Packages/tlp.udonavltree/Runtime/ExampleAvlTreeUser.asset.meta create mode 100644 Packages/tlp.udonavltree/Runtime/ExampleAvlTreeUser.cs create mode 100644 Packages/tlp.udonavltree/Runtime/ExampleAvlTreeUser.cs.meta create mode 100644 Packages/tlp.udonavltree/Runtime/ExampleComparer.asset create mode 100644 Packages/tlp.udonavltree/Runtime/ExampleComparer.asset.meta create mode 100644 Packages/tlp.udonavltree/Runtime/ExampleComparer.cs create mode 100644 Packages/tlp.udonavltree/Runtime/ExampleComparer.cs.meta create mode 100644 Packages/tlp.udonavltree/Runtime/ExampleSortable.asset create mode 100644 Packages/tlp.udonavltree/Runtime/ExampleSortable.asset.meta create mode 100644 Packages/tlp.udonavltree/Runtime/ExampleSortable.cs create mode 100644 Packages/tlp.udonavltree/Runtime/ExampleSortable.cs.meta create mode 100644 Packages/tlp.udonavltree/Runtime/Prefabs.meta create mode 100644 Packages/tlp.udonavltree/Runtime/Prefabs/AVLTree.prefab create mode 100644 Packages/tlp.udonavltree/Runtime/Prefabs/AVLTree.prefab.meta create mode 100644 Packages/tlp.udonavltree/Runtime/Prefabs/TLP_Factories.prefab create mode 100644 Packages/tlp.udonavltree/Runtime/Prefabs/TLP_Factories.prefab.meta create mode 100644 Packages/tlp.udonavltree/Runtime/Scenes.meta create mode 100644 Packages/tlp.udonavltree/Runtime/Scenes/AVLTreeDemo.unity create mode 100644 Packages/tlp.udonavltree/Runtime/Scenes/AVLTreeDemo.unity.meta create mode 100644 Packages/tlp.udonavltree/Runtime/TLP.UdonAVLTree.Runtime.asmdef create mode 100644 Packages/tlp.udonavltree/Runtime/TLP.UdonAVLTree.Runtime.asmdef.meta create mode 100644 Packages/tlp.udonavltree/Runtime/TLP.UdonAVLTree.Runtime.asset create mode 100644 Packages/tlp.udonavltree/Runtime/TLP.UdonAVLTree.Runtime.asset.meta create mode 100644 Packages/tlp.udonavltree/Runtime/Tests.meta create mode 100644 Packages/tlp.udonavltree/Runtime/Tests/MockComparableElement.cs create mode 100644 Packages/tlp.udonavltree/Runtime/Tests/MockComparableElement.cs.meta create mode 100644 Packages/tlp.udonavltree/Runtime/Tests/MockComparableElementComparer.cs create mode 100644 Packages/tlp.udonavltree/Runtime/Tests/MockComparableElementComparer.cs.meta create mode 100644 Packages/tlp.udonavltree/Runtime/Tests/TLP.UdonAVLTree.Tests.Runtime.asmdef create mode 100644 Packages/tlp.udonavltree/Runtime/Tests/TLP.UdonAVLTree.Tests.Runtime.asmdef.meta create mode 100644 Packages/tlp.udonavltree/Runtime/Tests/TestAvlTree.cs create mode 100644 Packages/tlp.udonavltree/Runtime/Tests/TestAvlTree.cs.meta create mode 100644 Packages/tlp.udonavltree/package.json create mode 100644 Packages/tlp.udonavltree/package.json.meta diff --git a/LICENSE b/LICENSE index cc41947..b162169 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2024 Guribo - -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. \ No newline at end of file +MIT License + +Copyright (c) 2024 Guribo + +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/Packages/tlp.udonavltree/Editor.meta b/Packages/tlp.udonavltree/Editor.meta new file mode 100644 index 0000000..508addb --- /dev/null +++ b/Packages/tlp.udonavltree/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4905c8c0be2f827408193b008685790d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Editor/Tests.meta b/Packages/tlp.udonavltree/Editor/Tests.meta new file mode 100644 index 0000000..d1cfdf4 --- /dev/null +++ b/Packages/tlp.udonavltree/Editor/Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0eab3a2d98287d94381f525b2810b21d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Editor/Tests/TLP.UdonAVLTree.Tests.Editor.asmdef b/Packages/tlp.udonavltree/Editor/Tests/TLP.UdonAVLTree.Tests.Editor.asmdef new file mode 100644 index 0000000..6ad3226 --- /dev/null +++ b/Packages/tlp.udonavltree/Editor/Tests/TLP.UdonAVLTree.Tests.Editor.asmdef @@ -0,0 +1,32 @@ +{ + "name": "TLP.UdonAVLTree.Tests.Editor", + "references": [ + "GUID:46dc224c71dea7a45a4dd8e64080dae9", + "GUID:3634ffb2884b2cc41b9d3c5cae427e03", + "GUID:b77335caf96fc924c977029c9512b87e", + "GUID:d5e55c3261dfa5644b45b5697ab0cfbf", + "GUID:5ffc5658c86203349b4ced03f037df1f", + "GUID:68bc3016fc696ad4196dfaf30bfed765", + "GUID:3b40974c3b83edb45909671e8bf52bba", + "GUID:99835874ee819da44948776e0df4ff1d", + "GUID:0acc523941302664db1f4e527237feb3", + "GUID:27619889b8ba8c24980f49ee34dbb44a" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "VRCSDKBase.dll", + "VRC.Udon.Common.dll", + "nunit.framework.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/tlp.udonavltree/Editor/Tests/TLP.UdonAVLTree.Tests.Editor.asmdef.meta b/Packages/tlp.udonavltree/Editor/Tests/TLP.UdonAVLTree.Tests.Editor.asmdef.meta new file mode 100644 index 0000000..af04847 --- /dev/null +++ b/Packages/tlp.udonavltree/Editor/Tests/TLP.UdonAVLTree.Tests.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c036e138266fa2442a795fc0d98f1979 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/LICENSE b/Packages/tlp.udonavltree/LICENSE new file mode 100644 index 0000000..b162169 --- /dev/null +++ b/Packages/tlp.udonavltree/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Guribo + +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/Packages/tlp.udonavltree/LICENSE.meta b/Packages/tlp.udonavltree/LICENSE.meta new file mode 100644 index 0000000..1dfa399 --- /dev/null +++ b/Packages/tlp.udonavltree/LICENSE.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 64e7a125a1e448a1b7feb28e0bdd92d2 +timeCreated: 1716297841 \ No newline at end of file diff --git a/Packages/tlp.udonavltree/README.md b/Packages/tlp.udonavltree/README.md new file mode 100644 index 0000000..695794f --- /dev/null +++ b/Packages/tlp.udonavltree/README.md @@ -0,0 +1,105 @@ +# Udon AVL Tree + +[![Total downloads](https://img.shields.io/github/downloads/Guribo/UdonAVLTree/total?style=flat-square&logo=appveyor)](https://github.com/Guribo/UdonAVLTree/releases) + +A AVL tree implementation for U# based VRChat worlds. + +## Installation + +**For simplicity reasons please install only via VRChat Creator companion and not manually using Unity packages! You will be missing dependencies when going the Unity package way!** + +1. Import VRChat World SDK 3.6 VCC package into your project +2. Add CyanPlayerObjectPool package listing to VCC: https://cyanlaser.github.io/CyanPlayerObjectPool/ +3. Add TLP Package listing to VCC: https://guribo.github.io/TLP/ +4. Import TLP UdonAVLTree into your project + 1. *This will now automatically import all other needed packages for you:* + - *TLP UdonUtils* + - *CyanPlayerObjectPool* + +## Setup + +*Note: All prefabs are in the `Packages` folder so make sure that you select either `All` or `Packages` when searching for them.* + +1. Add `TLP_Essentials` prefab to your scene +2. TODO + +## Known Issues + +- TODO + +## Versioning + +This package is versioned using [Semantic Version](https://semver.org/). + +The used pattern MAJOR.MINOR.PATCH indicates: + +1. MAJOR version: incompatible API changes occurred + - Implication: after updating backup, check and update your scenes/scripts as needed +2. MINOR version: new functionality has been added in a backward compatible manner + - Implication: after updating check and update your usages if needed +3. PATCH version: backward compatible bug fixes were implemented + - Implication: after updating remove potential workarounds you added + +## Changelog + +All notable changes to this project will be documented in this file. + +### [0.1.0] - 2024-05-21 + +#### 🚀 Features + +- Move from TLP +- Update to U## 1.0 and client sim +- Move logging to base class +- Fix loglevels, assert and perf limit warning +- Fix entries with invalid names being added to leaderboard +- Add vehicle sync, update leader board (break it too) +- Add gamemode, update vr components, test improvements, add serialization retry to base behaviour +- Add logging of all logs in frame to profiler +- Simplify comparison of behaviours +- Fix entries not being added to tree (wip), fix limitless syncing +- Add TLP_UNIT_TESTING define, add companion version of VRWorldToolkit +- Make tree not synchronized +- Fix up scenes and broken event callbacks +- Fix updates not being displayed +- Display data in leaderboard entry +- Update tribes scene, create leaderboard prefab +- Create factories for avl tree, factory with pool +- Reduce type spam in logs, add execution order to logs +- Add comparer creation, update exectionorders, move pooleable code to base behaviour +- Support adding players to model +- Fix finding of inactive gameobjects +- Add new data source using leaderboard model +- Deinit on destroy, selectable categories with view +- Have entry synchronizer get notified when an entry changes +- Have synchronizer attach entry to dirty root +- Support playmode test +- Update UVU exporter and readme +- Initial conversion +- Recompile +- Remove local path +- Update dependencies +- Rename and add udonutils dependency +- Update namespaces +- Update assets +- Update to support latest vrc sdk +- Update Pool references +- Migrate to UdonUtils 7.0.0 and vrc sdk 3.6 + +#### 🚜 Refactor + +- Cleanup and more test coverage +- Remove unused code and cleanup +- Ui controller method extraction +- Test aggressive inlining, restructure + +#### 🧪 Testing + +- Update tests to use TestWithLogger, reduce log spam + +#### ⚙️ Miscellaneous Tasks + +- Reserialize +- Add ci pipeline and update Readme + + diff --git a/Packages/tlp.udonavltree/README.md.meta b/Packages/tlp.udonavltree/README.md.meta new file mode 100644 index 0000000..5314148 --- /dev/null +++ b/Packages/tlp.udonavltree/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2e5be562a9b660a40af0d5a5589a5824 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime.meta b/Packages/tlp.udonavltree/Runtime.meta new file mode 100644 index 0000000..382a43c --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 82d1cc96688a1134bb51002de1c37235 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/AVLTree.asset b/Packages/tlp.udonavltree/Runtime/AVLTree.asset new file mode 100644 index 0000000..130de4c --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/AVLTree.asset @@ -0,0 +1,1000 @@ +%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: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3} + m_Name: AVLTree + m_EditorClassIdentifier: + serializedUdonProgramAsset: {fileID: 11400000, guid: eabe12c0695e6bb4e9c3a8039bf7f24e, + type: 2} + udonAssembly: + assemblyError: + sourceCsScript: {fileID: 11500000, guid: 39e6227d5f517e64aac6137177fac298, type: 3} + scriptVersion: 2 + compiledVersion: 2 + behaviourSyncMode: 1 + hasInteractEvent: 0 + scriptID: -6306133659752691880 + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: fieldDefinitions + Entry: 7 + Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition, + UdonSharp.Editor]], mscorlib + - Name: comparer + Entry: 7 + Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, + mscorlib]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 16 + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: AutoRetrySendOnFailure + - Name: $v + Entry: 7 + Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: AutoRetrySendOnFailure + - Name: k__BackingField + Entry: 7 + Data: 3|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Boolean, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 4|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 5|UnityEngine.HeaderAttribute, UnityEngine.CoreModule + - Name: header + Entry: 1 + Data: TLP/Networking + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 6|UnityEngine.TooltipAttribute, UnityEngine.CoreModule + - Name: tooltip + Entry: 1 + Data: If true and a serialization request fails it will automatically try to + send again in the next frame until it succeeds. Only applies to owned objects + and manual sync. + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: Severity + - Name: $v + Entry: 7 + Data: 7|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: Severity + - Name: k__BackingField + Entry: 7 + Data: 8|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.Logger.ELogLevel, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: 9|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Int32, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 10|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: 11|UnityEngine.HeaderAttribute, UnityEngine.CoreModule + - Name: header + Entry: 1 + Data: TLP/Logging + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 12|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 13|UnityEngine.TooltipAttribute, UnityEngine.CoreModule + - Name: tooltip + Entry: 1 + Data: 'What kind of logs of this behavior shall be produced. Selected severity + includes all more severe levels. Example: selecting ''Warning'' also allows + ''Error'' and ''Assertion'' messages to appear. + + Note: + + ''Debug'' + messages are filtered out by default, even when selected. Add the compiler + definition ''TLP_DEBUG'' in the Unity player settings to enable them. This + should only ever be used for debugging (performance suffers)!' + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: PendingSerializations + - Name: $v + Entry: 7 + Data: 14|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: PendingSerializations + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 15|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _hadLogger + - Name: $v + Entry: 7 + Data: 16|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _hadLogger + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 17|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: k__BackingField + - Name: $v + Entry: 7 + Data: 18|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: k__BackingField + - Name: k__BackingField + Entry: 7 + Data: 19|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.Logger.TlpLogger, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: 20|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: VRC.Udon.UdonBehaviour, VRC.Udon + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 21|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: EventInstigator + - Name: $v + Entry: 7 + Data: 22|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: EventInstigator + - Name: k__BackingField + Entry: 7 + Data: 23|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.TlpBaseBehaviour, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 24|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: 25|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 26|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 27|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: Pool + - Name: $v + Entry: 7 + Data: 28|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: Pool + - Name: k__BackingField + Entry: 9 + Data: 23 + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 29|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: 30|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 31|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 32|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: PoolableInUse + - Name: $v + Entry: 7 + Data: 33|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: PoolableInUse + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 34|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 35|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 36|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: k__BackingField + - Name: $v + Entry: 7 + Data: 37|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: k__BackingField + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 38|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: Comparer + - Name: $v + Entry: 7 + Data: 39|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: Comparer + - Name: k__BackingField + Entry: 7 + Data: 40|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.Common.Comparer, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 41|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 42|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: TreeNodes + - Name: $v + Entry: 7 + Data: 43|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: TreeNodes + - Name: k__BackingField + Entry: 7 + Data: 44|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Transform, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 44 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 45|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 46|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _avlTreeNodePool + - Name: $v + Entry: 7 + Data: 47|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _avlTreeNodePool + - Name: k__BackingField + Entry: 7 + Data: 48|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.Runtime.Pool.Pool, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 49|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _nodeFactory + - Name: $v + Entry: 7 + Data: 50|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _nodeFactory + - Name: k__BackingField + Entry: 7 + Data: 51|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.Runtime.Pool.FactoryWithPool, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 52|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: RootNode + - Name: $v + Entry: 7 + Data: 53|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: RootNode + - Name: k__BackingField + Entry: 7 + Data: 54|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonAVLTree.Runtime.AVLTreeNode, TLP.UdonAVLTree.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 55|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: m_LastFrame + - Name: $v + Entry: 7 + Data: 56|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: m_LastFrame + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 57|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: m_GetCallCount + - Name: $v + Entry: 7 + Data: 58|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: m_GetCallCount + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 59|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: diff --git a/Packages/tlp.udonavltree/Runtime/AVLTree.asset.meta b/Packages/tlp.udonavltree/Runtime/AVLTree.asset.meta new file mode 100644 index 0000000..5ad5fd2 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/AVLTree.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b866cc3d21234e1458ec590633b6bc56 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/AVLTree.cs b/Packages/tlp.udonavltree/Runtime/AVLTree.cs new file mode 100644 index 0000000..92e7753 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/AVLTree.cs @@ -0,0 +1,1149 @@ +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Text; +using JetBrains.Annotations; +using TLP.UdonUtils; +using TLP.UdonUtils.Common; +using TLP.UdonUtils.Factories; +using TLP.UdonUtils.Runtime.Pool; +using UdonSharp; +using UnityEngine; +using UnityEngine.Serialization; +using VRC.SDKBase; +using VRC.Udon; + +namespace TLP.UdonAVLTree.Runtime +{ + /// + /// Loosely based on the AVL tree implementation by KadirEmreOto, + /// but converted to UDON and extended with using empty child + /// references as wires for faster in-order access of nodes. + /// + /// + // ReSharper disable once InconsistentNaming + [UdonBehaviourSyncMode(BehaviourSyncMode.None)] + [DefaultExecutionOrder(ExecutionOrder)] + public class AVLTree : TlpBaseBehaviour + { + protected override int ExecutionOrderReadOnly => ExecutionOrder; + + [PublicAPI] + public new const int ExecutionOrder = FactoryWithPool.ExecutionOrder + 1; + + public int Size { get; internal set; } + + [FormerlySerializedAs("comparer")] + public Comparer Comparer; + + [FormerlySerializedAs("treeNodes")] + public Transform TreeNodes; + + internal Pool _avlTreeNodePool; + private FactoryWithPool _nodeFactory; + + internal AVLTreeNode RootNode; + + + public override void Start() + { + base.Start(); + if (!Utilities.IsValid(Comparer)) + { + Error($"{nameof(Comparer)} invalid"); + enabled = false; + return; + } + + if (!Utilities.IsValid(_nodeFactory)) + { + _nodeFactory = TlpFactory.GetConcreteFactory(nameof(AVLTreeNode)); + } + + if (!Utilities.IsValid(_nodeFactory)) + { + Error($"{nameof(_nodeFactory)} invalid"); + enabled = false; + return; + } + + _avlTreeNodePool = _nodeFactory.ProductPool; + if (!Utilities.IsValid(_avlTreeNodePool)) + { + Error($"{nameof(_avlTreeNodePool)} invalid"); + enabled = false; + return; + } + } + + + public bool Add(TlpBaseBehaviour newElement) + { +#if TLP_DEBUG + DebugLog(nameof(Add)); +#endif + + if (!Utilities.IsValid(_avlTreeNodePool)) + { + Error($"{nameof(_avlTreeNodePool)} invalid"); + return false; + } + + var newNodeGameObject = _avlTreeNodePool.Get(); + if (!Utilities.IsValid(newNodeGameObject)) + { + Error("Failed to get node from pool"); + return false; + } + + var newNode = newNodeGameObject.GetComponent(); + if (!Utilities.IsValid(newNode)) + { + Error("New node does not have a AVLTreeNode component"); + _avlTreeNodePool.Return(newNodeGameObject); + return false; + } + + newNode.payload = newElement; + + var current = RootNode; + + while (Utilities.IsValid(current)) + { + // ReSharper disable once InlineOutVariableDeclaration not supported yet by Udon + int comparisonResult; + bool comparisonSuccess = Comparer.Compare(newElement, current.payload, out comparisonResult); + if (!comparisonSuccess) + { + Error("Add failed on comparison"); + _avlTreeNodePool.Return(newNodeGameObject); + return false; + } + + if (comparisonResult == -1) + { + if (!current.IsLeftValidNode()) + { + // set parent + newNode.ownTransform.parent = current.ownTransform; + newNode.parent = current; + + // take of parents left wire + newNode.left = current.left; + newNode.leftIsWire = current.leftIsWire; + + // connect the right wire to the parent + newNode.right = current; + newNode.rightIsWire = true; + + // attach to the parents left side + current.left = newNode; + current.leftIsWire = false; + + // leave for balancing + current = newNode; + break; + } + + current = current.left; + } + else + { + if (!current.IsRightValidNode()) + { + // set parent + newNode.ownTransform.parent = current.ownTransform; + newNode.parent = current; + + // take of parents right wire + newNode.right = current.right; + newNode.rightIsWire = current.rightIsWire; + + // connect the left wire to the parent + newNode.left = current; + newNode.leftIsWire = true; + + // attach to the parents right side + current.right = newNode; + current.rightIsWire = false; + + // leave for balancing + current = newNode; + break; + } + + current = current.right; + } + } + + if (!Utilities.IsValid(current)) + { + current = newNode; + } + + Balance(current); + Size++; + + // if (!VerifyChildrenConnections()) + // { + // Error("Children broke"); + // return false; + // } + // + // if (!VerifyParentConnections()) + // { + // Error("Parents broke"); + // return false; + // } + + return true; + } + + public bool Remove(UdonSharpBehaviour elementToRemove) + { + DebugLog(nameof(Remove)); + if (!Utilities.IsValid(elementToRemove)) + { + Error(nameof(elementToRemove)); + return false; + } + + var nodeToDelete = FindNode(elementToRemove, RootNode); + + if (!Utilities.IsValid(nodeToDelete)) + { + // the value does not exist in tree + Warn($"Value {elementToRemove.ToString()} does not exist"); + return false; + } + + bool leftValid = nodeToDelete.IsLeftValidNode(); + bool rightValid = nodeToDelete.IsRightValidNode(); + + AVLTreeNode balanceStart = null; + if (!rightValid && !leftValid) + { + balanceStart = RemoveLeafNode(nodeToDelete); + } + else if (nodeToDelete.Balance < 0) + { + balanceStart = RemoveRootNodeOfLeftHeavyTree(nodeToDelete, false); + } + else + { + balanceStart = RemoveRootNodeOfLeftHeavyTree(nodeToDelete, true); + } + + if (Utilities.IsValid(balanceStart)) + { + Balance(balanceStart); + } + else + { + RootNode = null; + } + + Size--; + + return true; + } + +#if !COMPILER_UDONSHARP && UNITY_EDITOR + + #region Debugging + + public bool VerifyParentConnections() + { + var parents = new Dictionary>(); + var avlTreeNodes = TreeNodes.GetComponentsInChildren(true); + var nullParents = new HashSet(); + foreach (var avlTreeNode in avlTreeNodes) + { + parents.Add(avlTreeNode, new HashSet()); + } + + foreach (var node in avlTreeNodes) + { + if (node.IsLeftValidNode()) + { + Debug.Assert(ReferenceEquals(node.left.parent, node), "node.left.parent == this"); + if (!ReferenceEquals(node.left.parent, node)) + { + return false; + } + } + + if (node.IsRightValidNode()) + { + Debug.Assert(ReferenceEquals(node.right.parent, node), "node.right.parent == this"); + if (!ReferenceEquals(node.right.parent, node)) + { + return false; + } + } + + if (node.parent) + { + parents[node.parent].Add(node); + } + else + { + nullParents.Add(node); + } + } + + bool failed = false; + + if (nullParents.Count != 1) + { + foreach (var avlTreeNode in nullParents) + { + Error("Has null parent: " + avlTreeNode.PayloadToString()); + failed = true; + } + } + + foreach (var keyValuePair in parents) + { + if (keyValuePair.Value.Count > 2) + { + foreach (var child in keyValuePair.Value) + { + Error( + keyValuePair.Key.PayloadToString() + ": refernced by (parent ref): " + + child.PayloadToString() + ); + failed = true; + } + } + } + + return !failed; + } + + public bool VerifyChildrenConnections() + { + var allNodes = TreeNodes.GetComponentsInChildren(true); + var leftChildren = new HashSet(); + var rightChildren = new HashSet(); + + foreach (var avlTreeNode in allNodes) + { + if (!FindNode(avlTreeNode.payload, avlTreeNode)) + { + return false; + } + + if (avlTreeNode.IsLeftValidNode()) + { + if (leftChildren.Contains(avlTreeNode.left)) + { + Error(avlTreeNode.PayloadToString() + " also links to " + avlTreeNode.left.PayloadToString()); + return false; + } + + leftChildren.Add(avlTreeNode.left); + } + + if (avlTreeNode.IsRightValidNode()) + { + if (rightChildren.Contains(avlTreeNode.right)) + { + Error(avlTreeNode.PayloadToString() + " also links to " + avlTreeNode.left.PayloadToString()); + return false; + } + + rightChildren.Add(avlTreeNode.right); + } + } + + return true; + } + + internal bool VerifyBalance() + { + bool success = true; + foreach (var node in TreeNodes.GetComponentsInChildren(true)) + { + int balance = node.Balance; + if (balance < -1 || balance > 1) + { + Error(node.PayloadToString() + " has wrong balance " + balance); + success = false; + } + } + + return success; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void LogList(string prefix, List list) + { + var sb = new StringBuilder(); + sb.Append(prefix).Append("\n{"); + foreach (var i in list) + { + sb.Append(i.PayloadToString()).Append(","); + } + + + sb.Replace(",", "", sb.Length - 1, 1); + sb.Append("}"); + + Debug.Log(sb.ToString()); + } + + #endregion + +#endif + + [PublicAPI] + public UdonSharpBehaviour Contains(UdonSharpBehaviour searchElement) + { + DebugLog(nameof(Contains)); + var avlTreeNode = FindNode(searchElement, RootNode); + if (Utilities.IsValid(avlTreeNode)) + { + return avlTreeNode.payload; + } + + return null; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal AVLTreeNode FindNode(UdonSharpBehaviour searchElement, AVLTreeNode start) + { + if (!Utilities.IsValid(Comparer)) + { + Error($"{nameof(Comparer)} invalid"); + return null; + } + + while (true) + { + if (!Utilities.IsValid(start)) + { + // node not found, first exit point + return null; + } + + // ReSharper disable once InlineOutVariableDeclaration not supported yet by Udon + int comparisonResult; + + // ReSharper disable once PossibleNullReferenceException False positive, see Utilities.IsValid(start) + bool comparisonSuccess = Comparer.Compare(searchElement, start.payload, out comparisonResult); + if (!comparisonSuccess) + { + Error($"Comparison failed when looking for Node {searchElement}"); + + // second exit point + return null; + } + + if (comparisonResult == 0) + { + // entry found, third exit point + return start; + } + + if (comparisonResult < 0) + { + start = start.IsLeftValidNode() ? start.left : null; + } + else + { + start = start.IsRightValidNode() ? start.right : null; + } + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private AVLTreeNode RemoveLeafNode(AVLTreeNode nodeToDelete) + { + var successor = nodeToDelete.parent; + if (Utilities.IsValid(successor)) + { + if (successor.left == nodeToDelete) + { + successor.left = nodeToDelete.left; + successor.leftIsWire = nodeToDelete.leftIsWire; + } + else + { + successor.right = nodeToDelete.right; + successor.rightIsWire = nodeToDelete.rightIsWire; + } + } + else + { + RootNode = null; + } + + _avlTreeNodePool.Return(nodeToDelete.gameObject); + return successor; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private AVLTreeNode RemoveNodeWithValidLeftChild(AVLTreeNode nodeToRemove) + { + var successor = nodeToRemove.left; + + // tell child about new parent + successor.parent = nodeToRemove.parent; + successor.ownTransform.parent = nodeToRemove.ownTransform.parent; + + bool childWillHaveParent = Utilities.IsValid(nodeToRemove.parent); + if (childWillHaveParent) + { + bool deletedNodeWasLeftChild = nodeToRemove.parent.left == nodeToRemove; + if (deletedNodeWasLeftChild) + { + // attach successor to parent + nodeToRemove.parent.left = successor; + } + else + { + // attach successor to parent + nodeToRemove.parent.right = successor; + } + + // use the left wire of the deleted node + successor.right = nodeToRemove.parent; + successor.rightIsWire = true; + } + else + { + // successor becomes new root with no children/wires + RootNode = successor; + successor.left = null; + successor.right = null; + successor.leftIsWire = false; + successor.rightIsWire = false; + } + + _avlTreeNodePool.Return(nodeToRemove.gameObject); + + return successor; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private AVLTreeNode RemoveNodeWithValidRightChild(AVLTreeNode nodeToRemove) + { + var successor = nodeToRemove.right; + + // tell child about new parent + successor.parent = nodeToRemove.parent; + successor.ownTransform.parent = nodeToRemove.ownTransform.parent; + + bool childWillHaveParent = Utilities.IsValid(nodeToRemove.parent); + if (childWillHaveParent) + { + // tell the parent about the new child + bool deletedNodeWasLeftChild = nodeToRemove.parent.left == nodeToRemove; + if (deletedNodeWasLeftChild) + { + // attach successor to parent + nodeToRemove.parent.left = successor; + } + else + { + // attach successor to parent + nodeToRemove.parent.right = successor; + } + + // use the left wire of the deleted node + successor.left = nodeToRemove.parent; + } + else + { + // successor becomes new root with no children/wires + RootNode = successor; + successor.left = null; + successor.right = null; + successor.leftIsWire = false; + successor.rightIsWire = false; + } + + _avlTreeNodePool.Return(nodeToRemove.gameObject); + return successor; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal AVLTreeNode RemoveNodeWithValidChildren(AVLTreeNode nodeToRemove) + { + if (nodeToRemove.Balance < 0) + { + nodeToRemove = RemoveRootNodeOfLeftHeavyTree(nodeToRemove, false); + } + else + { + nodeToRemove = RemoveRootNodeOfLeftHeavyTree(nodeToRemove, true); + } + + return nodeToRemove; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal AVLTreeNode RemoveRootNodeOfRightHeavyTree(AVLTreeNode toRemove) + { + var successor = toRemove.GetFirst(toRemove.right); + + AVLTreeNode balancingStart; + + bool successorHasLeftChildren = successor != toRemove.right; + if (successorHasLeftChildren) + { + balancingStart = successor.parent; + + if (successor.IsRightValidNode()) + { + // attach child of successor to parent of successor + var childOfSuccessor = successor.right; + + if (balancingStart != childOfSuccessor) + { + balancingStart.left = childOfSuccessor; + childOfSuccessor.parent = balancingStart; + childOfSuccessor.ownTransform.parent = balancingStart.ownTransform; + } + } + else + { + // connect the right tree wire to the new root + balancingStart.left = successor; + balancingStart.leftIsWire = true; + } + + successor.right = toRemove.right; + successor.rightIsWire = false; + + successor.parent = toRemove.parent; + successor.ownTransform.parent = toRemove.ownTransform.parent; + + toRemove.left.parent = successor; + toRemove.left.ownTransform.parent = successor.ownTransform; + successor.left = toRemove.left; + successor.leftIsWire = false; + + toRemove.right.parent = successor; + toRemove.right.ownTransform.parent = successor.ownTransform; + } + else + { + balancingStart = successor; + + successor.parent = toRemove.parent; + successor.ownTransform.parent = toRemove.ownTransform.parent; + + toRemove.left.parent = successor; + toRemove.left.ownTransform.parent = successor.ownTransform; + successor.left = toRemove.left; + successor.leftIsWire = false; + } + + // connect the right trees wire to the new root + successor.GetLast(successor.left).right = successor; + successor.GetLast(successor.left).rightIsWire = true; + + if (Utilities.IsValid(toRemove.parent)) + { + if (toRemove.parent.left == toRemove) + { + toRemove.parent.left = successor; + + var mostRight = successor.GetLast(successor); + mostRight.right = toRemove.parent; + mostRight.rightIsWire = true; + } + else + { + toRemove.parent.right = successor; + var mostLeft = successor.GetFirst(successor); + mostLeft.left = toRemove.parent; + mostLeft.leftIsWire = true; + } + } + else + { + var mostLeft = successor.GetFirst(successor); + mostLeft.left = null; + mostLeft.leftIsWire = false; + + var mostRight = successor.GetLast(successor); + mostRight.right = null; + mostRight.rightIsWire = false; + } + + _avlTreeNodePool.Return(toRemove.gameObject); + + return balancingStart; + } + + /// + /// given a node that is the root of a (sub-) tree it replaces it with the + /// single left child. Must only have a single node in the left side! + /// + /// + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal AVLTreeNode ReplaceRootWithLeftChild(AVLTreeNode root) + { + if (root.IsRightValidNode()) + { + var minRight = root.right.GetFirst(root.right); + + root.right.parent = root.left; + root.right.ownTransform.parent = root.left.ownTransform; + + minRight.left = root.left; + minRight.leftIsWire = true; + } + + root.left.parent = root.parent; + root.left.ownTransform.parent = root.ownTransform.parent; + + root.left.right = root.right; + root.left.rightIsWire = root.rightIsWire; + + if (root == RootNode) + { + RootNode = root.left; + } + else + { + if (root.parent.left == root) + { + root.parent.left = root.left; + } + else + { + root.parent.right = root.left; + } + } + + return root.left; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal AVLTreeNode ReplaceRootWithRightChild(AVLTreeNode root) + { + if (root.IsLeftValidNode()) + { + var maxLeft = root.left.GetLast(root.left); + + root.left.parent = root.right; + root.left.ownTransform.parent = root.right.ownTransform; + + maxLeft.right = root.right; + maxLeft.rightIsWire = true; + } + + root.right.parent = root.parent; + root.right.ownTransform.parent = root.ownTransform.parent; + + root.right.left = root.left; + root.right.leftIsWire = root.leftIsWire; + + if (root == RootNode) + { + RootNode = root.right; + } + else + { + if (root.parent.right == root) + { + root.parent.right = root.right; + } + else + { + root.parent.left = root.right; + } + } + + return root.right; + } + + /// + /// B -> C + /// C + /// B (?) + /// A (?) + /// + /// + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal AVLTreeNode ReplaceRootWithLeftTreeLeftHeavy(AVLTreeNode root) + { + var maxLeftTree = root.left.GetLast(root.left); + var minRightTree = root.right.GetFirst(root.right); + + if (maxLeftTree.IsLeftValidNode()) + { + maxLeftTree.RotateRight(); + } + + var balancingStartNode = maxLeftTree.parent; + + maxLeftTree.parent = root.parent; + maxLeftTree.ownTransform.parent = root.ownTransform.parent; + + maxLeftTree.left = root.left; + maxLeftTree.leftIsWire = false; + + + maxLeftTree.right = root.right; + maxLeftTree.rightIsWire = root.rightIsWire; + + minRightTree.left = maxLeftTree; + + root.right.parent = maxLeftTree; + root.right.ownTransform.parent = maxLeftTree.ownTransform; + + if (balancingStartNode == root.left) + { + balancingStartNode.parent = maxLeftTree; + balancingStartNode.ownTransform.parent = maxLeftTree.ownTransform; + } + + balancingStartNode.rightIsWire = true; + + + root.left.parent = maxLeftTree; + root.left.ownTransform.parent = maxLeftTree.ownTransform; + + if (root.parent) + { + if (root.parent.left == root) + { + root.parent.left = maxLeftTree; + } + else + { + root.parent.right = maxLeftTree; + } + } + + return balancingStartNode; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal AVLTreeNode ReplaceRootWithRightTreeRightHeavy(AVLTreeNode root) + { + var minRightTree = root.right.GetFirst(root.right); + var maxLeftTree = root.left.GetLast(root.left); + + if (minRightTree.IsRightValidNode()) + { + minRightTree.RotateLeft(); + } + + var balancingStartNode = minRightTree.parent; + + minRightTree.parent = root.parent; + minRightTree.ownTransform.parent = root.ownTransform.parent; + + minRightTree.right = root.right; + minRightTree.rightIsWire = false; + + + minRightTree.left = root.left; + minRightTree.leftIsWire = root.leftIsWire; + + maxLeftTree.right = minRightTree; + + root.left.parent = minRightTree; + root.left.ownTransform.parent = minRightTree.ownTransform; + + if (balancingStartNode == root.right) + { + balancingStartNode.parent = minRightTree; + balancingStartNode.ownTransform.parent = minRightTree.ownTransform; + } + + balancingStartNode.leftIsWire = true; + + + root.right.parent = minRightTree; + root.right.ownTransform.parent = minRightTree.ownTransform; + + if (root.parent) + { + if (root.parent.right == root) + { + root.parent.right = minRightTree; + } + else + { + root.parent.left = minRightTree; + } + } + + return balancingStartNode; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal AVLTreeNode RemoveRootNodeOfLeftHeavyTree(AVLTreeNode toRemove, bool isLeft) + { + var successor = isLeft ? toRemove.left.GetLast(toRemove.left) : toRemove.right.GetFirst(toRemove.right); + + // left/right child has no right/left child + if (isLeft ? successor == toRemove.left : successor == toRemove.right) + { + successor = isLeft + ? ReplaceRootWithLeftChild(toRemove) + : ReplaceRootWithRightChild(toRemove); + } + else + { + successor = isLeft + ? ReplaceRootWithLeftTreeLeftHeavy(toRemove) + : ReplaceRootWithRightTreeRightHeavy(toRemove); + } + + _avlTreeNodePool.Return(toRemove.gameObject); + + return successor; + } + +#if !COMPILER_UDONSHARP && UNITY_EDITOR + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private bool CheckForCyclicParentRelations(AVLTreeNode tmp) + { + var visited = new HashSet(); + while (Utilities.IsValid(tmp)) + { + if (visited.Contains(tmp)) + { + Error(tmp.PayloadToString() + "Already visited"); + return true; + } + + visited.Add(tmp); + + tmp = tmp.parent; + } + + return false; + } +#endif + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void Balance(AVLTreeNode begin) + { + for (var current = begin; Utilities.IsValid(current); current = current.parent) + { + RootNode = current; + current.UpdateValues(); + + if (current.Balance >= 2 && current.left.Balance >= 0) // left - left + { + current = current.RotateRight(); + RootNode = current; + } + else if (current.Balance >= 2) + { + // left - right + current.left = current.left.RotateLeft(); + current = current.RotateRight(); + RootNode = current; + } + else if (current.Balance <= -2 && current.right.Balance <= 0) // right - right + { + current = current.RotateLeft(); + RootNode = current; + } + else if (current.Balance <= -2) + { + // right - left + current.right = current.right.RotateRight(); + current = current.RotateLeft(); + RootNode = current; + } + } + + if (Utilities.IsValid(RootNode)) + { + RootNode.SetParent(TreeNodes); + } + else + { + Info("Tree is empty, nothing to balance"); + } + } + + public override string ToString() + { + return Utilities.IsValid(RootNode) ? RootNode.ToStringWithChildren() : "Empty"; + } + +#if !COMPILER_UDONSHARP && UNITY_EDITOR + public StringBuilder Display(AVLTreeNode cur, int depth = 0, int state = 0, StringBuilder sb = null) + { + if (sb == null) + { + sb = new StringBuilder(); + } + + if (!Utilities.IsValid(cur)) + { + Error("Invalid node encountered"); + return sb; + } + + // state: 1 -> left, 2 -> right , 0 -> root + if (cur.IsLeftValidNode()) + { + sb = Display(cur.left, depth + 1, 1, sb); + } + + int count = 0; + for (int i = 0; i < depth; i++) + { + if (count++ > 1000) + { + Error("Balance: Potential endless loop detected"); + return sb; + } + + sb.Append("| "); + } + + if (state == 1) // left + { + sb.Append("┌───"); + } + else if (state == 2) // right + { + sb.Append("└───"); + } + + sb.Append("[") + .Append(cur.PayloadToString()) + .Append("](") + .Append(cur.count.ToString()) + .Append(", ") + .Append(cur.height) + .Append(", ") + .Append(cur.Balance) + .Append(")"); + + + if (!cur.IsLeftValidNode()) + { + sb.Append(" lW=" + (cur.left ? cur.left.PayloadToString() : "null")); + } + + if (!cur.IsRightValidNode()) + { + sb.Append(" rW=" + (cur.right ? cur.right.PayloadToString() : "null")); + } + + sb.Append("\n"); + + if (cur.IsRightValidNode()) + { + sb = Display(cur.right, depth + 1, 2, sb); + } + + return sb; + } +#endif + private int m_LastFrame; + private int m_GetCallCount; + + public TlpBaseBehaviour Get(int index) + { +#if TLP_DEBUG + DebugLog(nameof(Get)); +#endif + int frame = Time.renderedFrameCount; + if (frame != m_LastFrame) + { + m_LastFrame = frame; + if (m_GetCallCount > 0) + { + DebugLog($"Get was called {m_GetCallCount} times"); + m_GetCallCount = 0; + } + } + + ++m_GetCallCount; + + + if (index < 0 || index >= Size) + { + return null; + } + + var current = RootNode; + int left = current.IsLeftValidNode() ? current.left.count : 0; + + while (left != index) + { + if (left < index) + { + index -= left + 1; + + current = current.right; + left = current.IsLeftValidNode() ? current.left.count : 0; + } + + else + { + current = current.left; + left = current.IsLeftValidNode() ? current.left.count : 0; + } + } + + return current.payload; + } + + public bool IsEmpty() + { + return Size < 1; + } + + #region UdonPool Interface + + /// + /// Called by the pool just before the instance is returned to the pool. + /// Shall be used to reset the state of this instance. + /// + [PublicAPI] + public override void OnPrepareForReturnToPool() + { + gameObject.name = nameof(AVLTree); + while (Size > 0) + { + if (!Utilities.IsValid(Comparer)) + { + Destroy(RootNode); + Size = 0; + break; + } + + if (!Remove(RootNode)) + { + Error( + $"{nameof(OnPrepareForReturnToPool)}: Failed to clear the {nameof(AVLTree)}, destroying Object" + ); + Destroy(gameObject); + return; + } + } + + if (Utilities.IsValid(Comparer) && Comparer.PoolableInUse) + { + var comparerPool = (Pool)Comparer.Pool; + if (Utilities.IsValid(comparerPool)) + { + comparerPool.Return(Comparer.gameObject); + } + } + + Comparer = null; + } + + #endregion + } +} \ No newline at end of file diff --git a/Packages/tlp.udonavltree/Runtime/AVLTree.cs.meta b/Packages/tlp.udonavltree/Runtime/AVLTree.cs.meta new file mode 100644 index 0000000..2b346ea --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/AVLTree.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39e6227d5f517e64aac6137177fac298 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/AVLTreeNode.asset b/Packages/tlp.udonavltree/Runtime/AVLTreeNode.asset new file mode 100644 index 0000000..cc72399 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/AVLTreeNode.asset @@ -0,0 +1,1060 @@ +%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: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3} + m_Name: AVLTreeNode + m_EditorClassIdentifier: + serializedUdonProgramAsset: {fileID: 11400000, guid: 2741443c3e69b524591e093354001ab4, + type: 2} + udonAssembly: + assemblyError: + sourceCsScript: {fileID: 11500000, guid: 4c2742b6516edfd4bb2dca0337665ff9, type: 3} + scriptVersion: 2 + compiledVersion: 2 + behaviourSyncMode: 1 + hasInteractEvent: 0 + scriptID: 4052571852373010938 + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: fieldDefinitions + Entry: 7 + Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition, + UdonSharp.Editor]], mscorlib + - Name: comparer + Entry: 7 + Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, + mscorlib]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 17 + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: AutoRetrySendOnFailure + - Name: $v + Entry: 7 + Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: AutoRetrySendOnFailure + - Name: k__BackingField + Entry: 7 + Data: 3|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Boolean, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 4|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 5|UnityEngine.HeaderAttribute, UnityEngine.CoreModule + - Name: header + Entry: 1 + Data: TLP/Networking + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 6|UnityEngine.TooltipAttribute, UnityEngine.CoreModule + - Name: tooltip + Entry: 1 + Data: If true and a serialization request fails it will automatically try to + send again in the next frame until it succeeds. Only applies to owned objects + and manual sync. + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: Severity + - Name: $v + Entry: 7 + Data: 7|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: Severity + - Name: k__BackingField + Entry: 7 + Data: 8|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.Logger.ELogLevel, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: 9|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Int32, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 10|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: 11|UnityEngine.HeaderAttribute, UnityEngine.CoreModule + - Name: header + Entry: 1 + Data: TLP/Logging + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 12|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 13|UnityEngine.TooltipAttribute, UnityEngine.CoreModule + - Name: tooltip + Entry: 1 + Data: 'What kind of logs of this behavior shall be produced. Selected severity + includes all more severe levels. Example: selecting ''Warning'' also allows + ''Error'' and ''Assertion'' messages to appear. + + Note: + + ''Debug'' + messages are filtered out by default, even when selected. Add the compiler + definition ''TLP_DEBUG'' in the Unity player settings to enable them. This + should only ever be used for debugging (performance suffers)!' + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: PendingSerializations + - Name: $v + Entry: 7 + Data: 14|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: PendingSerializations + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 15|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _hadLogger + - Name: $v + Entry: 7 + Data: 16|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _hadLogger + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 17|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: k__BackingField + - Name: $v + Entry: 7 + Data: 18|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: k__BackingField + - Name: k__BackingField + Entry: 7 + Data: 19|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.Logger.TlpLogger, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: 20|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: VRC.Udon.UdonBehaviour, VRC.Udon + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 21|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: EventInstigator + - Name: $v + Entry: 7 + Data: 22|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: EventInstigator + - Name: k__BackingField + Entry: 7 + Data: 23|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.TlpBaseBehaviour, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 24|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: 25|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 26|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 27|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: Pool + - Name: $v + Entry: 7 + Data: 28|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: Pool + - Name: k__BackingField + Entry: 9 + Data: 23 + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 29|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: 30|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 31|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 32|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: PoolableInUse + - Name: $v + Entry: 7 + Data: 33|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: PoolableInUse + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 34|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 35|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 36|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: parent + - Name: $v + Entry: 7 + Data: 37|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: parent + - Name: k__BackingField + Entry: 7 + Data: 38|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonAVLTree.Runtime.AVLTreeNode, TLP.UdonAVLTree.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 39|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 40|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: payload + - Name: $v + Entry: 7 + Data: 41|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: payload + - Name: k__BackingField + Entry: 9 + Data: 23 + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 42|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: left + - Name: $v + Entry: 7 + Data: 43|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: left + - Name: k__BackingField + Entry: 9 + Data: 38 + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 44|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 45|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: right + - Name: $v + Entry: 7 + Data: 46|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: right + - Name: k__BackingField + Entry: 9 + Data: 38 + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 47|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 48|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: leftIsWire + - Name: $v + Entry: 7 + Data: 49|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: leftIsWire + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 50|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 51|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: rightIsWire + - Name: $v + Entry: 7 + Data: 52|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: rightIsWire + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 53|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 54|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: count + - Name: $v + Entry: 7 + Data: 55|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: count + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 56|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 57|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: height + - Name: $v + Entry: 7 + Data: 58|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: height + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 59|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 60|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: ownTransform + - Name: $v + Entry: 7 + Data: 61|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: ownTransform + - Name: k__BackingField + Entry: 7 + Data: 62|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Transform, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 62 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 63|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: diff --git a/Packages/tlp.udonavltree/Runtime/AVLTreeNode.asset.meta b/Packages/tlp.udonavltree/Runtime/AVLTreeNode.asset.meta new file mode 100644 index 0000000..a84ee00 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/AVLTreeNode.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b9f7923dca82c954dbfc40a68f8c6d36 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/AVLTreeNode.cs b/Packages/tlp.udonavltree/Runtime/AVLTreeNode.cs new file mode 100644 index 0000000..149ba5b --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/AVLTreeNode.cs @@ -0,0 +1,354 @@ +using System; +using System.Runtime.CompilerServices; +using JetBrains.Annotations; +using TLP.UdonUtils; +using UdonSharp; +using UnityEngine; +using VRC.SDKBase; +using VRC.Udon; + +namespace TLP.UdonAVLTree.Runtime +{ + [UdonBehaviourSyncMode(BehaviourSyncMode.None)] + // ReSharper disable once InconsistentNaming + public class AVLTreeNode : TlpBaseBehaviour + { + [HideInInspector] + public AVLTreeNode parent; + + public TlpBaseBehaviour payload; + + [HideInInspector] + public AVLTreeNode left; + + [HideInInspector] + public AVLTreeNode right; + + public int Balance => (IsLeftValidNode() ? left.height : 0) - (IsRightValidNode() ? right.height : 0); + + [HideInInspector] + public bool leftIsWire, rightIsWire; + + [HideInInspector] + public int count, height; + + public Transform ownTransform; + + [PublicAPI] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void UpdateValues() + { + count = (IsLeftValidNode() ? left.count : 0) + (IsRightValidNode() ? right.count : 0) + 1; + height = Math.Max(IsLeftValidNode() ? left.height : 0, IsRightValidNode() ? right.height : 0) + 1; + } + + [PublicAPI] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool HasChildren() + { + return IsLeftValidNode() || IsRightValidNode(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool IsLeftValidNode() + { + return !leftIsWire && Utilities.IsValid(left); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool IsRightValidNode() + { + return !rightIsWire && Utilities.IsValid(right); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public AVLTreeNode RotateLeft() + { + return Rotate(true); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public AVLTreeNode RotateRight() + { + return Rotate(false); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private AVLTreeNode Rotate(bool rotateLeft) + { + if (rotateLeft ? Balance < -2 || Balance > -1 : Balance > 2 || Balance < 1) + { + Error($"RotateLeft: The tree is not {(rotateLeft ? "right" : "left")}-heavy!"); + return this; + } + + var rootParent = parent; + var rootTransform = transform.parent; + AVLTreeNode a; + a = this; // gameObject.GetComponent(); // TODO provide via parameter + var c = rotateLeft ? a.right : a.left; + var b = rotateLeft ? c.IsLeftValidNode() ? c.left : null : c.IsRightValidNode() ? c.right : null; + var d = rotateLeft ? c.IsRightValidNode() ? c.right : null : c.IsLeftValidNode() ? c.left : null; + + + /* + * Transfer (B) to the left tree side by attaching it to the current tree root (A) + * Before: + * A[-2] + * \ + * C[0] + * / \ + * B[0] D[0] + * + * + * After: + * A[-2] + * \ + * (B)[0] + * + * C[0] + * / \ + * B[0] D[0] + */ + + + if (b) + { + b.parent = a; + b.ownTransform.parent = a.ownTransform; + + if (rotateLeft) + { + a.right = b; + a.rightIsWire = false; + ConnectLeftWire(b, a); + ConnectRightWire(a, c); + } + else + { + a.left = b; + a.leftIsWire = false; + ConnectRightWire(b, a); + ConnectLeftWire(a, c); + } + } + else + { + if (rotateLeft) + { + a.right = c; + a.rightIsWire = true; + } + else + { + a.left = c; + a.leftIsWire = true; + } + } + + /* + * Next: attach the tree root (A) to the left side of the previous right side (C) -> (C) is now new root + * + * C[1] + * / \ + * (A)[-1] D[0] + * \ + * B[0] + */ + if (rotateLeft) + { + c.left = a; + c.leftIsWire = false; + } + else + { + c.right = a; + c.rightIsWire = false; + } + + c.parent = rootParent; + c.ownTransform.parent = rootTransform; + + a.parent = c; + a.ownTransform.parent = c.ownTransform; + + + if (d) + { + if (rotateLeft) + { + ConnectLeftWire(d, c); + } + else + { + ConnectRightWire(d, c); + } + } + + // update Balance of (A) + a.UpdateValues(); + + // and Balance of new root (C) + c.UpdateValues(); + + if (rootParent) + { + if (rootParent.left == a && rootParent.IsLeftValidNode()) + { + rootParent.left = c; + } + else + { + rootParent.right = c; + } + } + + // return root (C) to allow replacing (A) as former root + return c; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void ConnectRightWire(AVLTreeNode firstNode, AVLTreeNode nextNodeInParents) + { + var bRight = GetLast(firstNode); + + bRight.right = nextNodeInParents; + bRight.rightIsWire = true; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void ConnectLeftWire(AVLTreeNode firstNode, AVLTreeNode nextNodeInParents) + { + var bLeft = GetFirst(firstNode); + + bLeft.left = nextNodeInParents; + bLeft.leftIsWire = true; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public AVLTreeNode GetLast(AVLTreeNode d) + { + var dLeft = d; + int cnt = 0; + while (dLeft.IsRightValidNode()) + { + if (cnt++ > 1000) + { + Error("GetMostRight: Potential endless loop detected"); + return null; + } + + dLeft = dLeft.right; + } + + return dLeft; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public AVLTreeNode GetFirst(AVLTreeNode d) + { + var dLeft = d; + int cnt = 0; + while (dLeft.IsLeftValidNode()) + { + if (cnt++ > 1000) + { + Error("GetMostLeft: Potential endless loop detected"); + return null; + } + + dLeft = dLeft.left; + } + + return dLeft; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public string ToStringWithChildren() + { + // first find the min node + AVLTreeNode start = null; + start = this; + while (start.IsLeftValidNode()) + { + start = start.left; + } + + // find last node to consider + // AVLTreeNode end = null; + // end = this; + // cnt = 0; + // while (end.IsRightValidNode()) + // { + // if (cnt++ > 1000) + // { + // Error("ToStringWithChildren: IsRightValidNode: Potential endless loop detected"); + // return null; + // } + // + // end = end.right; + // } + + string result = ""; + var current = start; + + do + { + while (current.IsLeftValidNode()) + { + current = current.left; + } + + result = (string.IsNullOrEmpty(result) ? "" : result + ",") + current.PayloadToString(); + + var previous = current; + current = current.right; + while (previous.rightIsWire && Utilities.IsValid(current)) + { + result = result + "," + current.PayloadToString(); + previous = current; + current = current.right; + } + } while (Utilities.IsValid(current)); + + return result; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public string PayloadToString() + { + if (Utilities.IsValid(payload)) + { + return payload.ToString(); + } + + return "None"; + } + + #region UdonPool Interface + + /// + /// Called by the pool just before the instance is returned to the pool. + /// Shall be used to reset the state of this instance. + /// + [PublicAPI] + public override void OnPrepareForReturnToPool() + { + gameObject.name = nameof(AVLTreeNode); + left = null; + right = null; + leftIsWire = false; + rightIsWire = false; + count = 0; + height = 0; + payload = null; + } + + #endregion + + public void SetParent(Transform parentTransform) + { + transform.parent = parentTransform; + } + } +} \ No newline at end of file diff --git a/Packages/tlp.udonavltree/Runtime/AVLTreeNode.cs.meta b/Packages/tlp.udonavltree/Runtime/AVLTreeNode.cs.meta new file mode 100644 index 0000000..ccd709d --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/AVLTreeNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c2742b6516edfd4bb2dca0337665ff9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/AssemblyInfo.cs b/Packages/tlp.udonavltree/Runtime/AssemblyInfo.cs new file mode 100644 index 0000000..cdbcb88 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/AssemblyInfo.cs @@ -0,0 +1,4 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("TLP.UdonAVLTree.Tests.Editor")] +[assembly: InternalsVisibleTo("TLP.UdonAVLTree.Tests.Runtime")] \ No newline at end of file diff --git a/Packages/tlp.udonavltree/Runtime/AssemblyInfo.cs.meta b/Packages/tlp.udonavltree/Runtime/AssemblyInfo.cs.meta new file mode 100644 index 0000000..e819953 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f251b05cb8c426ab18b497c6e0d6f33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/ExampleAvlTreeUser.asset b/Packages/tlp.udonavltree/Runtime/ExampleAvlTreeUser.asset new file mode 100644 index 0000000..dc539b3 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/ExampleAvlTreeUser.asset @@ -0,0 +1,928 @@ +%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: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3} + m_Name: ExampleAvlTreeUser + m_EditorClassIdentifier: + serializedUdonProgramAsset: {fileID: 11400000, guid: 652934d22fb2302458f461d6f3a01200, + type: 2} + udonAssembly: + assemblyError: + sourceCsScript: {fileID: 11500000, guid: bf2ce72eaa5156d439ced8b2100c20ad, type: 3} + scriptVersion: 2 + compiledVersion: 2 + behaviourSyncMode: 1 + hasInteractEvent: 0 + scriptID: -3553511069911766575 + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: fieldDefinitions + Entry: 7 + Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition, + UdonSharp.Editor]], mscorlib + - Name: comparer + Entry: 7 + Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, + mscorlib]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 15 + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: AutoRetrySendOnFailure + - Name: $v + Entry: 7 + Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: AutoRetrySendOnFailure + - Name: k__BackingField + Entry: 7 + Data: 3|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Boolean, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 4|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 5|UnityEngine.HeaderAttribute, UnityEngine.CoreModule + - Name: header + Entry: 1 + Data: TLP/Networking + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 6|UnityEngine.TooltipAttribute, UnityEngine.CoreModule + - Name: tooltip + Entry: 1 + Data: If true and a serialization request fails it will automatically try to + send again in the next frame until it succeeds. Only applies to owned objects + and manual sync. + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: Severity + - Name: $v + Entry: 7 + Data: 7|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: Severity + - Name: k__BackingField + Entry: 7 + Data: 8|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.Logger.ELogLevel, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: 9|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Int32, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 10|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: 11|UnityEngine.HeaderAttribute, UnityEngine.CoreModule + - Name: header + Entry: 1 + Data: TLP/Logging + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 12|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 13|UnityEngine.TooltipAttribute, UnityEngine.CoreModule + - Name: tooltip + Entry: 1 + Data: 'What kind of logs of this behavior shall be produced. Selected severity + includes all more severe levels. Example: selecting ''Warning'' also allows + ''Error'' and ''Assertion'' messages to appear. + + Note: + + ''Debug'' + messages are filtered out by default, even when selected. Add the compiler + definition ''TLP_DEBUG'' in the Unity player settings to enable them. This + should only ever be used for debugging (performance suffers)!' + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: PendingSerializations + - Name: $v + Entry: 7 + Data: 14|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: PendingSerializations + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 15|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _hadLogger + - Name: $v + Entry: 7 + Data: 16|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _hadLogger + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 17|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: k__BackingField + - Name: $v + Entry: 7 + Data: 18|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: k__BackingField + - Name: k__BackingField + Entry: 7 + Data: 19|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.Logger.TlpLogger, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: 20|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: VRC.Udon.UdonBehaviour, VRC.Udon + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 21|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: EventInstigator + - Name: $v + Entry: 7 + Data: 22|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: EventInstigator + - Name: k__BackingField + Entry: 7 + Data: 23|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.TlpBaseBehaviour, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 24|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: 25|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 26|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 27|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: Pool + - Name: $v + Entry: 7 + Data: 28|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: Pool + - Name: k__BackingField + Entry: 9 + Data: 23 + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 29|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: 30|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 31|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 32|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: PoolableInUse + - Name: $v + Entry: 7 + Data: 33|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: PoolableInUse + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 34|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 35|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 36|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: avlTree + - Name: $v + Entry: 7 + Data: 37|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: avlTree + - Name: k__BackingField + Entry: 7 + Data: 38|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonAVLTree.Runtime.AVLTree, TLP.UdonAVLTree.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 39|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _ownTransform + - Name: $v + Entry: 7 + Data: 40|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _ownTransform + - Name: k__BackingField + Entry: 7 + Data: 41|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Transform, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 41 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 42|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _i + - Name: $v + Entry: 7 + Data: 43|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _i + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 44|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: count + - Name: $v + Entry: 7 + Data: 45|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: count + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 46|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: avgAdd + - Name: $v + Entry: 7 + Data: 47|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: avgAdd + - Name: k__BackingField + Entry: 7 + Data: 48|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Double, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 48 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 49|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: avgRemove + - Name: $v + Entry: 7 + Data: 50|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: avgRemove + - Name: k__BackingField + Entry: 9 + Data: 48 + - Name: k__BackingField + Entry: 9 + Data: 48 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 51|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: factor + - Name: $v + Entry: 7 + Data: 52|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: factor + - Name: k__BackingField + Entry: 9 + Data: 48 + - Name: k__BackingField + Entry: 9 + Data: 48 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 53|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: diff --git a/Packages/tlp.udonavltree/Runtime/ExampleAvlTreeUser.asset.meta b/Packages/tlp.udonavltree/Runtime/ExampleAvlTreeUser.asset.meta new file mode 100644 index 0000000..a7dac27 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/ExampleAvlTreeUser.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 03884f55438621541ac2784fcd548ac6 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/ExampleAvlTreeUser.cs b/Packages/tlp.udonavltree/Runtime/ExampleAvlTreeUser.cs new file mode 100644 index 0000000..18a1a26 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/ExampleAvlTreeUser.cs @@ -0,0 +1,99 @@ +using TLP.UdonUtils; +using UdonSharp; +using UnityEngine; + +namespace TLP.UdonAVLTree.Runtime +{ + [UdonBehaviourSyncMode(BehaviourSyncMode.None)] + public class ExampleAvlTreeUser : TlpBaseBehaviour + { + public AVLTree avlTree; + + private Transform _ownTransform; + + private int _i = 0; + public int count = 10000; + + private double avgAdd; + private double avgRemove; + private double factor; + + public override void Start() + { + base.Start(); + _ownTransform = transform; + factor = 1.0 / count; + + var firstChild = _ownTransform.GetChild(0).gameObject.GetComponent(); + for (int i = 0; i < count; i++) + { + var go = Instantiate(firstChild.gameObject); + go.name = i.ToString(); + go.transform.parent = _ownTransform; + go.GetComponent().value = i; + } + + Destroy(firstChild.gameObject); + SendCustomEventDelayedSeconds(nameof(AddNext), 1); + } + + public void AddNext() + { + if (_i < _ownTransform.childCount) + { + var stopwatch = new System.Diagnostics.Stopwatch(); + stopwatch.Restart(); + var o = _ownTransform.GetChild(_i).gameObject; + Assert(avlTree.Add(o.GetComponent()), $"Failed to add {o.name}"); + var stopwatchElapsed = stopwatch.Elapsed; + avgAdd += stopwatchElapsed.TotalMilliseconds; + if (_i % 100 == 0) + { + Debug.Log(_i + ": avg add = " + avgAdd / _i + " ms"); + } + + ++_i; + SendCustomEventDelayedFrames(nameof(AddNext), 1); + } + else + { + Debug.Log(_i + ": avg add = " + avgAdd / _i + " ms"); + Debug.Log(avlTree.ToString()); + avgAdd = 0; + avgRemove = 0; + _i = 0; + SendCustomEventDelayedFrames(nameof(RemovePrevious), 1); + } + } + + public void RemovePrevious() + { + if (_i < _ownTransform.childCount) + { + var stopwatch = new System.Diagnostics.Stopwatch(); + stopwatch.Restart(); + var o = _ownTransform.GetChild(_i).gameObject; + Assert(avlTree.Remove(o.GetComponent()), $"Did not contain {o.name}"); + var stopwatchElapsed = stopwatch.Elapsed; + avgRemove += stopwatchElapsed.TotalMilliseconds; + if (_i % 100 == 0) + { + Debug.Log(_i + ": avg remove = " + avgRemove / _i + " ms"); + } + + ++_i; + SendCustomEventDelayedFrames(nameof(RemovePrevious), 1); + } + else + { + Debug.Log(_i + ": avg remove = " + avgRemove / _i + " ms"); + Debug.Log(avlTree.ToString()); + + avgAdd = 0; + avgRemove = 0; + _i = 0; + SendCustomEventDelayedFrames(nameof(AddNext), 1); + } + } + } +} \ No newline at end of file diff --git a/Packages/tlp.udonavltree/Runtime/ExampleAvlTreeUser.cs.meta b/Packages/tlp.udonavltree/Runtime/ExampleAvlTreeUser.cs.meta new file mode 100644 index 0000000..621ea45 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/ExampleAvlTreeUser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf2ce72eaa5156d439ced8b2100c20ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/ExampleComparer.asset b/Packages/tlp.udonavltree/Runtime/ExampleComparer.asset new file mode 100644 index 0000000..1587f59 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/ExampleComparer.asset @@ -0,0 +1,637 @@ +%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: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3} + m_Name: ExampleComparer + m_EditorClassIdentifier: + serializedUdonProgramAsset: {fileID: 11400000, guid: 9df0682f97d7e254c8781c62cd10b08c, + type: 2} + udonAssembly: + assemblyError: + sourceCsScript: {fileID: 11500000, guid: a7b56f06aede87c43b5dcec6d1813726, type: 3} + scriptVersion: 2 + compiledVersion: 2 + behaviourSyncMode: 1 + hasInteractEvent: 0 + scriptID: 2411111301652261380 + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: fieldDefinitions + Entry: 7 + Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition, + UdonSharp.Editor]], mscorlib + - Name: comparer + Entry: 7 + Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, + mscorlib]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 9 + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: AutoRetrySendOnFailure + - Name: $v + Entry: 7 + Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: AutoRetrySendOnFailure + - Name: k__BackingField + Entry: 7 + Data: 3|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Boolean, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 4|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 5|UnityEngine.HeaderAttribute, UnityEngine.CoreModule + - Name: header + Entry: 1 + Data: TLP/Networking + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 6|UnityEngine.TooltipAttribute, UnityEngine.CoreModule + - Name: tooltip + Entry: 1 + Data: If true and a serialization request fails it will automatically try to + send again in the next frame until it succeeds. Only applies to owned objects + and manual sync. + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: Severity + - Name: $v + Entry: 7 + Data: 7|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: Severity + - Name: k__BackingField + Entry: 7 + Data: 8|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.Logger.ELogLevel, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: 9|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Int32, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 10|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: 11|UnityEngine.HeaderAttribute, UnityEngine.CoreModule + - Name: header + Entry: 1 + Data: TLP/Logging + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 12|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 13|UnityEngine.TooltipAttribute, UnityEngine.CoreModule + - Name: tooltip + Entry: 1 + Data: 'What kind of logs of this behavior shall be produced. Selected severity + includes all more severe levels. Example: selecting ''Warning'' also allows + ''Error'' and ''Assertion'' messages to appear. + + Note: + + ''Debug'' + messages are filtered out by default, even when selected. Add the compiler + definition ''TLP_DEBUG'' in the Unity player settings to enable them. This + should only ever be used for debugging (performance suffers)!' + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: PendingSerializations + - Name: $v + Entry: 7 + Data: 14|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: PendingSerializations + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 15|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _hadLogger + - Name: $v + Entry: 7 + Data: 16|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _hadLogger + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 17|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: k__BackingField + - Name: $v + Entry: 7 + Data: 18|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: k__BackingField + - Name: k__BackingField + Entry: 7 + Data: 19|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.Logger.TlpLogger, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: 20|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: VRC.Udon.UdonBehaviour, VRC.Udon + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 21|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: EventInstigator + - Name: $v + Entry: 7 + Data: 22|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: EventInstigator + - Name: k__BackingField + Entry: 7 + Data: 23|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.TlpBaseBehaviour, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 24|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: 25|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 26|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 27|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: Pool + - Name: $v + Entry: 7 + Data: 28|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: Pool + - Name: k__BackingField + Entry: 9 + Data: 23 + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 29|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: 30|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 31|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 32|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: PoolableInUse + - Name: $v + Entry: 7 + Data: 33|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: PoolableInUse + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 34|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 35|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 36|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: optionalFallback + - Name: $v + Entry: 7 + Data: 37|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: optionalFallback + - Name: k__BackingField + Entry: 7 + Data: 38|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.Common.Comparer, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 39|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 40|UnityEngine.TooltipAttribute, UnityEngine.CoreModule + - Name: tooltip + Entry: 1 + Data: Used when the result of this Comparer object indicates no difference + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: diff --git a/Packages/tlp.udonavltree/Runtime/ExampleComparer.asset.meta b/Packages/tlp.udonavltree/Runtime/ExampleComparer.asset.meta new file mode 100644 index 0000000..24305c4 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/ExampleComparer.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: be8ce6ced80c1ee4abe2faca30de4530 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/ExampleComparer.cs b/Packages/tlp.udonavltree/Runtime/ExampleComparer.cs new file mode 100644 index 0000000..10747f6 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/ExampleComparer.cs @@ -0,0 +1,46 @@ +using TLP.UdonUtils.Common; +using UdonSharp; +using VRC.SDKBase; + +namespace TLP.UdonAVLTree.Runtime +{ + public class ExampleComparer : Comparer + { + protected override bool ComparisonImplementation( + UdonSharpBehaviour first, + UdonSharpBehaviour second, + out int comparisonResult + ) + { +#if TLP_DEBUG + DebugLog(nameof(ExampleComparer)); +#endif + comparisonResult = 0; + if (!Utilities.IsValid(first)) + { + return false; + } + + if (!Utilities.IsValid(second)) + { + return false; + } + + var firstMock = (ExampleSortable)first; + var secondMock = (ExampleSortable)second; + + if (!Utilities.IsValid(firstMock)) + { + return false; + } + + if (!Utilities.IsValid(secondMock)) + { + return false; + } + + comparisonResult = firstMock.value.CompareTo(secondMock.value); + return true; + } + } +} \ No newline at end of file diff --git a/Packages/tlp.udonavltree/Runtime/ExampleComparer.cs.meta b/Packages/tlp.udonavltree/Runtime/ExampleComparer.cs.meta new file mode 100644 index 0000000..44cd97e --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/ExampleComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a7b56f06aede87c43b5dcec6d1813726 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/ExampleSortable.asset b/Packages/tlp.udonavltree/Runtime/ExampleSortable.asset new file mode 100644 index 0000000..61139c5 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/ExampleSortable.asset @@ -0,0 +1,808 @@ +%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: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3} + m_Name: ExampleSortable + m_EditorClassIdentifier: + serializedUdonProgramAsset: {fileID: 11400000, guid: a1ea8d0e524ab7340bc8873c388fe362, + type: 2} + udonAssembly: + assemblyError: + sourceCsScript: {fileID: 11500000, guid: a40a0cae80f85d149be73553277a76a7, type: 3} + scriptVersion: 2 + compiledVersion: 2 + behaviourSyncMode: 1 + hasInteractEvent: 0 + scriptID: 956123057650329427 + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: fieldDefinitions + Entry: 7 + Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition, + UdonSharp.Editor]], mscorlib + - Name: comparer + Entry: 7 + Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, + mscorlib]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 12 + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: AutoRetrySendOnFailure + - Name: $v + Entry: 7 + Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: AutoRetrySendOnFailure + - Name: k__BackingField + Entry: 7 + Data: 3|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Boolean, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 4|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 5|UnityEngine.HeaderAttribute, UnityEngine.CoreModule + - Name: header + Entry: 1 + Data: TLP/Networking + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 6|UnityEngine.TooltipAttribute, UnityEngine.CoreModule + - Name: tooltip + Entry: 1 + Data: If true and a serialization request fails it will automatically try to + send again in the next frame until it succeeds. Only applies to owned objects + and manual sync. + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: Severity + - Name: $v + Entry: 7 + Data: 7|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: Severity + - Name: k__BackingField + Entry: 7 + Data: 8|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.Logger.ELogLevel, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: 9|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Int32, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 10|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: 11|UnityEngine.HeaderAttribute, UnityEngine.CoreModule + - Name: header + Entry: 1 + Data: TLP/Logging + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 12|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 13|UnityEngine.TooltipAttribute, UnityEngine.CoreModule + - Name: tooltip + Entry: 1 + Data: 'What kind of logs of this behavior shall be produced. Selected severity + includes all more severe levels. Example: selecting ''Warning'' also allows + ''Error'' and ''Assertion'' messages to appear. + + Note: + + ''Debug'' + messages are filtered out by default, even when selected. Add the compiler + definition ''TLP_DEBUG'' in the Unity player settings to enable them. This + should only ever be used for debugging (performance suffers)!' + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: PendingSerializations + - Name: $v + Entry: 7 + Data: 14|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: PendingSerializations + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 15|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _hadLogger + - Name: $v + Entry: 7 + Data: 16|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _hadLogger + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 17|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: k__BackingField + - Name: $v + Entry: 7 + Data: 18|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: k__BackingField + - Name: k__BackingField + Entry: 7 + Data: 19|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.Logger.TlpLogger, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: 20|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: VRC.Udon.UdonBehaviour, VRC.Udon + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 21|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: EventInstigator + - Name: $v + Entry: 7 + Data: 22|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: EventInstigator + - Name: k__BackingField + Entry: 7 + Data: 23|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TLP.UdonUtils.TlpBaseBehaviour, TLP.UdonUtils.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 24|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: 25|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 26|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 27|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: Pool + - Name: $v + Entry: 7 + Data: 28|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: Pool + - Name: k__BackingField + Entry: 9 + Data: 23 + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 29|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: 30|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 31|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 32|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: PoolableInUse + - Name: $v + Entry: 7 + Data: 33|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: PoolableInUse + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 34|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 35|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 36|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: value + - Name: $v + Entry: 7 + Data: 37|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: value + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 38|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: toCompare + - Name: $v + Entry: 7 + Data: 39|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: toCompare + - Name: k__BackingField + Entry: 7 + Data: 40|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UdonSharp.UdonSharpBehaviour, UdonSharp.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 41|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 42|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 43|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: compareSuccess + - Name: $v + Entry: 7 + Data: 44|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: compareSuccess + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 45|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 46|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 47|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: compareResult + - Name: $v + Entry: 7 + Data: 48|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: compareResult + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 9 + Data: 9 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 49|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 50|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 51|JetBrains.Annotations.PublicAPIAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: diff --git a/Packages/tlp.udonavltree/Runtime/ExampleSortable.asset.meta b/Packages/tlp.udonavltree/Runtime/ExampleSortable.asset.meta new file mode 100644 index 0000000..cbdde56 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/ExampleSortable.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7166f612189de724789e165fe57c128d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/ExampleSortable.cs b/Packages/tlp.udonavltree/Runtime/ExampleSortable.cs new file mode 100644 index 0000000..9165934 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/ExampleSortable.cs @@ -0,0 +1,50 @@ +using JetBrains.Annotations; +using TLP.UdonUtils; +using UdonSharp; +using UnityEngine; +using VRC.SDKBase; +using VRC.Udon; + +namespace TLP.UdonAVLTree.Runtime +{ + [UdonBehaviourSyncMode(BehaviourSyncMode.None)] + public class ExampleSortable : TlpBaseBehaviour + { + public int value; + + #region Comparer Interface + + [HideInInspector, PublicAPI] + public UdonSharpBehaviour toCompare; + [HideInInspector, PublicAPI] + public bool compareSuccess; + [HideInInspector, PublicAPI] + public int compareResult; + + [PublicAPI] + public virtual void CompareValues() + { + if (!Utilities.IsValid(toCompare)) + { + compareSuccess = false; + return; + } + + var other = (ExampleSortable)toCompare; + if (!Utilities.IsValid(other)) + { + compareSuccess = false; + return; + } + + compareResult = value.CompareTo(other.value); + compareSuccess = true; + } + #endregion + + public override string ToString() + { + return value.ToString(); + } + } +} diff --git a/Packages/tlp.udonavltree/Runtime/ExampleSortable.cs.meta b/Packages/tlp.udonavltree/Runtime/ExampleSortable.cs.meta new file mode 100644 index 0000000..fc14b12 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/ExampleSortable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a40a0cae80f85d149be73553277a76a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/Prefabs.meta b/Packages/tlp.udonavltree/Runtime/Prefabs.meta new file mode 100644 index 0000000..ccc5889 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ccac623232da304d86524a857cc13e5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/Prefabs/AVLTree.prefab b/Packages/tlp.udonavltree/Runtime/Prefabs/AVLTree.prefab new file mode 100644 index 0000000..c0fd18e --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Prefabs/AVLTree.prefab @@ -0,0 +1,118 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4817224116352894249 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4817224116352894248} + m_Layer: 1 + m_Name: AVLTreeNodes + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 0 +--- !u!4 &4817224116352894248 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4817224116352894249} + m_LocalRotation: {x: 0, 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: 4817224117106893360} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4817224117106893358 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4817224117106893360} + - component: {fileID: -3101107732065957210} + - component: {fileID: 4817224117106893361} + m_Layer: 1 + m_Name: AVLTree + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &4817224117106893360 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4817224117106893358} + m_LocalRotation: {x: 0, 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: 4817224116352894248} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &-3101107732065957210 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4817224117106893358} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39e6227d5f517e64aac6137177fac298, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 4817224117106893361} + severity: 5 + eventInstigator: {fileID: 0} + Comparer: {fileID: 0} + TreeNodes: {fileID: 4817224116352894248} +--- !u!114 &4817224117106893361 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4817224117106893358} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + serializedProgramAsset: {fileID: 11400000, guid: c6415b407f418e0438f75c99189a2c24, + type: 2} + programSource: {fileID: 11400000, guid: b866cc3d21234e1458ec590633b6bc56, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgUAAAAAAAAAAi8CAAAAAVMAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AVQBkAG8AbgBCAGUAaABhAHYAaQBvAHUAcgAsACAAVgBSAEMALgBVAGQAbwBuAF0AXQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAgAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABBAAAAHAAbwBvAGwAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4ATwBiAGoAZQBjAHQALAAgAG0AcwBjAG8AcgBsAGkAYgAtAQUAAABWAGEAbAB1AGUABwUCLwMAAAABYAAAAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAC4AVQBkAG8AbgBWAGEAcgBpAGEAYgBsAGUAYAAxAFsAWwBVAG4AaQB0AHkARQBuAGcAaQBuAGUALgBUAHIAYQBuAHMAZgBvAHIAbQAsACAAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AQwBvAHIAZQBNAG8AZAB1AGwAZQBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAMAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQkAAAB0AHIAZQBlAE4AbwBkAGUAcwAnAQQAAAB0AHkAcABlAAEtAAAAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AVAByAGEAbgBzAGYAbwByAG0ALAAgAFUAbgBpAHQAeQBFAG4AZwBpAG4AZQAuAEMAbwByAGUATQBvAGQAdQBsAGUACwEFAAAAVgBhAGwAdQBlAAAAAAAHBQIwAgAAAAQAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQgAAABjAG8AbQBwAGEAcgBlAHIAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4ATwBiAGoAZQBjAHQALAAgAG0AcwBjAG8AcgBsAGkAYgAtAQUAAABWAGEAbAB1AGUABwUCLwQAAAABSQAAAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAC4AVQBkAG8AbgBWAGEAcgBpAGEAYgBsAGUAYAAxAFsAWwBTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiAF0AXQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ABQAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABHwAAAF8AXwBfAFUAZABvAG4AUwBoAGEAcgBwAEIAZQBoAGEAdgBpAG8AdQByAFYAZQByAHMAaQBvAG4AXwBfAF8AJwEEAAAAdAB5AHAAZQABFgAAAFMAeQBzAHQAZQBtAC4ASQBuAHQAMwAyACwAIABtAHMAYwBvAHIAbABpAGIAFwEFAAAAVgBhAGwAdQBlAAIAAAAHBQIvBQAAAAFLAAAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQBgADEAWwBbAFMAeQBzAHQAZQBtAC4AQgBvAG8AbABlAGEAbgAsACAAbQBzAGMAbwByAGwAaQBiAF0AXQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ABgAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABLgAAAF8AXwBfAFUAZABvAG4AUwBoAGEAcgBwAEIAZQBoAGEAdgBpAG8AdQByAFAAZQByAHMAaQBzAHQARABhAHQAYQBGAHIAbwBtAFUAcABnAHIAYQBkAGUAXwBfAF8AJwEEAAAAdAB5AHAAZQABGAAAAFMAeQBzAHQAZQBtAC4AQgBvAG8AbABlAGEAbgAsACAAbQBzAGMAbwByAGwAaQBiACsBBQAAAFYAYQBsAHUAZQABBwUHBQcF + publicVariablesUnityEngineObjects: + - {fileID: 4817224116352894248} + publicVariablesSerializationDataFormat: 0 diff --git a/Packages/tlp.udonavltree/Runtime/Prefabs/AVLTree.prefab.meta b/Packages/tlp.udonavltree/Runtime/Prefabs/AVLTree.prefab.meta new file mode 100644 index 0000000..d007182 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Prefabs/AVLTree.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 71b5128fda7da5745aeefaa1d9dc1c51 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/Prefabs/TLP_Factories.prefab b/Packages/tlp.udonavltree/Runtime/Prefabs/TLP_Factories.prefab new file mode 100644 index 0000000..eecc49f --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Prefabs/TLP_Factories.prefab @@ -0,0 +1,494 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2337243999207512867 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2623958791843062824} + - component: {fileID: 3592308230152441878} + - component: {fileID: 1731933031424968743} + m_Layer: 2 + m_Name: AVLTreeNodeFactory + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &2623958791843062824 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2337243999207512867} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4044426006372571781} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3592308230152441878 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2337243999207512867} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 23e72712be3a90045bc86f325155c49c, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 1731933031424968743} + AutoRetrySendOnFailure: 1 + Severity: 3 + EventInstigator: {fileID: 0} + Pool: {fileID: 0} + PoolableInUse: 0 + FactoryKey: AVLTreeNode + Prototype: {fileID: 3336105233618269729} + OptionalDefaultPool: {fileID: 8233136676238591154} +--- !u!114 &1731933031424968743 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2337243999207512867} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 1 + serializedProgramAsset: {fileID: 11400000, guid: e084844949e64024bbdfd143a95380ff, + type: 2} + programSource: {fileID: 11400000, guid: c2ab708fc88b7d5479ee17a6527522c0, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!1 &6541315160676230393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4750993882143836032} + - component: {fileID: 8233136676238591154} + - component: {fileID: 2951920769875215893} + m_Layer: 2 + m_Name: AVLTreeNodePool + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &4750993882143836032 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6541315160676230393} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4044426006372571781} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8233136676238591154 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6541315160676230393} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7b3484a4db2e09d43b43501e5652acc3, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 2951920769875215893} + AutoRetrySendOnFailure: 1 + Severity: 5 + EventInstigator: {fileID: 0} + Pool: {fileID: 0} + PoolableInUse: 0 + AttachToParent: 1 + PoolInstancePrefab: {fileID: 7612805263458772799} + ActivateInstances: 0 + LimitToInitiallyCreated: 0 + InitialInstancesPrePooled: 100 + InitializationsPerFrame: 10 + UsesRectTransform: 0 + DisableAfterInitialization: 1 +--- !u!114 &2951920769875215893 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6541315160676230393} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 1 + serializedProgramAsset: {fileID: 11400000, guid: 6f027832f98923541b6e1282428a5c0a, + type: 2} + programSource: {fileID: 11400000, guid: 6a6287356f88b584196fdbd80e1cd96e, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgUAAAAAAAAAAi8CAAAAAUsAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBCAG8AbwBsAGUAYQBuACwAIABtAHMAYwBvAHIAbABpAGIAXQBdACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgACAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAERAAAAYQBjAHQAaQB2AGEAdABlAEkAbgBzAHQAYQBuAGMAZQBzACcBBAAAAHQAeQBwAGUAARgAAABTAHkAcwB0AGUAbQAuAEIAbwBvAGwAZQBhAG4ALAAgAG0AcwBjAG8AcgBsAGkAYgArAQUAAABWAGEAbAB1AGUAAAcFAi8DAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAMAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAARkAAABpAG4AaQB0AGkAYQBsAEkAbgBzAHQAYQBuAGMAZQBzAFAAcgBlAFAAbwBvAGwAZQBkACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQBkAAAABwUCLwQAAAABYQAAAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAC4AVQBkAG8AbgBWAGEAcgBpAGEAYgBsAGUAYAAxAFsAWwBVAG4AaQB0AHkARQBuAGcAaQBuAGUALgBHAGEAbQBlAE8AYgBqAGUAYwB0ACwAIABVAG4AaQB0AHkARQBuAGcAaQBuAGUALgBDAG8AcgBlAE0AbwBkAHUAbABlAF0AXQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ABAAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABEgAAAHAAbwBvAGwASQBuAHMAdABhAG4AYwBlAFAAcgBlAGYAYQBiACcBBAAAAHQAeQBwAGUAAS4AAABVAG4AaQB0AHkARQBuAGcAaQBuAGUALgBHAGEAbQBlAE8AYgBqAGUAYwB0ACwAIABVAG4AaQB0AHkARQBuAGcAaQBuAGUALgBDAG8AcgBlAE0AbwBkAHUAbABlAAsBBQAAAFYAYQBsAHUAZQAAAAAABwUCMAMAAAAFAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAEfAAAAXwBfAF8AVQBkAG8AbgBTAGgAYQByAHAAQgBlAGgAYQB2AGkAbwB1AHIAVgBlAHIAcwBpAG8AbgBfAF8AXwAnAQQAAAB0AHkAcABlAAEWAAAAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgAXAQUAAABWAGEAbAB1AGUAAgAAAAcFAjACAAAABgAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABLgAAAF8AXwBfAFUAZABvAG4AUwBoAGEAcgBwAEIAZQBoAGEAdgBpAG8AdQByAFAAZQByAHMAaQBzAHQARABhAHQAYQBGAHIAbwBtAFUAcABnAHIAYQBkAGUAXwBfAF8AJwEEAAAAdAB5AHAAZQABGAAAAFMAeQBzAHQAZQBtAC4AQgBvAG8AbABlAGEAbgAsACAAbQBzAGMAbwByAGwAaQBiACsBBQAAAFYAYQBsAHUAZQABBwUHBQcF + publicVariablesUnityEngineObjects: + - {fileID: 7612805263458772799} + publicVariablesSerializationDataFormat: 0 +--- !u!1 &7612805263458772799 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2582687008157799579} + - component: {fileID: 3336105233618269729} + - component: {fileID: 5227102878526755865} + m_Layer: 2 + m_Name: AVLTreeNodePrefab + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 0 +--- !u!4 &2582687008157799579 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7612805263458772799} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7476582677681188840} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3336105233618269729 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7612805263458772799} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4c2742b6516edfd4bb2dca0337665ff9, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 5227102878526755865} + AutoRetrySendOnFailure: 1 + Severity: 5 + EventInstigator: {fileID: 0} + Pool: {fileID: 0} + PoolableInUse: 0 + parent: {fileID: 0} + payload: {fileID: 0} + left: {fileID: 0} + right: {fileID: 0} + leftIsWire: 0 + rightIsWire: 0 + count: 0 + height: 0 + ownTransform: {fileID: 2582687008157799579} +--- !u!114 &5227102878526755865 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7612805263458772799} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 1 + serializedProgramAsset: {fileID: 11400000, guid: 2741443c3e69b524591e093354001ab4, + type: 2} + programSource: {fileID: 11400000, guid: b9f7923dca82c954dbfc40a68f8c6d36, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgcAAAAAAAAAAi8CAAAAAUsAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBCAG8AbwBsAGUAYQBuACwAIABtAHMAYwBvAHIAbABpAGIAXQBdACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgACAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAEKAAAAbABlAGYAdABJAHMAVwBpAHIAZQAnAQQAAAB0AHkAcABlAAEYAAAAUwB5AHMAdABlAG0ALgBCAG8AbwBsAGUAYQBuACwAIABtAHMAYwBvAHIAbABpAGIAKwEFAAAAVgBhAGwAdQBlAAAHBQIwAgAAAAMAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQsAAAByAGkAZwBoAHQASQBzAFcAaQByAGUAJwEEAAAAdAB5AHAAZQABGAAAAFMAeQBzAHQAZQBtAC4AQgBvAG8AbABlAGEAbgAsACAAbQBzAGMAbwByAGwAaQBiACsBBQAAAFYAYQBsAHUAZQAABwUCLwMAAAABSQAAAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAC4AVQBkAG8AbgBWAGEAcgBpAGEAYgBsAGUAYAAxAFsAWwBTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiAF0AXQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ABAAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABBQAAAGMAbwB1AG4AdAAnAQQAAAB0AHkAcABlAAEWAAAAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgAXAQUAAABWAGEAbAB1AGUAAAAAAAcFAjADAAAABQAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABBgAAAGgAZQBpAGcAaAB0ACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQAAAAAABwUCLwQAAAABYAAAAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAC4AVQBkAG8AbgBWAGEAcgBpAGEAYgBsAGUAYAAxAFsAWwBVAG4AaQB0AHkARQBuAGcAaQBuAGUALgBUAHIAYQBuAHMAZgBvAHIAbQAsACAAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AQwBvAHIAZQBNAG8AZAB1AGwAZQBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAYAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQwAAABvAHcAbgBUAHIAYQBuAHMAZgBvAHIAbQAnAQQAAAB0AHkAcABlAAEtAAAAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AVAByAGEAbgBzAGYAbwByAG0ALAAgAFUAbgBpAHQAeQBFAG4AZwBpAG4AZQAuAEMAbwByAGUATQBvAGQAdQBsAGUACwEFAAAAVgBhAGwAdQBlAAAAAAAHBQIwAwAAAAcAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUCMAIAAAAIAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAEuAAAAXwBfAF8AVQBkAG8AbgBTAGgAYQByAHAAQgBlAGgAYQB2AGkAbwB1AHIAUABlAHIAcwBpAHMAdABEAGEAdABhAEYAcgBvAG0AVQBwAGcAcgBhAGQAZQBfAF8AXwAnAQQAAAB0AHkAcABlAAEYAAAAUwB5AHMAdABlAG0ALgBCAG8AbwBsAGUAYQBuACwAIABtAHMAYwBvAHIAbABpAGIAKwEFAAAAVgBhAGwAdQBlAAEHBQcFBwU= + publicVariablesUnityEngineObjects: + - {fileID: 2582687008157799579} + publicVariablesSerializationDataFormat: 0 +--- !u!1001 &1939800645622210371 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 89539049107661920, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + - target: {fileID: 1211004798167009764, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 1211004798167009764, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + - target: {fileID: 1213205649533537272, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + - target: {fileID: 1408376786846522508, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 1408376786846522508, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + - target: {fileID: 1446967263821615308, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 1446967263821615308, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + - target: {fileID: 1507159544121357630, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + - target: {fileID: 2178381853371279503, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + - target: {fileID: 2507166262536357318, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2507166262536357318, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2507166262536357318, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2507166262536357318, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2507166262536357318, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2507166262536357318, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2507166262536357318, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2507166262536357318, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2507166262536357318, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2507166262536357318, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2820728346152061995, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 2820728346152061995, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + - target: {fileID: 2950201159471852395, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + - target: {fileID: 2988447776239841332, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + - target: {fileID: 4318829638541586288, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 4318829638541586288, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + - target: {fileID: 4522703634202410745, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + - target: {fileID: 4571074995838135788, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + - target: {fileID: 4789317624309829163, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 4789317624309829163, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + - target: {fileID: 5295845588349931712, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + - target: {fileID: 6111743903023207932, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 6111743903023207932, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + - target: {fileID: 7196238785814910703, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + - target: {fileID: 7726253888417114661, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 7726253888417114661, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + - target: {fileID: 7845974241377174339, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 7845974241377174339, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + - target: {fileID: 8168188530878025226, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + - target: {fileID: 8278605821331637747, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_Name + value: TLP_Factories Variant + objectReference: {fileID: 0} + - target: {fileID: 8278605821331637747, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + - target: {fileID: 9215505081594390831, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 9215505081594390831, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 2507166262536357318, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + insertIndex: -1 + addedObject: {fileID: 4750993882143836032} + - targetCorrespondingSourceObject: {fileID: 2507166262536357318, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + insertIndex: -1 + addedObject: {fileID: 2623958791843062824} + - targetCorrespondingSourceObject: {fileID: 9018922513138462891, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + insertIndex: -1 + addedObject: {fileID: 2582687008157799579} + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 2822a5b9e27e8d44d81af8019cad4f0e, type: 3} +--- !u!4 &4044426006372571781 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2507166262536357318, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + m_PrefabInstance: {fileID: 1939800645622210371} + m_PrefabAsset: {fileID: 0} +--- !u!4 &7476582677681188840 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 9018922513138462891, guid: 2822a5b9e27e8d44d81af8019cad4f0e, + type: 3} + m_PrefabInstance: {fileID: 1939800645622210371} + m_PrefabAsset: {fileID: 0} diff --git a/Packages/tlp.udonavltree/Runtime/Prefabs/TLP_Factories.prefab.meta b/Packages/tlp.udonavltree/Runtime/Prefabs/TLP_Factories.prefab.meta new file mode 100644 index 0000000..4073772 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Prefabs/TLP_Factories.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4bea38d49ac558140a967d50dbb2db7a +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/Scenes.meta b/Packages/tlp.udonavltree/Runtime/Scenes.meta new file mode 100644 index 0000000..de4eb7a --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cb8c50778543c13469e9170417c86f7e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/Scenes/AVLTreeDemo.unity b/Packages/tlp.udonavltree/Runtime/Scenes/AVLTreeDemo.unity new file mode 100644 index 0000000..d630994 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Scenes/AVLTreeDemo.unity @@ -0,0 +1,1886 @@ +%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: 10304, guid: 0000000000000000f000000000000000, type: 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.12731749, g: 0.13414757, b: 0.1210787, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + 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: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + 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_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &116452090 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 7162028828498753258, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + m_PrefabInstance: {fileID: 642885894} + m_PrefabAsset: {fileID: 0} +--- !u!1 &124692853 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 124692854} + - component: {fileID: 124692856} + - component: {fileID: 124692855} + m_Layer: 1 + m_Name: ' (1)' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 0 +--- !u!4 &124692854 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 124692853} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1722414908} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &124692855 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 124692853} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 1 + serializedProgramAsset: {fileID: 11400000, guid: a1ea8d0e524ab7340bc8873c388fe362, + type: 2} + programSource: {fileID: 11400000, guid: 7166f612189de724789e165fe57c128d, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &124692856 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 124692853} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a40a0cae80f85d149be73553277a76a7, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 124692855} + AutoRetrySendOnFailure: 1 + Severity: 5 + EventInstigator: {fileID: 0} + Pool: {fileID: 0} + PoolableInUse: 0 + value: 1 + toCompare: {fileID: 0} + compareSuccess: 0 + compareResult: 0 +--- !u!1 &281158105 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 7162028830488724364, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + m_PrefabInstance: {fileID: 642885894} + m_PrefabAsset: {fileID: 0} +--- !u!1 &300203521 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 2592995490271990850, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + m_PrefabInstance: {fileID: 642885894} + m_PrefabAsset: {fileID: 0} +--- !u!1 &513615117 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1094421957795851142, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + m_PrefabInstance: {fileID: 1775580065} + m_PrefabAsset: {fileID: 0} +--- !u!1 &556273251 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 4817224117106893358, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + m_PrefabInstance: {fileID: 4817224115921922081} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &642885894 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 210995436698093338, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 210995436698093338, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + - target: {fileID: 422664684679654714, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: _syncMethod + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 786267871471051806, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 786267871471051806, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + - target: {fileID: 1859223435513190606, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 1859223435513190606, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + - target: {fileID: 2012949151903506351, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: Build + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 2012949151903506351, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: Timestamp + value: 1716301604 + objectReference: {fileID: 0} + - target: {fileID: 2012949151903506351, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: SyncedBuild + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 2012949151903506351, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 0} + - target: {fileID: 2012949151903506351, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: serializationData.SerializedFormat + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 2103673682335936013, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 2103673682335936013, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + - target: {fileID: 3393829322187016274, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 3393829322187016274, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + - target: {fileID: 3709746202603103375, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: m_Name + value: TLP_Essentials + objectReference: {fileID: 0} + - target: {fileID: 3783042229828734399, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: _syncMethod + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3868380857974398266, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: _syncMethod + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3972185688412097506, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 3972185688412097506, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + - target: {fileID: 4280231435646164616, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: _syncMethod + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4750217398182022344, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4750217398182022344, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4750217398182022344, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4750217398182022344, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4750217398182022344, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4750217398182022344, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4750217398182022344, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4750217398182022344, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4750217398182022344, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4750217398182022344, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5470757814127366648, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 5470757814127366648, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + - target: {fileID: 5571104446835667040, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 5571104446835667040, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + - target: {fileID: 6371111307024208664, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: _syncMethod + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6451377148683280410, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: _syncMethod + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6624998852470513436, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 6624998852470513436, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + - target: {fileID: 6644946175713522186, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 6644946175713522186, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + - target: {fileID: 7162028828498753259, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: serializedProgramAsset + value: + objectReference: {fileID: 11400000, guid: 89323b595330d344d98d38079e7ba8a0, + type: 2} + - target: {fileID: 7162028830488724365, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: serializedProgramAsset + value: + objectReference: {fileID: 11400000, guid: 10d9c4411e54e5740a255a28d4c0e586, + type: 2} + - target: {fileID: 7213243274789533828, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: _syncMethod + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7295322991753456056, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 7295322991753456056, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: a2e29b4f6c24d5a49851f212381a8bf5, type: 3} +--- !u!1 &1066284924 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 7162028830363197434, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + m_PrefabInstance: {fileID: 642885894} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1286295504 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 5621236210903932025, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + m_PrefabInstance: {fileID: 642885894} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1298555724 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 8900891061798147521, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + m_PrefabInstance: {fileID: 642885894} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1315361564 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1315361568} + - component: {fileID: 1315361567} + - component: {fileID: 1315361566} + - component: {fileID: 1315361565} + m_Layer: 0 + m_Name: Floor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!64 &1315361565 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315361564} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1315361566 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315361564} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1315361567 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315361564} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1315361568 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315361564} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1560962216 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 8809798760252654739, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + m_PrefabInstance: {fileID: 642885894} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1589233829 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3647225028873143287, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + m_PrefabInstance: {fileID: 642885894} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1614123775 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 7061053460461279348, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + m_PrefabInstance: {fileID: 642885894} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1722414907 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1722414908} + - component: {fileID: 1722414910} + - component: {fileID: 1722414909} + m_Layer: 1 + m_Name: ExampleAvlTreeUser + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1722414908 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1722414907} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 124692854} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1722414909 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1722414907} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 1 + serializedProgramAsset: {fileID: 11400000, guid: 652934d22fb2302458f461d6f3a01200, + type: 2} + programSource: {fileID: 11400000, guid: 03884f55438621541ac2784fcd548ac6, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &1722414910 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1722414907} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf2ce72eaa5156d439ced8b2100c20ad, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 1722414909} + AutoRetrySendOnFailure: 1 + Severity: 3 + EventInstigator: {fileID: 0} + Pool: {fileID: 0} + PoolableInUse: 0 + avlTree: {fileID: 4817224115921922082} + count: 500 +--- !u!1001 &1775580065 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1055321711490392694, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: blueprintId + value: wrld_3029e272-b611-4271-a8eb-cfcc0a85b100 + objectReference: {fileID: 0} + - target: {fileID: 1094421957795580606, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1094421957795580606, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1094421957795580606, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1094421957795580606, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1094421957795580606, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1094421957795580606, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1094421957795580606, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1094421957795580606, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1094421957795580606, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1094421957795580606, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1094421957795580606, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1094421957795851142, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: m_Name + value: VRCWorld + objectReference: {fileID: 0} + - target: {fileID: 1415578911040940289, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: serializedProgramAsset + value: + objectReference: {fileID: 11400000, guid: be4694825c433534aa3b93b8337c3866, + type: 2} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: unityVersion + value: 2022.3.22f1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.size + value: 28 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: DynamicMaterials.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[0].ID + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[1].ID + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[2].ID + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[3].ID + value: 13 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[4].ID + value: 14 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[5].ID + value: 15 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[6].ID + value: 16 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[7].ID + value: 17 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[8].ID + value: 18 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[9].ID + value: 19 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[10].ID + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[11].ID + value: 21 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[12].ID + value: 22 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[13].ID + value: 23 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[14].ID + value: 24 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[15].ID + value: 25 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[16].ID + value: 26 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[17].ID + value: 27 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[18].ID + value: 28 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[19].ID + value: 29 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[20].ID + value: 30 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[21].ID + value: 31 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[22].ID + value: 32 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[23].ID + value: 33 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[24].ID + value: 34 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[25].ID + value: 35 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[26].ID + value: 36 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[27].ID + value: 37 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: DynamicMaterials.Array.data[0] + value: + objectReference: {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[19] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[51] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[83] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[147] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[275] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[307] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[339] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[371] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[499] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[531] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[563] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[595] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[608] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[609] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[610] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[612] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[616] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[617] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[618] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[619] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[623] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[624] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[625] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[626] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[627] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[628] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[629] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[659] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: layerCollisionArr.Array.data[691] + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[0].gameObject + value: + objectReference: {fileID: 556273251} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[1].gameObject + value: + objectReference: {fileID: 1999329788} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[2].gameObject + value: + objectReference: {fileID: 1722414907} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[3].gameObject + value: + objectReference: {fileID: 124692853} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[4].gameObject + value: + objectReference: {fileID: 2014045426} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[5].gameObject + value: + objectReference: {fileID: 1286295504} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[6].gameObject + value: + objectReference: {fileID: 1298555724} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[7].gameObject + value: + objectReference: {fileID: 1560962216} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[8].gameObject + value: + objectReference: {fileID: 300203521} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[9].gameObject + value: + objectReference: {fileID: 281158105} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[10].gameObject + value: + objectReference: {fileID: 116452090} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[11].gameObject + value: + objectReference: {fileID: 1066284924} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[12].gameObject + value: + objectReference: {fileID: 1589233829} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[13].gameObject + value: + objectReference: {fileID: 1614123775} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[14].gameObject + value: + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[15].gameObject + value: + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[16].gameObject + value: + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[17].gameObject + value: + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[18].gameObject + value: + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[19].gameObject + value: + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[20].gameObject + value: + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[21].gameObject + value: + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[22].gameObject + value: + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[23].gameObject + value: + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[24].gameObject + value: + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[25].gameObject + value: + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[26].gameObject + value: + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[27].gameObject + value: + objectReference: {fileID: 513615117} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[0].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[1].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[2].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[3].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[4].SerializedTypeNames.Array.size + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[5].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[6].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[7].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[8].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[9].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[10].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[11].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[12].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[13].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[14].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[15].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[16].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[17].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[18].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[19].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[20].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[21].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[22].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[23].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[24].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[25].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[26].SerializedTypeNames.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[27].SerializedTypeNames.Array.size + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[0].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[1].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[2].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[3].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[4].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[4].SerializedTypeNames.Array.data[1] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[4].SerializedTypeNames.Array.data[2] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[5].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[6].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[7].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[8].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[9].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[10].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[11].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[12].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[13].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[14].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[15].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[16].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[17].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[18].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[19].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[20].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[21].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[22].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[23].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[24].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[25].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[26].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[27].SerializedTypeNames.Array.data[0] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 6759095419728963412, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: NetworkIDs.Array.data[27].SerializedTypeNames.Array.data[1] + value: VRC.Udon.UdonBehaviour + objectReference: {fileID: 0} + - target: {fileID: 8464459589408506562, guid: 8894fa7e4588a5c4fab98453e558847d, + type: 3} + propertyPath: serializedProgramAsset + value: + objectReference: {fileID: 11400000, guid: 0bc44973df447ac408e52a42d68a250e, + type: 2} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 8894fa7e4588a5c4fab98453e558847d, type: 3} +--- !u!1 &1999329788 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1999329791} + - component: {fileID: 1999329790} + - component: {fileID: 1999329789} + m_Layer: 1 + m_Name: Comparer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!114 &1999329789 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1999329788} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 1 + serializedProgramAsset: {fileID: 11400000, guid: 9df0682f97d7e254c8781c62cd10b08c, + type: 2} + programSource: {fileID: 11400000, guid: be8ce6ced80c1ee4abe2faca30de4530, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &1999329790 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1999329788} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a7b56f06aede87c43b5dcec6d1813726, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 1999329789} + AutoRetrySendOnFailure: 1 + Severity: 3 + EventInstigator: {fileID: 0} + Pool: {fileID: 0} + PoolableInUse: 0 + optionalFallback: {fileID: 0} +--- !u!4 &1999329791 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1999329788} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2014045426 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 6267370736182518356, guid: a2e29b4f6c24d5a49851f212381a8bf5, + type: 3} + m_PrefabInstance: {fileID: 642885894} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &4817224115921922081 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: -3101107732065957210, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: Comparer + value: + objectReference: {fileID: 1999329790} + - target: {fileID: -3101107732065957210, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: severity + value: 3 + objectReference: {fileID: 0} + - target: {fileID: -3101107732065957210, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: -3101107732065957210, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + - target: {fileID: 1935021440700485639, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 1935021440700485639, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + - target: {fileID: 4817224117106893358, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: m_Name + value: AVLTree + objectReference: {fileID: 0} + - target: {fileID: 4817224117106893360, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 4817224117106893360, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4817224117106893360, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4817224117106893360, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4817224117106893360, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4817224117106893360, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4817224117106893360, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4817224117106893360, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4817224117106893360, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4817224117106893360, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4817224117106893360, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4817224117106893361, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: _syncMethod + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4817224117106893361, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: serializedProgramAsset + value: + objectReference: {fileID: 11400000, guid: eabe12c0695e6bb4e9c3a8039bf7f24e, + type: 2} + - target: {fileID: 7886940234576079921, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 7886940234576079921, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 71b5128fda7da5745aeefaa1d9dc1c51, type: 3} +--- !u!114 &4817224115921922082 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: -3101107732065957210, guid: 71b5128fda7da5745aeefaa1d9dc1c51, + type: 3} + m_PrefabInstance: {fileID: 4817224115921922081} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 556273251} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39e6227d5f517e64aac6137177fac298, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &7642461433902474322 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 675541392189424591, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 675541392189424591, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + - target: {fileID: 731223723749365415, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 731223723749365415, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + - target: {fileID: 1080625761088851855, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 1080625761088851855, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + - target: {fileID: 2379060332264009779, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 2379060332264009779, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + - target: {fileID: 3336105233618269729, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 3336105233618269729, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + - target: {fileID: 3592308230152441878, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 3592308230152441878, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + - target: {fileID: 4044426006372571781, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4044426006372571781, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4044426006372571781, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4044426006372571781, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4044426006372571781, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4044426006372571781, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4044426006372571781, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4044426006372571781, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4044426006372571781, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4044426006372571781, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4453693982297707368, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 4453693982297707368, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + - target: {fileID: 5637038722919238335, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 5637038722919238335, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + - target: {fileID: 6385151449237803368, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 6385151449237803368, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + - target: {fileID: 7282183585306457708, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 7282183585306457708, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + - target: {fileID: 7496252888651831984, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: m_Name + value: TLP_Factories + objectReference: {fileID: 0} + - target: {fileID: 8201798815128728934, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 8201798815128728934, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + - target: {fileID: 8233136676238591154, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 8233136676238591154, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + - target: {fileID: 8505345212569377792, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 8505345212569377792, guid: 4bea38d49ac558140a967d50dbb2db7a, + type: 3} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 4bea38d49ac558140a967d50dbb2db7a, type: 3} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 642885894} + - {fileID: 7642461433902474322} + - {fileID: 1315361568} + - {fileID: 4817224115921922081} + - {fileID: 1999329791} + - {fileID: 1775580065} + - {fileID: 1722414908} diff --git a/Packages/tlp.udonavltree/Runtime/Scenes/AVLTreeDemo.unity.meta b/Packages/tlp.udonavltree/Runtime/Scenes/AVLTreeDemo.unity.meta new file mode 100644 index 0000000..c695cd1 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Scenes/AVLTreeDemo.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9bbadb5994a3f2042af94fbe1925e80a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/TLP.UdonAVLTree.Runtime.asmdef b/Packages/tlp.udonavltree/Runtime/TLP.UdonAVLTree.Runtime.asmdef new file mode 100644 index 0000000..b7aca31 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/TLP.UdonAVLTree.Runtime.asmdef @@ -0,0 +1,17 @@ +{ + "name": "TLP.UdonAVLTree.Runtime", + "references": [ + "GUID:3c1bc1267eab5884ebe7f232c09ee0d9", + "GUID:5ffc5658c86203349b4ced03f037df1f", + "GUID:99835874ee819da44948776e0df4ff1d" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/tlp.udonavltree/Runtime/TLP.UdonAVLTree.Runtime.asmdef.meta b/Packages/tlp.udonavltree/Runtime/TLP.UdonAVLTree.Runtime.asmdef.meta new file mode 100644 index 0000000..f1d9c2c --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/TLP.UdonAVLTree.Runtime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 46dc224c71dea7a45a4dd8e64080dae9 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/TLP.UdonAVLTree.Runtime.asset b/Packages/tlp.udonavltree/Runtime/TLP.UdonAVLTree.Runtime.asset new file mode 100644 index 0000000..5f8aca6 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/TLP.UdonAVLTree.Runtime.asset @@ -0,0 +1,16 @@ +%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: 5136146375e9a0a498a72a0091b40cc1, type: 3} + m_Name: TLP.UdonAVLTree.Runtime + m_EditorClassIdentifier: + sourceAssembly: {fileID: 5897886265953266890, guid: 46dc224c71dea7a45a4dd8e64080dae9, + type: 3} diff --git a/Packages/tlp.udonavltree/Runtime/TLP.UdonAVLTree.Runtime.asset.meta b/Packages/tlp.udonavltree/Runtime/TLP.UdonAVLTree.Runtime.asset.meta new file mode 100644 index 0000000..bb86309 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/TLP.UdonAVLTree.Runtime.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5206d1f4f5d5d9242a92de2225ec1bb3 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/Tests.meta b/Packages/tlp.udonavltree/Runtime/Tests.meta new file mode 100644 index 0000000..a1b1e58 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e308e8bec0c27584b918505c3434f726 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/Tests/MockComparableElement.cs b/Packages/tlp.udonavltree/Runtime/Tests/MockComparableElement.cs new file mode 100644 index 0000000..696c2a1 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Tests/MockComparableElement.cs @@ -0,0 +1,18 @@ +#if !COMPILER_UDONSHARP && UNITY_EDITOR + +using TLP.UdonUtils; + +namespace TLP.UdonAVLTree.Tests.Runtime +{ + public class MockComparableElement : TlpBaseBehaviour + { + public int valueToCompare; + + public override string ToString() + { + return valueToCompare.ToString(); + } + } +} + +#endif \ No newline at end of file diff --git a/Packages/tlp.udonavltree/Runtime/Tests/MockComparableElement.cs.meta b/Packages/tlp.udonavltree/Runtime/Tests/MockComparableElement.cs.meta new file mode 100644 index 0000000..3e0bec7 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Tests/MockComparableElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5c64dd40f3ac4906b729d0ad426067d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/Tests/MockComparableElementComparer.cs b/Packages/tlp.udonavltree/Runtime/Tests/MockComparableElementComparer.cs new file mode 100644 index 0000000..7fedc9b --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Tests/MockComparableElementComparer.cs @@ -0,0 +1,46 @@ +#if !COMPILER_UDONSHARP && UNITY_EDITOR + +using TLP.UdonUtils.Common; +using UdonSharp; +using UnityEngine; +using VRC.SDKBase; + +namespace TLP.UdonAVLTree.Tests.Runtime +{ + public class MockComparableElementComparer : Comparer + { + protected override bool ComparisonImplementation(UdonSharpBehaviour first, UdonSharpBehaviour second, out int comparisonResult) + { +#if TLP_DEBUG + DebugLog(nameof(MockComparableElementComparer)); +#endif + comparisonResult = 0; + if (!Utilities.IsValid(first)) + { + return false; + } + if (!Utilities.IsValid(second)) + { + return false; + } + + var firstMock = (MockComparableElement)first; + var secondMock = (MockComparableElement)second; + + if (!Utilities.IsValid(firstMock)) + { + return false; + } + + if (!Utilities.IsValid(secondMock)) + { + return false; + } + + comparisonResult = firstMock.valueToCompare.CompareTo(secondMock.valueToCompare); + return true; + } + } +} + +#endif \ No newline at end of file diff --git a/Packages/tlp.udonavltree/Runtime/Tests/MockComparableElementComparer.cs.meta b/Packages/tlp.udonavltree/Runtime/Tests/MockComparableElementComparer.cs.meta new file mode 100644 index 0000000..0662db4 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Tests/MockComparableElementComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac2560a94f3d4787a31a633269049b9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/Tests/TLP.UdonAVLTree.Tests.Runtime.asmdef b/Packages/tlp.udonavltree/Runtime/Tests/TLP.UdonAVLTree.Tests.Runtime.asmdef new file mode 100644 index 0000000..e18e4ad --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Tests/TLP.UdonAVLTree.Tests.Runtime.asmdef @@ -0,0 +1,30 @@ +{ + "name": "TLP.UdonAVLTree.Tests.Runtime", + "references": [ + "GUID:5ffc5658c86203349b4ced03f037df1f", + "GUID:46dc224c71dea7a45a4dd8e64080dae9", + "GUID:68bc3016fc696ad4196dfaf30bfed765", + "GUID:3b40974c3b83edb45909671e8bf52bba", + "GUID:d5e55c3261dfa5644b45b5697ab0cfbf", + "GUID:b77335caf96fc924c977029c9512b87e", + "GUID:99835874ee819da44948776e0df4ff1d", + "GUID:0acc523941302664db1f4e527237feb3", + "GUID:27619889b8ba8c24980f49ee34dbb44a", + "GUID:3c1bc1267eab5884ebe7f232c09ee0d9" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll", + "VRCSDKBase.dll", + "VRCSDK3.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/tlp.udonavltree/Runtime/Tests/TLP.UdonAVLTree.Tests.Runtime.asmdef.meta b/Packages/tlp.udonavltree/Runtime/Tests/TLP.UdonAVLTree.Tests.Runtime.asmdef.meta new file mode 100644 index 0000000..5059207 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Tests/TLP.UdonAVLTree.Tests.Runtime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3634ffb2884b2cc41b9d3c5cae427e03 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/Runtime/Tests/TestAvlTree.cs b/Packages/tlp.udonavltree/Runtime/Tests/TestAvlTree.cs new file mode 100644 index 0000000..7488139 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Tests/TestAvlTree.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using NUnit.Framework; +using TLP.UdonAVLTree.Runtime; +//using TLP.UdonLeaderBoard.Tests.Editor; +using TLP.UdonUtils.Editor.Tests; +using TLP.UdonUtils.Runtime.Pool; +using UnityEngine; +using UnityEngine.TestTools; +using Debug = UnityEngine.Debug; +using Random = UnityEngine.Random; + +namespace TLP.UdonAVLTree.Tests.Runtime +{ + public class TestAvlTree : TestWithLogger + { + private AVLTree _avlTree; + + [SetUp] + public override void Setup() + { + base.Setup(); + + //var _ = new Prefabs(); + + var avlTreeRoot = new GameObject("AVLTreeRoot"); + var avlTreeNodes = new GameObject("AVLTreeNodes"); + + var avlTreeNodePrefab = new GameObject("AVLTreeNodePrefab"); + var avlTreeNodePool = new GameObject("AVLTreeNodePool"); + + // attach model and element prefab to controller + avlTreeNodes.transform.parent = avlTreeRoot.transform; + avlTreeNodePrefab.transform.parent = avlTreeRoot.transform; + avlTreeNodePool.transform.parent = avlTreeRoot.transform; + + _avlTree = avlTreeRoot.AddComponent(); + _avlTree.TreeNodes = avlTreeNodes.transform; + + var pool = avlTreeNodePool.AddComponent(); + avlTreeNodePrefab.AddComponent().ownTransform = avlTreeNodePrefab.transform; + pool.PoolInstancePrefab = avlTreeNodePrefab; + _avlTree._avlTreeNodePool = pool; + + _avlTree.Comparer = _avlTree.gameObject.AddComponent(); + + Debug.Log("=========== Test Setup end ==========="); + } + + // A UnityTest behaves like a coroutine in Play Mode. In Edit Mode you can use + // `yield return null;` to skip a frame. + [UnityTest] + public IEnumerator Test10000RandomElements() + { + var gos = new HashSet(); + var root = new GameObject(); + int cnt = 0; + var used = new List(); + + try + { + LogAssert.ignoreFailingMessages = true; + + + for (int i = 0; i < 10000; i++) + { + int value; + do + { + value = Random.Range(0, int.MaxValue); + } while (used.Contains(value)); + + var mockComparableElement = new GameObject().AddComponent(); + mockComparableElement.valueToCompare = value; + mockComparableElement.transform.parent = root.transform; + gos.Add(mockComparableElement); + used.Add(value); + } + } + catch (Exception e) + { + Debug.LogException(e); + Assert.Fail(); + } + + var stopwatch = new Stopwatch(); + stopwatch.Restart(); + + var logs = new List(); + var previous = stopwatch.Elapsed; + + foreach (var go in gos) + { + if (cnt % 1000 == 0) + { + try + { + var now = stopwatch.Elapsed; + logs.Add(now.ToString() + " " + (now - previous).ToString()); + previous = now; + } + catch (Exception e) + { + Debug.LogException(e); + Assert.Fail(); + } + + yield return new WaitForEndOfFrame(); + } + + _avlTree.Add(go); + ++cnt; + } + + try + { + foreach (string log in logs) + { + Debug.Log(log); + } + + var stopwatchElapsed = stopwatch.Elapsed; + Debug.Log(stopwatchElapsed); + Debug.Log("Average = " + stopwatchElapsed.TotalSeconds / used.Count); + + Debug.Log("Size = " + _avlTree.Size); + + stopwatch.Restart(); + string benchResult = _avlTree.ToString(); + Debug.Log("reading all values = " + stopwatch.Elapsed); + Debug.Log("All = " + benchResult); + } + catch (Exception e) + { + Debug.LogException(e); + throw; + } + + + yield return null; + } + } +} \ No newline at end of file diff --git a/Packages/tlp.udonavltree/Runtime/Tests/TestAvlTree.cs.meta b/Packages/tlp.udonavltree/Runtime/Tests/TestAvlTree.cs.meta new file mode 100644 index 0000000..9a10d64 --- /dev/null +++ b/Packages/tlp.udonavltree/Runtime/Tests/TestAvlTree.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b23cc62d74a6af44800b69c01c67437 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/tlp.udonavltree/package.json b/Packages/tlp.udonavltree/package.json new file mode 100644 index 0000000..e905dd7 --- /dev/null +++ b/Packages/tlp.udonavltree/package.json @@ -0,0 +1,20 @@ +{ + "name": "tlp.udonavltree", + "displayName": "TLP UdonAVLTree", + "version": "0.1.0", + "description": "A AVL tree implementation for U# based VRChat worlds.", + "gitDependencies": {}, + "legacyFolders": { + "Assets\\Guribo\\UdonAvlTree": "" + }, + "author": { + "name": "Guribo", + "url": "https://github.com/Guribo" + }, + "vpmDependencies": { + "com.vrchat.worlds": "3.6.x", + "com.cyan.playerobjectpool": "1.1.x", + "tlp.udonutils": "7.0.x" + }, + "unity": "2022.3" +} diff --git a/Packages/tlp.udonavltree/package.json.meta b/Packages/tlp.udonavltree/package.json.meta new file mode 100644 index 0000000..d6bd456 --- /dev/null +++ b/Packages/tlp.udonavltree/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 81ce6f6c92b4d0649acd92735f51c95e +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/README.md b/README.md index 079e57b..695794f 100644 --- a/README.md +++ b/README.md @@ -1 +1,105 @@ -# Udon AVL Tree \ No newline at end of file +# Udon AVL Tree + +[![Total downloads](https://img.shields.io/github/downloads/Guribo/UdonAVLTree/total?style=flat-square&logo=appveyor)](https://github.com/Guribo/UdonAVLTree/releases) + +A AVL tree implementation for U# based VRChat worlds. + +## Installation + +**For simplicity reasons please install only via VRChat Creator companion and not manually using Unity packages! You will be missing dependencies when going the Unity package way!** + +1. Import VRChat World SDK 3.6 VCC package into your project +2. Add CyanPlayerObjectPool package listing to VCC: https://cyanlaser.github.io/CyanPlayerObjectPool/ +3. Add TLP Package listing to VCC: https://guribo.github.io/TLP/ +4. Import TLP UdonAVLTree into your project + 1. *This will now automatically import all other needed packages for you:* + - *TLP UdonUtils* + - *CyanPlayerObjectPool* + +## Setup + +*Note: All prefabs are in the `Packages` folder so make sure that you select either `All` or `Packages` when searching for them.* + +1. Add `TLP_Essentials` prefab to your scene +2. TODO + +## Known Issues + +- TODO + +## Versioning + +This package is versioned using [Semantic Version](https://semver.org/). + +The used pattern MAJOR.MINOR.PATCH indicates: + +1. MAJOR version: incompatible API changes occurred + - Implication: after updating backup, check and update your scenes/scripts as needed +2. MINOR version: new functionality has been added in a backward compatible manner + - Implication: after updating check and update your usages if needed +3. PATCH version: backward compatible bug fixes were implemented + - Implication: after updating remove potential workarounds you added + +## Changelog + +All notable changes to this project will be documented in this file. + +### [0.1.0] - 2024-05-21 + +#### 🚀 Features + +- Move from TLP +- Update to U## 1.0 and client sim +- Move logging to base class +- Fix loglevels, assert and perf limit warning +- Fix entries with invalid names being added to leaderboard +- Add vehicle sync, update leader board (break it too) +- Add gamemode, update vr components, test improvements, add serialization retry to base behaviour +- Add logging of all logs in frame to profiler +- Simplify comparison of behaviours +- Fix entries not being added to tree (wip), fix limitless syncing +- Add TLP_UNIT_TESTING define, add companion version of VRWorldToolkit +- Make tree not synchronized +- Fix up scenes and broken event callbacks +- Fix updates not being displayed +- Display data in leaderboard entry +- Update tribes scene, create leaderboard prefab +- Create factories for avl tree, factory with pool +- Reduce type spam in logs, add execution order to logs +- Add comparer creation, update exectionorders, move pooleable code to base behaviour +- Support adding players to model +- Fix finding of inactive gameobjects +- Add new data source using leaderboard model +- Deinit on destroy, selectable categories with view +- Have entry synchronizer get notified when an entry changes +- Have synchronizer attach entry to dirty root +- Support playmode test +- Update UVU exporter and readme +- Initial conversion +- Recompile +- Remove local path +- Update dependencies +- Rename and add udonutils dependency +- Update namespaces +- Update assets +- Update to support latest vrc sdk +- Update Pool references +- Migrate to UdonUtils 7.0.0 and vrc sdk 3.6 + +#### 🚜 Refactor + +- Cleanup and more test coverage +- Remove unused code and cleanup +- Ui controller method extraction +- Test aggressive inlining, restructure + +#### 🧪 Testing + +- Update tests to use TestWithLogger, reduce log spam + +#### ⚙️ Miscellaneous Tasks + +- Reserialize +- Add ci pipeline and update Readme + +