From 3fe816366dc6564b57594b87c13af84b98057026 Mon Sep 17 00:00:00 2001 From: zd304 <568892758@qq.com> Date: Wed, 30 Sep 2020 11:19:35 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Advanced/Boids/Scripts/BoidSystem.cs | 9 +- .../CHANGELOG.md | 519 + .../CHANGELOG.md.meta | 7 + .../DocCodeSamples.Tests.meta | 8 + .../DocCodeSamples.Tests/ChunkIterationJob.cs | 282 + .../ChunkIterationJob.cs.meta | 11 + .../DisableAutoCreation.cs | 2 + .../DisableAutoCreation.cs.meta | 11 + .../DocCodeSamples.asmdef | 28 + .../DocCodeSamples.asmdef.meta | 7 + .../DynamicBufferExamples.cs | 548 + .../DynamicBufferExamples.cs.meta | 11 + .../EntityCommandBuffers.cs | 55 + .../EntityCommandBuffers.cs.meta | 11 + .../DocCodeSamples.Tests/LambdaJobExamples.cs | 446 + .../LambdaJobExamples.cs.meta | 11 + .../Documentation~/TableOfContents.md | 30 + .../Documentation~/chunk_iteration.md | 24 + .../Documentation~/chunk_iteration_job.md | 118 + .../Documentation~/component_data.md | 49 + .../Documentation~/component_system.md | 16 + .../Documentation~/custom_job_types.md | 382 + .../Documentation~/doo_design.md | 7 + .../Documentation~/dynamic_buffers.md | 137 + .../Documentation~/ecs_anatomy.md | 7 + .../Documentation~/ecs_building_projects.md | 7 + .../Documentation~/ecs_burst.md | 7 + .../Documentation~/ecs_chunk_component.md | 268 + .../Documentation~/ecs_components.md | 22 + .../Documentation~/ecs_core.md | 72 + .../Documentation~/ecs_data_structures.md | 8 + .../Documentation~/ecs_debugging.md | 56 + .../Documentation~/ecs_entities.md | 53 + .../Documentation~/ecs_entity_query.md | 223 + .../Documentation~/ecs_gameplay.md | 8 + .../Documentation~/ecs_in_detail.md | 101 + .../Documentation~/ecs_job_extensions.md | 25 + .../Documentation~/ecs_job_overview.md | 44 + .../Documentation~/ecs_profiling.md | 7 + .../Documentation~/ecs_project_status.md | 16 + .../Documentation~/ecs_systems.md | 39 + .../Documentation~/ecs_testing.md | 7 + .../Documentation~/ecs_write_groups.md | 196 + .../Documentation~/entities.md | 12 + .../Documentation~/entities_job_foreach.md | 207 + .../Documentation~/entity_command_buffer.md | 22 + .../entity_iteration_foreach.md | 118 + .../Documentation~/entity_iteration_job.md | 156 + .../Documentation~/entity_manager.md | 53 + .../exclusive_entity_transaction.md | 11 + .../Documentation~/execution_order.md | 8 + .../Documentation~/filter.yml | 46 + .../Documentation~/gp_ai.md | 11 + .../Documentation~/gp_animation.md | 8 + .../Documentation~/gp_assets.md | 8 + .../Documentation~/gp_audio.md | 9 + .../Documentation~/gp_ecs_interop.md | 8 + .../Documentation~/gp_input.md | 8 + .../Documentation~/gp_multiplayer.md | 8 + .../Documentation~/gp_overview.md | 67 + .../Documentation~/gp_physics.md | 10 + .../Documentation~/gp_prefabs.md | 8 + .../Documentation~/gp_rendering.md | 9 + .../Documentation~/gp_scenes.md | 8 + .../Documentation~/gp_text_handling.md | 8 + .../Documentation~/gp_ui.md | 8 + .../images/ArchetypeChunkDiagram.png | Bin 0 -> 31465 bytes .../images/ArchetypeDiagram.png | Bin 0 -> 40118 bytes .../images/ConversionAndSubscenes.png | Bin 0 -> 74890 bytes .../images/CreatingGameplay.png | Bin 0 -> 48561 bytes .../Documentation~/images/ECSBlockDiagram.png | Bin 0 -> 64822 bytes .../Documentation~/images/EntitiesSplash.png | Bin 0 -> 135344 bytes .../Documentation~/images/SlideArrows.png | Bin 0 -> 10943 bytes .../images/WhatIsECSinfographic0000.png | Bin 0 -> 209890 bytes .../images/WhatIsECSinfographic0001.png | Bin 0 -> 181742 bytes .../images/WhatIsECSinfographic0002.png | Bin 0 -> 238570 bytes .../images/WhatIsECSinfographic0003.png | Bin 0 -> 216892 bytes .../images/WhatIsECSinfographic0004.png | Bin 0 -> 174234 bytes .../Documentation~/images/infographic.js | 32 + .../Documentation~/images/pixel.png | Bin 0 -> 122 bytes .../Documentation~/images/sec1-1.png | Bin 0 -> 10519 bytes .../Documentation~/images/sec1-2.png | Bin 0 -> 12922 bytes .../Documentation~/images/sec2-1.png | Bin 0 -> 17431 bytes .../Documentation~/images/sec2-2.png | Bin 0 -> 24023 bytes .../Documentation~/images/sec2-3.png | Bin 0 -> 28299 bytes .../Documentation~/images/sec4-1.png | Bin 0 -> 11551 bytes .../Documentation~/images/sec4-2.png | Bin 0 -> 11571 bytes .../Documentation~/images/sec4-3.png | Bin 0 -> 22917 bytes .../Documentation~/images/sec4-4.png | Bin 0 -> 22115 bytes .../Documentation~/images/sec4-5.png | Bin 0 -> 34326 bytes .../Documentation~/images/sec5-1.png | Bin 0 -> 25089 bytes .../Documentation~/images/sec5-2.png | Bin 0 -> 26003 bytes .../Documentation~/images/sec5-3.png | Bin 0 -> 25264 bytes .../Documentation~/images/sec5-4.png | Bin 0 -> 44037 bytes .../Documentation~/images/sec5-5.png | Bin 0 -> 47287 bytes .../Documentation~/images/sec5-6.png | Bin 0 -> 11378 bytes .../Documentation~/images/sec5-7.png | Bin 0 -> 45985 bytes .../Documentation~/index.md | 42 + .../Documentation~/job_component_system.md | 67 + .../Documentation~/manual_iteration.md | 89 + .../Documentation~/shared_component_data.md | 41 + .../Documentation~/sync_points.md | 22 + .../Documentation~/system_state_components.md | 206 + .../Documentation~/system_update_order.md | 99 + .../Documentation~/transform_system.md | 1034 ++ .../Documentation~/version_numbers.md | 65 + .../Documentation~/world.md | 18 + .../Editor.meta | 8 + .../Editor/LiveLink.meta | 8 + .../Editor/LiveLink/Icons.meta | 8 + .../Editor/LiveLink/Icons/Connected@2x.png | Bin 0 -> 681 bytes .../LiveLink/Icons/Connected@2x.png.meta | 103 + .../LiveLink/Icons/ConnectionError@2x.png | Bin 0 -> 693 bytes .../Icons/ConnectionError@2x.png.meta | 103 + .../Editor/LiveLink/Icons/Disconnected@2x.png | Bin 0 -> 722 bytes .../LiveLink/Icons/Disconnected@2x.png.meta | 103 + .../Editor/LiveLink/Icons/LiveLink.png | Bin 0 -> 304 bytes .../Editor/LiveLink/Icons/LiveLink.png.meta | 91 + .../Editor/LiveLink/Icons/LiveLink@2x.png | Bin 0 -> 379 bytes .../LiveLink/Icons/LiveLink@2x.png.meta | 91 + .../Editor/LiveLink/Icons/LiveLinkActive.png | Bin 0 -> 231 bytes .../LiveLink/Icons/LiveLinkActive.png.meta | 91 + .../LiveLink/Icons/LiveLinkActive@2x.png | Bin 0 -> 263 bytes .../LiveLink/Icons/LiveLinkActive@2x.png.meta | 91 + .../LiveLink/Icons/LiveLinkReset@2x.png | Bin 0 -> 641 bytes .../LiveLink/Icons/LiveLinkReset@2x.png.meta | 91 + .../Editor/LiveLink/Icons/d_Connected@2x.png | Bin 0 -> 674 bytes .../LiveLink/Icons/d_Connected@2x.png.meta | 103 + .../LiveLink/Icons/d_ConnectionError@2x.png | Bin 0 -> 693 bytes .../Icons/d_ConnectionError@2x.png.meta | 103 + .../LiveLink/Icons/d_Disconnected@2x.png | Bin 0 -> 683 bytes .../LiveLink/Icons/d_Disconnected@2x.png.meta | 103 + .../Editor/LiveLink/Icons/d_LiveLink.png | Bin 0 -> 316 bytes .../Editor/LiveLink/Icons/d_LiveLink.png.meta | 91 + .../Editor/LiveLink/Icons/d_LiveLink@2x.png | Bin 0 -> 393 bytes .../LiveLink/Icons/d_LiveLink@2x.png.meta | 91 + .../LiveLink/Icons/d_LiveLinkActive.png | Bin 0 -> 232 bytes .../LiveLink/Icons/d_LiveLinkActive.png.meta | 91 + .../LiveLink/Icons/d_LiveLinkActive@2x.png | Bin 0 -> 264 bytes .../Icons/d_LiveLinkActive@2x.png.meta | 91 + .../LiveLink/Icons/d_LiveLinkReset@2x.png | Bin 0 -> 631 bytes .../Icons/d_LiveLinkReset@2x.png.meta | 91 + .../Editor/LiveLink/uss.meta | 8 + .../uss/LiveLinkConnectionsDropdown.uss | 103 + .../uss/LiveLinkConnectionsDropdown.uss.meta | 11 + .../uss/LiveLinkConnectionsDropdown_dark.uss | 44 + .../LiveLinkConnectionsDropdown_dark.uss.meta | 11 + .../uss/LiveLinkConnectionsDropdown_light.uss | 44 + ...LiveLinkConnectionsDropdown_light.uss.meta | 11 + .../LiveLink/uss/StartLiveLinkWindow.uss | 164 + .../LiveLink/uss/StartLiveLinkWindow.uss.meta | 11 + .../LiveLink/uss/StartLiveLinkWindow_dark.uss | 75 + .../uss/StartLiveLinkWindow_dark.uss.meta | 11 + .../uss/StartLiveLinkWindow_light.uss | 74 + .../uss/StartLiveLinkWindow_light.uss.meta | 11 + .../Editor/LiveLink/uxml.meta | 8 + ...ConnectionsDropdown.GroupItemTemplate.uxml | 9 + ...ctionsDropdown.GroupItemTemplate.uxml.meta | 10 + ...LinkConnectionsDropdown.GroupTemplate.uxml | 9 + ...onnectionsDropdown.GroupTemplate.uxml.meta | 10 + .../uxml/LiveLinkConnectionsDropdown.uxml | 13 + .../LiveLinkConnectionsDropdown.uxml.meta | 10 + ...rtLiveLinkWindow.ListViewItemTemplate.uxml | 7 + ...eLinkWindow.ListViewItemTemplate.uxml.meta | 10 + .../LiveLink/uxml/StartLiveLinkWindow.uxml | 34 + .../uxml/StartLiveLinkWindow.uxml.meta | 10 + .../LICENSE.md | 30 + .../LICENSE.md.meta | 7 + .../Unity.Burst.Tests.meta | 8 + .../Unity.Burst.Tests/BurstDelegateTest.cs | 73 + .../BurstDelegateTest.cs.meta | 3 + .../Unity.Burst.Tests/BurstSafetyTests.cs | 123 + .../BurstSafetyTests.cs.meta | 3 + .../Unity.Burst.Tests/BurstTests.cs | 228 + .../Unity.Burst.Tests/BurstTests.cs.meta | 12 + .../Unity.Burst.Tests.asmdef | 17 + .../Unity.Burst.Tests.asmdef.meta | 7 + .../Unity.Core.meta | 8 + .../Unity.Core/Hashes.meta | 8 + .../Unity.Core/Hashes/LICENSE-XXHASH | 21 + .../Unity.Core/Hashes/LICENSE-XXHASH.meta | 7 + .../Unity.Core/Hashes/XXHash.cs | 569 + .../Unity.Core/Hashes/XXHash.cs.meta | 11 + .../Unity.Core/TimeData.cs | 114 + .../Unity.Core/TimeData.cs.meta | 11 + .../Unity.Core/Unity.Core.asmref | 3 + .../Unity.Core/Unity.Core.asmref.meta | 7 + .../Unity.Entities.AutoCreation.Tests.meta | 8 + .../AutoCreateComponentSystemTests.cs | 181 + .../AutoCreateComponentSystemTests.cs.meta | 11 + .../Unity.Entities.AutoCreation.Tests.asmdef | 16 + ...ty.Entities.AutoCreation.Tests.asmdef.meta | 7 + .../Unity.Entities.BuildUtils.meta | 8 + .../MonoExtensions.cs | 296 + .../MonoExtensions.cs.meta | 11 + .../Unity.Entities.BuildUtils/TypeHash.cs | 224 + .../TypeHash.cs.meta | 11 + .../Unity.Entities.BuildUtils/TypeUtils.cs | 402 + .../TypeUtils.cs.meta | 11 + .../Unity.Entities.BuildUtils.asmdef | 16 + .../Unity.Entities.BuildUtils.asmdef.meta | 7 + .../Unity.Entities.CodeGen.Tests.meta | 8 + .../BlobAssetSafetyVerifier.meta | 8 + .../BlobAssetSafetyVerifierTests.cs | 162 + .../BlobAssetSafetyVerifierTests.cs.meta | 3 + .../CecilHelpersTests.cs | 53 + .../CecilHelpersTests.cs.meta | 11 + .../IntegrationTest.cs | 110 + .../IntegrationTest.cs.meta | 11 + .../LambdaJobDescriptionConstructionTests.cs | 384 + ...bdaJobDescriptionConstructionTests.cs.meta | 11 + .../LambdaJobs.meta | 8 + .../LambdaJobs/Infrastructure.meta | 8 + .../LambdaJobIntegrationTest.cs | 47 + .../LambdaJobIntegrationTest.cs.meta | 11 + .../Infrastructure/TestJobComponentSystem.cs | 12 + .../TestJobComponentSystem.cs.meta | 11 + .../LambdaJobs/Infrastructure/TestTypes.cs | 28 + .../Infrastructure/TestTypes.cs.meta | 11 + .../LambdaJobsLambdaJobsPostProcessorTests.cs | 1127 ++ ...daJobsLambdaJobsPostProcessorTests.cs.meta | 11 + .../LambdaJobsPostProcessorTestBase.cs | 204 + .../LambdaJobsPostProcessorTestBase.cs.meta | 11 + .../PropertyBags.meta | 8 + .../PropertyBags/Infrastructure.meta | 8 + .../PropertyBagIntegrationTest.cs | 39 + .../PropertyBagIntegrationTest.cs.meta | 11 + .../PropertyBags/Infrastructure/TestTypes.cs | 62 + .../Infrastructure/TestTypes.cs.meta | 11 + ...nity.Entities.CodeGen.Tests.TestTypes.meta | 8 + .../TestTypes.cs | 48 + .../TestTypes.cs.meta | 11 + ...ty.Entities.CodeGen.Tests.TestTypes.asmdef | 16 + ...tities.CodeGen.Tests.TestTypes.asmdef.meta | 7 + .../Unity.Entities.CodeGen.Tests.asmdef | 34 + .../Unity.Entities.CodeGen.Tests.asmdef.meta | 7 + .../Unity.Entities.CodeGen.meta | 8 + .../Unity.Entities.CodeGen/AssemblyInfo.cs | 3 + .../AssemblyInfo.cs.meta | 11 + .../BlobAssetSafety.meta | 3 + .../BlobAssetSafetyVerifier.cs | 181 + .../BlobAssetSafetyVerifier.cs.meta | 3 + .../CecilExtensionMethods.cs | 458 + .../CecilExtensionMethods.cs.meta | 11 + .../Unity.Entities.CodeGen/CecilHelpers.cs | 871 ++ .../CecilHelpers.cs.meta | 11 + .../EntitiesILPostProcessor.cs | 249 + .../EntitiesILPostProcessor.cs.meta | 11 + .../Unity.Entities.CodeGen/LambdaJobs.meta | 8 + .../LambdaJobs/EntitiesForEachAttributes.cs | 84 + .../EntitiesForEachAttributes.cs.meta | 11 + .../LambdaJobs/EntitiesForEachJobCreator.cs | 988 ++ .../EntitiesForEachJobCreator.cs.meta | 11 + .../InjectAndInitializeEntityQueryField.cs | 317 + ...njectAndInitializeEntityQueryField.cs.meta | 11 + .../LambdaJobDescriptionConstruction.cs | 419 + .../LambdaJobDescriptionConstruction.cs.meta | 11 + .../LambdaJobs/LambdaJobsPostProcessor.cs | 692 ++ .../LambdaJobsPostProcessor.cs.meta | 11 + ...LambdaParamaterValueProviderInformation.cs | 257 + ...aParamaterValueProviderInformation.cs.meta | 11 + .../LambdaParameterValueInformations.cs | 394 + .../LambdaParameterValueInformations.cs.meta | 11 + .../LambdaJobs/UserError.cs | 339 + .../LambdaJobs/UserError.cs.meta | 11 + .../Unity.Entities.CodeGen/ListExtensions.cs | 31 + .../ListExtensions.cs.meta | 11 + .../PostProcessException.cs | 66 + .../PostProcessException.cs.meta | 11 + .../Unity.Entities.CodeGen/PropertyBags.meta | 8 + .../PropertyBags/PropertyBagsPostProcessor.cs | 1045 ++ .../PropertyBagsPostProcessor.cs.meta | 11 + .../Unity.Entities.CodeGen.asmdef | 22 + .../Unity.Entities.CodeGen.asmdef.meta | 7 + .../Unity.Entities.Editor.Tests.meta | 8 + .../AssemblyInfo.cs | 3 + .../AssemblyInfo.cs.meta | 11 + .../ComponentTypeFilterUITests.cs | 47 + .../ComponentTypeFilterUITests.cs.meta | 11 + .../EntityArrayListAdapterTests.cs | 79 + .../EntityArrayListAdapterTests.cs.meta | 11 + .../EntityDebuggerTests.cs | 192 + .../EntityDebuggerTests.cs.meta | 11 + .../EntityQueryGUITests.cs | 76 + .../EntityQueryGUITests.cs.meta | 11 + .../ListViewTests.cs | 193 + .../ListViewTests.cs.meta | 11 + .../Unity.Entities.Editor.Tests/LiveLink.meta | 8 + .../LiveLink/LiveLinkDropdownTests.cs | 212 + .../LiveLink/LiveLinkDropdownTests.cs.meta | 11 + .../LiveLink/LiveLinkToolbarTests.cs | 15 + .../LiveLink/LiveLinkToolbarTests.cs.meta | 11 + .../LiveLink/StartLiveLinkWindowTests.cs | 158 + .../LiveLink/StartLiveLinkWindowTests.cs.meta | 3 + .../LiveLink/UIElementTestHelpers.cs | 29 + .../LiveLink/UIElementTestHelpers.cs.meta | 3 + .../Unity.Entities.Editor.Tests.asmdef | 21 + .../Unity.Entities.Editor.Tests.asmdef.meta | 7 + .../Unity.Entities.Editor.meta | 8 + .../Unity.Entities.Editor/AssemblyInfo.cs | 5 + .../AssemblyInfo.cs.meta | 11 + .../Unity.Entities.Editor/CommonGUI.meta | 8 + .../CommonGUI/EntityQueryGUI.cs | 89 + .../CommonGUI/EntityQueryGUI.cs.meta | 11 + .../CommonGUI/EntityQueryGUIControl.cs | 122 + .../CommonGUI/EntityQueryGUIControl.cs.meta | 11 + .../CommonGUI/GUIHelpers.cs | 25 + .../CommonGUI/GUIHelpers.cs.meta | 11 + .../CommonGUI/GUIStyleAsset.cs | 12 + .../CommonGUI/GUIStyleAsset.cs.meta | 11 + .../CommonGUI/RepaintLimiter.cs | 37 + .../CommonGUI/RepaintLimiter.cs.meta | 11 + .../CommonGUI/SystemInclusionList.cs | 70 + .../CommonGUI/SystemInclusionList.cs.meta | 11 + .../ComponentSystemProcessing.cs | 103 + .../ComponentSystemProcessing.cs.meta | 11 + .../Unity.Entities.Editor/Decompiler.cs | 123 + .../Unity.Entities.Editor/Decompiler.cs.meta | 11 + .../Unity.Entities.Editor/Editors.meta | 8 + .../Editors/ComponentDataProxyBaseEditor.cs | 107 + .../ComponentDataProxyBaseEditor.cs.meta | 11 + .../Editors/DynamicBufferProxyBaseEditor.cs | 129 + .../DynamicBufferProxyBaseEditor.cs.meta | 11 + .../Editors/GameObjectEntityEditor.cs | 25 + .../Editors/GameObjectEntityEditor.cs.meta | 11 + .../Unity.Entities.Editor/EntityDebugger.meta | 8 + .../EntityDebugger/ChunkInfoListView.cs | 378 + .../EntityDebugger/ChunkInfoListView.cs.meta | 11 + .../EntityDebugger/ComponentTypeChooser.cs | 57 + .../ComponentTypeChooser.cs.meta | 11 + .../EntityDebugger/ComponentTypeFilterUI.cs | 160 + .../ComponentTypeFilterUI.cs.meta | 11 + .../EntityDebugger/ComponentTypeListView.cs | 83 + .../ComponentTypeListView.cs.meta | 11 + .../EntityDebugger/EntityArrayListAdapter.cs | 210 + .../EntityArrayListAdapter.cs.meta | 11 + .../EntityDebugger/EntityDebugger.cs | 583 + .../EntityDebugger/EntityDebugger.cs.meta | 11 + .../EntityDebugger/EntityDebuggerStyles.cs | 32 + .../EntityDebuggerStyles.cs.meta | 11 + .../EntityDebugger/EntityListQuery.cs | 24 + .../EntityDebugger/EntityListQuery.cs.meta | 11 + .../EntityDebugger/EntityListView.cs | 221 + .../EntityDebugger/EntityListView.cs.meta | 11 + .../EntityDebugger/EntityQueryListView.cs | 292 + .../EntityQueryListView.cs.meta | 11 + .../EntityDebugger/SystemListView.cs | 563 + .../EntityDebugger/SystemListView.cs.meta | 11 + .../EntityDebugger/WorldPopup.cs | 90 + .../EntityDebugger/WorldPopup.cs.meta | 11 + .../EntityInspector.meta | 8 + .../EntityInspector/Adapters.meta | 8 + .../EntityInspector/Adapters/IMGUIAdapter.cs | 23 + .../Adapters/IMGUIAdapter.cs.meta | 11 + .../Adapters/IMGUIMathematicsAdapter.cs | 89 + .../Adapters/IMGUIMathematicsAdapter.cs.meta | 11 + .../Adapters/IMGUIPrimitivesAdapter.cs | 98 + .../Adapters/IMGUIPrimitivesAdapter.cs.meta | 11 + .../EntityInspector/EntityIMGUIVisitor.cs | 229 + .../EntityIMGUIVisitor.cs.meta | 11 + .../EntityInspector/EntitySelectionProxy.cs | 42 + .../EntitySelectionProxy.cs.meta | 11 + .../EntitySelectionProxyEditor.cs | 121 + .../EntitySelectionProxyEditor.cs.meta | 11 + .../ExtraTypesProvider.cs | 114 + .../ExtraTypesProvider.cs.meta | 11 + .../Unity.Entities.Editor/LiveLink.meta | 8 + .../Unity.Entities.Editor/LiveLink/Icons.cs | 82 + .../LiveLink/Icons.cs.meta | 11 + .../LiveLink/LiveLinkCommands.cs | 52 + .../LiveLink/LiveLinkCommands.cs.meta | 11 + .../LiveLink/LiveLinkConnectionsDropdown.cs | 464 + .../LiveLinkConnectionsDropdown.cs.meta | 11 + .../LiveLink/LiveLinkStyles.cs | 13 + .../LiveLink/LiveLinkStyles.cs.meta | 11 + .../LiveLink/LiveLinkToolbar.cs | 96 + .../LiveLink/LiveLinkToolbar.cs.meta | 11 + .../LiveLink/StartLiveLinkWindow.cs | 630 + .../LiveLink/StartLiveLinkWindow.cs.meta | 11 + .../LiveLink/UIElementHelpers.cs | 65 + .../LiveLink/UIElementHelpers.cs.meta | 11 + .../Unity.Entities.Editor/Mode.meta | 8 + .../Unity.Entities.Editor/Mode/default.mode | 8 + .../Mode/default.mode.meta | 7 + .../PostprocessedILInspector.meta | 8 + .../.ilspyfolder/ilspycmd.exe | Bin 0 -> 2818048 bytes .../PostprocessedILWindow.cs | 446 + .../PostprocessedILWindow.cs.meta | 11 + .../TypeDefinitionExtensions.cs | 26 + .../TypeDefinitionExtensions.cs.meta | 11 + .../PropertyDrawers.meta | 8 + .../PropertyDrawers/LayerFieldDrawer.cs | 33 + .../PropertyDrawers/LayerFieldDrawer.cs.meta | 11 + .../WrappedComponentDataDrawer.cs | 31 + .../WrappedComponentDataDrawer.cs.meta | 11 + .../ScriptTemplates.meta | 8 + .../ScriptTemplates/AuthoringComponent.txt | 36 + .../AuthoringComponent.txt.meta | 7 + .../ScriptTemplates/RunTimeComponent.txt | 24 + .../ScriptTemplates/RunTimeComponent.txt.meta | 7 + .../ScriptTemplates/ScriptTemplates.cs | 37 + .../ScriptTemplates/ScriptTemplates.cs.meta | 11 + .../ScriptTemplates/System.txt | 57 + .../ScriptTemplates/System.txt.meta | 7 + .../Unity.Entities.Editor/Styles.meta | 8 + .../Styles/EntityDebuggerStyles.asset | 283 + .../Styles/EntityDebuggerStyles.asset.meta | 8 + .../Unity.Entities.Editor/Styles/ReadOnly.png | Bin 0 -> 448 bytes .../Styles/ReadOnly.png.meta | 106 + .../Styles/ReadOnly@2x.png | Bin 0 -> 881 bytes .../Styles/ReadOnly@2x.png.meta | 106 + .../Styles/ReadWrite.png | Bin 0 -> 509 bytes .../Styles/ReadWrite.png.meta | 106 + .../Styles/ReadWrite@2x.png | Bin 0 -> 960 bytes .../Styles/ReadWrite@2x.png.meta | 106 + .../Unity.Entities.Editor/Styles/Required.png | Bin 0 -> 353 bytes .../Styles/Required.png.meta | 106 + .../Styles/Required@2x.png | Bin 0 -> 681 bytes .../Styles/Required@2x.png.meta | 106 + .../Styles/Subtractive.png | Bin 0 -> 400 bytes .../Styles/Subtractive.png.meta | 106 + .../Styles/Subtractive@2x.png | Bin 0 -> 768 bytes .../Styles/Subtractive@2x.png.meta | 106 + .../Unity.Entities.Editor.asmdef | 31 + .../Unity.Entities.Editor.asmdef.meta | 7 + .../Unity.Entities.Hybrid.CodeGen.Tests.meta | 8 + .../AuthoringComponent.meta | 8 + .../AuthoringComponentIntegrationTest.cs | 30 + .../AuthoringComponentIntegrationTest.cs.meta | 11 + .../IBufferElementDataCompileTimeTests.cs | 66 + ...IBufferElementDataCompileTimeTests.cs.meta | 11 + ...Unity.Entities.Hybrid.CodeGen.Tests.asmdef | 35 + ....Entities.Hybrid.CodeGen.Tests.asmdef.meta | 7 + .../Unity.Entities.Hybrid.CodeGen.meta | 8 + .../AuthoringComponent.meta | 8 + ...mponentPostProcessor_IBufferElementData.cs | 107 + ...ntPostProcessor_IBufferElementData.cs.meta | 11 + ...ngComponentPostProcessor_IComponentData.cs | 335 + ...ponentPostProcessor_IComponentData.cs.meta | 11 + .../AuthoringComponentPostProcessor_Shared.cs | 66 + ...oringComponentPostProcessor_Shared.cs.meta | 11 + .../Unity.Entities.Hybrid.CodeGen.asmdef | 27 + .../Unity.Entities.Hybrid.CodeGen.asmdef.meta | 7 + .../Unity.Entities.Hybrid.EndToEnd.Tests.meta | 8 + .../TestUtilities.cs | 33 + .../TestUtilities.cs.meta | 11 + ...nity.Entities.Hybrid.EndToEnd.Tests.asmdef | 19 + ...Entities.Hybrid.EndToEnd.Tests.asmdef.meta | 7 + .../Unity.Entities.Hybrid.Tests.meta | 8 + .../AssemblyInfo.cs | 5 + .../AssemblyInfo.cs.meta | 11 + ...ataProxy_EntityManager_IntegrationTests.cs | 187 + ...oxy_EntityManager_IntegrationTests.cs.meta | 11 + ...ponentDataProxy_Prefab_IntegrationTests.cs | 62 + ...tDataProxy_Prefab_IntegrationTests.cs.meta | 11 + .../ComponentDataProxy_UnitTests.cs | 80 + .../ComponentDataProxy_UnitTests.cs.meta | 11 + ...ComponentGroupTransformAccessArrayTests.cs | 113 + ...nentGroupTransformAccessArrayTests.cs.meta | 11 + .../Conversion.meta | 8 + .../Conversion/BlobAssetStoreTests.cs | 301 + .../Conversion/BlobAssetStoreTests.cs.meta | 11 + .../Conversion/ConversionHybridTests.cs | 58 + .../Conversion/ConversionHybridTests.cs.meta | 11 + .../Conversion/ConversionJournalDataTests.cs | 262 + .../ConversionJournalDataTests.cs.meta | 11 + .../ConversionMappingSystemJournalingTests.cs | 58 + ...ersionMappingSystemJournalingTests.cs.meta | 11 + .../Conversion/ConversionMappingTests.cs | 388 + .../Conversion/ConversionMappingTests.cs.meta | 11 + .../Conversion/ConversionTestFixtureBase.cs | 122 + .../ConversionTestFixtureBase.cs.meta | 11 + .../Conversion/ConversionTests.cs | 266 + .../Conversion/ConversionTests.cs.meta | 11 + .../ConvertGameObjectToEntityTests.cs | 233 + .../ConvertGameObjectToEntityTests.cs.meta | 11 + .../GameObjectConversionSettingsTests.cs | 70 + .../GameObjectConversionSettingsTests.cs.meta | 11 + .../Conversion/JournalingUnityLoggerTests.cs | 152 + .../JournalingUnityLoggerTests.cs.meta | 11 + .../Conversion/MultiListTests.cs | 362 + .../Conversion/MultiListTests.cs.meta | 11 + .../Conversion/Prefab.prefab | 60 + .../Conversion/Prefab.prefab.meta | 7 + .../Conversion/Prefab_Hierarchy.prefab | 119 + .../Conversion/Prefab_Hierarchy.prefab.meta | 7 + .../Conversion/Prefab_MissingMB.prefab | 45 + .../Conversion/Prefab_MissingMB.prefab.meta | 7 + .../Conversion/Prefab_Reference_Prefab.prefab | 74 + .../Prefab_Reference_Prefab.prefab.meta | 7 + .../Conversion/Prefab_Reference_Self.prefab | 74 + .../Prefab_Reference_Self.prefab.meta | 7 + .../Prefab_With_ComponentDataProxy.prefab | 60 + ...Prefab_With_ComponentDataProxy.prefab.meta | 7 + .../Prefab_With_DynamicBufferDataProxy.prefab | 59 + ...ab_With_DynamicBufferDataProxy.prefab.meta | 7 + ...refab_With_SharedComponentDataProxy.prefab | 60 + ..._With_SharedComponentDataProxy.prefab.meta | 7 + .../Conversion/SceneConversionTests.cs | 138 + .../Conversion/SceneConversionTests.cs.meta | 11 + .../Conversion/UnityEngineExtensionsTests.cs | 83 + .../UnityEngineExtensionsTests.cs.meta | 11 + .../DefaultWorldInitializationTests.cs | 34 + .../DefaultWorldInitializationTests.cs.meta | 11 + .../EntityQueryWithComponentTests.cs | 40 + .../EntityQueryWithComponentTests.cs.meta | 3 + ...ctEntity_EntityManager_IntegrationTests.cs | 62 + ...ity_EntityManager_IntegrationTests.cs.meta | 11 + .../GameObjectEntity_UnitTests.cs | 47 + .../GameObjectEntity_UnitTests.cs.meta | 11 + .../Unity.Entities.Hybrid.Tests/Runtime.meta | 8 + .../Runtime/EntityManagerTests.cs | 59 + .../Runtime/EntityManagerTests.cs.meta | 11 + .../Runtime/GameObjectEntityTests.cs | 88 + .../Runtime/GameObjectEntityTests.cs.meta | 13 + .../Runtime/InstantiateHybridTests.cs | 66 + .../Runtime/InstantiateHybridTests.cs.meta | 11 + .../Runtime/MoveEntitiesFromHybridTests.cs | 145 + .../MoveEntitiesFromHybridTests.cs.meta | 11 + .../Runtime/SharedComponentSerializeTests.cs | 135 + .../SharedComponentSerializeTests.cs.meta | 11 + .../SharedComponentReferenceTests.cs | 97 + .../SharedComponentReferenceTests.cs.meta | 11 + .../TypeUtility_UnitTests.cs | 33 + .../TypeUtility_UnitTests.cs.meta | 11 + .../Unity.Entities.Hybrid.Tests.asmdef | 31 + .../Unity.Entities.Hybrid.Tests.asmdef.meta | 7 + .../WorldTimeTests.cs | 39 + .../WorldTimeTests.cs.meta | 11 + .../Unity.Entities.Hybrid.meta | 8 + .../Unity.Entities.Hybrid/AssemblyInfo.cs | 16 + .../AssemblyInfo.cs.meta | 11 + .../Unity.Entities.Hybrid/Assets.meta | 8 + .../Assets/AndroidHybrid.buildpipeline | 7 + .../Assets/AndroidHybrid.buildpipeline.meta | 10 + .../Assets/Hybrid.buildpipeline | 11 + .../Assets/Hybrid.buildpipeline.meta | 10 + .../Assets/HybridLiveLink.buildpipeline | 10 + .../Assets/HybridLiveLink.buildpipeline.meta | 10 + .../Assets/OSXHybrid.buildpipeline | 7 + .../Assets/OSXHybrid.buildpipeline.meta | 10 + .../Assets/OSXHybridLiveLink.buildpipeline | 7 + .../OSXHybridLiveLink.buildpipeline.meta | 10 + .../Assets/WindowsHybrid.buildpipeline | 7 + .../Assets/WindowsHybrid.buildpipeline.meta | 10 + .../WindowsHybridLiveLink.buildpipeline | 7 + .../WindowsHybridLiveLink.buildpipeline.meta | 10 + .../AuthoringComponent.cs | 28 + .../AuthoringComponent.cs.meta | 11 + .../BufferElementDataAuthoringComponent.cs | 36 + ...ufferElementDataAuthoringComponent.cs.meta | 11 + .../CompanionGameObjectUpdateSystem.cs | 37 + .../CompanionGameObjectUpdateSystem.cs.meta | 11 + .../Unity.Entities.Hybrid/Components.meta | 8 + .../Components/CompanionLink.cs | 32 + .../Components/CompanionLink.cs.meta | 11 + .../Components/ComponentDataProxy.cs | 64 + .../Components/ComponentDataProxy.cs.meta | 11 + .../Components/ComponentDataProxyBase.cs | 100 + .../Components/ComponentDataProxyBase.cs.meta | 11 + .../Components/DynamicBufferProxy.cs | 73 + .../Components/DynamicBufferProxy.cs.meta | 11 + .../Components/GameObjectEntity.cs | 190 + .../Components/GameObjectEntity.cs.meta | 13 + .../Components/SharedComponentDataProxy.cs | 61 + .../SharedComponentDataProxy.cs.meta | 11 + .../Unity.Entities.Hybrid/ConvertToEntity.cs | 206 + .../ConvertToEntity.cs.meta | 11 + .../Unity.Entities.Hybrid/EditorRenderData.cs | 32 + .../EditorRenderData.cs.meta | 11 + .../EntityManagerExtensions.cs | 50 + .../EntityManagerExtensions.cs.meta | 11 + .../GameObjectConversion.meta | 8 + .../BlobAssetComputationContext.cs | 173 + .../BlobAssetComputationContext.cs.meta | 11 + .../GameObjectConversion/BlobAssetStore.cs | 312 + .../BlobAssetStore.cs.meta | 11 + .../ConversionJournalData.cs | 297 + .../ConversionJournalData.cs.meta | 11 + .../ConversionSystemFilterSettings.cs | 97 + .../ConversionSystemFilterSettings.cs.meta | 11 + .../ConvertGameObjectToEntitySystem.cs | 80 + .../ConvertGameObjectToEntitySystem.cs.meta | 3 + .../GameObjectConversionMappingSystem.cs | 881 ++ .../GameObjectConversionMappingSystem.cs.meta | 11 + .../GameObjectConversionSettings.cs | 137 + .../GameObjectConversionSettings.cs.meta | 11 + .../GameObjectConversionSystem.cs | 213 + .../GameObjectConversionSystem.cs.meta | 11 + .../GameObjectConversionUtility.cs | 360 + .../GameObjectConversionUtility.cs.meta | 11 + .../GameObjectConversion/JournalDataDebug.cs | 82 + .../JournalDataDebug.cs.meta | 11 + .../JournalingUnityLogger.cs | 53 + .../JournalingUnityLogger.cs.meta | 11 + .../GameObjectConversion/MultiList.cs | 328 + .../GameObjectConversion/MultiList.cs.meta | 11 + .../SceneBoundingVolume.cs | 9 + .../SceneBoundingVolume.cs.meta | 11 + .../UnityEngineExtensions.cs | 145 + .../UnityEngineExtensions.cs.meta | 11 + .../Unity.Entities.Hybrid/Injection.meta | 8 + .../Injection/AutomaticWorldBootstrap.cs | 19 + .../Injection/AutomaticWorldBootstrap.cs.meta | 11 + .../Injection/CompanionGameObject.cs | 77 + .../Injection/CompanionGameObject.cs.meta | 11 + .../Injection/DefaultWorldInitialization.cs | 379 + .../DefaultWorldInitialization.cs.meta | 11 + .../DefaultWorldInitializationProxy.cs | 31 + .../DefaultWorldInitializationProxy.cs.meta | 11 + .../Unity.Entities.Hybrid/Iterators.meta | 8 + .../Iterators/ComponentArray.cs | 33 + .../Iterators/ComponentArray.cs.meta | 11 + .../Iterators/TransformAccessArrayIterator.cs | 49 + .../TransformAccessArrayIterator.cs.meta | 11 + .../JetBrains.Annotations.cs | 1068 ++ .../JetBrains.Annotations.cs.meta | 11 + .../LayerFieldAttribute.cs | 11 + .../LayerFieldAttribute.cs.meta | 11 + .../ReferencedUnityObjects.cs | 9 + .../ReferencedUnityObjects.cs.meta | 11 + .../ResourceCatalogData.cs | 87 + .../ResourceCatalogData.cs.meta | 11 + .../SceneSectionComponent.cs | 10 + .../SceneSectionComponent.cs.meta | 11 + .../SceneSectionProxy.cs | 7 + .../SceneSectionProxy.cs.meta | 11 + .../SerializeUtilityHybrid.cs | 62 + .../SerializeUtilityHybrid.cs.meta | 11 + .../StaticOptimizeEntity.cs | 16 + .../StaticOptimizeEntity.cs.meta | 11 + .../StopConvertToEntity.cs | 7 + .../StopConvertToEntity.cs.meta | 11 + .../Unity.Entities.Hybrid/TypeUtility.cs | 53 + .../Unity.Entities.Hybrid/TypeUtility.cs.meta | 11 + .../Unity.Entities.Hybrid.asmdef | 36 + .../Unity.Entities.Hybrid.asmdef.meta | 7 + .../UpdateWorldTimeSystem.cs | 19 + .../UpdateWorldTimeSystem.cs.meta | 11 + .../Unity.Entities.PerformanceTests.meta | 8 + ...mponentJobSafetyManagerPerformanceTests.cs | 40 + ...ntJobSafetyManagerPerformanceTests.cs.meta | 11 + .../Unity.Entities.PerformanceTests/Diff.meta | 8 + .../EntityDifferPerformanceTestFixture.cs | 66 + ...EntityDifferPerformanceTestFixture.cs.meta | 11 + .../Diff/EntityDifferPerformanceTests.cs | 166 + .../Diff/EntityDifferPerformanceTests.cs.meta | 11 + .../DynamicBufferPerformanceTests.cs | 289 + .../DynamicBufferPerformanceTests.cs.meta | 11 + .../EntityCommandBufferPerformanceTests.cs | 169 + ...ntityCommandBufferPerformanceTests.cs.meta | 11 + .../EntityManagerPerformanceTests.cs | 1294 ++ .../EntityManagerPerformanceTests.cs.meta | 11 + .../EntityPerformanceTestFixture.cs | 34 + .../EntityPerformanceTestFixture.cs.meta | 11 + .../EntityQueryPerformanceTests.cs | 171 + .../EntityQueryPerformanceTests.cs.meta | 11 + .../ForEachPerformanceTests.cs | 134 + .../ForEachPerformanceTests.cs.meta | 11 + .../InstantiatePerformanceTests.cs | 128 + .../InstantiatePerformanceTests.cs.meta | 11 + .../JobForEachPrefilteringPerformanceTests.cs | 211 + ...orEachPrefilteringPerformanceTests.cs.meta | 11 + .../LambdaJobsPerformanceTests.cs | 284 + .../LambdaJobsPerformanceTests.cs.meta | 11 + .../NativeArrayIterationPerformanceTests.cs | 141 + ...tiveArrayIterationPerformanceTests.cs.meta | 11 + .../SharedComponentPerformanceTests.cs | 93 + .../SharedComponentPerformanceTests.cs.meta | 11 + .../Unity.Entities.PerformanceTests.asmdef | 28 + ...nity.Entities.PerformanceTests.asmdef.meta | 7 + ....Entities.Properties.PerformanceTests.meta | 8 + .../EntityContainerPerformanceTests.cs | 47 + .../EntityContainerPerformanceTests.cs.meta | 11 + ...ntities.Properties.PerformanceTests.asmdef | 27 + ...es.Properties.PerformanceTests.asmdef.meta | 7 + .../Unity.Entities.Properties.Tests.meta | 8 + .../EntityContainerTests.cs | 66 + .../EntityContainerTests.cs.meta | 11 + .../TestComponents.cs | 94 + .../TestComponents.cs.meta | 11 + .../Unity.Entities.Properties.Tests.asmdef | 25 + ...nity.Entities.Properties.Tests.asmdef.meta | 7 + .../Unity.Entities.Properties.meta | 8 + .../DynamicBufferContainer.cs | 124 + .../DynamicBufferContainer.cs.meta | 11 + .../EntityContainer.cs | 342 + .../EntityContainer.cs.meta | 3 + .../Unity.Entities.Properties.asmdef | 19 + .../Unity.Entities.Properties.asmdef.meta | 7 + .../Unity.Entities.StaticTypeRegistry.meta | 8 + .../AssemblyInfo.cs | 4 + .../AssemblyInfo.cs.meta | 11 + .../StaticTypeRegistry.cs | 66 + .../StaticTypeRegistry.cs.meta | 11 + .../Unity.Entities.StaticTypeRegistry.asmdef | 9 + ...ty.Entities.StaticTypeRegistry.asmdef.meta | 7 + .../Unity.Entities.TestComponents.meta | 8 + .../EntityRefTestDataAuthoring.cs | 50 + .../EntityRefTestDataAuthoring.cs.meta | 11 + .../JournalTestAuthoring.cs | 28 + .../JournalTestAuthoring.cs.meta | 11 + .../MockDataProxy.cs | 21 + .../MockDataProxy.cs.meta | 11 + .../MockDynamicBufferDataProxy.cs | 17 + .../MockDynamicBufferDataProxy.cs.meta | 11 + .../MockSharedDataProxy.cs | 15 + .../MockSharedDataProxy.cs.meta | 11 + .../MockSharedDisallowMultipleProxy.cs | 17 + .../MockSharedDisallowMultipleProxy.cs.meta | 11 + .../Unity.TestComponents.asmdef | 16 + .../Unity.TestComponents.asmdef.meta | 7 + .../Unity.Entities.Tests.meta | 8 + .../ArchetypeChunkArrayTests.cs | 651 + .../ArchetypeChunkArrayTests.cs.meta | 11 + .../Unity.Entities.Tests/AssemblyInfo.cs | 5 + .../Unity.Entities.Tests/AssemblyInfo.cs.meta | 11 + .../BlobificationTests.cs | 507 + .../BlobificationTests.cs.meta | 11 + .../BufferElementDataInstantiateTests.cs | 148 + .../BufferElementDataInstantiateTests.cs.meta | 11 + ...rElementDataSystemStateInstantiateTests.cs | 19 + ...entDataSystemStateInstantiateTests.cs.meta | 11 + .../BufferElementDataSystemStateTests.cs | 859 ++ .../BufferElementDataSystemStateTests.cs.meta | 11 + .../BufferElementDataTests.cs | 894 ++ .../BufferElementDataTests.cs.meta | 11 + .../ChangeVersionTests.cs | 160 + .../ChangeVersionTests.cs.meta | 11 + .../ChunkChangeVersionTests.cs | 325 + .../ChunkChangeVersionTests.cs.meta | 11 + .../ChunkComponentTests.cs | 438 + .../ChunkComponentTests.cs.meta | 11 + .../ChunkDataUtilityTests.cs | 56 + .../ChunkDataUtilityTests.cs.meta | 11 + .../ComponentOrderVersionTests.cs | 245 + .../ComponentOrderVersionTests.cs.meta | 11 + .../ComponentSystemGroupTests.cs | 677 + .../ComponentSystemGroupTests.cs.meta | 11 + .../ComponentSystemStartStopRunningTests.cs | 334 + ...mponentSystemStartStopRunningTests.cs.meta | 11 + .../ComponentSystemTests.cs | 460 + .../ComponentSystemTests.cs.meta | 3 + .../CreateAndDestroyTests.cs | 751 ++ .../CreateAndDestroyTests.cs.meta | 13 + .../Unity.Entities.Tests/Diff.meta | 8 + .../Diff/CopyAndReplaceTests.cs | 88 + .../Diff/CopyAndReplaceTests.cs.meta | 11 + .../Diff/EntityDifferTestFixture.cs | 148 + .../Diff/EntityDifferTestFixture.cs.meta | 11 + .../Diff/EntityDifferTests.cs | 945 ++ .../Diff/EntityDifferTests.cs.meta | 11 + .../Diff/EntityGuidTests.cs | 61 + .../Diff/EntityGuidTests.cs.meta | 11 + .../Diff/EntityPatcherTests.cs | 853 ++ .../Diff/EntityPatcherTests.cs.meta | 11 + .../Diff/HierarchyIntegrationTest.cs | 158 + .../Diff/HierarchyIntegrationTest.cs.meta | 11 + .../DisableComponentTests.cs | 131 + .../DisableComponentTests.cs.meta | 11 + .../DynamicBufferTests.cs | 224 + .../DynamicBufferTests.cs.meta | 11 + .../ECBChainPriorityQueueTests.cs | 60 + .../ECBChainPriorityQueueTests.cs.meta | 11 + .../Unity.Entities.Tests/ECSTestsFixture.cs | 200 + .../ECSTestsFixture.cs.meta | 13 + .../Unity.Entities.Tests/EntitiesAssert.meta | 8 + .../EntitiesAssert/DebugEntity.cs | 170 + .../EntitiesAssert/DebugEntity.cs.meta | 11 + .../EntitiesAssert/DebugEntityTests.cs | 196 + .../EntitiesAssert/DebugEntityTests.cs.meta | 11 + .../EntitiesAssert/EntitiesAssert.cs | 342 + .../EntitiesAssert/EntitiesAssert.cs.meta | 11 + .../EntitiesAssert/EntitiesAssertTests.cs | 239 + .../EntitiesAssertTests.cs.meta | 11 + .../EntityArchetypeQueryTests.cs | 112 + .../EntityArchetypeQueryTests.cs.meta | 11 + .../EntityCommandBufferTests.cs | 2575 ++++ .../EntityCommandBufferTests.cs.meta | 11 + .../EntityManagerBugTests.cs | 217 + .../EntityManagerBugTests.cs.meta | 11 + ...ityManagerComponentGroupOperationsTests.cs | 441 + ...nagerComponentGroupOperationsTests.cs.meta | 11 + .../EntityManagerPrefabTests.cs | 243 + .../EntityManagerPrefabTests.cs.meta | 11 + .../EntityManagerTests.cs | 816 ++ .../EntityManagerTests.cs.meta | 11 + .../EntityQueryBuilderMemoryTests.cs | 78 + .../EntityQueryBuilderMemoryTests.cs.meta | 11 + .../EntityQueryBuilderTests.cs | 417 + .../EntityQueryBuilderTests.cs.meta | 11 + .../EntityQueryCacheTests.cs | 225 + .../EntityQueryCacheTests.cs.meta | 11 + .../Unity.Entities.Tests/EntityQueryDelta.cs | 753 ++ .../EntityQueryDelta.cs.meta | 11 + .../EntityQuerySyncChangeFilterTypesTests.cs | 156 + ...ityQuerySyncChangeFilterTypesTests.cs.meta | 11 + .../Unity.Entities.Tests/EntityQueryTests.cs | 954 ++ .../EntityQueryTests.cs.meta | 11 + .../EntityRemapUtilityTests.cs | 142 + .../EntityRemapUtilityTests.cs.meta | 11 + .../EntityTransactionTests.cs | 242 + .../EntityTransactionTests.cs.meta | 13 + .../Unity.Entities.Tests/FastEqualityTests.cs | 414 + .../FastEqualityTests.cs.meta | 11 + .../Unity.Entities.Tests/ForEach.meta | 8 + .../ForEach/ForEachBasicMemoryTests.cs | 41 + .../ForEach/ForEachBasicMemoryTests.cs.meta | 11 + .../ForEach/ForEachDelegateMemoryTests.gen.cs | 729 ++ .../ForEachDelegateMemoryTests.gen.cs.meta | 11 + .../ForEach/ForEachDelegateMemoryTests.tt | 214 + .../ForEachDelegateMemoryTests.tt.meta | 7 + .../ForEach/ForEachGeneralTests.cs | 519 + .../ForEach/ForEachGeneralTests.cs.meta | 11 + .../ForEach/ForEachMemoryTestFixtureBase.cs | 52 + .../ForEachMemoryTestFixtureBase.cs.meta | 11 + .../ForEach/MutableForEachTests.cs | 556 + .../ForEach/MutableForEachTests.cs.meta | 11 + .../Unity.Entities.Tests/ForEachCodegen.meta | 8 + .../ForEachCodegen/ChunkForEachTests.cs | 76 + .../ForEachCodegen/ChunkForEachTests.cs.meta | 11 + .../ForEachCodegen/ForEachTests.cs | 708 ++ .../ForEachCodegen/ForEachTests.cs.meta | 11 + .../ForEachWithStructuralChangesTests.cs | 701 ++ .../ForEachWithStructuralChangesTests.cs.meta | 11 + .../ForEachCodegen/SimpleJobTests.cs | 52 + .../ForEachCodegen/SimpleJobTests.cs.meta | 11 + .../Unity.Entities.Tests/IJobChunkTests.cs | 368 + .../IJobChunkTests.cs.meta | 11 + .../IJobForEachCombinationsTests.cs | 667 + .../IJobForEachCombinationsTests.cs.meta | 11 + .../Unity.Entities.Tests/IJobForEachTests.cs | 395 + .../IJobForEachTests.cs.meta | 11 + .../Unity.Entities.Tests/IterationTests.cs | 565 + .../IterationTests.cs.meta | 3 + .../Unity.Entities.Tests/JobBasicTests.cs | 675 + .../JobBasicTests.cs.meta | 11 + .../JobComponentSystemDependencyTests.cs | 322 + .../JobComponentSystemDependencyTests.cs.meta | 3 + .../Unity.Entities.Tests/JobSafetyTests.cs | 432 + .../JobSafetyTests.cs.meta | 13 + .../MoveEntitiesFromTests.cs | 740 ++ .../MoveEntitiesFromTests.cs.meta | 11 + .../NativeArraySharedValuesTests.cs | 174 + .../NativeArraySharedValuesTests.cs.meta | 11 + .../PrefabComponentTests.cs | 132 + .../PrefabComponentTests.cs.meta | 11 + .../Unity.Entities.Tests/SafetyTests.cs | 188 + .../Unity.Entities.Tests/SafetyTests.cs.meta | 13 + .../Unity.Entities.Tests/Serialization.meta | 8 + .../Serialization/SerializeTests.cs | 1641 +++ .../Serialization/SerializeTests.cs.meta | 11 + .../Serialization/WorldTest.yaml | 141 + .../Serialization/WorldTest.yaml.meta | 7 + .../SharedComponentDataTests.cs | 606 + .../SharedComponentDataTests.cs.meta | 13 + .../Unity.Entities.Tests/SingletonTests.cs | 99 + .../SingletonTests.cs.meta | 11 + .../Unity.Entities.Tests/SizeTests.cs | 142 + .../Unity.Entities.Tests/SizeTests.cs.meta | 11 + .../Unity.Entities.Tests/StandaloneFixme.cs | 18 + .../StandaloneFixme.cs.meta | 11 + .../SystemBaseDependencyTests.cs | 349 + .../SystemBaseDependencyTests.cs.meta | 11 + .../SystemStateBufferElementTests.cs | 350 + .../SystemStateBufferElementTests.cs.meta | 11 + .../SystemStateComponentTests.cs | 376 + .../SystemStateComponentTests.cs.meta | 11 + .../Unity.Entities.Tests/TestCaseGeneric.cs | 37 + .../TestCaseGeneric.cs.meta | 11 + .../TestComponentSystems.cs | 22 + .../TestComponentSystems.cs.meta | 11 + .../Unity.Entities.Tests/TestComponents.cs | 406 + .../TestComponents.cs.meta | 13 + .../TypeIndexOrderTests.cs | 234 + .../TypeIndexOrderTests.cs.meta | 11 + .../Unity.Entities.Tests/TypeManagerTests.cs | 645 + .../TypeManagerTests.cs.meta | 13 + .../Unity.Entities.Tests/Types.meta | 8 + .../Types/ComponentTypeTests.cs | 76 + .../Types/ComponentTypeTests.cs.meta | 11 + .../Types/Hash128Tests.cs | 134 + .../Types/Hash128Tests.cs.meta | 11 + .../Types/LayoutUtilityTests.cs | 417 + .../Types/LayoutUtilityTests.cs.meta | 11 + .../Unity.Entities.Tests.asmdef | 24 + .../Unity.Entities.Tests.asmdef.meta | 7 + .../WorldDebuggingToolsTests.cs | 75 + .../WorldDebuggingToolsTests.cs.meta | 11 + .../Unity.Entities.Tests/WorldTests.cs | 377 + .../Unity.Entities.Tests/WorldTests.cs.meta | 11 + .../Unity.Entities.Tests/WriteGroupTests.cs | 299 + .../WriteGroupTests.cs.meta | 11 + .../Unity.Entities.Tests/ZeroPlayerTests.cs | 56 + .../ZeroPlayerTests.cs.meta | 11 + .../Unity.Entities.meta | 10 + .../AlwaysSynchronizeSystemAttribute.cs | 14 + .../AlwaysSynchronizeSystemAttribute.cs.meta | 11 + .../AlwaysUpdateSystemAttribute.cs | 9 + .../AlwaysUpdateSystemAttribute.cs.meta | 11 + .../ApiCompatibilityLevelTest.cs | 3 + .../ApiCompatibilityLevelTest.cs.meta | 11 + .../Unity.Entities/AssemblyInfo.cs | 23 + .../Unity.Entities/AssemblyInfo.cs.meta | 11 + .../Unity.Entities/BlobBuilder.cs | 409 + .../Unity.Entities/BlobBuilder.cs.meta | 11 + .../Unity.Entities/Blobs.cs | 761 ++ .../Unity.Entities/Blobs.cs.meta | 11 + .../Unity.Entities/ChangeVersionUtility.cs | 26 + .../ChangeVersionUtility.cs.meta | 11 + .../Unity.Entities/ChunkAllocator.cs | 61 + .../Unity.Entities/ChunkAllocator.cs.meta | 13 + .../Unity.Entities/ChunkDataUtility.cs | 578 + .../Unity.Entities/ChunkDataUtility.cs.meta | 13 + .../Unity.Entities/ChunkListMap.cs | 436 + .../Unity.Entities/ChunkListMap.cs.meta | 11 + .../CodeGeneratedJobForEach.meta | 8 + .../LambdaJobDescription.cs | 263 + .../LambdaJobDescription.cs.meta | 11 + .../LambdaJobQueryConstructionMethods.gen.cs | 94 + ...bdaJobQueryConstructionMethods.gen.cs.meta | 11 + .../LambdaJobQueryConstructionMethods.tt | 53 + .../LambdaJobQueryConstructionMethods.tt.meta | 7 + .../LambdaParameterValueProviders.cs | 347 + .../LambdaParameterValueProviders.cs.meta | 11 + .../UniversalDelegates.gen.cs | 339 + .../UniversalDelegates.gen.cs.meta | 11 + .../UniversalDelegates.tt | 110 + .../UniversalDelegates.tt.meta | 7 + .../ComponentDependencyManager.cs | 532 + .../ComponentDependencyManager.cs.meta | 11 + .../Unity.Entities/ComponentSafetyHandles.cs | 205 + .../ComponentSafetyHandles.cs.meta | 11 + .../Unity.Entities/ComponentSystem.cs | 143 + .../Unity.Entities/ComponentSystem.cs.meta | 12 + .../Unity.Entities/ComponentSystemBase.cs | 818 ++ .../ComponentSystemBase.cs.meta | 11 + .../Unity.Entities/ComponentSystemGroup.cs | 201 + .../ComponentSystemGroup.cs.meta | 11 + .../Unity.Entities/ComponentSystemSorter.cs | 572 + .../ComponentSystemSorter.cs.meta | 11 + .../ConverterVersionAttribute.cs | 28 + .../ConverterVersionAttribute.cs.meta | 11 + .../Unity.Entities/CopyUtility.cs | 24 + .../Unity.Entities/CopyUtility.cs.meta | 3 + .../DOTSCompilerGeneratedAttribute.cs | 8 + .../DOTSCompilerGeneratedAttribute.cs.meta | 11 + .../Unity.Entities/DebugView.cs | 373 + .../Unity.Entities/DebugView.cs.meta | 11 + .../Unity.Entities/DefaultWorld.cs | 136 + .../Unity.Entities/DefaultWorld.cs.meta | 11 + .../Unity.Entities/Diff.meta | 8 + .../Diff/DynamicBlobAssetBatch.cs | 190 + .../Diff/DynamicBlobAssetBatch.cs.meta | 11 + .../Unity.Entities/Diff/EntityChangeSet.cs | 429 + .../Diff/EntityChangeSet.cs.meta | 11 + .../Unity.Entities/Diff/EntityDiffer.cs | 461 + .../Unity.Entities/Diff/EntityDiffer.cs.meta | 11 + .../Diff/EntityDifferArchetypeChanges.cs | 248 + .../Diff/EntityDifferArchetypeChanges.cs.meta | 11 + .../Unity.Entities/Diff/EntityDifferBlobs.cs | 306 + .../Diff/EntityDifferBlobs.cs.meta | 11 + .../EntityDifferClearMissingReferences.cs | 106 + ...EntityDifferClearMissingReferences.cs.meta | 11 + .../Diff/EntityDifferComponentChanges.cs | 1129 ++ .../Diff/EntityDifferComponentChanges.cs.meta | 11 + .../Diff/EntityDifferCopyAndReplace.cs | 167 + .../Diff/EntityDifferCopyAndReplace.cs.meta | 11 + .../Diff/EntityDifferEntityInChunkChanges.cs | 251 + .../EntityDifferEntityInChunkChanges.cs.meta | 11 + .../Diff/EntityDifferValidation.cs | 76 + .../Diff/EntityDifferValidation.cs.meta | 11 + .../Diff/EntityManagerDiffer.cs | 79 + .../Diff/EntityManagerDiffer.cs.meta | 11 + .../Unity.Entities/Diff/EntityPatcher.cs | 1173 ++ .../Unity.Entities/Diff/EntityPatcher.cs.meta | 11 + .../Unity.Entities/Diff/EntityPatcherBlobs.cs | 172 + .../Diff/EntityPatcherBlobs.cs.meta | 11 + .../DisallowRefReturnCrossingThisAttribute.cs | 25 + ...llowRefReturnCrossingThisAttribute.cs.meta | 11 + .../Unity.Entities/EntityBatchInChunk.cs | 16 + .../Unity.Entities/EntityBatchInChunk.cs.meta | 11 + .../Unity.Entities/EntityCommandBuffer.cs | 1952 +++ .../EntityCommandBuffer.cs.meta | 11 + .../EntityCommandBufferSystem.cs | 291 + .../EntityCommandBufferSystem.cs.meta | 11 + .../Unity.Entities/EntityComponentStore.cs | 1579 +++ .../EntityComponentStore.cs.meta | 11 + .../EntityComponentStoreChangeArchetype.cs | 423 + ...ntityComponentStoreChangeArchetype.cs.meta | 11 + .../EntityComponentStoreCreateArchetype.cs | 476 + ...ntityComponentStoreCreateArchetype.cs.meta | 11 + ...tityComponentStoreCreateDestroyEntities.cs | 652 + ...omponentStoreCreateDestroyEntities.cs.meta | 11 + .../EntityComponentStoreDebug.cs | 566 + .../EntityComponentStoreDebug.cs.meta | 11 + .../EntityComponentStoreMoveEntities.cs | 25 + .../EntityComponentStoreMoveEntities.cs.meta | 11 + .../Unity.Entities/EntityDataAccess.cs | 614 + .../Unity.Entities/EntityDataAccess.cs.meta | 11 + .../Unity.Entities/EntityInChunk.cs | 28 + .../Unity.Entities/EntityInChunk.cs.meta | 11 + .../Unity.Entities/EntityManager.cs | 254 + .../Unity.Entities/EntityManager.cs.meta | 13 + .../EntityManagerAccessComponentData.cs | 549 + .../EntityManagerAccessComponentData.cs.meta | 11 + .../EntityManagerChangeArchetype.cs | 1049 ++ .../EntityManagerChangeArchetype.cs.meta | 11 + .../EntityManagerCopyEntitiesFrom.cs | 48 + .../EntityManagerCopyEntitiesFrom.cs.meta | 11 + .../EntityManagerCreateArchetype.cs | 37 + .../EntityManagerCreateArchetype.cs.meta | 11 + .../EntityManagerCreateDestroyEntities.cs | 283 + ...EntityManagerCreateDestroyEntities.cs.meta | 11 + .../Unity.Entities/EntityManagerDebug.cs | 278 + .../Unity.Entities/EntityManagerDebug.cs.meta | 11 + ...EntityManagerExclusiveEntityTransaction.cs | 48 + ...yManagerExclusiveEntityTransaction.cs.meta | 11 + .../Unity.Entities/EntityManagerLocks.cs | 89 + .../Unity.Entities/EntityManagerLocks.cs.meta | 11 + .../EntityManagerMoveEntities.cs | 894 ++ .../EntityManagerMoveEntities.cs.meta | 11 + .../Unity.Entities/EntityManagerQuery.cs | 193 + .../Unity.Entities/EntityManagerQuery.cs.meta | 11 + .../EntityManagerSerialization.cs | 33 + .../EntityManagerSerialization.cs.meta | 11 + .../Unity.Entities/EntityManagerSync.cs | 31 + .../Unity.Entities/EntityManagerSync.cs.meta | 11 + .../Unity.Entities/EntityManagerTypes.cs | 179 + .../Unity.Entities/EntityManagerTypes.cs.meta | 11 + .../Unity.Entities/EntityManagerValidate.cs | 77 + .../EntityManagerValidate.cs.meta | 11 + .../Unity.Entities/EntityManagerVersions.cs | 73 + .../EntityManagerVersions.cs.meta | 11 + .../Unity.Entities/EntityQueryBuilder.cs | 232 + .../Unity.Entities/EntityQueryBuilder.cs.meta | 11 + .../EntityQueryBuilder_ForEach.gen.cs | 7554 +++++++++++ .../EntityQueryBuilder_ForEach.gen.cs.meta | 11 + .../EntityQueryBuilder_ForEach.tt | 336 + .../EntityQueryBuilder_ForEach.tt.meta | 7 + .../EntityQueryBuilder_With.gen.cs | 491 + .../EntityQueryBuilder_With.gen.cs.meta | 11 + .../Unity.Entities/EntityQueryBuilder_With.tt | 72 + .../EntityQueryBuilder_With.tt.meta | 7 + .../Unity.Entities/EntityQueryCache.cs | 139 + .../Unity.Entities/EntityQueryCache.cs.meta | 11 + .../Unity.Entities/EntityRemapUtility.cs | 440 + .../Unity.Entities/EntityRemapUtility.cs.meta | 11 + .../ExclusiveEntityTransaction.cs | 213 + .../ExclusiveEntityTransaction.cs.meta | 11 + .../GenerateAuthoringComponentAttribute.cs | 28 + ...enerateAuthoringComponentAttribute.cs.meta | 11 + .../Unity.Entities/IComponentData.cs | 361 + .../Unity.Entities/IComponentData.cs.meta | 13 + .../Unity.Entities/IJobChunk.cs | 285 + .../Unity.Entities/IJobChunk.cs.meta | 13 + .../Unity.Entities/IJobForEach.cs | 421 + .../Unity.Entities/IJobForEach.cs.meta | 13 + .../Unity.Entities/IJobForEach.gen.cs | 10369 ++++++++++++++++ .../Unity.Entities/IJobForEach.gen.cs.meta | 11 + .../Unity.Entities/IJobForEach.tt | 534 + .../Unity.Entities/IJobForEach.tt.meta | 7 + .../Unity.Entities/Iterators.meta | 8 + .../Iterators/ArchetypeChunkArray.cs | 1025 ++ .../Iterators/ArchetypeChunkArray.cs.meta | 11 + .../Iterators/ArchetypeChunkIterator.cs | 245 + .../Iterators/ArchetypeChunkIterator.cs.meta | 11 + .../Iterators/BufferFromEntity.cs | 89 + .../Iterators/BufferFromEntity.cs.meta | 3 + .../Iterators/ChunkDataGatherJobs.cs | 219 + .../Iterators/ChunkDataGatherJobs.cs.meta | 13 + .../Iterators/ChunkIterationUtility.cs | 454 + .../Iterators/ChunkIterationUtility.cs.meta | 11 + .../Iterators/ComponentDataFromEntity.cs | 188 + .../Iterators/ComponentDataFromEntity.cs.meta | 13 + .../Unity.Entities/Iterators/DynamicBuffer.cs | 564 + .../Iterators/DynamicBuffer.cs.meta | 11 + .../Unity.Entities/Iterators/EntityQuery.cs | 1235 ++ .../Iterators/EntityQuery.cs.meta | 11 + .../Iterators/EntityQueryManager.cs | 845 ++ .../Iterators/EntityQueryManager.cs.meta | 11 + .../Unity.Entities/JetBrains.Annotations.cs | 1068 ++ .../JetBrains.Annotations.cs.meta | 11 + .../Unity.Entities/JobComponentSystem.cs | 186 + .../Unity.Entities/JobComponentSystem.cs.meta | 11 + .../Unity.Entities/ManagedComponentStore.cs | 812 ++ .../ManagedComponentStore.cs.meta | 11 + .../Unity.Entities/RetainBlobAssetSystem.cs | 84 + .../RetainBlobAssetSystem.cs.meta | 11 + .../SceneViewWorldPositionAttribute.cs | 8 + .../SceneViewWorldPositionAttribute.cs.meta | 11 + .../ScriptBehaviourUpdateOrder.cs | 157 + .../ScriptBehaviourUpdateOrder.cs.meta | 11 + .../Unity.Entities/Serialization.meta | 8 + .../Serialization/BinaryPrimitiveAdapter.cs | 253 + .../BinaryPrimitiveAdapter.cs.meta | 11 + .../Serialization/BinarySerialization.cs | 206 + .../Serialization/BinarySerialization.cs.meta | 11 + .../Serialization/BinaryWriter.cs | 699 ++ .../Serialization/BinaryWriter.cs.meta | 11 + .../Serialization/SerializeUtility.cs | 1171 ++ .../Serialization/SerializeUtility.cs.meta | 11 + .../Serialization/SerializeUtilityToYaml.cs | 342 + .../SerializeUtilityToYaml.cs.meta | 11 + .../Serialization/YamlWriter.cs | 277 + .../Serialization/YamlWriter.cs.meta | 11 + .../Unity.Entities/SortingUtilities.cs | 377 + .../Unity.Entities/SortingUtilities.cs.meta | 13 + .../Unity.Entities/Static.cs | 14 + .../Unity.Entities/Static.cs.meta | 11 + .../Unity.Entities/Stubs.meta | 8 + .../Stubs/Unity.Assertions.meta | 8 + .../Stubs/Unity.Assertions/Assert.cs | 171 + .../Stubs/Unity.Assertions/Assert.cs.meta | 11 + .../Unity.Entities/Stubs/Unity.meta | 8 + .../Unity.Entities/Stubs/Unity/Debug.cs | 32 + .../Unity.Entities/Stubs/Unity/Debug.cs.meta | 11 + .../Stubs/Unity/ProfilerMarker.cs | 41 + .../Stubs/Unity/ProfilerMarker.cs.meta | 11 + .../Unity.Entities/SystemBase.cs | 186 + .../Unity.Entities/SystemBase.cs.meta | 11 + .../SystemDependencySafetyUtility.cs | 94 + .../SystemDependencySafetyUtility.cs.meta | 11 + .../Unity.Entities/Types.meta | 8 + .../Unity.Entities/Types/Archetype.cs | 222 + .../Unity.Entities/Types/Archetype.cs.meta | 11 + .../Types/ArchetypeChunkData.cs | 156 + .../Types/ArchetypeChunkData.cs.meta | 11 + .../Unity.Entities/Types/BufferHeader.cs | 145 + .../Unity.Entities/Types/BufferHeader.cs.meta | 11 + .../Types/CalculateReaderWriterDependency.cs | 46 + .../CalculateReaderWriterDependency.cs.meta | 11 + .../Unity.Entities/Types/Chunk.cs | 115 + .../Unity.Entities/Types/Chunk.cs.meta | 11 + .../Unity.Entities/Types/CleanupEntity.cs | 6 + .../Types/CleanupEntity.cs.meta | 11 + .../Unity.Entities/Types/ComponentType.cs | 184 + .../Types/ComponentType.cs.meta | 11 + .../Types/ComponentTypeInArchetype.cs | 104 + .../Types/ComponentTypeInArchetype.cs.meta | 11 + .../Unity.Entities/Types/ComponentTypes.cs | 132 + .../Types/ComponentTypes.cs.meta | 11 + .../Unity.Entities/Types/Entity.cs | 122 + .../Unity.Entities/Types/Entity.cs.meta | 11 + .../Unity.Entities/Types/EntityArchetype.cs | 132 + .../Types/EntityArchetype.cs.meta | 11 + .../Unity.Entities/Types/FastEquality.cs | 491 + .../Unity.Entities/Types/FastEquality.cs.meta | 11 + .../Unity.Entities/Types/Hash128.cs | 168 + .../Unity.Entities/Types/Hash128.cs.meta | 11 + .../Unity.Entities/Types/LayoutUtility.cs | 181 + .../Types/LayoutUtility.cs.meta | 11 + .../RegisterGenericComponentTypeAttribute.cs | 15 + ...isterGenericComponentTypeAttribute.cs.meta | 11 + .../Unity.Entities/Types/SceneTagComponent.cs | 76 + .../Types/SceneTagComponent.cs.meta | 11 + .../Types/SharedComponentValues.cs | 28 + .../Types/SharedComponentValues.cs.meta | 11 + .../Unity.Entities/Types/TypeHash.cs | 123 + .../Unity.Entities/Types/TypeHash.cs.meta | 11 + .../Unity.Entities/Types/TypeManager.cs | 1741 +++ .../Unity.Entities/Types/TypeManager.cs.meta | 11 + .../Unity.Entities/Unity.Entities.asmdef | 27 + .../Unity.Entities/Unity.Entities.asmdef.meta | 7 + .../Unity.Entities/UnsafeList.gen.cs | 436 + .../Unity.Entities/UnsafeList.gen.cs.meta | 11 + .../Unity.Entities/UnsafeList.tt | 209 + .../Unity.Entities/UnsafeList.tt.meta | 7 + .../Unity.Entities/World.cs | 468 + .../Unity.Entities/World.cs.meta | 12 + .../Unity.Entities/WorldDebuggingTools.cs | 34 + .../WorldDebuggingTools.cs.meta | 12 + .../Unity.Entities/WorldSystemFiltering.cs | 83 + .../WorldSystemFiltering.cs.meta | 11 + .../Unity.Entities/WorldTime.cs | 14 + .../Unity.Entities/WorldTime.cs.meta | 11 + .../Unity.Mathematics.Extensions.Hybrid.meta | 8 + .../BoundsToAABB.cs | 17 + .../BoundsToAABB.cs.meta | 11 + ...Unity.Mathematics.Extensions.Hybrid.asmdef | 13 + ....Mathematics.Extensions.Hybrid.asmdef.meta | 7 + .../Unity.Mathematics.Extensions.meta | 8 + .../Unity.Mathematics.Extensions/AABB.cs | 72 + .../Unity.Mathematics.Extensions/AABB.cs.meta | 11 + .../GeneratePoints.cs | 74 + .../GeneratePoints.cs.meta | 11 + .../MinMaxAABB.cs | 50 + .../MinMaxAABB.cs.meta | 11 + .../Unity.Mathematics.Extensions.asmdef | 12 + .../Unity.Mathematics.Extensions.asmdef.meta | 7 + .../Unity.Scenes.Editor.Tests.meta | 8 + .../SubSceneEditorTests.cs | 189 + .../SubSceneEditorTests.cs.meta | 11 + .../Unity.Scenes.Editor.Tests.asmdef | 23 + .../Unity.Scenes.Editor.Tests.asmdef.meta | 7 + .../Unity.Scenes.Editor.meta | 8 + .../Unity.Scenes.Editor/AssemblyInfo.cs | 8 + .../Unity.Scenes.Editor/AssemblyInfo.cs.meta | 11 + .../BuildStepCreateResourceCatalog.cs | 64 + .../BuildStepCreateResourceCatalog.cs.meta | 11 + .../ConversionWarningsEditor.cs | 92 + .../ConversionWarningsEditor.cs.meta | 11 + .../Unity.Scenes.Editor/EditorEntityScenes.cs | 487 + .../EditorEntityScenes.cs.meta | 3 + .../EditorSceneLiveLinkToPlayerSendSystem.cs | 197 + ...torSceneLiveLinkToPlayerSendSystem.cs.meta | 11 + .../EditorSubSceneLiveLinkSystem.cs | 199 + .../EditorSubSceneLiveLinkSystem.cs.meta | 11 + .../Unity.Scenes.Editor/HierarchyOverlay.cs | 60 + .../HierarchyOverlay.cs.meta | 11 + .../Unity.Scenes.Editor/LiveLink.meta | 8 + .../Unity.Scenes.Editor/LiveLink/Assets.meta | 8 + .../LiveLink/Assets/empty.unity | 123 + .../LiveLink/Assets/empty.unity.meta | 7 + .../LiveLink/BuildStepBuildClassicLiveLink.cs | 125 + .../BuildStepBuildClassicLiveLink.cs.meta | 11 + .../LiveLinkAssetBundleBuildSystem.cs | 375 + .../LiveLinkAssetBundleBuildSystem.cs.meta | 11 + .../LiveLink/LiveLinkBuildImporter.cs | 197 + .../LiveLink/LiveLinkBuildImporter.cs.meta | 11 + .../LiveLink/LiveLinkBuildPipeline.cs | 545 + .../LiveLink/LiveLinkBuildPipeline.cs.meta | 11 + .../LiveLink/LiveLinkEditorEventSystem.cs | 14 + .../LiveLinkEditorEventSystem.cs.meta | 11 + .../LiveLink/LiveLinkEditorSystemGroup.cs | 12 + .../LiveLinkEditorSystemGroup.cs.meta | 11 + .../Unity.Scenes.Editor/LiveLinkConnection.cs | 332 + .../LiveLinkConnection.cs.meta | 11 + .../LiveLinkDiffGenerator.cs | 227 + .../LiveLinkDiffGenerator.cs.meta | 11 + .../RetainBlobAssetsSetting.cs | 16 + .../RetainBlobAssetsSetting.cs.meta | 11 + .../Unity.Scenes.Editor/SceneImporterData.cs | 57 + .../SceneImporterData.cs.meta | 11 + .../Unity.Scenes.Editor/SceneInspector.cs | 29 + .../SceneInspector.cs.meta | 11 + .../SceneMetaDataImporter.cs | 63 + .../SceneMetaDataImporter.cs.meta | 11 + .../Unity.Scenes.Editor/Steps.meta | 8 + .../Steps/BuildStepSubSceneBundles.cs | 86 + .../Steps/BuildStepSubSceneBundles.cs.meta | 11 + .../SubSceneContextMenu.cs | 400 + .../SubSceneContextMenu.cs.meta | 11 + .../Unity.Scenes.Editor/SubSceneImporter.cs | 182 + .../SubSceneImporter.cs.meta | 11 + .../Unity.Scenes.Editor/SubSceneInspector.cs | 318 + .../SubSceneInspector.cs.meta | 11 + .../SubSceneInspectorUtility.cs | 306 + .../SubSceneInspectorUtility.cs.meta | 11 + .../SubSceneTransformHierarchyHook.cs | 82 + .../SubSceneTransformHierarchyHook.cs.meta | 11 + .../TimeBasedCallbackInvoker.cs | 58 + .../TimeBasedCallbackInvoker.cs.meta | 11 + .../TypeDependencyCache.cs | 149 + .../TypeDependencyCache.cs.meta | 11 + .../Unity.Scenes.Editor.asmdef | 29 + .../Unity.Scenes.Editor.asmdef.meta | 7 + .../Unity.Scenes.Hybrid.Tests.meta | 8 + .../Unity.Scenes.Hybrid.Tests/Editmode.meta | 8 + .../Editmode/DebugStringTests.cs | 31 + .../Editmode/DebugStringTests.cs.meta | 11 + .../PatchingEndToEndWithSerialization.cs | 144 + .../PatchingEndToEndWithSerialization.cs.meta | 11 + .../Editmode/SaveAndLoadEndToEnd.cs | 164 + .../Editmode/SaveAndLoadEndToEnd.cs.meta | 11 + .../Editmode/SharedComponentSerializeTests.cs | 185 + .../SharedComponentSerializeTests.cs.meta | 11 + .../Editmode/SubtractArraysTests.cs | 41 + .../Editmode/SubtractArraysTests.cs.meta | 11 + .../Editmode/Unity.Scenes.Hybrid.Tests.asmdef | 26 + .../Unity.Scenes.Hybrid.Tests.asmdef.meta | 7 + .../Unity.Scenes.Hybrid.Tests/Playmode.meta | 8 + .../Playmode/AuthoringWithMaterial.cs | 38 + .../Playmode/AuthoringWithMaterial.cs.meta | 11 + .../Playmode/SubSceneTests.cs | 134 + .../Playmode/SubSceneTests.cs.meta | 3 + .../Playmode/TestSceneWithSubScene.meta | 8 + .../Playmode/TestSceneWithSubScene.unity | 350 + .../Playmode/TestSceneWithSubScene.unity.meta | 7 + .../TestSceneWithSubScene/TestSubScene.unity | 167 + .../TestSubScene.unity.meta | 7 + .../Unity.Scenes.Hybrid.Tests.Playmode.asmdef | 28 + ...y.Scenes.Hybrid.Tests.Playmode.asmdef.meta | 7 + .../Unity.Scenes.Hybrid.Tests/Test.mat | 77 + .../Unity.Scenes.Hybrid.Tests/Test.mat.meta | 8 + .../Unity.Scenes.Hybrid.meta | 8 + .../Unity.Scenes.Hybrid/AssemblyInfo.cs | 8 + .../Unity.Scenes.Hybrid/AssemblyInfo.cs.meta | 11 + .../Unity.Scenes.Hybrid/AssetBundleManager.cs | 133 + .../AssetBundleManager.cs.meta | 3 + .../AssetObjectManifest.cs | 67 + .../AssetObjectManifest.cs.meta | 11 + .../AsyncLoadSceneOperation.cs | 369 + .../AsyncLoadSceneOperation.cs.meta | 11 + .../EditorUpdateUtility.cs | 29 + .../EditorUpdateUtility.cs.meta | 3 + .../EntityChangeSetSerialization.cs | 215 + .../EntityChangeSetSerialization.cs.meta | 11 + .../EntitySceneOptimization.cs | 71 + .../EntitySceneOptimization.cs.meta | 11 + .../Unity.Scenes.Hybrid/EntityScenesPaths.cs | 154 + .../EntityScenesPaths.cs.meta | 3 + .../GlobalAssetObjectResolver.cs | 145 + .../GlobalAssetObjectResolver.cs.meta | 11 + .../Unity.Scenes.Hybrid/LiveLink.meta | 8 + .../LiveLink/LiveLinkMsg.cs | 94 + .../LiveLink/LiveLinkMsg.cs.meta | 11 + .../LiveLinkPlayerAssetRefreshSystem.cs | 570 + .../LiveLinkPlayerAssetRefreshSystem.cs.meta | 11 + .../LiveLink/LiveLinkPlayerSystem.cs | 271 + .../LiveLink/LiveLinkPlayerSystem.cs.meta | 11 + .../LiveLink/LiveLinkPlayerSystemGroup.cs | 45 + .../LiveLinkPlayerSystemGroup.cs.meta | 11 + .../LiveLinkResolveSceneReferenceSystem.cs | 182 + ...iveLinkResolveSceneReferenceSystem.cs.meta | 11 + .../LiveLink/LiveLinkSceneChangeTracker.cs | 132 + .../LiveLinkSceneChangeTracker.cs.meta | 11 + .../LiveLink/MessageEventArgsExtensions.cs | 86 + .../MessageEventArgsExtensions.cs.meta | 11 + .../Unity.Scenes.Hybrid/LiveLinkPatcher.cs | 211 + .../LiveLinkPatcher.cs.meta | 11 + .../Unity.Scenes.Hybrid/PublicEntityRef.cs | 90 + .../PublicEntityRef.cs.meta | 11 + .../ResolveSceneReferenceSystem.cs | 303 + .../ResolveSceneReferenceSystem.cs.meta | 11 + .../SceneSectionBundleTag.cs | 39 + .../SceneSectionBundleTag.cs.meta | 11 + .../SceneSectionStreamingSystem.cs | 532 + .../SceneSectionStreamingSystem.cs.meta | 11 + .../Unity.Scenes.Hybrid/SceneSystem.cs | 372 + .../Unity.Scenes.Hybrid/SceneSystem.cs.meta | 11 + .../Unity.Scenes.Hybrid/SceneSystemGroup.cs | 15 + .../SceneSystemGroup.cs.meta | 11 + .../Unity.Scenes.Hybrid/SubScene.cs | 283 + .../Unity.Scenes.Hybrid/SubScene.cs.meta | 11 + .../Unity.Scenes.Hybrid.asmdef | 25 + .../Unity.Scenes.Hybrid.asmdef.meta | 7 + .../Unity.Transforms.Editor.meta | 8 + .../TransformComponentEditors.cs | 52 + .../TransformComponentEditors.cs.meta | 11 + .../Unity.Transforms.Editor.asmdef | 17 + .../Unity.Transforms.Editor.asmdef.meta | 7 + .../Unity.Transforms.Hybrid.meta | 3 + ...ompanionGameObjectUpdateTransformSystem.cs | 96 + ...ionGameObjectUpdateTransformSystem.cs.meta | 11 + ...CopyInitialTransformFromGameObjectProxy.cs | 14 + ...nitialTransformFromGameObjectProxy.cs.meta | 3 + ...opyInitialTransformFromGameObjectSystem.cs | 113 + ...itialTransformFromGameObjectSystem.cs.meta | 3 + .../CopyTransformFromGameObjectProxy.cs | 13 + .../CopyTransformFromGameObjectProxy.cs.meta | 11 + .../CopyTransformFromGameObjectSystem.cs | 87 + .../CopyTransformFromGameObjectSystem.cs.meta | 11 + .../CopyTransformToGameObjectProxy.cs | 13 + .../CopyTransformToGameObjectProxy.cs.meta | 11 + .../CopyTransformToGameObjectSystem.cs | 48 + .../CopyTransformToGameObjectSystem.cs.meta | 11 + .../LocalToWorldProxy.cs | 11 + .../LocalToWorldProxy.cs.meta | 11 + .../NonUniformScaleProxy.cs | 12 + .../NonUniformScaleProxy.cs.meta | 11 + .../Unity.Transforms.Hybrid/RotationProxy.cs | 16 + .../RotationProxy.cs.meta | 11 + .../TransformConversion.cs | 55 + .../TransformConversion.cs.meta | 11 + .../TranslationProxy.cs | 11 + .../TranslationProxy.cs.meta | 11 + .../Unity.Transforms.Hybrid.asmdef | 15 + .../Unity.Transforms.Hybrid.asmdef.meta | 7 + .../Unity.Transforms.PerformanceTests.meta | 8 + .../ChangeHierarchyTests.cs | 61 + .../ChangeHierarchyTests.cs.meta | 11 + .../Unity.Transforms.PerformanceTests.asmdef | 21 + ...ty.Transforms.PerformanceTests.asmdef.meta | 7 + .../Unity.Transforms.Tests.meta | 8 + .../Unity.Transforms.Tests/TransformTests.cs | 763 ++ .../TransformTests.cs.meta | 11 + .../Unity.Transforms.Tests.asmdef | 20 + .../Unity.Transforms.Tests.asmdef.meta | 7 + .../Unity.Transforms.meta | 8 + .../Unity.Transforms/BoneIndexOffset.cs | 12 + .../Unity.Transforms/BoneIndexOffset.cs.meta | 11 + .../Unity.Transforms/CompositeRotation.cs | 400 + .../CompositeRotation.cs.meta | 11 + .../Unity.Transforms/CompositeScale.cs | 315 + .../Unity.Transforms/CompositeScale.cs.meta | 11 + .../EndFrameTransformSystems.cs | 81 + .../EndFrameTransformSystems.cs.meta | 11 + .../Unity.Transforms/Frozen.cs | 15 + .../Unity.Transforms/Frozen.cs.meta | 11 + .../Unity.Transforms/LocalToParent.cs | 22 + .../Unity.Transforms/LocalToParent.cs.meta | 11 + .../Unity.Transforms/LocalToParentSystem.cs | 128 + .../LocalToParentSystem.cs.meta | 11 + .../Unity.Transforms/LocalToWorld.cs | 20 + .../Unity.Transforms/LocalToWorld.cs.meta | 11 + .../Unity.Transforms/NonUniformScale.cs | 16 + .../Unity.Transforms/NonUniformScale.cs.meta | 11 + .../Unity.Transforms/Parent.cs | 28 + .../Unity.Transforms/Parent.cs.meta | 11 + .../Unity.Transforms/ParentScaleInverse.cs | 151 + .../ParentScaleInverse.cs.meta | 11 + .../Unity.Transforms/ParentSystem.cs | 383 + .../Unity.Transforms/ParentSystem.cs.meta | 11 + .../Unity.Transforms/PostRotationEuler.cs | 215 + .../PostRotationEuler.cs.meta | 11 + .../Unity.Transforms/Rotation.cs | 15 + .../Unity.Transforms/Rotation.cs.meta | 11 + .../Unity.Transforms/RotationEuler.cs | 215 + .../Unity.Transforms/RotationEuler.cs.meta | 11 + .../Unity.Transforms/Scale.cs | 15 + .../Unity.Transforms/Scale.cs.meta | 11 + .../TRSToLocalToParentSystem.cs | 518 + .../TRSToLocalToParentSystem.cs.meta | 11 + .../TRSToLocalToWorldSystem.cs | 284 + .../TRSToLocalToWorldSystem.cs.meta | 11 + .../Unity.Transforms/Translation.cs | 15 + .../Unity.Transforms/Translation.cs.meta | 11 + .../Unity.Transforms/Unity.Transforms.asmdef | 13 + .../Unity.Transforms.asmdef.meta | 7 + .../Unity.Transforms/WorldToLocal.cs | 73 + .../Unity.Transforms/WorldToLocal.cs.meta | 11 + .../package.json | 30 + .../package.json.meta | 7 + ECSSamples/Packages/manifest.json | 7 +- ECSSamples/ProjectSettings/ProjectVersion.txt | 4 +- 1426 files changed, 158933 insertions(+), 8 deletions(-) create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/CHANGELOG.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/CHANGELOG.md.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/ChunkIterationJob.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/ChunkIterationJob.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DisableAutoCreation.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DisableAutoCreation.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DocCodeSamples.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DocCodeSamples.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DynamicBufferExamples.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DynamicBufferExamples.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/EntityCommandBuffers.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/EntityCommandBuffers.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/LambdaJobExamples.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/LambdaJobExamples.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/TableOfContents.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/chunk_iteration.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/chunk_iteration_job.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/component_data.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/component_system.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/custom_job_types.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/doo_design.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/dynamic_buffers.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_anatomy.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_building_projects.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_burst.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_chunk_component.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_components.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_core.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_data_structures.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_debugging.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_entities.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_entity_query.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_gameplay.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_in_detail.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_job_extensions.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_job_overview.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_profiling.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_project_status.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_systems.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_testing.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_write_groups.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/entities.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/entities_job_foreach.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/entity_command_buffer.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/entity_iteration_foreach.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/entity_iteration_job.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/entity_manager.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/exclusive_entity_transaction.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/execution_order.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/filter.yml create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/gp_ai.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/gp_animation.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/gp_assets.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/gp_audio.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/gp_ecs_interop.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/gp_input.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/gp_multiplayer.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/gp_overview.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/gp_physics.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/gp_prefabs.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/gp_rendering.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/gp_scenes.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/gp_text_handling.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/gp_ui.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/ArchetypeChunkDiagram.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/ArchetypeDiagram.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/ConversionAndSubscenes.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/CreatingGameplay.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/ECSBlockDiagram.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/EntitiesSplash.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/SlideArrows.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/WhatIsECSinfographic0000.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/WhatIsECSinfographic0001.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/WhatIsECSinfographic0002.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/WhatIsECSinfographic0003.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/WhatIsECSinfographic0004.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/infographic.js create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/pixel.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec1-1.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec1-2.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec2-1.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec2-2.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec2-3.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec4-1.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec4-2.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec4-3.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec4-4.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec4-5.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec5-1.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec5-2.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec5-3.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec5-4.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec5-5.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec5-6.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec5-7.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/index.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/job_component_system.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/manual_iteration.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/shared_component_data.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/sync_points.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/system_state_components.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/system_update_order.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/transform_system.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/version_numbers.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/world.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/Connected@2x.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/Connected@2x.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/ConnectionError@2x.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/ConnectionError@2x.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/Disconnected@2x.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/Disconnected@2x.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLink.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLink.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLink@2x.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLink@2x.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLinkActive.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLinkActive.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLinkActive@2x.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLinkActive@2x.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLinkReset@2x.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLinkReset@2x.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_Connected@2x.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_Connected@2x.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_ConnectionError@2x.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_ConnectionError@2x.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_Disconnected@2x.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_Disconnected@2x.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLink.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLink.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLink@2x.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLink@2x.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkActive.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkActive.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkActive@2x.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkActive@2x.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkReset@2x.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkReset@2x.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown.uss create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown.uss.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown_dark.uss create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown_dark.uss.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown_light.uss create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown_light.uss.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow.uss create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow.uss.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow_dark.uss create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow_dark.uss.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow_light.uss create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow_light.uss.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.GroupItemTemplate.uxml create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.GroupItemTemplate.uxml.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.GroupTemplate.uxml create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.GroupTemplate.uxml.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.uxml create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.uxml.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/StartLiveLinkWindow.ListViewItemTemplate.uxml create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/StartLiveLinkWindow.ListViewItemTemplate.uxml.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/StartLiveLinkWindow.uxml create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/StartLiveLinkWindow.uxml.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/LICENSE.md create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/LICENSE.md.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstDelegateTest.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstDelegateTest.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstSafetyTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstSafetyTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/Unity.Burst.Tests.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/Unity.Burst.Tests.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes/LICENSE-XXHASH create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes/LICENSE-XXHASH.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes/XXHash.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes/XXHash.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/TimeData.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/TimeData.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Unity.Core.asmref create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Unity.Core.asmref.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests/AutoCreateComponentSystemTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests/AutoCreateComponentSystemTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests/Unity.Entities.AutoCreation.Tests.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests/Unity.Entities.AutoCreation.Tests.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/MonoExtensions.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/MonoExtensions.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/TypeHash.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/TypeHash.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/TypeUtils.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/TypeUtils.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/Unity.Entities.BuildUtils.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/Unity.Entities.BuildUtils.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/BlobAssetSafetyVerifier.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/BlobAssetSafetyVerifier/BlobAssetSafetyVerifierTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/BlobAssetSafetyVerifier/BlobAssetSafetyVerifierTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/CecilHelpersTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/CecilHelpersTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/IntegrationTest.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/IntegrationTest.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobDescriptionConstructionTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobDescriptionConstructionTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/LambdaJobIntegrationTest.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/LambdaJobIntegrationTest.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/TestJobComponentSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/TestJobComponentSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/TestTypes.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/TestTypes.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobsLambdaJobsPostProcessorTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobsLambdaJobsPostProcessorTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobsPostProcessorTestBase.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobsPostProcessorTestBase.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure/PropertyBagIntegrationTest.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure/PropertyBagIntegrationTest.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure/TestTypes.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure/TestTypes.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes/TestTypes.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes/TestTypes.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes/Unity.Entities.CodeGen.Tests.TestTypes.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes/Unity.Entities.CodeGen.Tests.TestTypes.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/AssemblyInfo.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/AssemblyInfo.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/BlobAssetSafety.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/BlobAssetSafety/BlobAssetSafetyVerifier.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/BlobAssetSafety/BlobAssetSafetyVerifier.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/CecilExtensionMethods.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/CecilExtensionMethods.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/CecilHelpers.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/CecilHelpers.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/EntitiesILPostProcessor.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/EntitiesILPostProcessor.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachAttributes.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachAttributes.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachJobCreator.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachJobCreator.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/InjectAndInitializeEntityQueryField.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/InjectAndInitializeEntityQueryField.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaJobDescriptionConstruction.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaJobDescriptionConstruction.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaJobsPostProcessor.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaJobsPostProcessor.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaParamaterValueProviderInformation.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaParamaterValueProviderInformation.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaParameterValueInformations.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaParameterValueInformations.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/UserError.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/UserError.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/ListExtensions.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/ListExtensions.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PostProcessException.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PostProcessException.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PropertyBags.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PropertyBags/PropertyBagsPostProcessor.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PropertyBags/PropertyBagsPostProcessor.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/Unity.Entities.CodeGen.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/Unity.Entities.CodeGen.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/AssemblyInfo.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/AssemblyInfo.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/ComponentTypeFilterUITests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/ComponentTypeFilterUITests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityArrayListAdapterTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityArrayListAdapterTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityDebuggerTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityDebuggerTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityQueryGUITests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityQueryGUITests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/ListViewTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/ListViewTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/LiveLink.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/LiveLink/LiveLinkDropdownTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/LiveLink/LiveLinkDropdownTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/LiveLink/LiveLinkToolbarTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/LiveLink/LiveLinkToolbarTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/LiveLink/StartLiveLinkWindowTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/LiveLink/StartLiveLinkWindowTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/LiveLink/UIElementTestHelpers.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/LiveLink/UIElementTestHelpers.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/Unity.Entities.Editor.Tests.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/Unity.Entities.Editor.Tests.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/AssemblyInfo.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/AssemblyInfo.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/CommonGUI.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/CommonGUI/EntityQueryGUI.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/CommonGUI/EntityQueryGUI.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/CommonGUI/EntityQueryGUIControl.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/CommonGUI/EntityQueryGUIControl.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/CommonGUI/GUIHelpers.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/CommonGUI/GUIHelpers.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/CommonGUI/GUIStyleAsset.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/CommonGUI/GUIStyleAsset.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/CommonGUI/RepaintLimiter.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/CommonGUI/RepaintLimiter.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/CommonGUI/SystemInclusionList.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/CommonGUI/SystemInclusionList.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/ComponentSystemProcessing.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/ComponentSystemProcessing.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Decompiler.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Decompiler.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Editors.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Editors/ComponentDataProxyBaseEditor.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Editors/ComponentDataProxyBaseEditor.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Editors/DynamicBufferProxyBaseEditor.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Editors/DynamicBufferProxyBaseEditor.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Editors/GameObjectEntityEditor.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Editors/GameObjectEntityEditor.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/ChunkInfoListView.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/ChunkInfoListView.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/ComponentTypeChooser.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/ComponentTypeChooser.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/ComponentTypeFilterUI.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/ComponentTypeFilterUI.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/ComponentTypeListView.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/ComponentTypeListView.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/EntityArrayListAdapter.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/EntityArrayListAdapter.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/EntityDebugger.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/EntityDebugger.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/EntityDebuggerStyles.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/EntityDebuggerStyles.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/EntityListQuery.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/EntityListQuery.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/EntityListView.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/EntityListView.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/EntityQueryListView.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/EntityQueryListView.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/SystemListView.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/SystemListView.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/WorldPopup.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityDebugger/WorldPopup.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityInspector.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityInspector/Adapters.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityInspector/Adapters/IMGUIAdapter.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityInspector/Adapters/IMGUIAdapter.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityInspector/Adapters/IMGUIMathematicsAdapter.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityInspector/Adapters/IMGUIMathematicsAdapter.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityInspector/Adapters/IMGUIPrimitivesAdapter.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityInspector/Adapters/IMGUIPrimitivesAdapter.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityInspector/EntityIMGUIVisitor.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityInspector/EntityIMGUIVisitor.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityInspector/EntitySelectionProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityInspector/EntitySelectionProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityInspector/EntitySelectionProxyEditor.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/EntityInspector/EntitySelectionProxyEditor.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/ExtraTypesProvider.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/ExtraTypesProvider.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/LiveLink.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/LiveLink/Icons.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/LiveLink/Icons.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/LiveLink/LiveLinkCommands.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/LiveLink/LiveLinkCommands.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/LiveLink/LiveLinkConnectionsDropdown.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/LiveLink/LiveLinkConnectionsDropdown.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/LiveLink/LiveLinkStyles.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/LiveLink/LiveLinkStyles.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/LiveLink/LiveLinkToolbar.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/LiveLink/LiveLinkToolbar.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/LiveLink/StartLiveLinkWindow.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/LiveLink/StartLiveLinkWindow.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/LiveLink/UIElementHelpers.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/LiveLink/UIElementHelpers.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Mode.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Mode/default.mode create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Mode/default.mode.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/PostprocessedILInspector.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/PostprocessedILInspector/.ilspyfolder/ilspycmd.exe create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/PostprocessedILInspector/PostprocessedILWindow.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/PostprocessedILInspector/PostprocessedILWindow.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/PostprocessedILInspector/TypeDefinitionExtensions.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/PostprocessedILInspector/TypeDefinitionExtensions.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/PropertyDrawers.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/PropertyDrawers/LayerFieldDrawer.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/PropertyDrawers/LayerFieldDrawer.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/PropertyDrawers/WrappedComponentDataDrawer.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/PropertyDrawers/WrappedComponentDataDrawer.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/ScriptTemplates.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/ScriptTemplates/AuthoringComponent.txt create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/ScriptTemplates/AuthoringComponent.txt.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/ScriptTemplates/RunTimeComponent.txt create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/ScriptTemplates/RunTimeComponent.txt.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/ScriptTemplates/ScriptTemplates.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/ScriptTemplates/ScriptTemplates.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/ScriptTemplates/System.txt create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/ScriptTemplates/System.txt.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/EntityDebuggerStyles.asset create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/EntityDebuggerStyles.asset.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/ReadOnly.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/ReadOnly.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/ReadOnly@2x.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/ReadOnly@2x.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/ReadWrite.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/ReadWrite.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/ReadWrite@2x.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/ReadWrite@2x.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/Required.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/Required.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/Required@2x.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/Required@2x.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/Subtractive.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/Subtractive.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/Subtractive@2x.png create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Styles/Subtractive@2x.png.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Unity.Entities.Editor.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor/Unity.Entities.Editor.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen.Tests.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen.Tests/AuthoringComponent.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen.Tests/AuthoringComponent/AuthoringComponentIntegrationTest.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen.Tests/AuthoringComponent/AuthoringComponentIntegrationTest.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen.Tests/AuthoringComponent/IBufferElementDataCompileTimeTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen.Tests/AuthoringComponent/IBufferElementDataCompileTimeTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen.Tests/Unity.Entities.Hybrid.CodeGen.Tests.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen.Tests/Unity.Entities.Hybrid.CodeGen.Tests.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen/AuthoringComponent.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen/AuthoringComponent/AuthoringComponentPostProcessor_IBufferElementData.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen/AuthoringComponent/AuthoringComponentPostProcessor_IBufferElementData.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen/AuthoringComponent/AuthoringComponentPostProcessor_IComponentData.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen/AuthoringComponent/AuthoringComponentPostProcessor_IComponentData.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen/AuthoringComponent/AuthoringComponentPostProcessor_Shared.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen/AuthoringComponent/AuthoringComponentPostProcessor_Shared.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen/Unity.Entities.Hybrid.CodeGen.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.CodeGen/Unity.Entities.Hybrid.CodeGen.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.EndToEnd.Tests.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.EndToEnd.Tests/TestUtilities.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.EndToEnd.Tests/TestUtilities.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.EndToEnd.Tests/Unity.Entities.Hybrid.EndToEnd.Tests.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.EndToEnd.Tests/Unity.Entities.Hybrid.EndToEnd.Tests.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/AssemblyInfo.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/AssemblyInfo.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/ComponentDataProxy_EntityManager_IntegrationTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/ComponentDataProxy_EntityManager_IntegrationTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/ComponentDataProxy_Prefab_IntegrationTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/ComponentDataProxy_Prefab_IntegrationTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/ComponentDataProxy_UnitTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/ComponentDataProxy_UnitTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/ComponentGroupTransformAccessArrayTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/ComponentGroupTransformAccessArrayTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/BlobAssetStoreTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/BlobAssetStoreTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/ConversionHybridTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/ConversionHybridTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/ConversionJournalDataTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/ConversionJournalDataTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/ConversionMappingSystemJournalingTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/ConversionMappingSystemJournalingTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/ConversionMappingTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/ConversionMappingTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/ConversionTestFixtureBase.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/ConversionTestFixtureBase.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/ConversionTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/ConversionTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/ConvertGameObjectToEntityTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/ConvertGameObjectToEntityTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/GameObjectConversionSettingsTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/GameObjectConversionSettingsTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/JournalingUnityLoggerTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/JournalingUnityLoggerTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/MultiListTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/MultiListTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/Prefab.prefab create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/Prefab.prefab.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Hierarchy.prefab create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Hierarchy.prefab.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/Prefab_MissingMB.prefab create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/Prefab_MissingMB.prefab.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Reference_Prefab.prefab create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Reference_Prefab.prefab.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Reference_Self.prefab create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Reference_Self.prefab.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/Prefab_With_ComponentDataProxy.prefab create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/Prefab_With_ComponentDataProxy.prefab.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/Prefab_With_DynamicBufferDataProxy.prefab create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/Prefab_With_DynamicBufferDataProxy.prefab.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/Prefab_With_SharedComponentDataProxy.prefab create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/Prefab_With_SharedComponentDataProxy.prefab.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/SceneConversionTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/SceneConversionTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/UnityEngineExtensionsTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Conversion/UnityEngineExtensionsTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/DefaultWorldInitializationTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/DefaultWorldInitializationTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/EntityQueryWithComponentTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/EntityQueryWithComponentTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/GameObjectEntity_EntityManager_IntegrationTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/GameObjectEntity_EntityManager_IntegrationTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/GameObjectEntity_UnitTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/GameObjectEntity_UnitTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Runtime.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Runtime/EntityManagerTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Runtime/EntityManagerTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Runtime/GameObjectEntityTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Runtime/GameObjectEntityTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Runtime/InstantiateHybridTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Runtime/InstantiateHybridTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Runtime/MoveEntitiesFromHybridTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Runtime/MoveEntitiesFromHybridTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Runtime/SharedComponentSerializeTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Runtime/SharedComponentSerializeTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/SharedComponentReferenceTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/SharedComponentReferenceTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/TypeUtility_UnitTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/TypeUtility_UnitTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Unity.Entities.Hybrid.Tests.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/Unity.Entities.Hybrid.Tests.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/WorldTimeTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.Tests/WorldTimeTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/AssemblyInfo.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/AssemblyInfo.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Assets.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Assets/AndroidHybrid.buildpipeline create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Assets/AndroidHybrid.buildpipeline.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Assets/Hybrid.buildpipeline create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Assets/Hybrid.buildpipeline.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Assets/HybridLiveLink.buildpipeline create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Assets/HybridLiveLink.buildpipeline.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Assets/OSXHybrid.buildpipeline create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Assets/OSXHybrid.buildpipeline.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Assets/OSXHybridLiveLink.buildpipeline create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Assets/OSXHybridLiveLink.buildpipeline.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Assets/WindowsHybrid.buildpipeline create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Assets/WindowsHybrid.buildpipeline.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Assets/WindowsHybridLiveLink.buildpipeline create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Assets/WindowsHybridLiveLink.buildpipeline.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/AuthoringComponent.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/AuthoringComponent.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/BufferElementDataAuthoringComponent.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/BufferElementDataAuthoringComponent.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/CompanionGameObjectUpdateSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/CompanionGameObjectUpdateSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Components.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Components/CompanionLink.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Components/CompanionLink.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Components/ComponentDataProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Components/ComponentDataProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Components/ComponentDataProxyBase.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Components/ComponentDataProxyBase.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Components/DynamicBufferProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Components/DynamicBufferProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Components/GameObjectEntity.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Components/GameObjectEntity.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Components/SharedComponentDataProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Components/SharedComponentDataProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/ConvertToEntity.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/ConvertToEntity.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/EditorRenderData.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/EditorRenderData.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/EntityManagerExtensions.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/EntityManagerExtensions.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/BlobAssetComputationContext.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/BlobAssetComputationContext.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/BlobAssetStore.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/BlobAssetStore.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/ConversionJournalData.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/ConversionJournalData.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/ConversionSystemFilterSettings.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/ConversionSystemFilterSettings.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/ConvertGameObjectToEntitySystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/ConvertGameObjectToEntitySystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionMappingSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionMappingSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionSettings.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionSettings.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionUtility.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionUtility.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/JournalDataDebug.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/JournalDataDebug.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/JournalingUnityLogger.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/JournalingUnityLogger.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/MultiList.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/MultiList.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/SceneBoundingVolume.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/SceneBoundingVolume.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/UnityEngineExtensions.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/GameObjectConversion/UnityEngineExtensions.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Injection.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Injection/AutomaticWorldBootstrap.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Injection/AutomaticWorldBootstrap.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Injection/CompanionGameObject.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Injection/CompanionGameObject.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Injection/DefaultWorldInitialization.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Injection/DefaultWorldInitialization.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Injection/DefaultWorldInitializationProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Injection/DefaultWorldInitializationProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Iterators.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Iterators/ComponentArray.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Iterators/ComponentArray.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Iterators/TransformAccessArrayIterator.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Iterators/TransformAccessArrayIterator.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/JetBrains.Annotations.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/JetBrains.Annotations.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/LayerFieldAttribute.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/LayerFieldAttribute.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/ReferencedUnityObjects.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/ReferencedUnityObjects.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/ResourceCatalogData.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/ResourceCatalogData.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/SceneSectionComponent.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/SceneSectionComponent.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/SceneSectionProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/SceneSectionProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/SerializeUtilityHybrid.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/SerializeUtilityHybrid.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/StaticOptimizeEntity.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/StaticOptimizeEntity.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/StopConvertToEntity.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/StopConvertToEntity.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/TypeUtility.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/TypeUtility.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Unity.Entities.Hybrid.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/Unity.Entities.Hybrid.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/UpdateWorldTimeSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Hybrid/UpdateWorldTimeSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/ComponentJobSafetyManagerPerformanceTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/ComponentJobSafetyManagerPerformanceTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/Diff.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/Diff/EntityDifferPerformanceTestFixture.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/Diff/EntityDifferPerformanceTestFixture.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/Diff/EntityDifferPerformanceTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/Diff/EntityDifferPerformanceTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/DynamicBufferPerformanceTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/DynamicBufferPerformanceTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/EntityCommandBufferPerformanceTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/EntityCommandBufferPerformanceTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/EntityManagerPerformanceTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/EntityManagerPerformanceTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/EntityPerformanceTestFixture.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/EntityPerformanceTestFixture.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/EntityQueryPerformanceTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/EntityQueryPerformanceTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/ForEachPerformanceTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/ForEachPerformanceTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/InstantiatePerformanceTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/InstantiatePerformanceTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/JobForEachPrefilteringPerformanceTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/JobForEachPrefilteringPerformanceTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/LambdaJobsPerformanceTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/LambdaJobsPerformanceTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/NativeArrayIterationPerformanceTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/NativeArrayIterationPerformanceTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/SharedComponentPerformanceTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/SharedComponentPerformanceTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/Unity.Entities.PerformanceTests.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.PerformanceTests/Unity.Entities.PerformanceTests.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties.PerformanceTests.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties.PerformanceTests/EntityContainerPerformanceTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties.PerformanceTests/EntityContainerPerformanceTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties.PerformanceTests/Unity.Entities.Properties.PerformanceTests.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties.PerformanceTests/Unity.Entities.Properties.PerformanceTests.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties.Tests.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties.Tests/EntityContainerTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties.Tests/EntityContainerTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties.Tests/TestComponents.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties.Tests/TestComponents.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties.Tests/Unity.Entities.Properties.Tests.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties.Tests/Unity.Entities.Properties.Tests.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties/DynamicBufferContainer.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties/DynamicBufferContainer.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties/EntityContainer.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties/EntityContainer.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties/Unity.Entities.Properties.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Properties/Unity.Entities.Properties.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.StaticTypeRegistry.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.StaticTypeRegistry/AssemblyInfo.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.StaticTypeRegistry/AssemblyInfo.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.StaticTypeRegistry/StaticTypeRegistry.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.StaticTypeRegistry/StaticTypeRegistry.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.StaticTypeRegistry/Unity.Entities.StaticTypeRegistry.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.StaticTypeRegistry/Unity.Entities.StaticTypeRegistry.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.TestComponents.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.TestComponents/EntityRefTestDataAuthoring.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.TestComponents/EntityRefTestDataAuthoring.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.TestComponents/JournalTestAuthoring.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.TestComponents/JournalTestAuthoring.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.TestComponents/MockDataProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.TestComponents/MockDataProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.TestComponents/MockDynamicBufferDataProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.TestComponents/MockDynamicBufferDataProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.TestComponents/MockSharedDataProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.TestComponents/MockSharedDataProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.TestComponents/MockSharedDisallowMultipleProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.TestComponents/MockSharedDisallowMultipleProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.TestComponents/Unity.TestComponents.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.TestComponents/Unity.TestComponents.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ArchetypeChunkArrayTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ArchetypeChunkArrayTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/AssemblyInfo.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/AssemblyInfo.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/BlobificationTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/BlobificationTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/BufferElementDataInstantiateTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/BufferElementDataInstantiateTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/BufferElementDataSystemStateInstantiateTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/BufferElementDataSystemStateInstantiateTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/BufferElementDataSystemStateTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/BufferElementDataSystemStateTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/BufferElementDataTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/BufferElementDataTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ChangeVersionTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ChangeVersionTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ChunkChangeVersionTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ChunkChangeVersionTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ChunkComponentTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ChunkComponentTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ChunkDataUtilityTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ChunkDataUtilityTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ComponentOrderVersionTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ComponentOrderVersionTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ComponentSystemGroupTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ComponentSystemGroupTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ComponentSystemStartStopRunningTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ComponentSystemStartStopRunningTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ComponentSystemTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ComponentSystemTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/CreateAndDestroyTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/CreateAndDestroyTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Diff.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Diff/CopyAndReplaceTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Diff/CopyAndReplaceTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Diff/EntityDifferTestFixture.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Diff/EntityDifferTestFixture.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Diff/EntityDifferTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Diff/EntityDifferTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Diff/EntityGuidTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Diff/EntityGuidTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Diff/EntityPatcherTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Diff/EntityPatcherTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Diff/HierarchyIntegrationTest.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Diff/HierarchyIntegrationTest.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/DisableComponentTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/DisableComponentTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/DynamicBufferTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/DynamicBufferTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ECBChainPriorityQueueTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ECBChainPriorityQueueTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ECSTestsFixture.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ECSTestsFixture.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntitiesAssert.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntitiesAssert/DebugEntity.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntitiesAssert/DebugEntity.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntitiesAssert/DebugEntityTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntitiesAssert/DebugEntityTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntitiesAssert/EntitiesAssert.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntitiesAssert/EntitiesAssert.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntitiesAssert/EntitiesAssertTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntitiesAssert/EntitiesAssertTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityArchetypeQueryTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityArchetypeQueryTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityCommandBufferTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityCommandBufferTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityManagerBugTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityManagerBugTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityManagerComponentGroupOperationsTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityManagerComponentGroupOperationsTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityManagerPrefabTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityManagerPrefabTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityManagerTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityManagerTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityQueryBuilderMemoryTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityQueryBuilderMemoryTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityQueryBuilderTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityQueryBuilderTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityQueryCacheTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityQueryCacheTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityQueryDelta.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityQueryDelta.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityQuerySyncChangeFilterTypesTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityQuerySyncChangeFilterTypesTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityQueryTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityQueryTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityRemapUtilityTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityRemapUtilityTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityTransactionTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/EntityTransactionTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/FastEqualityTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/FastEqualityTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEach.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEach/ForEachBasicMemoryTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEach/ForEachBasicMemoryTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEach/ForEachDelegateMemoryTests.gen.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEach/ForEachDelegateMemoryTests.gen.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEach/ForEachDelegateMemoryTests.tt create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEach/ForEachDelegateMemoryTests.tt.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEach/ForEachGeneralTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEach/ForEachGeneralTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEach/ForEachMemoryTestFixtureBase.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEach/ForEachMemoryTestFixtureBase.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEach/MutableForEachTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEach/MutableForEachTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEachCodegen.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEachCodegen/ChunkForEachTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEachCodegen/ChunkForEachTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEachCodegen/ForEachTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEachCodegen/ForEachTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEachCodegen/ForEachWithStructuralChangesTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEachCodegen/ForEachWithStructuralChangesTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEachCodegen/SimpleJobTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ForEachCodegen/SimpleJobTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/IJobChunkTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/IJobChunkTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/IJobForEachCombinationsTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/IJobForEachCombinationsTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/IJobForEachTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/IJobForEachTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/IterationTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/IterationTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/JobBasicTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/JobBasicTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/JobComponentSystemDependencyTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/JobComponentSystemDependencyTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/JobSafetyTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/JobSafetyTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/MoveEntitiesFromTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/MoveEntitiesFromTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/NativeArraySharedValuesTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/NativeArraySharedValuesTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/PrefabComponentTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/PrefabComponentTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/SafetyTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/SafetyTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Serialization.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Serialization/SerializeTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Serialization/SerializeTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Serialization/WorldTest.yaml create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Serialization/WorldTest.yaml.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/SharedComponentDataTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/SharedComponentDataTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/SingletonTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/SingletonTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/SizeTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/SizeTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/StandaloneFixme.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/StandaloneFixme.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/SystemBaseDependencyTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/SystemBaseDependencyTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/SystemStateBufferElementTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/SystemStateBufferElementTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/SystemStateComponentTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/SystemStateComponentTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/TestCaseGeneric.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/TestCaseGeneric.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/TestComponentSystems.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/TestComponentSystems.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/TestComponents.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/TestComponents.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/TypeIndexOrderTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/TypeIndexOrderTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/TypeManagerTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/TypeManagerTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Types.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Types/ComponentTypeTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Types/ComponentTypeTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Types/Hash128Tests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Types/Hash128Tests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Types/LayoutUtilityTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Types/LayoutUtilityTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Unity.Entities.Tests.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/Unity.Entities.Tests.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/WorldDebuggingToolsTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/WorldDebuggingToolsTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/WorldTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/WorldTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/WriteGroupTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/WriteGroupTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ZeroPlayerTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Tests/ZeroPlayerTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/AlwaysSynchronizeSystemAttribute.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/AlwaysSynchronizeSystemAttribute.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/AlwaysUpdateSystemAttribute.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/AlwaysUpdateSystemAttribute.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ApiCompatibilityLevelTest.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ApiCompatibilityLevelTest.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/AssemblyInfo.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/AssemblyInfo.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/BlobBuilder.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/BlobBuilder.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Blobs.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Blobs.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ChangeVersionUtility.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ChangeVersionUtility.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ChunkAllocator.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ChunkAllocator.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ChunkDataUtility.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ChunkDataUtility.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ChunkListMap.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ChunkListMap.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/CodeGeneratedJobForEach.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/CodeGeneratedJobForEach/LambdaJobDescription.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/CodeGeneratedJobForEach/LambdaJobDescription.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/CodeGeneratedJobForEach/LambdaJobQueryConstructionMethods.gen.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/CodeGeneratedJobForEach/LambdaJobQueryConstructionMethods.gen.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/CodeGeneratedJobForEach/LambdaJobQueryConstructionMethods.tt create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/CodeGeneratedJobForEach/LambdaJobQueryConstructionMethods.tt.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/CodeGeneratedJobForEach/LambdaParameterValueProviders.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/CodeGeneratedJobForEach/LambdaParameterValueProviders.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/CodeGeneratedJobForEach/UniversalDelegates.gen.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/CodeGeneratedJobForEach/UniversalDelegates.gen.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/CodeGeneratedJobForEach/UniversalDelegates.tt create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/CodeGeneratedJobForEach/UniversalDelegates.tt.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ComponentDependencyManager.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ComponentDependencyManager.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ComponentSafetyHandles.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ComponentSafetyHandles.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ComponentSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ComponentSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ComponentSystemBase.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ComponentSystemBase.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ComponentSystemGroup.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ComponentSystemGroup.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ComponentSystemSorter.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ComponentSystemSorter.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ConverterVersionAttribute.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ConverterVersionAttribute.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/CopyUtility.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/CopyUtility.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/DOTSCompilerGeneratedAttribute.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/DOTSCompilerGeneratedAttribute.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/DebugView.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/DebugView.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/DefaultWorld.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/DefaultWorld.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/DynamicBlobAssetBatch.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/DynamicBlobAssetBatch.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityChangeSet.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityChangeSet.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityDiffer.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityDiffer.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityDifferArchetypeChanges.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityDifferArchetypeChanges.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityDifferBlobs.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityDifferBlobs.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityDifferClearMissingReferences.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityDifferClearMissingReferences.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityDifferComponentChanges.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityDifferComponentChanges.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityDifferCopyAndReplace.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityDifferCopyAndReplace.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityDifferEntityInChunkChanges.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityDifferEntityInChunkChanges.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityDifferValidation.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityDifferValidation.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityManagerDiffer.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityManagerDiffer.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityPatcher.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityPatcher.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityPatcherBlobs.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Diff/EntityPatcherBlobs.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/DisallowRefReturnCrossingThisAttribute.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/DisallowRefReturnCrossingThisAttribute.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityBatchInChunk.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityBatchInChunk.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityCommandBuffer.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityCommandBuffer.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityCommandBufferSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityCommandBufferSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityComponentStore.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityComponentStore.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityComponentStoreChangeArchetype.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityComponentStoreChangeArchetype.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityComponentStoreCreateArchetype.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityComponentStoreCreateArchetype.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityComponentStoreCreateDestroyEntities.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityComponentStoreCreateDestroyEntities.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityComponentStoreDebug.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityComponentStoreDebug.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityComponentStoreMoveEntities.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityComponentStoreMoveEntities.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityDataAccess.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityDataAccess.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityInChunk.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityInChunk.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManager.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManager.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerAccessComponentData.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerAccessComponentData.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerChangeArchetype.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerChangeArchetype.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerCopyEntitiesFrom.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerCopyEntitiesFrom.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerCreateArchetype.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerCreateArchetype.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerCreateDestroyEntities.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerCreateDestroyEntities.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerDebug.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerDebug.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerExclusiveEntityTransaction.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerExclusiveEntityTransaction.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerLocks.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerLocks.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerMoveEntities.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerMoveEntities.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerQuery.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerQuery.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerSerialization.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerSerialization.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerSync.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerSync.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerTypes.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerTypes.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerValidate.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerValidate.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerVersions.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityManagerVersions.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityQueryBuilder.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityQueryBuilder.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityQueryBuilder_ForEach.gen.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityQueryBuilder_ForEach.gen.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityQueryBuilder_ForEach.tt create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityQueryBuilder_ForEach.tt.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityQueryBuilder_With.gen.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityQueryBuilder_With.gen.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityQueryBuilder_With.tt create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityQueryBuilder_With.tt.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityQueryCache.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityQueryCache.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityRemapUtility.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/EntityRemapUtility.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ExclusiveEntityTransaction.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ExclusiveEntityTransaction.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/GenerateAuthoringComponentAttribute.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/GenerateAuthoringComponentAttribute.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/IComponentData.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/IComponentData.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/IJobChunk.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/IJobChunk.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/IJobForEach.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/IJobForEach.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/IJobForEach.gen.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/IJobForEach.gen.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/IJobForEach.tt create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/IJobForEach.tt.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/ArchetypeChunkArray.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/ArchetypeChunkArray.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/ArchetypeChunkIterator.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/ArchetypeChunkIterator.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/BufferFromEntity.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/BufferFromEntity.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/ChunkDataGatherJobs.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/ChunkDataGatherJobs.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/ChunkIterationUtility.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/ChunkIterationUtility.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/ComponentDataFromEntity.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/ComponentDataFromEntity.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/DynamicBuffer.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/DynamicBuffer.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/EntityQuery.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/EntityQuery.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/EntityQueryManager.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Iterators/EntityQueryManager.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/JetBrains.Annotations.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/JetBrains.Annotations.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/JobComponentSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/JobComponentSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ManagedComponentStore.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ManagedComponentStore.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/RetainBlobAssetSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/RetainBlobAssetSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/SceneViewWorldPositionAttribute.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/SceneViewWorldPositionAttribute.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ScriptBehaviourUpdateOrder.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/ScriptBehaviourUpdateOrder.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Serialization.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Serialization/BinaryPrimitiveAdapter.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Serialization/BinaryPrimitiveAdapter.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Serialization/BinarySerialization.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Serialization/BinarySerialization.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Serialization/BinaryWriter.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Serialization/BinaryWriter.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Serialization/SerializeUtility.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Serialization/SerializeUtility.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Serialization/SerializeUtilityToYaml.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Serialization/SerializeUtilityToYaml.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Serialization/YamlWriter.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Serialization/YamlWriter.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/SortingUtilities.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/SortingUtilities.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Static.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Static.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Stubs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Stubs/Unity.Assertions.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Stubs/Unity.Assertions/Assert.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Stubs/Unity.Assertions/Assert.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Stubs/Unity.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Stubs/Unity/Debug.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Stubs/Unity/Debug.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Stubs/Unity/ProfilerMarker.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Stubs/Unity/ProfilerMarker.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/SystemBase.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/SystemBase.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/SystemDependencySafetyUtility.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/SystemDependencySafetyUtility.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/Archetype.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/Archetype.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/ArchetypeChunkData.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/ArchetypeChunkData.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/BufferHeader.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/BufferHeader.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/CalculateReaderWriterDependency.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/CalculateReaderWriterDependency.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/Chunk.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/Chunk.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/CleanupEntity.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/CleanupEntity.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/ComponentType.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/ComponentType.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/ComponentTypeInArchetype.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/ComponentTypeInArchetype.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/ComponentTypes.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/ComponentTypes.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/Entity.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/Entity.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/EntityArchetype.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/EntityArchetype.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/FastEquality.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/FastEquality.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/Hash128.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/Hash128.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/LayoutUtility.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/LayoutUtility.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/RegisterGenericComponentTypeAttribute.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/RegisterGenericComponentTypeAttribute.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/SceneTagComponent.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/SceneTagComponent.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/SharedComponentValues.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/SharedComponentValues.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/TypeHash.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/TypeHash.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/TypeManager.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Types/TypeManager.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Unity.Entities.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/Unity.Entities.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/UnsafeList.gen.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/UnsafeList.gen.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/UnsafeList.tt create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/UnsafeList.tt.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/World.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/World.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/WorldDebuggingTools.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/WorldDebuggingTools.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/WorldSystemFiltering.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/WorldSystemFiltering.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/WorldTime.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities/WorldTime.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Mathematics.Extensions.Hybrid.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Mathematics.Extensions.Hybrid/BoundsToAABB.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Mathematics.Extensions.Hybrid/BoundsToAABB.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Mathematics.Extensions.Hybrid/Unity.Mathematics.Extensions.Hybrid.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Mathematics.Extensions.Hybrid/Unity.Mathematics.Extensions.Hybrid.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Mathematics.Extensions.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Mathematics.Extensions/AABB.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Mathematics.Extensions/AABB.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Mathematics.Extensions/GeneratePoints.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Mathematics.Extensions/GeneratePoints.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Mathematics.Extensions/MinMaxAABB.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Mathematics.Extensions/MinMaxAABB.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Mathematics.Extensions/Unity.Mathematics.Extensions.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Mathematics.Extensions/Unity.Mathematics.Extensions.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor.Tests.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor.Tests/SubSceneEditorTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor.Tests/SubSceneEditorTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor.Tests/Unity.Scenes.Editor.Tests.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor.Tests/Unity.Scenes.Editor.Tests.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/AssemblyInfo.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/AssemblyInfo.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/BuildStepCreateResourceCatalog.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/BuildStepCreateResourceCatalog.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/ConversionWarningsEditor.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/ConversionWarningsEditor.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/EditorEntityScenes.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/EditorEntityScenes.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/EditorSceneLiveLinkToPlayerSendSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/EditorSceneLiveLinkToPlayerSendSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/EditorSubSceneLiveLinkSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/EditorSubSceneLiveLinkSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/HierarchyOverlay.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/HierarchyOverlay.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLink.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLink/Assets.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLink/Assets/empty.unity create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLink/Assets/empty.unity.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLink/BuildStepBuildClassicLiveLink.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLink/BuildStepBuildClassicLiveLink.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLink/LiveLinkAssetBundleBuildSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLink/LiveLinkAssetBundleBuildSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLink/LiveLinkBuildImporter.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLink/LiveLinkBuildImporter.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLink/LiveLinkBuildPipeline.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLink/LiveLinkBuildPipeline.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLink/LiveLinkEditorEventSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLink/LiveLinkEditorEventSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLink/LiveLinkEditorSystemGroup.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLink/LiveLinkEditorSystemGroup.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLinkConnection.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLinkConnection.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLinkDiffGenerator.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/LiveLinkDiffGenerator.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/RetainBlobAssetsSetting.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/RetainBlobAssetsSetting.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/SceneImporterData.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/SceneImporterData.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/SceneInspector.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/SceneInspector.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/SceneMetaDataImporter.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/SceneMetaDataImporter.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/Steps.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/Steps/BuildStepSubSceneBundles.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/Steps/BuildStepSubSceneBundles.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/SubSceneContextMenu.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/SubSceneContextMenu.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/SubSceneImporter.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/SubSceneImporter.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/SubSceneInspector.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/SubSceneInspector.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/SubSceneInspectorUtility.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/SubSceneInspectorUtility.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/SubSceneTransformHierarchyHook.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/SubSceneTransformHierarchyHook.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/TimeBasedCallbackInvoker.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/TimeBasedCallbackInvoker.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/TypeDependencyCache.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/TypeDependencyCache.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/Unity.Scenes.Editor.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Editor/Unity.Scenes.Editor.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Editmode.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Editmode/DebugStringTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Editmode/DebugStringTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Editmode/PatchingEndToEndWithSerialization.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Editmode/PatchingEndToEndWithSerialization.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Editmode/SaveAndLoadEndToEnd.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Editmode/SaveAndLoadEndToEnd.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Editmode/SharedComponentSerializeTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Editmode/SharedComponentSerializeTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Editmode/SubtractArraysTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Editmode/SubtractArraysTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Editmode/Unity.Scenes.Hybrid.Tests.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Editmode/Unity.Scenes.Hybrid.Tests.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Playmode.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Playmode/AuthoringWithMaterial.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Playmode/AuthoringWithMaterial.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Playmode/SubSceneTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Playmode/SubSceneTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Playmode/TestSceneWithSubScene.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Playmode/TestSceneWithSubScene.unity create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Playmode/TestSceneWithSubScene.unity.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Playmode/TestSceneWithSubScene/TestSubScene.unity create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Playmode/TestSceneWithSubScene/TestSubScene.unity.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Playmode/Unity.Scenes.Hybrid.Tests.Playmode.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Playmode/Unity.Scenes.Hybrid.Tests.Playmode.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Test.mat create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.Tests/Test.mat.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/AssemblyInfo.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/AssemblyInfo.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/AssetBundleManager.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/AssetBundleManager.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/AssetObjectManifest.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/AssetObjectManifest.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/AsyncLoadSceneOperation.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/AsyncLoadSceneOperation.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/EditorUpdateUtility.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/EditorUpdateUtility.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/EntityChangeSetSerialization.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/EntityChangeSetSerialization.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/EntitySceneOptimization.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/EntitySceneOptimization.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/EntityScenesPaths.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/EntityScenesPaths.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/GlobalAssetObjectResolver.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/GlobalAssetObjectResolver.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLink.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLink/LiveLinkMsg.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLink/LiveLinkMsg.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLink/LiveLinkPlayerAssetRefreshSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLink/LiveLinkPlayerAssetRefreshSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLink/LiveLinkPlayerSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLink/LiveLinkPlayerSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLink/LiveLinkPlayerSystemGroup.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLink/LiveLinkPlayerSystemGroup.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLink/LiveLinkResolveSceneReferenceSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLink/LiveLinkResolveSceneReferenceSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLink/LiveLinkSceneChangeTracker.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLink/LiveLinkSceneChangeTracker.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLink/MessageEventArgsExtensions.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLink/MessageEventArgsExtensions.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLinkPatcher.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/LiveLinkPatcher.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/PublicEntityRef.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/PublicEntityRef.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/ResolveSceneReferenceSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/ResolveSceneReferenceSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/SceneSectionBundleTag.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/SceneSectionBundleTag.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/SceneSectionStreamingSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/SceneSectionStreamingSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/SceneSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/SceneSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/SceneSystemGroup.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/SceneSystemGroup.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/SubScene.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/SubScene.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/Unity.Scenes.Hybrid.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Scenes.Hybrid/Unity.Scenes.Hybrid.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Editor.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Editor/TransformComponentEditors.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Editor/TransformComponentEditors.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Editor/Unity.Transforms.Editor.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Editor/Unity.Transforms.Editor.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/CompanionGameObjectUpdateTransformSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/CompanionGameObjectUpdateTransformSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/CopyInitialTransformFromGameObjectProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/CopyInitialTransformFromGameObjectProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/CopyInitialTransformFromGameObjectSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/CopyInitialTransformFromGameObjectSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/CopyTransformFromGameObjectProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/CopyTransformFromGameObjectProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/CopyTransformFromGameObjectSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/CopyTransformFromGameObjectSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/CopyTransformToGameObjectProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/CopyTransformToGameObjectProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/CopyTransformToGameObjectSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/CopyTransformToGameObjectSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/LocalToWorldProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/LocalToWorldProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/NonUniformScaleProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/NonUniformScaleProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/RotationProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/RotationProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/TransformConversion.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/TransformConversion.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/TranslationProxy.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/TranslationProxy.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/Unity.Transforms.Hybrid.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Hybrid/Unity.Transforms.Hybrid.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.PerformanceTests.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.PerformanceTests/ChangeHierarchyTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.PerformanceTests/ChangeHierarchyTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.PerformanceTests/Unity.Transforms.PerformanceTests.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.PerformanceTests/Unity.Transforms.PerformanceTests.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Tests.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Tests/TransformTests.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Tests/TransformTests.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Tests/Unity.Transforms.Tests.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.Tests/Unity.Transforms.Tests.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/BoneIndexOffset.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/BoneIndexOffset.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/CompositeRotation.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/CompositeRotation.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/CompositeScale.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/CompositeScale.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/EndFrameTransformSystems.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/EndFrameTransformSystems.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/Frozen.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/Frozen.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/LocalToParent.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/LocalToParent.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/LocalToParentSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/LocalToParentSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/LocalToWorld.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/LocalToWorld.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/NonUniformScale.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/NonUniformScale.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/Parent.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/Parent.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/ParentScaleInverse.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/ParentScaleInverse.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/ParentSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/ParentSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/PostRotationEuler.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/PostRotationEuler.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/Rotation.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/Rotation.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/RotationEuler.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/RotationEuler.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/Scale.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/Scale.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/TRSToLocalToParentSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/TRSToLocalToParentSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/TRSToLocalToWorldSystem.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/TRSToLocalToWorldSystem.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/Translation.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/Translation.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/Unity.Transforms.asmdef create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/Unity.Transforms.asmdef.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/WorldToLocal.cs create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Transforms/WorldToLocal.cs.meta create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/package.json create mode 100644 ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/package.json.meta diff --git a/ECSSamples/Assets/Advanced/Boids/Scripts/BoidSystem.cs b/ECSSamples/Assets/Advanced/Boids/Scripts/BoidSystem.cs index 70758fabc..efa999533 100644 --- a/ECSSamples/Assets/Advanced/Boids/Scripts/BoidSystem.cs +++ b/ECSSamples/Assets/Advanced/Boids/Scripts/BoidSystem.cs @@ -25,14 +25,17 @@ public class BoidSystem : SystemBase EntityQuery m_TargetQuery; EntityQuery m_ObstacleQuery; - // In this sample there are 3 total unique boid variants, one for each unique value of the - // Boid SharedComponent (note: this includes the default uninitialized value at - // index 0, which isnt actually used in the sample). + // 在这个示例中,总共有3个特有的boid变体,每个boid SharedComponent的特有 + // 值对应其中一个(注意:这包括索引为0处未初始化的默认值,该值在示例中没有实际使用)。 List m_UniqueTypes = new List(3); + // 累加每个Cell里的Boids的“positions”(separations)和“headings”(alignements)来: // This accumulates the `positions` (separations) and `headings` (alignments) of all the boids in each cell to: + // 1) 计算每个Cell中的boid数量 // 1) count the number of boids in each cell + // 2) 找到每个boid Cell里最近的障碍和目标 // 2) find the nearest obstacle and target to each boid cell + // 3) // 3) track which array entry contains the accumulated values for each boid's cell // In this context, the cell represents the hashed bucket of boids that are near one another within cellRadius // floored to the nearest int3. diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/CHANGELOG.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/CHANGELOG.md new file mode 100644 index 000000000..fc9941b11 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/CHANGELOG.md @@ -0,0 +1,519 @@ +# Change log + + +## [0.6.0] - 2020-02-17 + +### Added + +* The `[GenerateAuthoringComponent]` attribute is now allowed on structs implementing `IBufferElementData`. An authoring component is automatically generated to support adding a `DynamicBuffer` of the type implementing `IBufferElementData` to an entity. +* Added new `SystemBase` base class for component systems. This new way of defining component systems manages dependencies for the user (manual dependency management is still possible by accessing the `SystemBase.Dependency` field directly). +* New `ScheduleParallel` methods in `IJobChunk` and `Entities.ForEach` (in `SystemBase`) to make parallel scheduling of jobs explicit. `ScheduleSingle` in `IJobChunk` indicates scheduling work to be done in a non-parallel manner. +* New editor workflow to quickly and easily build LiveLink player using the `BuildConfiguration` API. +* Adds Live Link support for `GameObject` scenes. +* The `SceneSystem` API now also loads `GameObject` scenes via `LoadSceneAsync` API. +* Added new build component for LiveLink settings in `Unity.Scenes.Editor` to control how initial scenes are handled (LiveLink all, embed all, embed first). +* Users can now inspect post-procssed IL code inside Unity Editor: `DOTS` -> `DOTS Compiler` -> `Open Inspector` + +### Changed + + * The package `com.unity.build` has been merged into the package `com.unity.platforms`. As such, removed the dependency on `com.unity.build@0.1.0-preview` and replaced it with `com.unity.platforms@0.2.1-preview.1`. Please read the changelog of `com.unity.platforms` for more details. +* Managed components are now stored in a way that will generate less GC allocations when entities change archetype. +* Moved `Unity.Entities.ICustomBootstrap` from Unity.Entities.Hybrid to Unity.Entities. +* `World.Dispose()` now completes all reader/writer jobs on the `World`'s `EntityManager` before releasing any resources, to avoid use-after-free errors. +* Fix `AssemblyResolveException` when loading a project with dependent packages that are using Burst in static initializers or `InitializeOnLoad`. +* `.sceneWithBuildSettings` files that are stored in Assets/SceneDependencyCache are no longer rebuilt constantly. Because they are required for SubScene behaviour to work in the editor, if these are deleted they are recreated by OnValidate of the SubScene in the edited Scene. They should also be recreated on domain reload (restarting unity, entering/exiting playmode, etc). +* `EntityQuery.cs`: Overloads of `CreateArchetypeChunkArray`, `ToComponentDataArray`, `ToEntityArray`, and `CopyFromComponentDataArray` that return a JobHandle (allowing the work to be done asynchronously) have been renamed to add `Async` to the title (i.e. `ToComponentDataArrayAsync`). The old overloads have been deprecated and an API Updater clause has been added. + * `Entities.WithName` now only accepts names that use letters, digits, and underscores (not starting with a digit, no two consecutive underscores) + * Updated package `com.unity.properties` to version `0.10.4-preview`. + * Updated package `com.unity.serialization` to version `0.6.4-preview`. + * The entity debugger now remembers whether chunk info panel is visible + * The entity debugger now displays the full name for nested types in the system list + * The entity debugger now sorts previously used filter components to the top of the filter GUI + * Bumped burst version to include the new features and fixes including: + * Fix an issue with function pointers being corrupted after a domain reload that could lead to hard crashes. + * Fix potential deadlock between Burst and the AssetDatabase if burst is being used when building the database. + +### Deprecated + + * Method `GetBuildSettingsComponent` on class `GameObjectConversionSystem` has been renamed to `GetBuildConfigurationComponent`. + * Method `TryGetBuildSettingsComponent` on class `GameObjectConversionSystem` has been renamed to `TryGetBuildConfigurationComponent`. + * Member `BuildSettings` on class `GameObjectConversionSettings` has been renamed to `BuildConfiguration`. + * Member `BuildSettingsGUID` on class `SceneSystem` has been renamed to `BuildConfigurationGUID`. + +### Removed + + * Removed expired API `SceneSectionData.SharedComponentCount` + * Removed expired API `struct SceneData` + * Removed expired API `SubScene._SceneEntities` + * Removed expired API `World.Active` + +### Fixed + +* Ability to open and close SubScenes from the scene hierarchy window (Without having to move cursor to inspector window). +* Ability to create a new empty Sub Scene without first creating a game object. +* Improve performance of SubScene loading and change tracking in the editor. +* Fixed regression where `GetSingleton` would create a new query on every call. +* Fixed SubScenes trying to load an already loaded AssetBundle when loaded multiple times on the same player, but with different Worlds. +* Make it clear that SubScenes in Prefabs are not supported. +* Lambda job codegen tests now fail if the error message does not contain the expected contents. +* Improved performance of setting up the world required for game object conversion +* The `chunkIndex` parameter passed to `IJobChunk.Execute()` now has the correct value. +* Fixed an error which caused entities with `ISystemStateSharedComponentData` components to not be cleaned up correctly. +* Managed components containing `Entity` fields will now correctly serialize. +* Fixed issue where `BlobAssetVerifier` will throw error if it can't resolve a type. +* Exposed the Managed Component extensions for `EntityQuery`. +* `Entities.ForEach` now identifies when `this` of the enclosing system is captured due to calling an extension method on it when compilation fails since the lambda was emitted as a member function +* `Entities.ForEach` now reports when a field of the outer system is captured and used by reference when compilation fails since the lambda was emitted as a member function +* `Entities.ForEach` does not erronously point to calling static functions as the source of the error when compilation fails since the lambda was emitted as a member function +* Debugging inside of `Entities.ForEach` with Visual Studio 2017/2019 (some debugging features will need an upcoming update of the com.unity.ide.visualstudio package). +* `EntityQuery.ToComponentArray` with `T` deriving from `UnityEngine.Component` now correctly collects all data in a chunk +* Fixed an issue with `ComponentSystemBase.GetEntityQuery` and `EntityManager.CreateEntityQuery` calls made with `EntityQueryDesc` not respecting read-only permissions. + + +## [0.5.1] - 2020-01-28 + +### Changed + +* Constructor-related exceptions thrown during `World.CreateSystem` will now included the inner exception details. +* `DefaultWorldInitialization.GetAllSystems` now returns `IReadOnlyList` instead of `List` +* `DefaultWorldInitialization.AddSystemsToRootLevelSystemGroups` now takes `IEnumerable` instead of `List` + +### Fixed + +* Fixed an issue where `BlobAssetReference` types was not guaranteed to be 8-byte aligned on all platforms which could result in failing to read Blob data in components correctly on 32-bit platforms. +* Fixed issue in `MinMaxAABB.Equals()` comparing `Min` to itself rather than `other`. +* `Entities.ForEach` now properly treats `in` parameters of `DynamicBuffer` type as read-only +* Fixed potential crash caused by a leaked job after an exception is thrown during a call to `IJobChunk.Schedule`. +* Fixed regression in `ComponentSystemBase.GetSingleton()` where a new query would be created every timee the function is called. + + +## [0.5.0] - 2020-01-16 + +### Added + +* Added AndroidHybrid.buildpipeline with RunStepAndroid + +### Changed + +* `Entities.WithReadOnly`, `Entities.WithNativeDisableParallelForRestriction`, `Entities.WithDeallocateOnJobCompletion`, `Entities.WithNativeDisableSafetyRestriction` and `Entities.WithNativeDisableUnsafePtrRestriction` now check their argument types for the proper attributes (`[NativeContainer]`, `[NativeContainerSupportsDeallocateOnJobCompletion]`) at compile time and throw an error when used on a field of a user defined type. +* Log entries emitted during subscene conversion without a context object are now displayed in the subscene inspector instead of discarded + +### Deprecated + +* Adding removal dates to the API that have been deprecated but did not have the date set. +* `BlobAssetReference`: `Release()` was deprecated, use `Dispose()` instead. + +### Removed + + * Adding removal dates to the API that have been deprecated but did not have the date set. + * `BlobAssetReference`: `Release()` was deprecated, use `Dispose()` instead. + * `EntityQuery.cs`: Removed expired API `CalculateLength()`, `SetFilter()` and `SetFilterChanged()`. + +### Fixed +* Fixed an issue where trying to perform EntityRemapping on Managed Components could throw if a component field was null. +* `EntityManager.MoveEntitiesFrom` with query was not bumping shared component versions, order versions or dirty versions correctly. Now it does. +* Fixed that adding a Sub Scene component from the Add Components dropdown was not reflected in the Hierarchy. +* Fixed so that Undo/Redo of changes to SceneAsset objectfield in the Sub Scene Inspector is reflected in the Hierarchy. +* Make it clear when Sub Scene duplicates are present: shown in Hierarchy and by showing a warning box in the Inspector. +* Support Undo for 'Create Sub Scene From Selection' context menu item. +* Better file name error handling for the 'New Sub Scene From Selection' context menu item. +* Keep sibling order for new Sub Scene when created using 'New Sub Scene From Selection' (prevents the new Sub Scene from ending as the last sibling). +* Handle if selection contains part of a Prefab instance when creating Sub Scene from Selection. +* Fix dangling loaded Sub Scenes not visualized in the Hierarchy when removing Scene Asset reference in Sub Scene component. +* Fixed an issue with invalid IL generated by `Entities.ForEach` when structs are captured as locals from two different scopes and their fields are accessed. +* Make it clear in the Hierarchy and Sub Scene Inspector that nesting Sub Scenes is not yet supported. +* Fixed an issue with `BinaryWriter` where serializing a `System.String[]` with a single element would throw an exception. +* Fixed an issue with `ComponentSystem.GetEntityQuery` and `JobComponentSystem.GetEntityQuery` which caused improper caching of queries when using "None" or "Any" fields. + + +## [0.4.0] - 2019-12-16 + +**This version requires Unity 2019.3.0f1+** + +### New Features + +* Two new methods added to the public API: + * `void EntityCommandBuffer.AddComponent(EntityQuery entityQuery)` + * `void EntityCommandBuffer.RemoveComponent(EntityQuery entityQuery)` +* BlobArray, BlobString & BlobPtr are not allowed to be copied by value since they carry offset pointers that aree relative to the location of the memory. This could easily result in programming mistakes. The compiler now prevents incorrect usage by enforcing any type attributed with [MayOnlyLiveInBlobStorage] to never be copied by value. + +### Changes + +* Deprecates `TypeManager.CreateTypeIndexForComponent` and it's other component type variants. Types can be dynamically added (in Editor builds) by instead passing the new unregistered types to `TypeManager.AddNewComponentTypes` instead. +* `RequireForUpdate(EntityQuery)` and `RequireSingletonForUpdate` on a system with `[AlwaysUpdate]` will now throw an exception instead of being ignored. +* ChangeVersionUtility.IncrementGlobalSystemVersion & ChangeVersionUtility.InitialGlobalSystemVersion is now internal. They were accidentally public previously. +* Entity inspector now shows entity names and allows to rename the selected entity +* Improved entity debugger UI +* Create WorldRenderBounds for prefabs and disabled entities with renderers during conversion, this make instantiation of those entities significantly faster. +* Reduced stack depth of System.Update / OnUpdate method (So it looks better in debugger) +* Assert when using EntityQuery from another world +* Using an EntityQuery created in one world on another world was resulting in memory corruption. We now detect it in the EntityManager API and throw an argument exception +* Structural changes now go through a bursted codepath and are significantly faster +* DynamicBuffer.Capacity is now settable + +### Fixes + +* Remove unnecessary & incorrect warning in DeclareReferencedPrefab when the referenced game object is a scene object +* GameObjects with ConvertAndInject won't get detached from a non-converted parent (fixes regression) +* Fixed a crash that could occur when destroying an entity with an empty LinkedEntityGroup. +* Updated performance package dependency to 1.3.2 which fixes an obsoletion warning +* The `EntityCommandBuffer` can be replayed repeatedly. +* Fixed exception in entity binary scene serialization when referencing a null UnityEngine.Object from a shared component +* Moving scripts between assemblies now triggers asset bundle rebuilds where necessary for live link +* Fixed LiveLink on Android + + +## [0.3.0] - 2019-12-03 + +### New Features + +* ENABLE_SIMPLE_SYSTEM_DEPENDENCIES define can now be used to replace the automatic dependency chaining with a much simplified strategy. With ENABLE_SIMPLE_SYSTEM_DEPENDENCIES it simply chains jobs in the order of the systems against previous jobs. Without ENABLE_SIMPLE_SYSTEM_DEPENDENCIES, dependencies are automatically chained based on read / write access of component data of each system. In cases when there game code is forced to very few cores or there are many systems, this can improve performance since it reduces overhead in calculating optimal dependencies. +* Added `DebuggerTypeProxy` for `MultiListEnumerator` (e.g. this makes the results of `GameObjectConversionSystem.GetEntities` calls readable in the debugger) +* Two new methods added to the public API: + * EntityManager.CreateEntity(Archetype type, int count, Allocator allocator); + * EntityManager.Instantiate(Entity entity, int count, Allocator allocator); + Both methods return a `NativeArray`. + +### Changes + +Removed the following deprecated API as announced in/before `0.1.1-preview`: + +* From GameObjectConversionUtility.cs: `ConvertIncrementalInitialize()` and `ConvertScene()`. +* From Translation.cs: `struct Position`. +* From EditorEntityScenes.cs: `WriteEntityScene()`. +* From GameObjectConversionSystem.cs: `AddReferencedPrefab()`, `AddDependency()`, `AddLinkedEntityGroup()`, `DstWorld`. +* From DefaultWorld.cs: `class EndPresentationEntityCommandBufferSystem`. + +### Fixes + +* ConvertAndInject won't destroy the root GameObject anymore (fixes regression introduced in 0.2.0) +* Fix Android/iOS build when using new build pipeline + * Provide correct application extension apk, aab or empty for project export when building to Android + + +## [0.2.0] - 2019-11-22 + +**This version requires Unity 2019.3 0b11+** + +### New Features + +* Automatically generate authoring components for IComponentData with IL post-processing. Any component data marked with a GenerateAuthoringComponent attribute will generate the corresponding authoring MonoBehaviour with a Convert method. +* BuildSettings assets are now used to define a single build recipe asset on disk. This gives full control over the build pipeline in a modular way from C# code. + * BuildSettings let you attach builtin or your own custom IBuildSettingsComponents for full configurability + * BuildPipelines let you define the exact IBuildStep that should be run and in which order + * IBuildStep is either builtin or your own custom build step + * BuildSettings files can be inherited so you can easily make base build settings with most configuration complete and then do minor adjustments per build setting + * Right now most player configuration is still in the existing PlayerSettings, our plan is to over time expose all Player Settings via BuildSettings as well to ease configuration of complex projects with many build recipes & artifacts +* SubScenes are now automatically converted to entity binary files & cached by the asset pipeline. The entity cache files previously present in the project folder should be removed. Conversion systems can use the ConverterVersion attribute to convert to trigger a reconversion if the conversion system has changed behaviour. The conversion happens asynchronously in another process. Thus on first open the subscenes might not show up immediately. + +* Live link builds can be built with the new BuildSettings pipeline. + Open sub scene + * Closed Entity scenes are built by the asset pipeline and loaded via livelink on demand + * Opened Entity scenes are send via live entity patcher with patches on a per component / entity basis based on what has changed + * Assets referenced by entity scenes are transferred via livelink when saving the asset + * Scenes loaded as game objects are currently not live linked (This is in progress) + by assigning the LiveLink build pipeline + +* `Entities.ForEach` syntax for supplying jobified code in a `JobComponentSystem`'s `OnUpdate` method directly by using a lambda (instead of supplying an additional `IJobForEach`). + +* `EntityQueryMask` has been added, which allows for quick confirmation of if an Entity would be returned by an `EntityQuery` without filters via `EntityQueryMask.Matches(Entity entity)`. An EntityQueryMask can be obtained by calling `EntityManager.GetEntityQueryMask(EntityQuery query).` +* Unity Entities now supports the _Fast Enter playmode_ which can be enabled in the project settings. It is recommended to be turned on for all dots projects. +* The UnityEngine component `StopConvertToEntity` can be used to interrupt `ConvertToEntity` recursion, and should be preferred over a `ConvertToEntity` set to "convert and inject" for that purpose. +* _EntityDebugger_ now shows IDs in a separate column, so you can still see them when entities have custom names +* Entity references in the Entity Inspector have a "Show" button which will select the referenced Entity in the Debugger. +* An `ArchetypeChunkIterator` can be created by calling `GetArchetypeChunkIterator` on an `EntityQuery`. You may run an `IJobChunk` while bypassing the Jobs API by passing an `ArchetypeChunkIterator` into `IJobChunk.RunWithoutJobs()`. +* The `[AlwaysSynchronizeSystem]` attribute has been added, which can be applied to a `JobComponentSystem` to force it to synchronize on all of its dependencies before every update. +* `BoneIndexOffset` has been added, which allows the Animation system to communicate a bone index offset to the Hybrid Renderer. +* Initial support for using Hybrid Components during conversion, see the HybridComponent sample in the StressTests folder. +* New `GameObjectConversionSystem.ForkSettings()` that provides a very specialized method for creating a fork of the current conversion settings with a different "EntityGuid namespace", which can be used for nested conversions. This is useful for example in net code where multiple root-level variants of the same authoring object need to be created in the destination world. +* `EntityManager` `LockChunkOrder` and `UnlockChunkOrder` are deprecated. +* Entity Scenes can be loaded synchronously (during the next streaming system update) by using `SceneLoadFlags.BlockOnStreamIn` in `SceneSystem.LoadParameters`. +* `EntityCommandBuffer` can now be played back on an `ExclusiveEntityTransaction` as well as an `EntityManager`. This allows ECB playback to be invoked from a job (though exclusive access to the EntityManager data is still required for the duration of playback). + +### Upgrade guide +* If you are using SubScenes you must use the new BuildSettings assets to make a build & run it. SubScenes are not supported from the File -> BuildSettings... & File -> Build and Run workflows. +* Entities requires AssetDatabase V2 for certain new features, we do not provide support for AssetDatabase V1. + +### Fixes + +* Setting `ComponentSystemGroup.Enabled` to `false` now calls `OnStopRunning()` recursively on the group's member systems, not just on the group itself. +* Updated Properties pacakge to `0.10.3-preview` to fix an exception when showing Physics ComponentData in the inspector as well as fix IL2CPP Ahead of Time linker errors for generic virtual function calls. +* The `LocalToParentSystem` will no longer write to the `LocalToWorld` component of entities that have a component with the `WriteGroup(typeof(LocalToWorld))`. +* Entity Debugger styling work better with Pro theme +* Entity Inspector no longer has runaway indentation +* Fixed issue where `AddSharedComponentData`, `SetSharedComponentData` did not always update `SharedComponentOrderVersion`. +* Fixes serialization issue when reading in managed `IComponentData` containing array types and `UnityEngine.Object` references. +* No exception is thrown when re-adding a tag component with `EntityQuery`. +* `AddComponent(NativeArray)` now reliably throws an `ArgumentException` if any of the target entities are invalid. +* Fixed an issue where the Entity Debugger would not repaint in edit mode +* Marking a system as `[UpdateInGroup(typeof(LateSimulationSystemGroup))]` no longer emits a warning about `[DisableAutoCreation]`. +* Fixed rendering of chunk info to be compatible with HDRP +* Fixed issue where `ToComponentDataArray` ignored the filter settings on the `EntityQuery` for managed component types. + +### Changes + +* Deprecated `DynamicBuffer.Reserve` and made `DynamicBuffer.Capacity` a settable property. `DynamicBuffer.Reserve(10)` should now be `DynamicBuffer.Capacity = 10`. +* Moved `NativeString` code from Unity.Entities to Unity.Collections. +* Updated dependencies for this package. +* Significantly improved `Entity` instantiation performance when running in-Editor. +* Added support for managed `IComponentData` types such as `class MyComponent : IComponentData {}` which allows managed types such as GameObjects or List<>s to be stored in components. Users should use managed components sparingly in production code when possible as these components cannot be used by the Job System or archetype chunk storage and thus will be significantly slower to work with. Refer to the documentation for [component data](Documentation~/component_data.md) for more details on managed component use, implications and prevention. +* 'SubSceneStreamingSystem' has been renamed to `SceneSectionStreamingSystem` and is now internal +* Deprecated `_SceneEntities` in `SubScene.cs`. Please use `SceneSystem.LoadAsync` / `Unload` with the respective SceneGUID instead. This API will be removed after 2019-11-22. +* Updated `com.unity.serialization` to `0.6.3-preview`. +* The deprecated `GetComponentGroup()` APIs are now `protected` and can only be called from inside a System like their `GetEntityQuery()` successors. +* All GameObjects with a ConvertToEntity set to "Convert and Destroy" will all be processed within the same conversion pass, this allows cross-referencing. +* Duplicate component adds are always ignored +* When adding component to single entity via EntityQuery, entity is moved to matching chunk instead of chunk achetype changing. +* "Used by Systems" list skips queries with filters +* Managed `IComponentData` no longer require all fields to be non-null after default construction. +* `ISharedComponentData` is serialized inline with entity and managed `IComponentData`. If a shared component references a `UnityEngine.Object` type, that type is serialized separately in an "objrefs" resource asset. +* `EntityManager` calls `EntityComponentStore` via burst delegates for `Add`/`Remove` components. +* `EntityComponentStore` cannot throw exceptions (since called as burst delegate from main thread.) +* `bool ICustomBootstrap.Initialize(string defaultWorldName)` has changed API with no deprecated fallback. It now simply gives you a chance to completely replace the default world initialization by returning true. +* `ICustomBootstrap` & `DefaultWorldInitialization` is now composable like this: +``` +class MyCustomBootStrap : ICustomBootstrap +{ + public bool Initialize(string defaultWorldName) + { + Debug.Log("Executing bootstrap"); + var world = new World("Custom world"); + World.DefaultGameObjectInjectionWorld = world; + var systems = DefaultWorldInitialization.GetAllSystems(WorldSystemFilterFlags.Default); + + DefaultWorldInitialization.AddSystemsToRootLevelSystemGroups(world, systems); + ScriptBehaviourUpdateOrder.UpdatePlayerLoop(world); + return true; + } +} +``` +* `ICustomBootstrap` can now be inherited and only the most deepest subclass bootstrap will be executed. +* `DefaultWorldInitialization.GetAllSystems` is not affected by bootstrap, it simply returns a list of systems based on the present dlls & attributes. +* `Time` is now available per-World, and is a property in a `ComponentSystem`. It is updated from the `UnityEngine.Time` during the `InitializationSystemGroup` of each world. If you need access to time in a sytem that runs in the `InitializationSystemGroup`, make sure you schedule your system after `UpdateWorldTimeSystem`. `Time` is also a limited `TimeData` struct; if you need access to any of the extended fields available in `UnityEngine.Time`, access `UnityEngine.Time` explicitly` +* Systems are no longer removed from a `ComponentSystemGroup` if they throw an exception from their `OnUpdate`. This behavior was more confusing than helpful. +* Managed IComponentData no longer require implementing the `IEquatable<>` interface and overriding `GetHashCode()`. If either function is provided it will be preferred, otherwise the component will be inspected generically for equality. +* `EntityGuid` is now constructed from an originating ID, a namespace ID, and a serial, which can be safely extracted from their packed form using new getters. Use `a` and `b` fields when wanting to treat this as an opaque struct (the packing may change again in the future, as there are still unused bits remaining). The a/b constructor has been removed, to avoid any ambiguity. +* Updated `com.unity.platforms` to `0.1.6-preview`. +* The default Api Compatibility Level should now be `.NET Standard 2.0` and a warning is generated when the project uses `.NET 4.x`. +* Added `[UnityEngine.ExecuteAlways]` to `LateSimulationSystemGroup`, so its systems run in Edit Mode. + + +## [0.1.1] - 2019-08-06 + +### New Features +* EntityManager.SetSharedComponentData(EntityQuery query, T componentData) has been added which lets you efficiently swap a shared component data for a whole query. (Without moving any component data) + +### Upgrade guide + +* The deprecated `OnCreateManager` and `OnDestroyManager` are now compilation errors in the `NET_DOTS` profile as overrides can not be detected reliably (without reflection). +To avoid the confusion of "why is that not being called", especially when there is no warning issued, this will now be a compilation error. Use `OnCreate` and `OnDestroy` instead. + +### Changes + +* Updated default version of burst to `1.1.2` + +### Fixes + +* Fixed potential memory corruption when calling RemoveComponent on a batch of entities that didn't have the component. +* Fixed an issue where an assert about chunk layout compatibility could be triggered when adding a shared component via EntityManager.AddSharedComponentData(EntityQuery entityQuery, T componentData). +* Fixed an issue where Entities without any Components would cause UI errors in the Chunk Info view +* Fixed EntityManager.AddComponent(NativeArray entities, ComponentType componentType) so that it handles duplicate entities in the input NativeArray. Duplicate entities are discarded and the component is added only once. Prior to this fix, an assert would be triggered when checking for chunk layout compatibility. +* Fixed invalid update path for `ComponentType.Create`. Auto-update is available in Unity `2019.3` and was removed for previous versions where it would fail (the fallback implementation will work as before). + + +## [0.1.0] - 2019-07-30 + +### New Features + +* Added the `#UNITY_DISABLE_AUTOMATIC_SYSTEM_BOOTSTRAP_RUNTIME_WORLD` and `#UNITY_DISABLE_AUTOMATIC_SYSTEM_BOOTSTRAP_EDITOR_WORLD` defines which respectively can be used to disable runtime and editor default world generation. Defining `#UNITY_DISABLE_AUTOMATIC_SYSTEM_BOOTSTRAP` will still disable all default world generation. +* Allow structural changes to entities (add/remove components, add/destroy entities, etc.) while inside of `ForEach` lambda functions. This negates the need for using `PostUpdateCommands` inside of ForEach. +* `EntityCommandBuffer` has some additional methods for adding components based on `ComponentType`, or for adding empty components of a certain type (``) +* EntityManagerDiffer & EntityManagerPatcher provides highly optimized diffing & patching functionality. It is used in the editor for providing scene conversion live link. +* Added support for `EntityManager.MoveEntitiesFrom` with managed arrays (Object Components). +* EntityManager.SetArchetype lets you change an entity to a specific archetype. Removing & adding the necessary components with default values. System state components are not allowed to be removed with this method, it throws an exception to avoid accidental system state removal. (Used in incremental live link conversion it made conversion from 100ms -> 40ms for 1000 changed game objects) +* Entity Debugger's system list now has a string filter field. This makes it easier to find a system by name when you have a lot of systems. +* Added IComponentData type `Asset` that will be used by Tiny to convert Editor assets to runtime assets +* Filled in some `` holes in the overloads we provide in `EntityManager` +* New `Entities.WithIncludeAll()` that will include in matching all components that are normally ignored by default (currently `Prefab` and `Disabled`) +* EntityManager.CopyAndReplaceEntitiesFrom has been added it can be used to store & restore a backup of the world for the purposes of general purpose simulation rollback. + +### Upgrade guide + +* WorldDiff has been removed. It has been replaced by EntityManagerDiff & EntityManagerPatch. +* Renamed `EntityGroupManager` to `EntityQueryManager`. + +### Changes + +* EntityArchetype.GetComponentTypes no longer includes Entity in the list of components (it is implied). Behaviour now matches the EntityMangager.GetComponentTypes method. This matches the behavior of the corresponding `EntityManager` function. +* `EntityCommandBuffer.AddComponent(Entity, ComponentType)` no longer fails if the target entity already has the specified component. +* DestroyEntity(EntityQuery entityQuery) now uses burst internally. + +### Fixes + +* Entity Inspector now shows DynamicBuffer elements in pages of five at a time +* Resources folder renamed to Styles so as not to add editor assets to built player +* `EntityQueryBuilder.ShallowEquals` (used from `Entities.ForEach`) no longer boxes and allocs GC +* Improved error message for unnecessary/invalid `UpdateBefore` and `UpdateAfter` +* Fixed leak in BlobBuilder.CreateBlobAssetReference +* ComponentSystems are now properly preserved when running the UnityLinker. Note this requires 19.3a10 to work correctly. If your project is not yet using 19.3 you can workaround the issue using the link.xml file. https://docs.unity3d.com/Manual//IL2CPP-BytecodeStripping.html +* Types that trigger an exception in the TypeManager won't prevent other types from initializing properly. + +## [0.0.12-preview.33] - 2019-05-24 + +### New Features + +* `[DisableAutoCreation]` can now apply to entire assemblies, which will cause all systems contained within to be excluded from automatic system creation. Useful for test assemblies. +* Added `ComponentSystemGroup.RemoveSystemFromUpdateList()` +* `EntityCommandBuffer` has commands for adding/removing components, deleting entities and adding shared components based on an EntityQuery and its filter. Not available in the `Concurrent` version + +### Changes + +* Generic component data types must now be registered in advance. Use [RegisterGenericComponentType] attribute to register each concrete use. e.g. `[assembly: RegisterGenericComponentType(typeof(TypeManagerTests.GenericComponent))]` +* Attempting to call `Playback()` more than once on the same EntityCommandBuffer will now throw an error. +* Improved error checking for `[UpdateInGroup]`, `[UpdateBefore]`, and `[UpdateAfter]` attributes +* TypeManager no longer imposes alignment requirements on components containing pointers. Instead, it now throws an exception if you try to serialize a blittable component containing an unmanaged pointer, which suggests different alternatives. + +### Fixes + +* Fixed regression where accessing and destroying a blob asset in a burst job caused an exception +* Fixed bug where entities with manually specified `CompositeScale` were not updated by `TRSLocalToWorldSystem`. +* Error message when passing in invalid parameters to CreateSystem() is improved. +* Fixed bug where an exception due to aggressive pointer restrictions could leave the `TypeManager` in an invalid state +* SceneBoundingVolume is now generated seperately for each subsection +* SceneBoundingVolume no longer throws exceptions in conversion flow +* Fixed regression where calling AddComponent(NativeArray entities, ComponentType componentType) could cause a crash. +* Fixed bug causing error message to appear in Inspector header when `ConvertToEntity` component was added to a disabled GameObject. + +## [0.0.12-preview.32] - 2019-05-16 + +### New Features + +* Added BlobBuilder which is a new API to build Blob Assets that does not require preallocating one contiguous block of memory. The BlobAllocator is now marked obsolete. +* Added versions of `IJobForEach` that support `DynamicBuffer`s + * Due to C# language constraints, these overloads needed different names. The format for these overloads follows the following structure: + * All job names begin with either `IJobForEach` or `IJobForEachEntity` + * All jobs names are then followed by an underscore `_` and a combination of letter corresponding to the parameter types of the job + * `B` - `IBufferElementData` + * `C` - `IComponentData` + * `E` - `Entity` (`IJobForEachWithEntity` only) + * All suffixes for `WithEntity` jobs begin with `E` + * All data types in a suffix are in alphabetical order + * Here is the complete list of overloads: + * `IJobForEach_C`, `IJobForEach_CC`, `IJobForEach_CCC`, `IJobForEach_CCCC`, `IJobForEach_CCCCC`, `IJobForEach_CCCCCC` + * `IJobForEach_B`, `IJobForEach_BB`, `IJobForEach_BBB`, `IJobForEach_BBBB`, `IJobForEach_BBBBB`, `IJobForEach_BBBBBB` + * `IJobForEach_BC`, `IJobForEach_BCC`, `IJobForEach_BCCC`, `IJobForEach_BCCCC`, `IJobForEach_BCCCCC`, `IJobForEach_BBC`, `IJobForEach_BBCC`, `IJobForEach_BBCCC`, `IJobForEach_BBCCCC`, `IJobForEach_BBBC`, `IJobForEach_BBBCC`, `IJobForEach_BBBCCC`, `IJobForEach_BBBCCC`, `IJobForEach_BBBBC`, `IJobForEach_BBBBCC`, `IJobForEach_BBBBBC` + * `IJobForEachWithEntity_EB`, `IJobForEachWithEntity_EBB`, `IJobForEachWithEntity_EBBB`, `IJobForEachWithEntity_EBBBB`, `IJobForEachWithEntity_EBBBBB`, `IJobForEachWithEntity_EBBBBBB` + * `IJobForEachWithEntity_EC`, `IJobForEachWithEntity_ECC`, `IJobForEachWithEntity_ECCC`, `IJobForEachWithEntity_ECCCC`, `IJobForEachWithEntity_ECCCCC`, `IJobForEachWithEntity_ECCCCCC` + * `IJobForEachWithEntity_BC`, `IJobForEachWithEntity_BCC`, `IJobForEachWithEntity_BCCC`, `IJobForEachWithEntity_BCCCC`, `IJobForEachWithEntity_BCCCCC`, `IJobForEachWithEntity_BBC`, `IJobForEachWithEntity_BBCC`, `IJobForEachWithEntity_BBCCC`, `IJobForEachWithEntity_BBCCCC`, `IJobForEachWithEntity_BBBC`, `IJobForEachWithEntity_BBBCC`, `IJobForEachWithEntity_BBBCCC`, `IJobForEachWithEntity_BBBCCC`, `IJobForEachWithEntity_BBBBC`, `IJobForEachWithEntity_BBBBCC`, `IJobForEachWithEntity_BBBBBC` + * Note that you can still use `IJobForEach` and `IJobForEachWithEntity` as before if you're using only `IComponentData`. +* EntityManager.SetEnabled API automatically enables & disables an entity or set of entities. If LinkedEntityGroup is present the whole group is enabled / disabled. Inactive game objects automatically get a LinkedEntityGroup added so that EntityManager.SetEnabled works as expected out of the box. +* Add `WithAnyReadOnly` and `WithAllReadyOnly` methods to EntityQueryBuilder to specify queries that filter on components with access type ReadOnly. +* No longer throw when the same type is in a WithAll and ForEach delegate param for ForEach queries. +* `DynamicBuffer` CopyFrom method now supports another DynamicBuffer as a parameter. +* Fixed cases that would not be handled correctly by the api updater. + +### Upgrade guide + +* Usages of BlobAllocator will need to be changed to use BlobBuilder instead. The API is similar but Allocate now returns the data that can be populated: + + ```csharp + ref var root = ref builder.ConstructRoot(); + var floatArray = builder.Allocate(3, ref root.floatArray); + floatArray[0] = 0; // root.floatArray[0] can not be used and will throw on access + ``` + +* ISharedComponentData with managed fields must implement IEquatable and GetHashCode +* IComponentData and ISharedComponentData implementing IEquatable must also override GetHashCode + +### Fixes + +* Comparisons of managed objects (e.g. in shared components) now work as expected +* Prefabs referencing other prefabs are now supported in game object entity conversion process +* Fixed a regression where ComponentDataProxy was not working correctly on Prefabs due to a ordering issue. +* Exposed GameObjectConversionDeclarePrefabsGroup for declaring prefab references. (Must happen before any conversion systems run) +* Inactive game objects are automatically converted to be Disabled entities +* Disabled components are ignored during conversion process. Behaviour.Enabled has no direct mapping in ECS. It is recommended to Disable whole entities instead +* Warnings are now issues when asking for a GetPrimaryEntity that is not a game object that is part of the converted group. HasPrimaryEntity can be used to check if the game object is part of the converted group in case that is necessary. +* Fixed a race condition in `EntityCommandBuffer.AddBuffer()` and `EntityCommandBuffer.SetBuffer()` + +## [0.0.12-preview.31] - 2019-05-01 + +### New Features + +### Upgrade guide + +* Serialized entities file format version has changed, Sub Scenes entity caches will require rebuilding. + +### Changes + +* Adding components to entities that already have them is now properly ignored in the cases where no data would be overwritten. That means the inspectable state does not change and thus determinism can still be guaranteed. +* Restored backwards compatibility for `ForEach` API directly on `ComponentSystem` to ease people upgrading to the latest Unity.Entities package on top of Megacity. +* Rebuilding the entity cache files for sub scenes will now properly request checkout from source control if required. + +### Fixes + +* `IJobForEach` will only create new entity queries when scheduled, and won't rely on injection anymore. This avoids the creation of useless queries when explicit ones are used to schedule those jobs. Those useless queries could cause systems to keep updating even though the actual queries were empty. +* APIs changed in the previous version now have better obsolete stubs and upgrade paths. All obsolete APIs requiring manual code changes will now soft warn and continue to work, instead of erroring at compile time. These respective APIs will be removed in a future release after that date. +* LODGroup conversion now handles renderers being present in a LOD Group in multipe LOD levels correctly +* Fixed potential memory leak when disposing an EntityCommandBuffer after certain types of playback errors +* Fixed an issue where chunk utilization histograms weren't properly clipped in EntityDebugger +* Fixed an issue where tag components were incorrectly shown as subtractive in EntityDebugger +* ComponentSystem.ShouldRunSystem() exception message now more accurately reports the most likely reason for the error when the system does not exist. + +### Known Issues + +* It might happen that shared component data with managed references is not compared for equality correctly with certain profiles. + + +## [0.0.12-preview.30] - 2019-04-05 + +### New Features +Script templates have been added to help you create new component types and systems, similar to Unity's built-in template for new MonoBehaviours. Use them via the Assets/Create/ECS menu. + +### Upgrade guide + +Some APIs have been deprecated in this release: + +[API Deprecation FAQ](https://forum.unity.com/threads/api-deprecation-faq-0-0-23.636994/) + +** Removed obsolete ComponentSystem.ForEach +** Removed obsolete [Inject] +** Removed obsolete ComponentDataArray +** Removed obsolete SharedComponentDataArray +** Removed obsolete BufferArray +** Removed obsolete EntityArray +** Removed obsolete ComponentGroupArray + +####ScriptBehaviourManager removal +* The ScriptBehaviourManager class has been removed. +* ComponentSystem and JobComponentSystem remain as system base classes (with a common ComponentSystemBase class) + * ComponentSystems have overridable methods OnCreateManager and OnDestroyManager. These have been renamed to OnCreate and OnDestroy. + * This is NOT handled by the obsolete API updater and will need to be done manually. + * The old OnCreateManager/OnDestroyManager will continue to work temporarily, but will print a warning if a system contains them. +* World APIs have been updated as follows: + * CreateManager, GetOrCreateManager, GetExistingManager, DestroyManager, BehaviourManagers have been renamed to CreateSystem, GetOrCreateSystem, GetExistingSystem, DestroySystem, Systems. + * These should be handled by the obsolete API updater. + * EntityManager is no longer accessed via GetExistingManager. There is now a property directly on World: World.EntityManager. + * This is NOT handled by the obsolete API updater and will need to be done manually. + * Searching and replacing Manager should locate the right spots. For example, world.GetExistingManager() should become just world.EntityManager. + +#### IJobProcessComponentData renamed to IJobForeach +This rename unfortunately cannot be handled by the obsolete API updater. +A global search and replace of IJobProcessComponentData to IJobForEach should be sufficient. + +#### ComponentGroup renamed to EntityQuery +ComponentGroup has been renamed to EntityQuery to better represent what it does. +All APIs that refer to ComponentGroup have been changed to refer to EntityQuery in their name, e.g. CreateEntityQuery, GetEntityQuery, etc. + +#### EntityArchetypeQuery renamed to EntityQueryDesc +EntityArchetypeQuery has been renamed to EntityQueryDesc + +### Changes +* Minimum required Unity version is now 2019.1.0b9 +* Adding components to entities that already have them is now properly ignored in the cases where no data would be overwritten. +* UNITY_CSHARP_TINY is now NET_DOTS to match our other NET_* defines + +### Fixes +* Fixed exception in inspector when Script is missing +* The presence of chunk components could lead to corruption of the entity remapping during deserialization of SubScene sections. +* Fix for an issue causing filtering with IJobForEachWithEntity to try to access entities outside of the range of the group it was scheduled with. diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/CHANGELOG.md.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/CHANGELOG.md.meta new file mode 100644 index 000000000..bde09f2dd --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 77ec343c3667943c189e1bceeff600ce +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests.meta new file mode 100644 index 000000000..58c8c8593 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2e32a04cf2814421a9c3a8b6caf49261 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/ChunkIterationJob.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/ChunkIterationJob.cs new file mode 100644 index 000000000..ebf1e39bc --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/ChunkIterationJob.cs @@ -0,0 +1,282 @@ +using Unity.Burst; +using Unity.Collections; +using Unity.Entities; +using Unity.Jobs; +using Unity.Mathematics; +using Unity.Transforms; +using UnityEngine; +using NUnit.Framework; + +// The files in this namespace are used to compile/test the code samples in the documentation. +namespace Doc.CodeSamples.Tests +{ + //Snippets used in chunk_iteration_job.md + public struct Rotation : IComponentData + { + public quaternion Value; + } + + public struct RotationSpeed : IComponentData + { + public float RadiansPerSecond; + } + + #region rotationspeedsystem + public class RotationSpeedSystem : JobComponentSystem + { + private EntityQuery m_Query; + + protected override void OnCreate() + { + m_Query = GetEntityQuery(ComponentType.ReadOnly(), + ComponentType.ReadOnly()); + //... + } + #endregion + + [BurstCompile] + struct RotationSpeedJob : IJobChunk + { + public float DeltaTime; + public ArchetypeChunkComponentType RotationType; + [ReadOnly] public ArchetypeChunkComponentType RotationSpeedType; + + public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) + { + #region chunkiteration + + var chunkRotations = chunk.GetNativeArray(RotationType); + var chunkRotationSpeeds = chunk.GetNativeArray(RotationSpeedType); + for (var i = 0; i < chunk.Count; i++) + { + var rotation = chunkRotations[i]; + var rotationSpeed = chunkRotationSpeeds[i]; + + // Rotate something about its up vector at the speed given by RotationSpeed. + chunkRotations[i] = new Rotation + { + Value = math.mul(math.normalize(rotation.Value), + quaternion.AxisAngle(math.up(), rotationSpeed.RadiansPerSecond * DeltaTime)) + }; + } + + #endregion + } + } + + #region schedulequery + + protected override JobHandle OnUpdate(JobHandle inputDependencies) + { + var job = new RotationSpeedJob() + { + RotationType = GetArchetypeChunkComponentType(false), + RotationSpeedType = GetArchetypeChunkComponentType(true), + DeltaTime = Time.DeltaTime + }; + return job.Schedule(m_Query, inputDependencies); + } + + #endregion + } + + + public class RotationSpeedSystemExample2 : JobComponentSystem + { + private EntityQuery m_Query; + + #region oncreate2 + protected override void OnCreate() + { + var queryDescription = new EntityQueryDesc() + { + None = new ComponentType[] + { + typeof(Static) + }, + All = new ComponentType[] + { + ComponentType.ReadWrite(), + ComponentType.ReadOnly() + } + }; + m_Query = GetEntityQuery(queryDescription); + } + #endregion + + #region speedjob + + [BurstCompile] + struct RotationSpeedJob : IJobChunk + { + public float DeltaTime; + public ArchetypeChunkComponentType RotationType; + [ReadOnly] public ArchetypeChunkComponentType RotationSpeedType; + + public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) + { + // ... + } + } + + #endregion + + protected override JobHandle OnUpdate(JobHandle inputDependencies) + { + var job = new RotationSpeedJob() + { + RotationType = GetArchetypeChunkComponentType(false), + RotationSpeedType = GetArchetypeChunkComponentType(true), + DeltaTime = Time.DeltaTime + }; + + return job.Schedule(m_Query, inputDependencies); + } + } + + public class RotationSpeedSystemExample3 : JobComponentSystem + { + private EntityQuery m_Query; + + #region oncreate3 + + protected override void OnCreate() + { + var queryDescription0 = new EntityQueryDesc + { + All = new ComponentType[] {typeof(Rotation)} + }; + + var queryDescription1 = new EntityQueryDesc + { + All = new ComponentType[] {typeof(RotationSpeed)} + }; + + m_Query = GetEntityQuery(new EntityQueryDesc[] {queryDescription0, queryDescription1}); + } + + #endregion + + [BurstCompile] + struct RotationSpeedJob : IJobChunk + { + public float DeltaTime; + public ArchetypeChunkComponentType RotationType; + [ReadOnly] public ArchetypeChunkComponentType RotationSpeedType; + + #region execsignature + + public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) + + #endregion + + { + #region getcomponents + + var chunkRotations = chunk.GetNativeArray(RotationType); + var chunkRotationSpeeds = chunk.GetNativeArray(RotationSpeedType); + + #endregion + } + } + + protected override JobHandle OnUpdate(JobHandle inputDependencies) + { + var job = new RotationSpeedJob() + { + RotationType = GetArchetypeChunkComponentType(false), + RotationSpeedType = GetArchetypeChunkComponentType(true), + DeltaTime = Time.DeltaTime + }; + + return job.Schedule(m_Query, inputDependencies); + } + } + + public struct Output : IComponentData + { + public float Value; + } + + public struct InputA : IComponentData + { + public float Value; + } + + public struct InputB : IComponentData + { + public float Value; + } + + public class UpdateSystemExample : JobComponentSystem + { + #region changefilter + + private EntityQuery m_Query; + + protected override void OnCreate() + { + m_Query = GetEntityQuery( + ComponentType.ReadWrite(), + ComponentType.ReadOnly(), + ComponentType.ReadOnly()); + m_Query.SetChangedVersionFilter( + new ComponentType[] + { + ComponentType.ReadWrite(), + ComponentType.ReadWrite() + }); + } + + #endregion + + #region changefilterjobstruct + + [BurstCompile] + struct UpdateJob : IJobChunk + { + public ArchetypeChunkComponentType InputAType; + public ArchetypeChunkComponentType InputBType; + [ReadOnly] public ArchetypeChunkComponentType OutputType; + public uint LastSystemVersion; + + public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) + { + var inputAChanged = chunk.DidChange(InputAType, LastSystemVersion); + var inputBChanged = chunk.DidChange(InputBType, LastSystemVersion); + + // If neither component changed, skip the current chunk + if (!(inputAChanged || inputBChanged)) + return; + + var inputAs = chunk.GetNativeArray(InputAType); + var inputBs = chunk.GetNativeArray(InputBType); + var outputs = chunk.GetNativeArray(OutputType); + + for (var i = 0; i < outputs.Length; i++) + { + outputs[i] = new Output{ Value = inputAs[i].Value + inputBs[i].Value }; + } + } + } + + #endregion + + #region changefilteronupdate + + protected override JobHandle OnUpdate(JobHandle inputDependencies) + { + var job = new UpdateJob(); + + job.LastSystemVersion = this.LastSystemVersion; + + job.InputAType = GetArchetypeChunkComponentType(true); + job.InputBType = GetArchetypeChunkComponentType(true); + job.OutputType = GetArchetypeChunkComponentType(false); + + return job.Schedule(m_Query, inputDependencies); + } + + #endregion + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/ChunkIterationJob.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/ChunkIterationJob.cs.meta new file mode 100644 index 000000000..00d69fed0 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/ChunkIterationJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1be1511b73106412c9415ec5d838bcd1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DisableAutoCreation.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DisableAutoCreation.cs new file mode 100644 index 000000000..d0afcf162 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DisableAutoCreation.cs @@ -0,0 +1,2 @@ +[assembly: Unity.Entities.DisableAutoCreation] +//This declaration prevents the systems in the documentation sample source from being auto-created. \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DisableAutoCreation.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DisableAutoCreation.cs.meta new file mode 100644 index 000000000..930690232 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DisableAutoCreation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dde99cc3e22634ce68972e0948627b30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DocCodeSamples.asmdef b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DocCodeSamples.asmdef new file mode 100644 index 000000000..06f6e131e --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DocCodeSamples.asmdef @@ -0,0 +1,28 @@ +{ + "name": "DocCodeSamples", + "references": [ + "Unity.Jobs", + "Unity.Entities", + "Unity.Burst", + "Unity.Mathematics", + "Unity.Collections", + "UnityEngine.TestRunner", + "UnityEditor.TestRunner", + "Unity.Transforms" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DocCodeSamples.asmdef.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DocCodeSamples.asmdef.meta new file mode 100644 index 000000000..518685d6c --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DocCodeSamples.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b8bd0640a304b40c29d635a23f8f4b5e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DynamicBufferExamples.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DynamicBufferExamples.cs new file mode 100644 index 000000000..3b656a2c5 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DynamicBufferExamples.cs @@ -0,0 +1,548 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Unity.Entities; +using Unity.Jobs; +using Unity.Collections; + +namespace Doc.CodeSamples.Tests +{ + public class DynamicBuffersManual : MonoBehaviour + { + } + + #region declare-element + + public struct IntBufferElement : IBufferElementData + { + public int Value; + } + + #endregion + + #region declare-element-full + +// InternalBufferCapacity specifies how many elements a buffer can have before +// the buffer storage is moved outside the chunk. + [InternalBufferCapacity(8)] + public struct MyBufferElement : IBufferElementData + { + // Actual value each buffer element will store. + public int Value; + + // The following implicit conversions are optional, but can be convenient. + public static implicit operator int(MyBufferElement e) + { + return e.Value; + } + + public static implicit operator MyBufferElement(int e) + { + return new MyBufferElement {Value = e}; + } + } + + #endregion + + public struct DataToSpawn : IComponentData + { + public int EntityCount; + public int ElementCount; + } + + public class AddBufferSnippets : JobComponentSystem + { + protected override void OnCreate() + { + var entity = EntityManager.CreateEntity(); + + #region add-with-manager + + EntityManager.AddBuffer(entity); + + #endregion + + #region add-with-archetype + + Entity e = EntityManager.CreateEntity(typeof(MyBufferElement)); + + #endregion + + #region reinterpret-snippet + + DynamicBuffer intBuffer + = EntityManager.GetBuffer(entity).Reinterpret(); + + #endregion + + #region access-manager + + DynamicBuffer dynamicBuffer + = EntityManager.GetBuffer(entity); + + #endregion + + #region lookup-snippet + + BufferFromEntity lookup = GetBufferFromEntity(); + var buffer = lookup[entity]; + buffer.Add(17); + buffer.RemoveAt(0); + + #endregion + + #region invalidation + + var entity1 = EntityManager.CreateEntity(); + var entity2 = EntityManager.CreateEntity(); + + DynamicBuffer buffer1 + = EntityManager.AddBuffer(entity1); + // This line causes a structural change and invalidates + // the previously acquired dynamic buffer + DynamicBuffer buffer2 + = EntityManager.AddBuffer(entity1); + // This line will cause an error: + buffer1.Add(17); + + #endregion + } + + #region add-in-job + + struct DataSpawnJob : IJobForEachWithEntity + { + // A command buffer marshals structural changes to the data + public EntityCommandBuffer.Concurrent CommandBuffer; + + //The DataToSpawn component tells us how many entities with buffers to create + public void Execute(Entity spawnEntity, int index, [ReadOnly] ref DataToSpawn data) + { + for (int e = 0; e < data.EntityCount; e++) + { + //Create a new entity for the command buffer + Entity newEntity = CommandBuffer.CreateEntity(index); + + //Create the dynamic buffer and add it to the new entity + DynamicBuffer buffer = + CommandBuffer.AddBuffer(index, newEntity); + + //Reinterpret to plain int buffer + DynamicBuffer intBuffer = buffer.Reinterpret(); + + //Optionally, populate the dynamic buffer + for (int j = 0; j < data.ElementCount; j++) + { + intBuffer.Add(j); + } + } + + //Destroy the DataToSpawn entity since it has done its job + CommandBuffer.DestroyEntity(index, spawnEntity); + } + } + + #endregion + + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + throw new System.NotImplementedException(); + } + } + + #region access-buffer-system + + public class DynamicBufferSystem : ComponentSystem + { + protected override void OnUpdate() + { + var sum = 0; + + Entities.ForEach((DynamicBuffer buffer) => + { + foreach (var integer in buffer.Reinterpret()) + { + sum += integer; + } + }); + + Debug.Log("Sum of all buffers: " + sum); + } + } + + #endregion + + #region declare-ijfe-with-buffer + + public struct BuffersByEntity : IJobForEachWithEntity_EB + + #endregion + + { + #region declare-ijfe-execute-method + + public void Execute(Entity entity, int index, DynamicBuffer buffer) + + #endregion + + { + //... + } + } + + #region access-ijfe + + public class DynamicBufferForEachSystem : JobComponentSystem + { + private EntityQuery query; + + protected override void OnCreate() + { + EntityQueryDesc queryDescription = new EntityQueryDesc(); + queryDescription.All = new[] {ComponentType.ReadOnly()}; + query = GetEntityQuery(queryDescription); + } + + //Sums the elements of individual buffers of each entity + public struct BuffersByEntity : IJobForEachWithEntity_EB + { + public NativeArray sums; + + public void Execute(Entity entity, + int index, + DynamicBuffer buffer) + { + foreach (int integer in buffer.Reinterpret()) + { + sums[index] += integer; + } + } + } + + //Sums the intermediate results into the final total + public struct SumResult : IJob + { + [DeallocateOnJobCompletion] public NativeArray sums; + + public void Execute() + { + int sum = 0; + foreach (int integer in sums) + { + sum += integer; + } + + //Note: Debug.Log is not burst-compatible + Debug.Log("Sum of all buffers: " + sum); + } + } + + //Schedules the two jobs with a dependency between them + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + //Create a native array to hold the intermediate sums + int entitiesInQuery = query.CalculateEntityCount(); + NativeArray intermediateSums + = new NativeArray(entitiesInQuery, Allocator.TempJob); + + //Schedule the first job to add all the buffer elements + BuffersByEntity bufferJob = new BuffersByEntity(); + bufferJob.sums = intermediateSums; + JobHandle intermediateJob = bufferJob.Schedule(this, inputDeps); + + //Schedule the second job, which depends on the first + SumResult finalSumJob = new SumResult(); + finalSumJob.sums = intermediateSums; + return finalSumJob.Schedule(intermediateJob); + } + } + + #endregion + + #region access-chunk-job + + public class DynamicBufferJobSystem : JobComponentSystem + { + private EntityQuery query; + + protected override void OnCreate() + { + //Create a query to find all entities with a dynamic buffer + // containing MyBufferElement + EntityQueryDesc queryDescription = new EntityQueryDesc(); + queryDescription.All = new[] {ComponentType.ReadOnly()}; + query = GetEntityQuery(queryDescription); + } + + public struct BuffersInChunks : IJobChunk + { + //The data type and safety object + public ArchetypeChunkBufferType BufferType; + + //An array to hold the output, intermediate sums + public NativeArray sums; + + public void Execute(ArchetypeChunk chunk, + int chunkIndex, + int firstEntityIndex) + { + //A buffer accessor is a list of all the buffers in the chunk + BufferAccessor buffers + = chunk.GetBufferAccessor(BufferType); + + for (int c = 0; c < chunk.Count; c++) + { + //An individual dynamic buffer for a specific entity + DynamicBuffer buffer = buffers[c]; + foreach (MyBufferElement element in buffer) + { + sums[chunkIndex] += element.Value; + } + } + } + } + + //Sums the intermediate results into the final total + public struct SumResult : IJob + { + [DeallocateOnJobCompletion] public NativeArray sums; + + public void Execute() + { + int sum = 0; + foreach (int integer in sums) + { + sum += integer; + } + + //Note: Debug.Log is not burst-compatible + Debug.Log("Sum of all buffers: " + sum); + } + } + + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + //Create a native array to hold the intermediate sums + int chunksInQuery = query.CalculateChunkCount(); + NativeArray intermediateSums + = new NativeArray(chunksInQuery, Allocator.TempJob); + + //Schedule the first job to add all the buffer elements + BuffersInChunks bufferJob = new BuffersInChunks(); + bufferJob.BufferType = GetArchetypeChunkBufferType(); + bufferJob.sums = intermediateSums; + JobHandle intermediateJob = bufferJob.Schedule(query, inputDeps); + + //Schedule the second job, which depends on the first + SumResult finalSumJob = new SumResult(); + finalSumJob.sums = intermediateSums; + return finalSumJob.Schedule(intermediateJob); + } + } + + #endregion + + #region dynamicbuffer.class + + [InternalBufferCapacity(8)] + public struct FloatBufferElement : IBufferElementData + { + // Actual value each buffer element will store. + public float Value; + + // The following implicit conversions are optional, but can be convenient. + public static implicit operator float(FloatBufferElement e) + { + return e.Value; + } + + public static implicit operator FloatBufferElement(float e) + { + return new FloatBufferElement {Value = e}; + } + } + + public class DynamicBufferExample : ComponentSystem + { + protected override void OnUpdate() + { + float sum = 0; + + Entities.ForEach((DynamicBuffer buffer) => + { + foreach (var element in buffer.Reinterpret()) + { + sum += element; + } + }); + + Debug.Log("Sum of all buffers: " + sum); + } + } + + #endregion + + class DynamicBufferSnippets + { + private void ShowAdd() + { + DynamicBuffer buffer = new DynamicBuffer(); + DynamicBuffer secondBuffer = new DynamicBuffer(); + + #region dynamicbuffer.add + + buffer.Add(5); + + #endregion + + #region dynamicbuffer.addrange + + int[] source = {1, 2, 3, 4, 5}; + NativeArray newElements = new NativeArray(source, Allocator.Persistent); + buffer.AddRange(newElements); + + #endregion + + #region dynamicbuffer.asnativearray + + int[] intArray = {1, 2, 3, 4, 5}; + NativeArray.Copy(intArray, buffer.AsNativeArray()); + + #endregion + + #region dynamicbuffer.capacity + + #endregion + + #region dynamicbuffer.clear + + buffer.Clear(); + + #endregion + + #region dynamicbuffer.copyfrom.dynamicbuffer + + buffer.CopyFrom(secondBuffer); + + #endregion + + #region dynamicbuffer.copyfrom.nativearray + + int[] sourceArray = {1, 2, 3, 4, 5}; + NativeArray nativeArray = new NativeArray(source, Allocator.Persistent); + buffer.CopyFrom(nativeArray); + + #endregion + + #region dynamicbuffer.copyfrom.array + + int[] integerArray = {1, 2, 3, 4, 5}; + buffer.CopyFrom(integerArray); + + #endregion + + #region dynamicbuffer.getenumerator + + foreach (var element in buffer) + { + //Use element... + } + + #endregion + + #region dynamicbuffer.getunsafeptr + + #endregion + + int insertionIndex = 2; + + #region dynamicbuffer.insert + + if (insertionIndex < buffer.Length) + buffer.Insert(insertionIndex, 6); + + #endregion + + #region dynamicbuffer.iscreated + + #endregion + + #region dynamicbuffer.length + + for (int i = 0; i < buffer.Length; i++) + { + buffer[i] = i * i; + } + + #endregion + + #region dynamicbuffer.removeat + + if (insertionIndex < buffer.Length) + buffer.RemoveAt(insertionIndex); + + #endregion + + int start = 1; + + #region dynamicbuffer.removerange + + buffer.RemoveRange(start, 5); + + #endregion + + #region dynamicbuffer.reserve + + buffer.EnsureCapacity(buffer.Capacity + 10); + + #endregion + + #region dynamicbuffer.resizeuninitialized + + buffer.ResizeUninitialized(buffer.Length + 10); + + #endregion + + #region dynamicbuffer.indexoperator + + for (int i = 0; i < buffer.Length; i++) + { + buffer[i] = i * i; + } + + #endregion + + #region dynamicbuffer.tonativearray + + NativeArray copy = buffer.ToNativeArray(Allocator.Persistent); + + #endregion + + #region dynamicbuffer.trimexcess + + if (buffer.Capacity > buffer.Length) + buffer.TrimExcess(); + + #endregion + } + } + + public class ReinterpretExample : ComponentSystem + { + protected override void OnUpdate() + { + #region dynamicbuffer.reinterpret + + Entities.ForEach((DynamicBuffer buffer) => + { + DynamicBuffer floatBuffer = buffer.Reinterpret(); + for (int i = 0; i < floatBuffer.Length; i++) + { + floatBuffer[i] = i * 1.2f; + } + }); + + #endregion + } + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DynamicBufferExamples.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DynamicBufferExamples.cs.meta new file mode 100644 index 000000000..26b184ff3 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/DynamicBufferExamples.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9377b3c4b1cd34b53adf01e4b73ebe6e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/EntityCommandBuffers.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/EntityCommandBuffers.cs new file mode 100644 index 000000000..88bbe4d05 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/EntityCommandBuffers.cs @@ -0,0 +1,55 @@ +using Unity.Entities; +using Unity.Jobs; +using UnityEngine; + +// The files in this namespace are used to compile/test the code samples in the documentation. +// Snippets used in entity_command_buffer.md +namespace Doc.CodeSamples.Tests +{ + #region ecb_concurrent + struct Lifetime : IComponentData + { + public byte Value; + } + + class LifetimeSystem : JobComponentSystem + { + EndSimulationEntityCommandBufferSystem m_EndSimulationEcbSystem; + protected override void OnCreate() + { + base.OnCreate(); + // Find the ECB system once and store it for later usage + m_EndSimulationEcbSystem = World + .GetOrCreateSystem(); + } + + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + // Acquire an ECB and convert it to a concurrent one to be able + // to use it from a parallel job. + var ecb = m_EndSimulationEcbSystem.CreateCommandBuffer().ToConcurrent(); + var jobHandle = Entities + .ForEach((Entity entity, int entityInQueryIndex, ref Lifetime lifetime) => + { + // Track the lifetime of an entity and destroy it once + // the lifetime reaches zero + if (lifetime.Value == 0) + { + // pass the entityInQueryIndex to the operation so + // the ECB can play back the commands in the right + // order + ecb.DestroyEntity(entityInQueryIndex, entity); + } + else + { + lifetime.Value -= 1; + } + }).Schedule(inputDeps); + + // Make sure that the ECB system knows about our job + m_EndSimulationEcbSystem.AddJobHandleForProducer(jobHandle); + return default; + } + } + #endregion +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/EntityCommandBuffers.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/EntityCommandBuffers.cs.meta new file mode 100644 index 000000000..e705d59c2 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/EntityCommandBuffers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a21d06d3f358b94db9f72a17ac078d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/LambdaJobExamples.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/LambdaJobExamples.cs new file mode 100644 index 000000000..9bab87bbc --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/LambdaJobExamples.cs @@ -0,0 +1,446 @@ + +using Unity.Entities.UniversalDelegates; + +namespace Doc.CodeSamples.Tests +{ + using Unity.Entities; + using Unity.Jobs; + using Unity.Transforms; + using Unity.Collections; + using System.Collections.Generic; + using UnityEngine; + using Random = Unity.Mathematics.Random; + + #region entities-foreach-example + class ApplyVelocitySystem : JobComponentSystem + { + protected override JobHandle OnUpdate(JobHandle inputDependencies) + { + var jobHandle = Entities + .ForEach((ref Translation translation, + in Velocity velocity) => + { + translation.Value += velocity.Value; + }) + .Schedule(inputDependencies); + + return jobHandle; + } + } + #endregion + #region job-with-code-example + public class RandomSumJob : JobComponentSystem + { + private uint seed = 1; + + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + Random randomGen = new Random(seed++); + NativeArray randomNumbers + = new NativeArray(500, Allocator.TempJob); + + JobHandle generateNumbers = Job.WithCode(() => + { + for (int i = 0; i < randomNumbers.Length; i++) + { + randomNumbers[i] = randomGen.NextFloat(); + } + }).Schedule(inputDeps); + + + NativeArray result + = new NativeArray(1, Allocator.TempJob); + + JobHandle sumNumbers = Job.WithCode(() => + { + for (int i = 0; i < randomNumbers.Length; i++) + { + result[0] += randomNumbers[i]; + } + }).Schedule(generateNumbers); + + sumNumbers.Complete(); + UnityEngine.Debug.Log("The sum of " + + randomNumbers.Length + " numbers is " + result[0]); + + randomNumbers.Dispose(); + result.Dispose(); + + return sumNumbers; + } + } + + #endregion + + //Used to verify the BuffersByEntity example (not shown in docs) + public class MakeData : ComponentSystem + { + protected override void OnCreate() + { + var sum = 0; + for (int i = 0; i < 100; i++) + { + var ent = EntityManager.CreateEntity(typeof(IntBufferElement)); + var buff = EntityManager.GetBuffer(ent).Reinterpret(); + for (int j = 0; j < 5; j++) + { + buff.Add(j); + sum += j; + } + } + + UnityEngine.Debug.Log("Sum should equal " + sum); + } + + protected override void OnUpdate() + { + + } + } + + public struct IntBufferData : IBufferElementData + { + public int Value; + } + + #region dynamicbuffer + public class BufferSum : JobComponentSystem + { + private EntityQuery query; + + //Schedules the two jobs with a dependency between them + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + //The query variable can be accessed here because we are + //using WithStoreEntityQueryInField(query) in the entities.ForEach below + int entitiesInQuery = query.CalculateEntityCount(); + + //Create a native array to hold the intermediate sums + //(one element per entity) + NativeArray intermediateSums + = new NativeArray(entitiesInQuery, Allocator.TempJob); + + //Schedule the first job to add all the buffer elements + JobHandle bufferSumJob = Entities + .ForEach((int entityInQueryIndex, in DynamicBuffer buffer) => + { + for (int i = 0; i < buffer.Length; i++) + { + intermediateSums[entityInQueryIndex] += buffer[i].Value; + } + }) + .WithStoreEntityQueryInField(ref query) + .WithName("IntermediateSums") + .Schedule(inputDeps); + + //Schedule the second job, which depends on the first + JobHandle finalSumJob = Job + .WithCode(() => + { + int result = 0; + for (int i = 0; i < intermediateSums.Length; i++) + { + result += intermediateSums[i]; + } + //Not burst compatible: + Debug.Log("Final sum is " + result); + }) + .WithDeallocateOnJobCompletion(intermediateSums) + .WithoutBurst() + .WithName("FinalSum") + .Schedule(bufferSumJob); + + return finalSumJob; + } + } + #endregion + + public struct Source : IComponentData + { + public int Value; + } + public struct Destination : IComponentData + { + public int Value; + } + + public class WithAllExampleSystem : JobComponentSystem + { + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + #region entity-query + return Entities.WithAll() + .WithAny() + .WithNone() + .ForEach((ref Destination outputData, in Source inputData) => + { + /* do some work */ + }) + .Schedule(inputDeps); + #endregion + } + } + + public struct Data : IComponentData + { + public float Value; + } + public class WithStoreQuerySystem : JobComponentSystem + { + #region store-query + private EntityQuery query; + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + int dataCount = query.CalculateEntityCount(); + NativeArray dataSquared + = new NativeArray(dataCount, Allocator.Temp); + JobHandle GetSquaredValues = Entities + .WithStoreEntityQueryInField(ref query) + .ForEach((int entityInQueryIndex, in Data data) => + { + dataSquared[entityInQueryIndex] = data.Value * data.Value; + }) + .Schedule(inputDeps); + + return Job + .WithCode(() => + { + //Use dataSquared array... + var v = dataSquared[dataSquared.Length -1]; + }) + .WithDeallocateOnJobCompletion(dataSquared) + .Schedule(GetSquaredValues); + } + #endregion + } + + public class WithChangeExampleSystem : JobComponentSystem + { + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + #region with-change-filter + return Entities + .WithChangeFilter() + .ForEach((ref Destination outputData, + in Source inputData) => + { + /* Do work */ + }) + .Schedule(inputDeps); + #endregion + } + } + + public struct Cohort : ISharedComponentData + { + public int Value; + } + public struct DisplayColor : IComponentData + { + public int Value; + } + + public class ColorTable + { + public static DisplayColor GetNextColor(int current){return new DisplayColor();} + } + + #region with-shared-component + public class ColorCycleJob : JobComponentSystem + { + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + List cohorts = new List(); + EntityManager.GetAllUniqueSharedComponentData(cohorts); + JobHandle sequentialDeps = inputDeps; // Chain job dependencies + foreach (Cohort cohort in cohorts) + { + DisplayColor newColor = ColorTable.GetNextColor(cohort.Value); + JobHandle thisJobHandle = + Entities.WithSharedComponentFilter(cohort) + .ForEach((ref DisplayColor color) => { color = newColor; }) + .Schedule(sequentialDeps); + sequentialDeps = thisJobHandle; + } + return sequentialDeps; + } + } + #endregion + + public class ReadWriteModExample : JobComponentSystem + { + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + #region read-write-modifiers + return Entities.ForEach( + (ref Destination outputData, + in Source inputData) => + { + outputData.Value = inputData.Value; + }) + .Schedule(inputDeps); + #endregion + } + } + + #region basic-ecb + public class MyJobSystem : JobComponentSystem + { + private EndSimulationEntityCommandBufferSystem commandBufferSystem; + + protected override void OnCreate() + { + commandBufferSystem = World + .DefaultGameObjectInjectionWorld + .GetOrCreateSystem(); + } + + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + EntityCommandBuffer.Concurrent commandBuffer + = commandBufferSystem.CreateCommandBuffer().ToConcurrent(); + + //.. The rest of the job system code + return inputDeps; + } + } + #endregion +} + +namespace Doc.CodeSamples.Tests +{ + #region full-ecb-pt-one + // ParticleSpawner.cs + using Unity.Entities; + using Unity.Jobs; + using Unity.Mathematics; + using Unity.Transforms; + + public struct Velocity : IComponentData + { + public float3 Value; + } + + public struct TimeToLive : IComponentData + { + public float LifeLeft; + } + + public class ParticleSpawner : JobComponentSystem + { + private EndSimulationEntityCommandBufferSystem commandBufferSystem; + + protected override void OnCreate() + { + commandBufferSystem = World + .DefaultGameObjectInjectionWorld + .GetOrCreateSystem(); + } + + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + EntityCommandBuffer.Concurrent commandBufferCreate + = commandBufferSystem.CreateCommandBuffer().ToConcurrent(); + EntityCommandBuffer.Concurrent commandBufferCull + = commandBufferSystem.CreateCommandBuffer().ToConcurrent(); + + float dt = Time.DeltaTime; + Random rnd = new Random(); + rnd.InitState((uint) (dt * 100000)); + + + JobHandle spawnJobHandle = Entities + .ForEach((int entityInQueryIndex, + in SpawnParticles spawn, + in LocalToWorld center) => + { + int spawnCount = spawn.Rate; + for (int i = 0; i < spawnCount; i++) + { + Entity spawnedEntity = commandBufferCreate + .Instantiate(entityInQueryIndex, + spawn.ParticlePrefab); + + LocalToWorld spawnedCenter = center; + Translation spawnedOffset = new Translation() + { + Value = center.Position + + rnd.NextFloat3(-spawn.Offset, spawn.Offset) + }; + Velocity spawnedVelocity = new Velocity() + { + Value = rnd.NextFloat3(-spawn.MaxVelocity, spawn.MaxVelocity) + }; + TimeToLive spawnedLife = new TimeToLive() + { + LifeLeft = spawn.Lifetime + }; + + commandBufferCreate.SetComponent(entityInQueryIndex, + spawnedEntity, + spawnedCenter); + commandBufferCreate.SetComponent(entityInQueryIndex, + spawnedEntity, + spawnedOffset); + commandBufferCreate.AddComponent(entityInQueryIndex, + spawnedEntity, + spawnedVelocity); + commandBufferCreate.AddComponent(entityInQueryIndex, + spawnedEntity, + spawnedLife); + } + }) + .WithName("ParticleSpawning") + .Schedule(inputDeps); + + JobHandle MoveJobHandle = Entities + .ForEach((ref Translation translation, in Velocity velocity) => + { + translation = new Translation() + { + Value = translation.Value + velocity.Value * dt + }; + }) + .WithName("MoveParticles") + .Schedule(spawnJobHandle); + + JobHandle cullJobHandle = Entities + .ForEach((Entity entity, int entityInQueryIndex, ref TimeToLive life) => + { + life.LifeLeft -= dt; + if (life.LifeLeft < 0) + commandBufferCull.DestroyEntity(entityInQueryIndex, entity); + }) + .WithName("CullOldEntities") + .Schedule(inputDeps); + + JobHandle finalDependencies + = JobHandle.CombineDependencies(MoveJobHandle, cullJobHandle); + + commandBufferSystem.AddJobHandleForProducer(spawnJobHandle); + commandBufferSystem.AddJobHandleForProducer(cullJobHandle); + + return finalDependencies; + } + } + #endregion +} + +namespace Doc.CodeSamples.Tests +{ + #region full-ecb-pt-two + // SpawnParticles.cs + using Unity.Entities; + using Unity.Mathematics; + + [GenerateAuthoringComponent] + public struct SpawnParticles : IComponentData + { + public Entity ParticlePrefab; + public int Rate; + public float3 Offset; + public float3 MaxVelocity; + public float Lifetime; + } + #endregion +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/LambdaJobExamples.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/LambdaJobExamples.cs.meta new file mode 100644 index 000000000..99dea12a1 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/DocCodeSamples.Tests/LambdaJobExamples.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a263dbbca0d0044c095b173c3a1a39b8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/TableOfContents.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/TableOfContents.md new file mode 100644 index 000000000..17e590a6c --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/TableOfContents.md @@ -0,0 +1,30 @@ +* [Overview](index.md) +* [Core ECS](ecs_core.md) + * [Entities](ecs_entities.md) + * [Worlds](world.md) + * [Components](ecs_components.md) + * [General Purpose Components](component_data.md) + * [Shared Components](shared_component_data.md) + * [System State Components](system_state_components.md) + * [Dynamic Buffer Components](dynamic_buffers.md) + * [Chunk Components](ecs_chunk_component.md) + * [Systems](ecs_systems.md) + * [Component Systems](component_system.md) + * [Job Component Systems](job_component_system.md) + * [Entity Command Buffers](entity_command_buffer.md) + * [System Update Order](system_update_order.md) + * [Accessing Entity Data](chunk_iteration.md) + * [Using JobComponentSystem and ForEach](entities_job_foreach.md) + * [Using IJobForEach](entity_iteration_job.md) + * [Using ComponentSystem and ForEach](entity_iteration_foreach.md) + * [Using IJobChunk](chunk_iteration_job.md) + * [Manual iteration](manual_iteration.md) + * [Entity Queries](ecs_entity_query.md) + * [Sync points and structural changes](sync_points.md) + * [Component WriteGroups](ecs_write_groups.md) + * [Versions and Generations](version_numbers.md) + * [Jobs in ECS](ecs_job_overview.md) + * [ECS Job System extensions](ecs_job_extensions.md) +* [Creating Gameplay](gp_overview.md) + * [Transforms](transform_system.md) + * [Rendering](gp_rendering.md) diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/chunk_iteration.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/chunk_iteration.md new file mode 100644 index 000000000..d2573dd8b --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/chunk_iteration.md @@ -0,0 +1,24 @@ +--- +uid: ecs-iteration +--- +# Accessing entity data + +Iterating over your data is one of the most common tasks you will perform when implementing an ECS system. ECS systems typically process a set of entities, reading data from one or more components, performing a calculation, and then writing the result to another component. + +In general, the most efficient way to iterate over your entities and components is in a parallelizable Job that processes the components in order. This takes advantage of processing power from all available cores and data locality to avoid CPU cache misses. + +The ECS API provides a number of ways to accomplish iteration, each with its own performance implications and restrictions. You can iterate over ECS data in the following ways: + +* [JobComponentSystem Entities.ForEach](entities_job_foreach.md) — the simplest efficient way to process component data entity by entity. + +* [IJobForEach](entity_iteration_job.md) — use a job struct to efficiently iterate over entities. (IJobForEach is equivalent to using Entities.ForEach in a JobComponentSystem, but requires more manually written setup code.) + +* [IJobForEachWithEntity](entity_iteration_job.md#with-entity) — slightly more complex than IJobForEach, giving you access to the entity handle and array index of the entity you are processing. + +* [IJobChunk](chunk_iteration_job.md) — iterates over the eligible blocks of memory (called a *Chunk*) containing matching entities. Your Job Execute() function can iterate over the Elements inside each chunk using a for loop. You can use IJobChunk for more complex situations than supported by IJobForEach, while maintaining maximum efficiency. + +* [ComponentSystem](entity_iteration_foreach.md) — the ComponentSystem offers the Entities.ForEach delegate functions to help iterate over your entities. However, ForEach runs on the main thread, so typically, you should only use ComponentSystem implementations for tasks that must be carried out on the main thread anyway. + +* [Manual iteration](manual_iteration.md) — if the previous methods are insufficient, you can manually iterate over entities or chunks. For example, you can get a NativeArray containing entities or the chunks of the entities that you want to process and iterate over them using a Job, such as IJobParallelFor. + +The [EntityQuery](ecs_entity_query.md) class provides a way to construct a view of your data that contains only the specific data you need for a given algorithm or process. Many of the iteration methods in the list above use a EntityQuery, either explicitly or internally. \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/chunk_iteration_job.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/chunk_iteration_job.md new file mode 100644 index 000000000..3ecd54023 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/chunk_iteration_job.md @@ -0,0 +1,118 @@ +--- +uid: ecs-ijobchunk +--- + +# Using IJobChunk + +You can implement IJobChunk inside a JobComponentSystem to iterate through your data by chunk. The JobComponentSystem calls your `Execute()` function once for each chunk that contains the entities that you want the system to process. You can then process the data inside each chunk, entity by entity. + +Iterating with IJobChunk requires more code setup than does IJobForEach, but is also more explicit and represents the most direct access to the data, as it is actually stored. + +Another benefit of using iterating by chunks is that you can check whether an optional component is present in each chunk (with `Archetype.Has()`) and process all the entities in the chunk accordingly. + +The steps involved in implementing an IJobChunk Job include: + +1. Identify the entities that you want to process by creating a EntityQuery. +2. Defining the Job struct, including fields for ArchetypeChunkComponentType objects to identifying the types of components the Job directly accesses, specifying whether the Job reads or writes to those components. +3. Instantiating the Job struct and scheduling the Job in the system `OnUpdate()` function. +4. In the `Execute()` function, getting the NativeArray instances for the components the Job reads or writes and, finally, iterating over the current chunk to perform the desired work. + +The [ECS samples repository](https://github.com/Unity-Technologies/EntityComponentSystemSamples) contains a simple HelloCube example that demonstrates how to use IJobChunk. + + +## Query for data with a EntityQuery + +An EntityQuery defines the set of component types that an archetype must contain for the system to process its associated chunks and entities. An archetype can have additional components as well, but it must have at least those defined by the EntityQuery. You can also exclude archetypes that contain specific types of components. + +For simple queries, you can use the `JobComponentSystem.GetEntityQuery()` function, passing in the component types: + +[!code-cs[system](../package/DocCodeSamples.Tests/ChunkIterationJob.cs#rotationspeedsystem)] + +For more complex situations, you can use an EntityQueryDesc. An EntityQueryDesc provides a flexible query mechanism to specify the component types: + +* `All` = All component types in this array must exist in the archetype +* `Any` = At least one of the component types in this array must exist in the archetype +* `None` = None of the component types in this array can exist in the archetype + +For example, the following query includes archetypes containing the RotationQuaternion and RotationSpeed components, but excludes any archetypes containing the Frozen component: + +[!code-cs[oncreate2](../package/DocCodeSamples.Tests/ChunkIterationJob.cs#oncreate2)] + +The query uses `ComponentType.ReadOnly` instead of the simpler `typeof` expression to designate that the system does not write to RotationSpeed. + +You can also combine multiple queries by passing an array of EntityQueryDesc objects rather than a single instance. Each query is combined using a logical OR operation. The following example selects an archetypes that contain a RotationQuaternion component or a RotationSpeed component (or both): + +[!code-cs[oncreate3](../package/DocCodeSamples.Tests/ChunkIterationJob.cs#oncreate3)] + +**Note:** Do not include completely optional components in the EntityQueryDesc. To handle optional components, use the `chunk.Has()` method inside `IJobChunk.Execute()` to determine whether the current ArchetypeChunk has the optional component or not. Since all entities within the same chunk have the same components, you only need to check whether an optional component exists once per chunk -- not once per entity. + +For efficiency and to avoid needless creation of garbage-collected reference types, you should create the EntityQueries for a system in the system’s OnCreate() function and store the result in an instance variable. (In the above examples, the `m_Query` variable is used for this purpose.) + + +## Define the IJobChunk struct + +The IJobChunk struct defines fields for the data the Job needs when it runs, as well as the Job’s `Execute()` method. + +In order to access the component arrays inside the chunks that the system passes to your `Execute()` method, you must create an ArchetypeChunkComponentType<T> object for each type of component that the Job reads or writes. These objects allow you to get instances of the NativeArrays providing access to the components of an entity. Include all the components referenced in the Job’s EntityQuery that the `Execute()` method reads or writes. You can also provide ArchetypeChunkComponentType variables for optional component types that you do not include in the EntityQuery. (You must check to make sure that the current chunk has an optional component before trying to access it.) + +For example, the HelloCube IJobChunk example declares a Job struct that defines ArchetypeChunkComponentType<T> variables for two components, RotationQuaternion and RotationSpeed: + +[!code-cs[speedjob](../package/DocCodeSamples.Tests/ChunkIterationJob.cs#speedjob)] + +The system assigns values to these variables in the `OnUpdate()` function. The variables are used inside the `Execute()` method when the ECS framework runs the Job. + +The Job also uses the Unity delta time to animate the rotation of a 3D object. The example also passes this value to the `Execute()` method using a struct field. + + +## Writing the Execute method + +The signature of the IJobChunk `Execute()` method is: + +[!code-cs[speedjob](../package/DocCodeSamples.Tests/ChunkIterationJob.cs#execsignature)] + +The `chunk` parameter is a handle to the block of memory containing the entities and components to be processed in this iteration of the Job. Since a chunk can only contain a single archetype, all the entities in a chunk have the same set of components. + +Use the `chunk` parameter to get the NativeArray instances for your components: + +[!code-cs[getcomponents](../package/DocCodeSamples.Tests/ChunkIterationJob.cs#getcomponents)] + +These arrays are aligned such that an entity has the same index in all of them. You can then iterate through the component arrays with a normal for loop. Use `chunk.Count` to get the number of entities stored in the current chunk: + +[!code-cs[chunkiteration](../package/DocCodeSamples.Tests/ChunkIterationJob.cs#chunkiteration)] + +If you the `Any` filter in your EntityQueryDesc or have completely optional components that don’t appear in the query at all, you can use the `ArchetypeChunk.Has()` function to test whether the current chunk contains the one of those components before using it: + + if (chunk.Has(OptionalCompType)) + {//...} + +__Note:__ If you use a concurrent entity command buffer, pass the `chunkIndex` argument as the `jobIndex` parameter to the command buffer functions. + + +## Skipping chunks with unchanged entities + +If you only need to update entities when a component value has changed, you can add that component type to the change filter of the EntityQuery used to select the entities and chunks for the job. For example, if you have a system that reads two components and only needs to update a third when one of the first two has changed, you could use a EntityQuery as follows: + +[!code-cs[changefilter](../package/DocCodeSamples.Tests/ChunkIterationJob.cs#changefilter)] + +The EntityQuery change filter supports up to two components. If you want to check more or aren't using a EntityQuery, you can make the check manually. To make this check, compare the chunk’s change version for the component to the system’s `LastSystemVersion` using the `ArchetypeChunk.DidChange()` function. If this function returns false, you can skip the current chunk altogether since none of the components of that type have changed since the last time the system ran. + +The `LastSystemVersion` from the system must be passed into the Job using a struct field: + +[!code-cs[changefilterjobstruct](../package/DocCodeSamples.Tests/ChunkIterationJob.cs#changefilterjobstruct)] + +As with all the Job struct fields, you must assign its value before scheduling the Job: + +[!code-cs[changefilteronupdate](../package/DocCodeSamples.Tests/ChunkIterationJob.cs#changefilteronupdate)] + +Note that for efficiency, the change version applies to whole chunks not individual entities. If a chunk has been accessed by another Job which had the ability to write to that type of component, then the change version for that component is incremented and the `DidChange()` function returns true. The change version is incremented even if the Job that has declared write access to a component does not actually change the component value. + + +## Instantiate and schedule the Job + +To run an IJobChunk Job, you must create an instance of your Job struct, setting the struct fields, and then schedule the Job. When you do this in the OnUpdate() function of a JobComponentSystem, the system schedules the Job to run every frame. + +[!code-cs[schedulequery](../package/DocCodeSamples.Tests/ChunkIterationJob.cs#schedulequery)] + +When you call the `GetArchetypeChunkComponentType` function to set your component type variables, make sure that you set the isReadOnly to true for components that the Job reads, but doesn’t write. Setting these parameters correctly can have a significant impact on how efficiently the ECS framework can schedule your Jobs. These access mode settings must match their equivalents in both the struct definition, and the EntityQuery. + +Do not cache the return value of `GetArchetypeChunkComponentType()` in a system class variable. The function must be called every time the system runs and the updated value passed to the Job. diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/component_data.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/component_data.md new file mode 100644 index 000000000..4e327bc11 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/component_data.md @@ -0,0 +1,49 @@ +--- +uid: ecs-component-data +--- + +# General purpose components + +ComponentData in Unity (also known as a component in standard ECS terms) is a struct that contains only the instance data for an [entity](entities.md). ComponentData should not contain methods beyond utility functions for accessing the data in the struct. All game logic and behaviour should be implemented in systems. To put this in terms of the old Unity system, this is somewhat similar to an old Component class, but one that **only contains variables**. + +The Unity ECS API provides an interface called [IComponentData](xref:Unity.Entities.IComponentData) that you can implement in your code to declare a general-purpose component type. + +## IComponentData + +Traditional Unity components (including `MonoBehaviour`) are [object-oriented](https://en.wikipedia.org/wiki/Object-oriented_programming) classes which contain data and methods for behavior. `IComponentData` is a pure ECS-style component, meaning that it defines no behavior, only data. `IComponentData` should be implemented as struct rather than a class, meaning that it is copied [by value instead of by reference](https://stackoverflow.com/questions/373419/whats-the-difference-between-passing-by-reference-vs-passing-by-value?answertab=votes#tab-top) by default. You will usually need to use the following pattern to modify data: + +```c# +var transform = group.transform[index]; // Read + +transform.heading = playerInput.move; // Modify +transform.position += deltaTime * playerInput.move * settings.playerMoveSpeed; + +group.transform[index] = transform; // Write +``` + +`IComponentData` structs may not contain references to managed objects. Since `ComponentData` lives in simple non-garbage-collected tracked [chunk memory](chunk_iteration.md) allowing for many performance advantages. + +### Managed IComponentData + +To help porting existing code over to ECS in a piecemeal fashion, interoperating with managed data not suitable in `ISharedComponentData` or when first prototyping what your data layout will look like, it may be helpful to use a managed `IComponentData` (that is, `IComponentData` declared using a `class` rather than `struct`). These components are used the same way as value type `IComponentData` however internally are handled in a much different (and slower) way. Users who do not need managed component support should define `UNITY_DISABLE_MANAGED_COMPONENTS` in their Project Settings -> Player -> Scripting Define Symbols to prevent accidental usage. + +By nature of being a managed type, managed `IComponentData` have the following performance drawbacks compared to valuetype `IComponentData`: +* Cannot be used with the Burst Compiler +* Cannot be used in Job structs +* Cannot use [chunk memory](chunk_iteration.md) +* Require garbage collection + +Users should try to limit the number of managed components, preferring blittable types as much as possible. + +Managed `IComponentData` must implement the `IEquatable` interface and override for `Object.GetHashCode()`. As well, for serialization purposes, managed components must be default constructible. + +Since managed components are by their nature not blittable, these components are stored in a managed C# array known indirectly by each `ArchetypeChunk` and are indexed to by `Entity`. + +You must set the value of the component on the main thread using either the `EntityManager` or `EntityCommandBuffer`. Being a reference type, you may change value of the component without moving entities across chunks +unlike [ISharedComponentData](xref:Unity.Entities.ISharedComponentData) and thus does not create a sync-point. However while logically stored separate from value-type components, +managed components still contribute to an entity's `EntityArchetype` definition. As such, adding a new managed component to an entity will still cause a new archetype to be created (if a matching archetype doesn't exist already) and the entity to be moved to a new chunk. + +See file: _/Packages/com.unity.entities/Unity.Entities/IComponentData.cs_. + + + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/component_system.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/component_system.md new file mode 100644 index 000000000..dcc4a94f4 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/component_system.md @@ -0,0 +1,16 @@ +--- +uid: ecs-component-system +--- + +# Component Systems + +A `ComponentSystem` in Unity (also known as a system in standard ECS terms) performs operations on [entities](entities.md). A `ComponentSystem` cannot contain instance data. To put this in terms of the old Unity system, this is somewhat similar to an old [Component](https://docs.unity3d.com/Manual/Components.html) class, but one that **only contains methods**. One `ComponentSystem` is responsible for updating all entities with a matching set of components (that is defined within a struct called a [EntityQuery](ecs_entity_query.md)). + +Unity ECS provides an abstract class called `ComponentSystem` that you can extend in your code. + +See file: _/Packages/com.unity.entities/Unity.Entities/ComponentSystem.cs_. + +See also: [System update order](system_update_order.md). + + + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/custom_job_types.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/custom_job_types.md new file mode 100644 index 000000000..7a424cd53 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/custom_job_types.md @@ -0,0 +1,382 @@ +--- +uid: ecs-custom-job-types +--- +# Custom job types + +On the lowest level of the job system, jobs are scheduled by calling one of the `Schedule` functions in [JobsUtility](https://docs.unity3d.com/ScriptReference/Unity.Jobs.LowLevel.Unsafe.JobsUtility.html). The currently existing [job types](https://docs.unity3d.com/ScriptReference/Unity.Jobs.LowLevel.Unsafe.JobType.html) all use these functions, but it is also possible to create specialized job types using the same APIs. + +These APIs use unsafe code and have to be crafted carefully, since they can easily introduce unwanted race conditions. If you add your own job types, we strongly recommend to aim for full test coverage. + +As an example we have a custom job type `IJobParallelForBatch` (see file: _/Packages/com.unity.jobs/Unity.Jobs/IJobParallelForBatch.cs_). + +It works like __IJobParallelFor__, but instead of calling a single execute function per index it calls one execute function per batch being executed. This is useful if you need to do something on more than one item at a time, but still want to do it in parallel. A common scenario for this job type is if you need to create a temporary array and you want to avoid creating each item in the array one at a time. By using IJobParallelFor you can instead create one temporary array per batch. + +In the IJobParallelForBatch example, the entry point where the job is actually scheduled looks like this: + +```c# +unsafe static public JobHandle ScheduleBatch<T>(this T jobData, int arrayLength, int minIndicesPerJobCount, JobHandle dependsOn = new JobHandle()) where T : struct, IJobParallelForBatch +{ + var scheduleParams = new JobsUtility.JobScheduleParameters(UnsafeUtility.AddressOf(ref jobData), ParallelForBatchJobStruct<T>.Initialize(), dependsOn, ScheduleMode.Batched); + return JobsUtility.ScheduleParallelFor(ref scheduleParams, arrayLength, minIndicesPerJobCount); +} +``` + +The first line creates a struct containing the scheduling parameters. When creating it you need to set a pointer to the data which will be copied to the jobs. The reason this is a pointer is that the native code which uses it does not know about the type. +You also need to pass it a pointer to the __JobReflectionData__ created by calling: + +```c# +JobsUtility.CreateJobReflectionData(typeof(T), JobType.ParallelFor, (ExecuteJobFunction)Execute); +``` + +JobReflection stores information about the struct with the data for the job, such as which __NativeContainers__ it has and how they need to be patched when scheduling a job. It lives on the native side of the engine and the managed code only has access to it though pointers without any information about what the type is. When creating JobReflectionData you need to specify the type of the struct implementing the job, the __JobType__ and the method which will be called to execute the job. The JobReflectionData does not depend on the data in the struct you schedule, only its type, so it should only be created once for all jobs implementing the same interface. There are currently only two job types, __Single__ and __ParallelFor__. Single means the job will only get a single call, ParallelFor means there will be multiple calls to process it; where each call is restricted to a subset of the range of indices to process. Which job type you choose affects which schedule function you are allowed to call. + +The third parameter of __JobsUtility.JobScheduleParameters__ is the __JobHandle__ that the scheduled job should depend on. + +The final parameter is the schedule mode. There are two scheduling modes to choose from, __Run__ and __Batched__. Batched means one or more jobs will be scheduled to do the processing, while Run means the processing will be done on the main thread before Schedule returns. + +Once the schedule parameters are created we actually schedule the job. There are three ways to schedule jobs depending on their type: + +```c# +JobHandle Schedule(ref JobScheduleParameters parameters); +JobHandle ScheduleParallelFor(ref JobScheduleParameters parameters, int arrayLength, int innerLoopBatchCount); +JobHandle ScheduleParallelForTransform(ref JobScheduleParameters parameters, IntPtr transfromAccessArray); + +``` + +Schedule can only be used if the __ScheduleParameters__ are created with __JobType.Single__, the other two schedule functions require __JobType.ParallelFor__. +The __arrayLength__ and __innerLoopBatchCount__ parameter passed to __ScheduleParallelFor__ are used to determine how many indices the jobs should process and how many indices it should handle in the inner loop (see the section on [Execution and JobRanges](#execution-and-jobranges) for more information on the inner loop count). +__ScheduleParallelForTransform__ is similar to ScheduleParallelFor, but it also has access to a __TransformAccessArray__ that allows you to modify __Transform__ components on __GameObjects__. The number of indices and batch size is inferred from the TransformAccessArray. + +## Execution and JobRanges + +After scheduling the job, Unity will call the entry point you specified directly from the native side. It works in a similar way to how __Update__ is called on MonoBehaviours, but from inside a job instead. You only get one call per job and there is either one job, or one job per worker thread; in the case of ParallelFor. + +The signature used for Execute is + +```c# +public delegate void ExecuteJobFunction(ref T data, IntPtr additionalPtr, IntPtr bufferRangePatchData, ref JobRanges ranges, int jobIndex); +``` +For Single jobs, only the data is needed and you can just do your processing right away, but for ParallelFor jobs it requires some more work before you can start processing indices. We need to split up the indices into a number of sequential sub-sets that each job will process in parallel. This way we do not process the same thing twice and we are sure that everything gets covered. The memory layout will determine the order of indices. + +The JobRanges contain the batches and indices a ParallelFor job is supposed to process. The indices are split into batches based on the batch size, the batches are evenly distributed between the jobs doing the execution in such a way that each job can iterate over a continuous section of memory. The ParallelFor job should call: + +```c# +JobsUtility.GetWorkStealingRange(ref ranges, jobIndex, out begin, out end) +``` + +This continues until it returns `false`, and after calling it process all items with index between __begin__ and __end__. +The reason you get batches of items, rather than the full set of items the job should process, is that Unity will apply [work stealing](https://en.wikipedia.org/wiki/Work_stealing) if one job completes before the others. Work stealing in this context means that when one job is done it will look at the other jobs running and see if any of them still have a lot of work left. If it finds a job which is not complete it will steal some of the batches that it has not yet started; to dynamically redistribute the work. + +Before a ParallelFor job starts processing items it also needs to limit the write access to NativeContainers on the range of items which the job is processing. If it does not do this several jobs can potentially write to the same index which leads to race conditions. The NativeContainers that need to be limited is passed to the job and there is a function to patch them; so they cannot access items outside the correct range. The code to do it looks like this: + +```c# +#if ENABLE_UNITY_COLLECTIONS_CHECKS +JobsUtility.PatchBufferMinMaxRanges(bufferRangePatchData, UnsafeUtility.AddressOf(ref jobData), begin, end - begin); +#endif +``` + +# Custom NativeContainers + +When writing jobs, the data communication between jobs is one of the hardest parts to get right. Just using __NativeArray__ is very limiting. Using __NativeQueue__, __NativeHashMap__ and __NativeMultiHashMap__ and their __Concurrent__ versions solves most scenarios. + +For the remaining scenarios it is possible to write your own custom NativeContainers. +When writing custom containers for [thread synchronization](https://en.wikipedia.org/wiki/Synchronization_(computer_science)#Thread_or_process_synchronization) it is very important to write correct code. We strongly recommend full test coverage for any new containers you add. + +As a very simple example of this we will create a __NativeCounter__ that can be incremented in a ParallelFor job through __NativeCounter.Concurrent__ and read in a later job or on the main thread. + +Let's start with the basic container type: + +```c# +// Mark this struct as a NativeContainer, usually this would be a generic struct for containers, but a counter does not need to be generic +// TODO - why does a counter not need to be generic? - explain the argument for this reasoning please. +[StructLayout(LayoutKind.Sequential)] +[NativeContainer] +unsafe public struct NativeCounter +{ + // The actual pointer to the allocated count needs to have restrictions relaxed so jobs can be schedled with this container + [NativeDisableUnsafePtrRestriction] + int* m_Counter; + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle m_Safety; + // The dispose sentinel tracks memory leaks. It is a managed type so it is cleared to null when scheduling a job + // The job cannot dispose the container, and no one else can dispose it until the job has run, so it is ok to not pass it along + // This attribute is required, without it this NativeContainer cannot be passed to a job; since that would give the job access to a managed object + [NativeSetClassTypeToNullOnSchedule] + DisposeSentinel m_DisposeSentinel; +#endif + + // Keep track of where the memory for this was allocated + Allocator m_AllocatorLabel; + + public NativeCounter(Allocator label) + { + // This check is redundant since we always use an int that is blittable. + // It is here as an example of how to check for type correctness for generic types. +#if ENABLE_UNITY_COLLECTIONS_CHECKS + if (!UnsafeUtility.IsBlittable()) + throw new ArgumentException(string.Format("{0} used in NativeQueue<{0}> must be blittable", typeof(int))); +#endif + m_AllocatorLabel = label; + + // Allocate native memory for a single integer + m_Counter = (int*)UnsafeUtility.Malloc(UnsafeUtility.SizeOf(), 4, label); + + // Create a dispose sentinel to track memory leaks. This also creates the AtomicSafetyHandle +#if ENABLE_UNITY_COLLECTIONS_CHECKS + DisposeSentinel.Create(out m_Safety, out m_DisposeSentinel, 0); +#endif + // Initialize the count to 0 to avoid uninitialized data + Count = 0; + } + + public void Increment() + { + // Verify that the caller has write permission on this data. + // This is the race condition protection, without these checks the AtomicSafetyHandle is useless +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckWriteAndThrow(m_Safety); +#endif + (*m_Counter)++; + } + + public int Count + { + get + { + // Verify that the caller has read permission on this data. + // This is the race condition protection, without these checks the AtomicSafetyHandle is useless +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckReadAndThrow(m_Safety); +#endif + return *m_Counter; + } + set + { + // Verify that the caller has write permission on this data. This is the race condition protection, without these checks the AtomicSafetyHandle is useless +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckWriteAndThrow(m_Safety); +#endif + *m_Counter = value; + } + } + + public bool IsCreated + { + get { return m_Counter != null; } + } + + public void Dispose() + { + // Let the dispose sentinel know that the data has been freed so it does not report any memory leaks +#if ENABLE_UNITY_COLLECTIONS_CHECKS + DisposeSentinel.Dispose(m_Safety, ref m_DisposeSentinel); +#endif + + UnsafeUtility.Free(m_Counter, m_AllocatorLabel); + m_Counter = null; + } +} +``` + +With this we have a simple NativeContainer where we can get, set, and increment the count. This container can be passed to a job, but it has the same restrictions as NativeArray, which means it cannot be passed to a ParallelFor job with write access. + +The next step is to make it usable in ParallelFor. In order to avoid race conditions we want to make sure no-one else is reading it while the ParallelFor is writing to it. To achieve this we create a separate inner struct called Concurrent that can handle multiple writers, but no readers. We make sure NativeCounter.Concurrent can be assigned to from within a normal NativeCounter, since it is not possible for it to live separately outside a NativeCounter. TODO - why is that? + +```c# +[NativeContainer] +// This attribute is what makes it possible to use NativeCounter.Concurrent in a ParallelFor job +[NativeContainerIsAtomicWriteOnly] +unsafe public struct Concurrent +{ + // Copy of the pointer from the full NativeCounter + [NativeDisableUnsafePtrRestriction] + int* m_Counter; + + // Copy of the AtomicSafetyHandle from the full NativeCounter. The dispose sentinel is not copied since this inner struct does not own the memory and is not responsible for freeing it. +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle m_Safety; +#endif + + // This is what makes it possible to assign to NativeCounter.Concurrent from NativeCounter + public static implicit operator NativeCounter.Concurrent (NativeCounter cnt) + { + NativeCounter.Concurrent concurrent; +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckWriteAndThrow(cnt.m_Safety); + concurrent.m_Safety = cnt.m_Safety; + AtomicSafetyHandle.UseSecondaryVersion(ref concurrent.m_Safety); +#endif + + concurrent.m_Counter = cnt.m_Counter; + return concurrent; + } + + public void Increment() + { + // Increment still needs to check for write permissions +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckWriteAndThrow(m_Safety); +#endif + // The actual increment is implemented with an atomic, since it can be incremented by multiple threads at the same time + Interlocked.Increment(ref *m_Counter); + } +} +``` + +With this setup we can schedule ParallelFor with write access to a NativeCounter through the inner Concurrent struct, like this: + +```c# +struct CountZeros : IJobParallelFor +{ + [ReadOnly] + public NativeArray input; + public NativeCounter.Concurrent counter; + public void Execute(int i) + { + if (input[i] == 0) + { + counter.Increment(); + } + } +} +``` + +```c# +var counter = new NativeCounter(Allocator.Temp); +var jobData = new CountZeros(); +jobData.input = input; +jobData.counter = counter; +counter.Count = 0; + +var handle = jobData.Schedule(input.Length, 8); +handle.Complete(); + +Debug.Log("The array countains " + counter.Count + " zeros"); +counter.Dispose(); +``` + +## Better cache usage + +The NativeCounter from the previous section is a working implementation of a counter, but all jobs in the ParallelFor will access the same atomic to increment the value. This is not optimal as it means the same cache line is used by all threads. +The way this is generally solved in NativeContainers is to have a local cache per worker thread, which is stored on its own cache line. + +The __[NativeSetThreadIndex]__ attribute can inject a worker thread index, the index is guaranteed to be unique while accessing the NativeContainer from the ParallelFor jobs. + +In order to make such an optimization here we need to change a few things. The first thing we need to change is the data layout. For performance reasons we need one full cache line per worker thread, rather than a single int to avoid [false sharing](https://en.wikipedia.org/wiki/False_sharing). + +We start by adding a constant for the number of ints on a cache line. + +```c# +public const int IntsPerCacheLine = JobsUtility.CacheLineSize / sizeof(int); +``` + +Next we change the amount of memory allocated. + +```c# +// One full cache line (integers per cacheline * size of integer) for each potential worker index, JobsUtility.MaxJobThreadCount +m_Counter = (int*)UnsafeUtility.Malloc(UnsafeUtility.SizeOf()*IntsPerCacheLine*JobsUtility.MaxJobThreadCount, 4, label); +``` + +TODO: I'm not sure which example you are referring to when you say: main, non-concurrent, version below (is this an example you used on this page or what you would do if you were not using jobified code/ECS etc. It has potential for confusion.) + +When accessing the counter from the main, non-concurrent, version there can only be one writer so the increment function is fine with the new memory layout. +For `get` and `set` of the `count` we need to loop over all potential worker indices. + +```c# +public int Count +{ + get + { + // Verify that the caller has read permission on this data. + // This is the race condition protection, without these checks the AtomicSafetyHandle is useless +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckReadAndThrow(m_Safety); +#endif + int count = 0; + for (int i = 0; i < JobsUtility.MaxJobThreadCount; ++i) + count += m_Counter[IntsPerCacheLine * i]; + return count; + } + set + { + // Verify that the caller has write permission on this data. + // This is the race condition protection, without these checks the AtomicSafetyHandle is useless +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckWriteAndThrow(m_Safety); +#endif + // Clear all locally cached counts, + // set the first one to the required value + for (int i = 1; i < JobsUtility.MaxJobThreadCount; ++i) + m_Counter[IntsPerCacheLine * i] = 0; + *m_Counter = value; + } +} +``` + +The final change is the inner Concurrent struct that needs to get the worker index injected into it. Since each worker only runs one job at a time, there is no longer any need to use atomics when only accessing the local count. + +```c# +[NativeContainer] +[NativeContainerIsAtomicWriteOnly] +// Let the job system know that it should inject the current worker index into this container +unsafe public struct Concurrent +{ + [NativeDisableUnsafePtrRestriction] + int* m_Counter; + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle m_Safety; +#endif + + // The current worker thread index; it must use this exact name since it is injected + [NativeSetThreadIndex] + int m_ThreadIndex; + + public static implicit operator NativeCacheCounter.Concurrent (NativeCacheCounter cnt) + { + NativeCacheCounter.Concurrent concurrent; +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckWriteAndThrow(cnt.m_Safety); + concurrent.m_Safety = cnt.m_Safety; + AtomicSafetyHandle.UseSecondaryVersion(ref concurrent.m_Safety); +#endif + + concurrent.m_Counter = cnt.m_Counter; + concurrent.m_ThreadIndex = 0; + return concurrent; + } + + public void Increment() + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckWriteAndThrow(m_Safety); +#endif + // No need for atomics any more since we are just incrementing the local count + ++m_Counter[IntsPerCacheLine*m_ThreadIndex]; + } +} +``` + +Writing the NativeCounter this way significantly reduces the overhead of having multiple threads writing to it. It does, however, come at a price. The cost of getting the count on the main thread has increased significantly since it now needs to check all local caches and sum them up. If you are aware of this and make sure to cache the return values it is usually worth it, but you need to know the limitations of your data structures. So we strongly recommend documenting the performance characteristics. + +## Tests + +The NativeCounter is not complete, the only thing left is to add tests for it to make sure it is correct and that it does not break in the future. When writing tests you should try to cover as many unusual scenarios as possible. It is also a good idea to add some kind of stress test using jobs to detect race conditions, even if it is unlikely to find all of them. The NativeCounter API is very small so the number of tests required is not huge. + +* Both versions of the counter examples above are available at: _/Assets/NativeCounterDemo_. +* The tests for them can be found at: _/Assets/NativeCounterDemo/Editor/NativeCounterTests.cs_. + +## Available attributes + +The NativeCounter uses many attributes, but there are a few more available for other types of containers. Here is a list of the available attributes you can use on the NativeContainer struct. +* [NativeContainer](https://docs.unity3d.com/2018.1/Documentation/ScriptReference/Unity.Collections.LowLevel.Unsafe.NativeContainerAttribute.html) - marks a struct as a NativeContainer.Required for all native containers. +* [NativeContainerSupportsMinMaxWriteRestriction](https://docs.unity3d.com/2018.1/Documentation/ScriptReference/Unity.Collections.LowLevel.Unsafe.NativeContainerSupportsMinMaxWriteRestrictionAttribute.html) - signals that the NativeContainer can restrict its writable ranges to be between a min and max index. This is used when passing the container to an IJobParallelFor to make sure that the job does not write to indices it is not supposed to process. In order to use this the NativeContainer must have the members int __m_Length__, int __m_MinIndex__ and int __m_MaxIndex__ in that order with no other members between them. The container must also throw an exception for writes outside the min/max range. +* [NativeContainerIsAtomicWriteOnly](https://docs.unity3d.com/2018.1/Documentation/ScriptReference/Unity.Collections.LowLevel.Unsafe.NativeContainerIsAtomicWriteOnlyAttribute.html) - signals that the NativeContainer uses atomic writes and no reads. By adding this is is possible to pass the NativeContainer to an IJobParallelFor as writable without restrictions on which indices can be written to. +* [NativeContainerSupportsDeallocateOnJobCompletion](https://docs.unity3d.com/2018.1/Documentation/ScriptReference/Unity.Collections.LowLevel.Unsafe.NativeContainerSupportsDeallocateOnJobCompletionAttribute.html) - makes the NativeContainer usable with [DeallocateOnJobCompletion](https://docs.unity3d.com/2018.1/Documentation/ScriptReference/Unity.Collections.DeallocateOnJobCompletionAttribute.html). In order to use this the NativeContainer must have a single allocation in __m_Buffer__, an allocator label in __m_AllocatorLabel__ and a dispose sentinel in __m_DisposeSentinel__. +* [NativeSetThreadIndex](https://docs.unity3d.com/2018.1/Documentation/ScriptReference/Unity.Collections.LowLevel.Unsafe.NativeSetThreadIndexAttribute.html) - Patches an int with the thread index of the job. + +In addition to these attributes on the native container struct itself there are a few attributes which can be used on members of the native container. +* [NativeDisableUnsafePtrRestriction](https://docs.unity3d.com/2018.1/Documentation/ScriptReference/Unity.Collections.LowLevel.Unsafe.NativeDisableUnsafePtrRestrictionAttribute.html) - allows the NativeContainer to be passed to a job even though it contains a pointer, which is usually not allowed. +* [NativeSetClassTypeToNullOnSchedule](https://docs.unity3d.com/2018.1/Documentation/ScriptReference/Unity.Collections.LowLevel.Unsafe.NativeSetClassTypeToNullOnScheduleAttribute.html) - allows the NativeContainer to be passed to a job even though it contains a managed object. The managed object will be set to `null` on the copy passed to the job. + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/doo_design.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/doo_design.md new file mode 100644 index 000000000..2279c17cf --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/doo_design.md @@ -0,0 +1,7 @@ +--- +uid: ecs-data-oriented-design +--- +# Data-oriented design in Unity + +> Synopsis: Discuss how to design optimal data structures and algorithms to transform them. Provide case studies for different types of data commonly found in games: transform data, hierarchical skinned meshes, audio, strings, etc... + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/dynamic_buffers.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/dynamic_buffers.md new file mode 100644 index 000000000..140dcc36b --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/dynamic_buffers.md @@ -0,0 +1,137 @@ +--- +uid: ecs-dynamic-buffers +--- + +# Dynamic Buffers + +Use dynamic buffers to associate array-like data with an entity. Dynamic buffers are ECS components that can hold a variable number of elements, automatically resizing as necessary. + +To create a dynamic buffer, first declare a struct that implements [IBufferElementData](xref:Unity.Entities.IBufferElementData) and which defines the elements stored in the buffer. For example, you could use the following struct for a buffer component that stores integers: + +[!code-cs[declare-element](../package/DocCodeSamples.Tests/DynamicBufferExamples.cs#declare-element)] + +To associate a dynamic buffer with an entity, add an IBufferElementData component directly to the entity rather than adding the [dynamic buffer container](xref:Unity.Entities.DynamicBuffer`1) itself. + +ECS manages the container; for most purposes, you can treat a dynamic buffer the same as any other ECS component by using your declared IBufferElementData type. For example, you can use the IBufferElementData type in [entity queries](xref:Unity.Entities.EntityQuery) as well as when adding or removing the buffer component. However, you use different functions to access a buffer component and those functions provide the [DynamicBuffer](xref:Unity.Entities.DynamicBuffer`1) instance, which provides an array-like interface to the buffer data. + +You can specify an “internal capacity" for a dynamic buffer component using the [InternalBufferCapacity attribute](xref:Unity.Entities.InternalBufferCapacityAttribute). The internal capacity defines the number of elements the dynamic buffer stores in the [ArchetypeChunk](xref:Unity.Entities.ArchetypeChunk) along with the other components of an entity. If you increase the size of a buffer beyond the internal capacity, the buffer allocates a heap memory block outside the current chunk (and moves all existing elements). ECS manages this external buffer memory automatically, freeing the memory when the buffer component is removed. + +Note that if the data in a buffer is not dynamic, you can use a [blob asset](xref:Unity.Entities.BlobBuilder) instead of a dynamic buffer. Blob assets can store structured data, including arrays and can be shared by multiple entities. + +## Declaring Buffer Element Types + +To declare a buffer, declare a struct defining the type of element that you are +putting into the buffer. The struct must implement [IBufferElementData](xref:Unity.Entities.IBufferElementData): + +[!code-cs[declare-element-full](../package/DocCodeSamples.Tests/DynamicBufferExamples.cs#declare-element-full)] + + +## Adding Buffer Types To Entities + +To add a buffer to an entity, add the IBufferElementData struct that defines the data type of the buffer element, and add that type directly to an entity or to an [archetype](xref:Unity.Entities.EntityArchetype): + +### Using [EntityManager.AddBuffer()](xref:Unity.Enities.EntityManager.AddBuffer`1(Unity.Entities.Entity)) + +[!code-cs[declare](../package/DocCodeSamples.Tests/DynamicBufferExamples.cs#add-with-manager)] + +### Using an archetype + +[!code-cs[declare](../package/DocCodeSamples.Tests/DynamicBufferExamples.cs#add-with-archetype)] + +### Using the `[GenerateAuthoringComponent]` attribute + +You can use `[GenerateAuthoringComponent]`to generate authoring components for simple IBufferElementData implementations that contain only one field. Setting this attribute allows you add an ECS IBufferElementData component to a GameObject so that you can set the buffer elements in the Editor. + +For example, if you declare the following type, you can add it directly to a GameObject in the Editor: + +``` +[GenerateAuthoringComponent] +public struct IntBufferElement: IBufferElementData +{ + public int Value; +} +``` + +In the background, Unity generates a class named `IntBufferElementAuthoring` (which inherits from `MonoBehaviour`), which exposes a public field of `List` type. When the GameObject containing this generated authoring component is converted into an entity, the list is converted into `DynamicBuffer`, and then added to the converted entity. + +Note the following restrictions: +- Only one component in a single C# file can have a generated authoring component, and the C# file must not have another MonoBehaviour in it. +- `IBufferElementData` authoring components cannot be automatically generated for types that contain more than one field. +- `IBufferElementData` authoring components cannot be automatically generated for types that have an explicit layout. + +### Using an [EntityCommandBuffer](xref:Unity.Entities.EntityCommandBuffer) + +You can add or set a buffer component when adding commands to an entity command buffer. Use [AddBuffer](xref:Unity.Entities.EntityCommandBuffer.AddBuffer``1(Unity.Entities.Entity)) to create a new buffer for the entity, changing the entity's archetype. Use [SetBuffer](xref:Unity.Entities.EntityCommandBuffer.SetBuffer``1(Unity.Entities.Entity)) to wipe out the existing buffer (which must exist) and create a new, empty buffer in its place. Both functions return a [DynamicBuffer](xref:Unity.Entities.DynamicBuffer`1) instance that you can use to populate the new buffer. You can add elements to the buffer immediately, but they are not otherwise accessible until the buffer is actually added to the entity when the command buffer is executed. + +The following job creates a new entity using a command buffer and then adds a dynamic buffer component using [EntityCommandBuffer.AddBuffer](xref:Unity.Entities.EntityCommandBuffer.AddBuffer``1(Unity.Entities.Entity)). The job also adds a number of elements to the dynamic buffer. + +[!code-cs[declare](../package/DocCodeSamples.Tests/DynamicBufferExamples.cs#add-in-job)] + +**Note:** You are not required to add data to the dynamic buffer immediately. However, you won't have access to the buffer again until after the entity command buffer you are using is executed. + +## Accessing Buffers + +You can access the [DynamicBuffer](xref:Unity.Entities.DynamicBuffer`1) instance using [EntityManager](xref:Unity.Entities.EntityManager), [systems](ecs_systems.md), and jobs, in much the same way as you access other component types of your entities. + +### EntityManager + +You can use an instance of the [EntityManager](xref:Unity.Entities.EntityManager) to access a dynamic buffer: + +[!code-cs[declare](../package/DocCodeSamples.Tests/DynamicBufferExamples.cs#access-manager)] + +### Component System Entities.ForEach + +You can also access dynamic buffers in a [component system](xref:Unity.Entities.ComponentSystem): + +[!code-cs[declare](../package/DocCodeSamples.Tests/DynamicBufferExamples.cs#access-buffer-system)] + +### Looking up buffers of another entity + +When you need to look up the buffer data belonging to another entity in a job, you can pass a [BufferFromEntity](xref:Unity.Entities.BufferFromEntity`1) +You can also look up buffers on a per-entity basis from a JobComponentSystem: + +[!code-cs[declare](../package/DocCodeSamples.Tests/DynamicBufferExamples.cs#lookup-snippet)] + +### IJobForEach + +You can access dynamic buffers associated with the entities you process with an IJobForEach job. + +In the IJobforEach or IJobForEachWithEntity declaration, use the IBufferElementData type contained in the buffer as one of the generic parameters. For example: + +[!code-cs[declare](../package/DocCodeSamples.Tests/DynamicBufferExamples.cs#declare-ijfe-with-buffer)] + +However, in the `Execute()` method of the job struct, use the DynamicBuffer<T> as the parameter type. For example: + +[!code-cs[declare](../package/DocCodeSamples.Tests/DynamicBufferExamples.cs#declare-ijfe-execute-method)] + + The following example adds up the contents of all dynamic buffers containing elements of type, `MyBufferElement`. Because IJobForEach jobs process entities in parallel, the example first stores the intermediate sum for each buffer in a native array and uses a second job to calculate the final sum. + +[!code-cs[declare](../package/DocCodeSamples.Tests/DynamicBufferExamples.cs#access-ijfe)] + +### IJobChunk + +To access an individual buffer in an IJobChunk job, pass the buffer data type to the job and use that to get a [BufferAccessor](xref:Unity.Entities.BufferAccessor`1). A buffer accessor is an array-like structure that provides access to all of the dynamic buffers in the current chunk. + + Like the previous, IJobForEach example, the following example adds up the contents of all dynamic buffers containing elements of type, `MyBufferElement`. IJobChunk jobs can also run in parallel on each chunk so the example first stores the intermediate sum for each buffer in a native array and uses a second job to calculate the final sum. In this case, the intermediate array holds one result for each chunk, rather than one result for each entity. + +[!code-cs[declare](../package/DocCodeSamples.Tests/DynamicBufferExamples.cs#access-chunk-job)] + +## Reinterpreting Buffers + +Buffers can be reinterpreted as a type of the same size. The intention is to +allow controlled type-punning and to get rid of the wrapper element types when +they get in the way. To reinterpret, call [Reinterpret<T>](xref:Unity.Entities.DynamicBuffer`1.Reinterpret*): + +[!code-cs[declare](../package/DocCodeSamples.Tests/DynamicBufferExamples.cs#reinterpret-snippet)] + +The reinterpreted buffer instance retains the safety handle of the original +buffer, and is safe to use. Reinterpreted buffers reference to original data, so +modifications to one reinterpreted buffer are immediately reflected in +others. + +Note that the reinterpret function only enforces that the types involved have the same length; you could alias a `uint` and `float` buffer without raising an error since both types are 32-bits long. It is your responsibility to make sure that the reinterpretation makes sense logically. + +## Buffer Reference Invalidation +Every [structural change](sync_points.md#structural-changes) invalidates all references to dynamic buffers. Structural changes generally cause entities to move from one chunk to another. Small dynamic buffers can reference memory within a chunk (as opposed to from main memory) and hence need to be reacquired after a structural change. + +[!code-cs[declare](../package/DocCodeSamples.Tests/DynamicBufferExamples.cs#invalidation)] \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_anatomy.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_anatomy.md new file mode 100644 index 000000000..51354ee67 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_anatomy.md @@ -0,0 +1,7 @@ +--- +uid: ecs-anatomy +--- +# Anatomy of an ECS scene + +> Synopsis: Essential elements of an ECS scene in the Unity Editor. Also cover how to load and unload ECS scenes (assuming there are differences from normal -- which is certainly true with Tiny). + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_building_projects.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_building_projects.md new file mode 100644 index 000000000..9801a4388 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_building_projects.md @@ -0,0 +1,7 @@ +--- +uid: ecs-building +--- +# Building your project + +> Synopsis: Cover any unique aspects for building ECS projects, including any cross-platform details. + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_burst.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_burst.md new file mode 100644 index 000000000..26495fee5 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_burst.md @@ -0,0 +1,7 @@ +--- +uid: ecs-burst +--- +# Using Burst + +> Synopsis: Cover how, when, and why to use the Burst compiler with ECS. Everything burst -elated within ECS should go here. + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_chunk_component.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_chunk_component.md new file mode 100644 index 000000000..f4226ba46 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_chunk_component.md @@ -0,0 +1,268 @@ +--- +uid: ecs-chunk-component-data +--- + +# Chunk component data + +Use chunk components to associate data with a specific [chunk](xref:Unity.Entities.ArchetypeChunk). + +Chunk components contain data that applies to all entities in a specific chunk. For example, if you had chunks of entities representing 3D objects that are organized by proximity, you could store a collective bounding box for the entities in a chunk using a chunk component. Chunk components use the interface type [IComponentData](xref:Unity.Entities.IComponentData). + +Add and set the values of a chunk component using +Although chunk components can have values unique to an individual chunk, they are still part of the archetype of the entities in the chunk. Thus if you remove a chunk component from an entity, that entity is moved to a different chunk (possibly a new one). Likewise, if you add a chunk component to an entity, that entity moves to a different chunk since its archetype changes; the addition of the chunk component does not affect the remaining entities in the original chunk. + +If you change the value of a chunk component using an entity in that chunk, it changes the value of the chunk component common to all the entities in that chunk. If you change the archetype of an entity such that it moves into a new chunk that happens to have the same type of chunk component, then the existing value in the destination chunk is unaffected. (If the entity is moved to a newly created chunk, then a new chunk component for that chunk is also created and assigned its default value.) + +The main differences between working with chunk components and general-purpose components is that you use different functions to add, set, and remove them. Chunk components also have their own [ComponentType](xref:Unity.Entities.ComponentType.ChunkComponentType) functions for use in defining entity archetypes and queries. + + +**Relevant APIs** + +| **Purpose** | **Function** | +| :--------------- | :---------------- | +| Declaration | [IComponentData](xref:Unity.Entities.IComponentData) | +|   | **[ArchetypeChunk methods](xref:Unity.Entities.ArchetypeChunk)** | +| Read | [GetChunkComponentData(ArchetypeChunkComponentType)](xref:Unity.Entities.ArchetypeChunk.GetChunkComponentData*) | +| Check | [HasChunkComponent(ArchetypeChunkComponentType)](xref:Unity.Entities.ArchetypeChunk.HasChunkComponent*) | +| Write | [SetChunkComponentData(ArchetypeChunkComponentType, T)](xref:Unity.Entities.ArchetypeChunk.SetChunkComponentData*) | +|   | **[EntityManager methods](xref:Unity.Entities.EntityManager)** | +| Create | [AddChunkComponentData(Entity)](xref:Unity.Entities.EntityManager.AddChunkComponentData``1(Unity.Entities.Entity)) | +| Create | [AddChunkComponentData(EntityQuery, T)](xref:Unity.Entities.EntityManager.AddChunkComponentData``1(Unity.Entities.EntityQuery,``0)) | +| Create | [AddComponents(Entity,ComponentTypes)](xref:Unity.Entities.EntityManager.AddComponents(Unity.Entities.Entity,Unity.Entities.ComponentTypes)) | +| Get type info | [GetArchetypeChunkComponentType(Boolean)](xref:Unity.Entities.EntityManager.GetArchetypeChunkComponentType*) | +| Read | [GetChunkComponentData(ArchetypeChunk)](xref:Unity.Entities.EntityManager.GetChunkComponentData``1(Unity.Entities.ArchetypeChunk)) | +| Read | [GetChunkComponentData(Entity)](xref:Unity.Entities.EntityManager.GetChunkComponentData``1(Unity.Entities.Entity)) | +| Check | [HasChunkComponent(Entity)](xref:Unity.Entities.EntityManager.HasChunkComponent*) | +| Delete | [RemoveChunkComponent(Entity)](xref:Unity.Entities.EntityManager.RemoveChunkComponent``1(Unity.Entities.Entity)) | +| Delete | [RemoveChunkComponentData(EntityQuery)](xref:Unity.Entities.EntityManager.RemoveChunkComponentData*) | +| Write | [EntityManager.SetChunkComponentData(ArchetypeChunk, T)](xref:Unity.Entities.EntityManager.SetChunkComponentData*) | + + +## Declaring a chunk component + +Chunk components use the interface type [IComponentData](xref:Unity.Entities.IComponentData). + +``` +public struct ChunkComponentA : IComponentData +{ + public float Value; +} +``` + + +## Creating a chunk component + +You can add a chunk component directly, using an entity in the target chunk or using an entity query that selects a group of target chunks. Chunk components cannot be added inside a Job, nor can they be added with an EntityCommandBuffer. + + You can also include chunk components as part of the [EntityArchetype](xref:Unity.Entities.EntityArchetype) or list of [ComponentType](xref:Unity.Entities.ComponentType) objects used to create entities and the chunk components are created for each chunk storing entities with that archetype. Use [ComponentType.ChunkComponent<T>](xref:Unity.Entities.ComponentType``1) or [ComponentType.ChunkComponentReadOnly<T>](xref:Unity.Entities.ComponentTypeReadOnly``1) with these methods. Otherwise, the component is treated as a general-purpose component instead of a chunk component. + +**With an entity in a chunk** + +Given an entity in the target chunk, you can add a chunk component to the chunk using the [EntityManager.AddChunkComponentData<T>()](xref:Unity.Entities.EntityManager.AddChunkComponentData``1) function: + +``` +EntityManager.AddChunkComponentData(entity); +``` + +Using this method, you cannot immediately set a value for the chunk component. + +**With an [EntityQuery](xref:Unity.Entities.EntityQuery)** + +Given an entity query that selects all the chunks to which you want to add a chunk component, you can add and set the component using the [EntityManager.AddChunkComponentData<T>()](xref:Unity.Entities.EntityManager.AddChunkComponentData``1(Unity.Entities.EntityQuery,``0)) function: + +``` +EntityQueryDesc ChunksWithoutComponentADesc = new EntityQueryDesc() +{ + None = new ComponentType[] {ComponentType.ChunkComponent()} +}; +ChunksWithoutChunkComponentA = GetEntityQuery(ChunksWithoutComponentADesc); + +EntityManager.AddChunkComponentData(ChunksWithoutChunkComponentA, + new ChunkComponentA() {Value = 4}); +``` + +Using this method, you can set the same initial value for all the new chunk components. + +**With an [EntityArchetype](xref:Unity.Entities.EntityArchetype)** + +When creating entities with an archetype or list of component types, include the chunk component types in the archetype: + +``` +ArchetypeWithChunkComponent = EntityManager.CreateArchetype( + ComponentType.ChunkComponent(typeof(ChunkComponentA)), + ComponentType.ReadWrite()); +var entity = EntityManager.CreateEntity(ArchetypeWithChunkComponent); + +``` + +or list of component types: + +``` +ComponentType[] compTypes = {ComponentType.ChunkComponent(), + ComponentType.ReadOnly()}; +var entity = EntityManager.CreateEntity(compTypes); +``` + +Using these methods, the chunk components for new chunks created as part of entity construction receive the default struct value. Chunk components in existing chunks are not changed. See [Updating a chunk component](#update) for how to set the chunk component value given a reference to an entity. + + +## Reading a chunk component + +You can read a chunk component using the [ArchetypeChunk](xref:Unity.Entities.ArchetypeChunk) object representing the chunk or using an entity in the target chunk. + +**With the ArchetypeChunk instance** + +Given a chunk, you can read its chunk component using the [EntityManager.GetChunkComponentData<T>](xref:Unity.Entities.EntityManager.GetChunkComponentData``1(Unity.Entities.ArchetypeChunk)) function. The following code iterates over all the chunks matching a query and accesses a chunk component of type ChunkComponentA: + +``` +var chunks = ChunksWithChunkComponentA.CreateArchetypeChunkArray(Allocator.TempJob); +foreach (var chunk in chunks) +{ + var compValue = EntityManager.GetChunkComponentData(chunk); + //.. +} +chunks.Dispose(); +``` + +**With an entity in a chunk** + +Given an entity, you can access a chunk component in the chunk containing that entity with [EntityManager.GetChunkComponentData<T>](xref:Unity.Entities.EntityManager.GetChunkComponentData``1(Unity.Entities.Entity)): + +``` +if(EntityManager.HasChunkComponent(entity)) + chunkComponentValue = EntityManager.GetChunkComponentData(entity); +``` + +You can also set up a [fluent query](xref:ecs-fluent-query) to select only entities that have a chunk component: + +``` +Entities.WithAll(ComponentType.ChunkComponent()).ForEach( + (Entity entity) => +{ + var compValue = EntityManager.GetChunkComponentData(entity); + //... +}); +``` + +Note that you cannot pass a chunk component to the for-each portion of the query. Instead, you must pass the [Entity](xref:Unity.Entities.Entity) object and use the [EntityManager](xref:Unity.Entities.Manager) to access the chunk component. + + +## Updating a chunk component + +You can update a chunk component given a reference to the [chunk](xref:Unity.Entities.ArchetypeChunk) it belongs to. In an IJobChunk Job, you can call [ArchetypeChunk.SetChunkComponentData](xref:Unity.Entities.ArchetypeChunk.SetChunkComponentData*). On the main thread, you can use the EntityManager version, [EntityManager.SetChunkComponentData](xref:Unity.Entities.EntityManager.SetChunkComponentData*). Note that you cannot access chunk components in an IJobForEach Job because you do not have access to the ArchetypeChunk object or the EntityManager. + +**With the ArchetypeChunk instance** + +To update a chunk component in a Job, see [Reading and writing in a JobComponentSystem](#read-and-write-jcs). + +To update a chunk component on the main thread, use the EntityManager: + +``` +EntityManager.SetChunkComponentData(chunk, + new ChunkComponentA(){Value = 7}); +``` + +**With an Entity instance** + +If you have an entity in the chunk rather than the chunk reference itself, you can also use the EntityManger to get the chunk containing the entity: + +``` +var entityChunk = EntityManager.GetChunk(entity); +EntityManager.SetChunkComponentData(entityChunk, + new ChunkComponentA(){Value = 8}); + +``` + +**Detecting changes in data** + +Use component change versions to detect when a chunk component needs to be updated for a given chunk. ECS updates the component versions for a chunk whenever the data in a component is accessed as writable or when an entity is added or removed from the chunk. + +For example, if the chunk component contains the center point of the entities in a chunk, calculated from the LocalToWorld component of those entities, you can check the version of the LocalToWorld components to determine whether the chunk component should be updated. If your chunk component is derived from more than one component, you should check the versions of all of the components to see if any of them changed. + +See [Skipping chunks with unchanged entities](chunk_iteration_job.md#filtering) for additional information. + + +## Reading and writing in a JobComponentSystem + +In an [IJobChunk](xref:Unity.Entities.IJobChunk) inside a JobComponentSystem, you can access chunk components using the [chunk](xref:Unity.Entities.ArchetypeChunk) parameter passed to the IJobChunk Execute function. As with any component data in an IJobChunk Job, you must pass a [ArchetypeChunkComponentType<T>](xref:Unity.Entities.EntityManager.GetArchetypeChunkComponentType*) object to the Job using a field struct in order to access the component. + +The following system defines a query that selects all entities and chunks with a chunk component of type, _ChunkComponentA_. It then runs an IJobChunk Job using the query to iterate over the selected chunks and access the individual chunk components. The Job uses the [ArchetypeChunk](xref:Unity.Entities.ArchetypeChunk) GetChunkComponentData and SetChunkComponentData functions to read and write the chunk component data. + +``` +using Unity.Burst; +using Unity.Entities; +using Unity.Jobs; + +public class ChunkComponentChecker : JobComponentSystem +{ + private EntityQuery ChunksWithChunkComponentA; + protected override void OnCreate() + { + EntityQueryDesc ChunksWithComponentADesc = new EntityQueryDesc() + { + All = new ComponentType[]{ComponentType.ChunkComponent()} + }; + ChunksWithChunkComponentA = GetEntityQuery(ChunksWithComponentADesc); + } + + [BurstCompile] + struct ChunkComponentCheckerJob : IJobChunk + { + public ArchetypeChunkComponentType ChunkComponentATypeInfo; + public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) + { + var compValue = chunk.GetChunkComponentData(ChunkComponentATypeInfo); + //... + var squared = compValue.Value * compValue.Value; + chunk.SetChunkComponentData(ChunkComponentATypeInfo, + new ChunkComponentA(){Value= squared}); + } + } + + protected override JobHandle OnUpdate(JobHandle inputDependencies) + { + var job = new ChunkComponentCheckerJob() + { + ChunkComponentATypeInfo = GetArchetypeChunkComponentType() + }; + return job.Schedule(ChunksWithChunkComponentA, inputDependencies); + } +} +``` + +Note that if you are only reading a chunk component and not writing, you should use [ComponentType.ChunkComponentReadOnly](xref:Unity.Entities.ComponentType.ChunkComponentReadOnly*) when defining your entity query to avoid creating unnecessary Job scheduling constraints. + + +## Deleting a chunk component + +Use the [EntityManager.RemoveChunkComponent](xref:Unity.Entities.EntityManager.RemoveChunkComponent*) functions to delete a chunk component. You can remove a chunk component given an entity in the target chunk or you can remove all the chunk components of a given type from all chunks selected by an entity query. If you remove a chunk component from an individual entity, that entity moves to a different chunk because the archetype of the entity changes; the chunk itself retains the unchanged chunk component as long as there are other entities remaining in the chunk. + + +## Using a chunk component in a query + +To use a chunk component in an entity query, you must specify the type using either the [ComponentType.ChunkComponent<T>](xref:Unity.Entities.ComponentType``1) or [ComponentType.ChunkComponentReadOnly<T>](xref:Unity.Entities.ComponentTypeReadOnly``1) functions. Otherwise, the component is treated as a general-purpose component instead of a chunk component. + +**In an [EntityQueryDesc](Unity.Entities.EntityQueryDesc)** + +The following query description can be used to create an entity query that selects all chunks -- and entities in those chunks -- that have a chunk component of type, _ChunkComponentA_: + +``` +EntityQueryDesc ChunksWithChunkComponentADesc = new EntityQueryDesc() +{ + All = new ComponentType[]{ComponentType.ChunkComponent()} +}; +``` + +**In an [EntityQueryBuilder](Unity.Entities.EntityQueryBulder) lambda function** + +The following fluent query iterates over all entities in chunks that have a chunk component of type, _ChunkComponentA_: + +``` +Entities.WithAll(ComponentType.ChunkComponentReadOnly()) + .ForEach((Entity ent) => +{ + var chunkComponentA = EntityManager.GetChunkComponentData(ent); +}); +``` + +**Note:** you cannot pass a chunk component to the lambda function itself. To read or write the value of a chunk component in a fluent query, use the [ComponentSystem.EntityManager](xref:Unity.Entities.ComponentSystemBase.EntityManager) property. Modifying a chunk component effectively modifies the value for all entities in the same chunk; it does not move the current entity to a different chunk. \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_components.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_components.md new file mode 100644 index 000000000..db2137663 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_components.md @@ -0,0 +1,22 @@ +--- +uid: ecs-components +--- +# Components + +Components are one of the three principle elements of an Entity Component System architecture. They represent the data of your game or program. [Entities](ecs_entities.md) are essentially identifiers that index your collections of components. [Systems](ecs_systems.md) provide the behavior. + +Concretely, a component in ECS is a struct with one of the following "marker interfaces": + +* [IComponentData](xref:Unity.Entities.IComponentData) — use for [general purpose](xref:ecs-component-data) and [chunk components](xref:ecs-chunk-component-data). +* [IBufferElementData](xref:Unity.Entities.IBufferelementData) — use for associating [dynamic buffers](xref:ecs-dynamic-buffers) with an entity. +* [ISharedComponentData](xref:Unity.Entities.ISharedComponentData) — use to categorize or group entities by value within an archetype. See [Shared Component Data](xref:ecs-shared-component-data). +* [ISystemStateComponentData](xref:Unity.Entities.ISystemStateComponentData) — use for associating system-specific state with an entity and for detecting when individual entities are created or destroyed. See [System State Components](xref:ecs-system-state-component-data). +* [ISharedSystemStateComponentData](xref:Unity.Entities.ISharedSystemStateComponentData) — a combination of shared and system state data. See [System State Components](xref:ecs-system-state-component-data). +* [Blob assets](xref:ecs-blob-asset-data) – while not technically a "component," you can use blob assets to store data. Blob assets can be referenced by one or more components using a [BlobAssetReference](xref:Unity.Entities.BlobAssetReference) and are immutable. Blob assets allow you to share data between assets and access that data in C# Jobs. + +The EntityManager organizes unique combinations of components appearing on your entities into **Archetypes**. It stores the components of all entities with the same archetype together in blocks of memory called **Chunks**. The entities in a given Chunk all have the same component archetype. + +![](images/ArchetypeChunkDiagram.png) + +This diagram illustrates how component data is stored in chunks by archetype. Shared components and chunk components are exceptions because they are stored outside the chunk; a single instance of these component types apply to all the entities in the applicable chunks. In addition, you can optionally store dynamic buffers outside the chunk. Even though these types of components are not stored inside the chunk, you generally treat them the same as other component types when querying for entities. + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_core.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_core.md new file mode 100644 index 000000000..c70d6bcd5 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_core.md @@ -0,0 +1,72 @@ +--- +uid: ecs-concepts +--- +# ECS concepts + +An Entity Component System (ECS) architecture separates identity (entities), data (components), and behaviour (systems). The architecture focuses on the data. Systems transform the data from an input state to an output state by reading streams of component data, which are indexed by entities. + +The following diagram illustrates how these three basic parts work together: + +![](images/ECSBlockDiagram.png) + +In this diagram, a system reads Translation and Rotation components, multiplies them and then updates the corresponding LocalToWorld components. + +The fact that entities A and B have a Renderer component and entity C does not, doesn't affect the system, because the system does not care about Renderer components. (You could set up a system so that it required a Renderer component, in which case, the system would ignore the components of entity C; or, alternately, you could set up a system to exclude entities with Renderer components, in which case, it would ignore the components of entities A and B.) + +## Archetypes + +A unique combination of component types is called an [Archetype](xref:Unity.Entities.Archetype). For example, a 3D object might have a component for its world transform, one for its linear movement, one for rotation, and one for its visual representation. Each instance of one of these 3D objects corresponds to a single entity, but because they share the same set of components, they can be classified as a single archetype: + +![](images/ArchetypeDiagram.png) + +In this diagram, entities A and B share archetype M, while entity C has archetype N. + +You can fluidly change the archetype of an entity by adding or removing components at runtime. For example, if you remove the Renderer component from entity B, then B moves to archetype N. + +## Memory Chunks + +The archetype of an entity determines where the components of that entity are stored. ECS allocates memory in "chunks," each represented by an [ArchetypeChunk](xref:Unity.Entities.ArchetypeChunk) object. A chunk always contains entities of a single archetype. When a chunk of memory becomes full, a new chunk of memory is allocated for any new entities created with the same archetype. If you change an entity archetype by adding or removing components, the components for that entity are moved to a different chunk. + +![](images/ArchetypeChunkDiagram.png) + +This organizational scheme provides a one-to-many relationship between archetypes and chunks. It also means that finding all the entities with a given set of components only requires searching through the existing archetypes, which are typically small in number, rather than all of the entities, which are typically much larger in number. + +The entities in a chunk are not stored in a specific order. When an entity is created or changed to a new archetype, it goes into the first chunk storing that archetype that has room. Chunks do remain tightly packed, however; when an entity is removed from an archetype, the components of the last entity in the chunk are moved into the newly vacated slots in the component arrays. + +Note that the values of shared components in an archetype also determine which entities are stored in which chunk. All the entities in a given chunk have the exact same values for any shared components. If you change the value of any field in a shared component, the modified entity moves to a different chunk, just as it would if you changed that entity's archetype. A new chunk is allocated, if necessary. Use shared components to group entities within an archetype when it is more efficient to process them together. For example, the Hybrid Renderer defines its [RenderMesh component](https://docs.unity3d.com/Packages/com.unity.rendering.hybrid@latest?subfolder=/api/Unity.Rendering.RenderMesh.html) + +## Entity queries + +To identify which entities a system should process, you use an [EntityQuery](xref:Unity.Entities.EntityQuery). An entity query searches the existing archetypes for those having the components that match your requirements. You can specify the following component requirements with a query: + +* All — the archetype must contain all of the component types in the All category. +* Any — the archetype must contain at least one of the component types in the Any category. +* None — the archetype must not contain any of the component types in the None category. + +An entity query provides a list of the chunks containing the types of components required by the query. You can then iterate over the components in those chunks directly with [IJobChunk](chunk_iteration_job.md), one of the specialized ECS Jobs, or implicitly with [IJobForEach](entity_iteration_job.md) or a [non-Job for-each loop](entity_iteration_foreach.md). + +**Note:** IJobForEach implicitly creates an entity query based on the Job parameters and attributes. You can override the implicit query when scheduling the Job. + +## Jobs + +To take advantage of multiple threads, you can use the Unity C# Job system. ECS provides the [JobComponentSystem](xref:Unity.Entites.JobComponentSystem), along with the specialized Job types, [IJobForEach](entity_iteration_job.md) and [IJobChunk](chunk_iteration_job.md), to transform data outside the main thread. IJobForEach (and IJobForEachWithEntity) is typically the simplest to use. IJobChunk can be used for more complex situations that IJobForEach does not handle. + +These ECS Jobs use an [EntityQuery](ecs_entity_query.md) object that not only defines which components a Job accesses, but also specifies whether that access is read-only or read-write. This access-type information allows the Job scheduler to determine which Jobs it can run in parallel and which must run in sequence. Jobs that read the same data can run at the same time, but when one Job writes to data that another Job accesses, those Jobs must run in sequence. + + +The order in which such sequential Jobs are run is determined by how you set up the Job dependencies. When the core ECS code calls one of your JobComponentSystem OnUpdate() functions, it passes in a JobHandle parameter that encapsulates the existing Job dependencies. When you a schedule a Job, the Job Schedule() function returns a new JobHandle, which includes the new Job dependencies. + +## System organization + +ECS organizes systems by [World](xref:Unity.Entities.World) and then by [group](xref:Unity.Enties.ComponentSystemGroup). By default, ECS creates a default World with a predefined set of groups. It finds all available systems, instantiates them, and adds them to the predefined [simulation group](xref:Unity.Entities.SimulationSystemGroup) in the default World. + +You can specify the update order of systems within the same group. A group is, itslef, a kind of system, so you can add a group to a group and specify its order just like any other system. All systems within a group update before the next system or group. If you do not specify an order, systems are inserted into the update order in a deterministic manner that does not depend on creation order. In other words, the same set of systems always update in the same order within their group even when you don't explicitly specify an order. [Entity component buffer systems](xref:Unity.Entities.EntityComponentBufferSystem) + +System updates occur on the main thread. However, systems can use Jobs to offload work to other threads. [JobComponentSystems](xref:Unity.entities.JobComponentSystem) provide a straightforward way to create and schedule Jobs. + +See [System Update Order](system_update_order.md) for more information about system creation, update order, and the attributes you can use to organize your systems. + + +## ECS Authoring + +When creating your game or application in the Unity Editor, you can use GameObjects and MonoBehaviours and create a conversion system to map those UnityEngine objects and components to entities. See [Creating Gameplay](gp_overview.md). \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_data_structures.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_data_structures.md new file mode 100644 index 000000000..a02c4c839 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_data_structures.md @@ -0,0 +1,8 @@ +--- +uid: ecs-data-structures +--- +# Data structures + +> Synopsis: About the Native data structures in the core module and in the extension module in detail (that isn't already covered in the script reference). +> How to create your own native data structures. + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_debugging.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_debugging.md new file mode 100644 index 000000000..4f91cb4b1 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_debugging.md @@ -0,0 +1,56 @@ +--- +uid: ecs-debugging +--- +# Debugging ECS + +> Synopsis: All about debugging ECS +> Outline: +> Entity Debugger +> Inspecting an Entity +> Live-link + + +## Entity Debugger + +The Entity Debugger allows you to visualize your entities, systems, and components + +Open the entity Debugger window using the menu: Window > Analysis > Entity Debugger. + + +### Systems list + +The Systems list shows the systems in your project and how much time a system takes to run each frame. You can turn systems on and off from the list using the checkbox provided for each system. + +Use the System Display control drop down at the top of the list to control what to display in the System list. The System Display control contains: + +* Worlds — Choose the World containing the entities and ComponentSystems to display. By default, an **Editor World** exists when not in play mode and a **Default World** exists in play mode. +* **Show Full Player Loop** option — Choose to display the systems of all Worlds and show all of the Unity execution phases (not just those containing systems). +* **Show Inactive Systems** option — Choose to show systems that are not currently running in addition to the running systems. + +Select a system to view its details. + +**Note:** If you select the EntityManager entry in the System list, then you have different options on the System details section. + + +### System details + +The System details section shows the groups of components that a System operates on and the list of entities associated with those component groups. + + Each component group shows the components in the group along with the number of entities associated with it. Select a component group to view information about the Chunks containing the data for the components in the group. + + When you select the EntityManager entry in the system list, the details section shows all of the entities in the displayed World. When you display a World (rather than the full player loop), you can also filter the list of entities by component + + To filter the Entity list: + 1. Select a World in the System Display control. + 2. Select the EntityManager for that World. + 3. At the top of the System details section, click **Edit**. + 4. In the **Choose Component** window, check the components whose entities you want to view. + + +### Chunk information + +The Chunk information section shows the Chunks containing data for the components and entities selected in the details section. + +## Inspecting an Entity + +Select an entity in the Entity Debugger to view its data in the Unity Inspector window. diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_entities.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_entities.md new file mode 100644 index 000000000..5b73356db --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_entities.md @@ -0,0 +1,53 @@ +--- +uid: ecs-entities +--- +# Entities + + +Entities are one of the three principle elements of an Entity Component System architecture. They represent the individual "things" in you game or program. An entity has neither behavior nor data; instead, it identifies which pieces of data belong together. [Systems](ecs_systems.md) provide the behavior. [Components](ecs_components.md) store the data. + +An entity is essentially an ID. You can think of it as a super lightweight [GameObject](https://docs.unity3d.com/Manual/class-GameObject.html) that does not even have a name by default. Entity ID's are stable; you can use them to store a reference to another component or entity. For example, a child entity in a hierarchy may need to reference its parent entity. + +An [EntityManager](xref:Unity.Entities.EntityManager) manages all of the entities in a [World](xref:Unity.Entities.World). An EntityManager maintains the list of entities and organizes the data associated with an entity for optimal performance. + +Although an entity does not have a type, groups of entities can be categorized by the types of the data components associated with them. As you create entities and add components to them, the EntityManager keeps track of the unique combinations of components on the existing entities. Such a unique combination is called an _Archetype_. The EntityManager creates an [EntityArchetype](xref:Unity.Entities.EntityArchetype) struct as you add components to an entity. You can use existing EntityArchetypes to create new entities conforming to that archetype. You can also create an EntityArchetype in advance and use that to create entities. + +## Creating Entities + +The easiest way to create an entity is in the Unity Editor. You can set up both GameObjects placed in a scene and Prefabs to be converted into entities at runtime. For more dynamic parts of your game or program, you can create spawning systems that create multiple entities in a job. Finally, you can create entities one at a time using one of the [EntityManager.CreateEntity](xref:Unity.Entities.EntityManager.CreateEntity) functions. + +### Creating Entities with an EntityManager + +Use one of the [EntityManager.CreateEntity](xref:Unity.Entities.EntityManager.CreateEntity) functions to create an entity. The entity is created in the same World as the EntityManager. + +You can create entities one-by-one in the following ways: + +* Create an entity with components using an array of [ComponentType](xref:Unity.Entities.ComponentType) objects. +* Create an entity with components using an [EntityArchetype](xref:Unity.Entities.EntityArchetype). +* Copy an existing entity, including its current data, with [Instantiate](xref:Unity.Entities.EntityManager.Instantiate%28Unity.Entities.Entity%29) +* Create an entity with no components and then add components to it. (You can add components immediately or as additional components are needed.) + +You can create multiple entities at a time also: + +* Fill a NativeArray with new entities with the same archetype using [CreateEntity](xref:Unity.Entities.EntityManager.CreateEntity). +* Fill a NativeArray with copies of an existing entity, including its current data, using [Instantiate](xref:Unity.Entities.EntityManager.Instantiate%28Unity.Entities.Entity%29). +* Explicitly create Chunks populated with a specified number of entities with a given archetype with [CreateChunk](xref:Unity.Entities.EntityManager.CreateChunk*). + +## Adding and Removing Components + +After an entity has been created, you can add or remove components When you do this, the archetype of the affected entities change and the EntityManager must move altered data to a new Chunk of memory, as well as condense the component arrays in the original Chunks. + +Changes to an entity that cause structural changes — that is, adding or removing components changing the values of SharedComponentData, and destroying the entity — cannot be done inside a Job since these could invalidate the data that the Job is working on. Instead, you add the commands to make these types of changes to an [EntityCommandBuffer](xref:Unity.Entities.EntityCommandBuffer) and execute this command buffer after the Job is complete. + + +The EntityManager provides functions for removing a component from a single entity as well as all of the entities in a NativeArray. See [Components](ecs_components.md) for more information. + +## Iterating entities + +Iterating over all entities that have a matching set of components, is at the center of the ECS architecture. See [Accessing entity Data](chunk_iteration.md). + + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_entity_query.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_entity_query.md new file mode 100644 index 000000000..5f644a7e7 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_entity_query.md @@ -0,0 +1,223 @@ +--- +uid: ecs-entity-query +--- +# Querying for data using a EntityQuery + +The first step to reading or writing data is finding that data. Data in the ECS framework is stored in components, which are grouped together in memory according to the archetype of the entity to which they belong. To define a view into your ECS data that contains only the specific data you need for a given algorithm or process, you can construct a EntityQuery. + +After creating a EntityQuery, you can + +* Run a Job to process the entities and components selected for the view +* Get a NativeArray containing all the selected entities +* Get NativeArrays of the selected components (by component type) + +The entity and component arrays returned by a EntityQuery are guaranteed to be "parallel", that is, the same index value always applies to the same entity in any array. + +**Note:** that the `ComponentSystem.Entites.ForEach` delegates and IJobForEach create internal EntityQueries based on the component types and attributes you specify for these APIs. + + + +## Defining a query + +A EntityQuery query defines the set of component types that an archetype must contain in order for its chunks and entities to be included in the view. You can also exclude archetypes that contain specific types of components. + +For simple queries, you can create a EntityQuery based on an array of component types. The following example defines a EntityQuery that finds all entities with both RotationQuaternion and RotationSpeed components. + +``` c# +EntityQuery m_Query = GetEntityQuery(typeof(RotationQuaternion), ComponentType.ReadOnly()); +```` + +The query uses `ComponentType.ReadOnly<T>` instead of the simpler `typeof` expression to designate that the system does not write to RotationSpeed. Always specify read only when possible, since there are fewer constraints on read access to data, which can help the Job scheduler execute your Jobs more efficiently. + +### EntityQueryDesc + +For more complex queries, you can use an EntityQueryDesc to create the EntityQuery. An EntityQueryDesc provides a flexible query mechanism to specify which archetypes to select based on the following sets of components: + +* `All` = All component types in this array must exist in the archetype +* `Any` = At least one of the component types in this array must exist in the archetype +* `None` = None of the component types in this array can exist in the archetype + +For example, the following query includes archetypes containing the RotationQuaternion and RotationSpeed components, but excludes any archetypes containing the Frozen component: + +``` c# +var query = new EntityQueryDesc +{ + None = new ComponentType[]{ typeof(Frozen) }, + All = new ComponentType[]{ typeof(RotationQuaternion), ComponentType.ReadOnly() } +} +EntityQuery m_Query = GetEntityQuery(query); +``` + +**Note:** Do not include completely optional components in the EntityQueryDesc. To handle optional components, use the `ArchetypeChunk.Has<T>()` method to determine whether a chunk contains the optional component or not. Since all entities within the same chunk have the same components, you only need to check whether an optional component exists once per chunk -- not once per entity. + +### Query options + +When you create an EntityQueryDesc, you can set its `Options` variable. The options allow for specialized queries (normally you do not need to set them): + +* Default — no options set; the query behaves normally. +* IncludePrefab — includes archetypes containing the special Prefab tag component. +* IncludeDisabled — includes archetypes containing the special Disabled tag component. +* FilterWriteGroup — considers the WriteGroup of any components in the query. + +When you set the FilterWriteGroup option, only entities with those components in a Write Group that are explicitly included in the query will be included in the view. Entities that have any additional components from the same WriteGroup are excluded. + +For example, suppose C2 and C3 are components in the same Write Group based on C1, and you created a query using the FilterWriteGroup option that requires C1 and C3: + +``` c# +public struct C1: IComponentData{} + +[WriteGroup(C1)] +public struct C2: IComponentData{} + +[WriteGroup(C1)] +public struct C3: IComponentData{} + +// ... In a system: +var query = new EntityQueryDesc{ + All = new ComponentType{typeof(C1), ComponentType.ReadOnly()}, + Options = EntityQueryDescOptions.FilterWriteGroup +}; +var m_Query = GetEntityQuery(query); +``` + +This query excludes any entities with both C2 and C3 because C2 is not explicitly included in the query. While you could design this into the query using `None`, doing it through a Write Group provides an important benefit: you don't need to alter the queries used by other systems (as long as these systems also use Write Groups). + +Write Groups are a mechanism that allow you to extend existing systems. For example, if C1 and C2 are defined in another system (perhaps part of a library that you don't control), you could put C3 into the same Write Group as C2 in order to change how C1 is updated. For any entities to which you add your C3 component, your system will update C1 and the original system will not. For other entities without C3, the original system will update C1 as before. + +See [Write Groups](ecs_write_groups.md) for more information. + +### Combining queries + +You can combine multiple queries by passing an array of EntityQueryDesc objects rather than a single instance. Each query is combined using a logical OR operation. The following example selects an archetypes that contain a RotationQuaternion component or a RotationSpeed component (or both): + +``` c# +var query0 = new EntityQueryDesc +{ + All = new ComponentType[] {typeof(RotationQuaternion)} +}; + +var query1 = new EntityQueryDesc +{ + All = new ComponentType[] {typeof(RotationSpeed)} +}; + +EntityQuery m_Query = GetEntityQuery(new EntityQueryDesc[] {query0, query1}); + ``` + +## Creating a EntityQuery + +Outside a system class, you can create a EntityQuery with the `EntityManager.CreateEntityQuery()` function: + +``` c# +EntityQuery m_Query = CreateEntityQuery(typeof(RotationQuaternion), ComponentType.ReadOnly()); +``` + +However, in a system class, you must use the `GetEntityQuery()` function: + +``` c# +public class RotationSpeedSystem : JobComponentSystem +{ + private EntityQuery m_Query; + protected override void OnCreate() + { + m_Query = GetEntityQuery(typeof(RotationQuaternion), ComponentType.ReadOnly()); + } + //… +} +``` + +When you plan to reuse the same view, you should cache the EntityQuery instance, if possible, instead of creating a new one for each use. For example, in a system, you can create the EntityQuery in the system’s `OnCreate()` function and store the result in an instance variable. The `m_Query` variable in the above example is used for this purpose. + +## Defining filters + +In addition to defining which components must be included or excluded from the query, you can also filter the view. You can specify the following types of filters: + +* Shared component values —filter the set of entities based on specific values of a shared component. +* Change filter — Filter the set of entities based on whether the value of a specific component type has potentially changed + +### Shared component filters + +To use a shared component filter, first include the shared component in the EntityQuery (along with other needed components), and then call the `SetFilter()` function, passing in a struct of the same ISharedComponent type that contains the values to select. All values must match. You can add up to two different shared components to the filter. + +You can change the filter at any time, but changing the filter does not change any existing arrays of entities or components that you received from the group `ToComponentDataArray()` or `ToEntityArray()` functions. You must recreate these arrays. + +The following example defines a shared component named SharedGrouping and a system that only processes entities that have the Group field set to 1. + +```cs +struct SharedGrouping : ISharedComponentData +{ + public int Group; +} + +class ImpulseSystem : ComponentSystem +{ + EntityQuery m_Query; + + protected override void OnCreate(int capacity) + { + m_Query = GetEntityQuery(typeof(Position), typeof(Displacement), typeof(SharedGrouping)); + } + + protected override void OnUpdate() + { + // Only iterate over entities that have the SharedGrouping data set to 1 + m_Query.SetFilter(new SharedGrouping { Group = 1 }); + + var positions = m_Query.ToComponentDataArray(Allocator.Temp); + var displacememnts = m_Query.ToComponentDataArray(Allocator.Temp); + + for (int i = 0; i != positions.Length; i++) + positions[i].Value = positions[i].Value + displacememnts[i].Value; + } +} +``` + +### Change filters + +If you only need to update entities when a component value has changed, you can add that component to the EntityQuery filter using the `SetFilterChanged()` function. For example, the following EntityQuery only includes entities from chunks in which another system has already written to the Translation component: + +``` c# +protected override void OnCreate(int capacity) +{ + m_Query = GetEntityQuery(typeof(LocalToWorld), ComponentType.ReadOnly()); + m_Query.SetFilterChanged(typeof(Translation)); +} + +``` + +Note that for efficiency, the change filter applies to whole chunks not individual entities. The change filter also only checks whether a system has run that declared write access to the component, not whether it actually changed any data. In other words, if a chunk has been accessed by another Job which had the ability to write to that type of component, then the change filter includes all entities in that chunk. (This is another reason to always declare read only access to components that you do not need to modify.) + +## Executing the query + +A EntityQuery executes its query when you use the EntityQuery in a Job or you call one of the EntityQuery methods that returns arrays of entities, components, or chunks in the view: + +* `ToEntityArray()` returns an array of the selected entities. +* `ToComponentDataArray<T>` returns an array of the components of type T for the selected entities. +* `CreateArchetypeChunkArray()` returns all the chunks containing the selected entities. (Since a query operates on archetypes, shared component values, and change filters, which are all identical for all the entities in a chunk, the set of entities stored within the returned set of chunks is exactly the same as the set of entities returned by `ToEntityArray()`.) + + + +### In Jobs + +In a JobComponentSystem, pass the EntityQuery object to the system's `Schedule()` method. In the following example, from the HelloCube IJobChunk sample, the `m_Query` argument is the EntityQuery object + +``` c# +// OnUpdate runs on the main thread. +protected override JobHandle OnUpdate(JobHandle inputDependencies) +{ + var rotationType = GetArchetypeChunkComponentType(false); + var rotationSpeedType = GetArchetypeChunkComponentType(true); + + var job = new RotationSpeedJob() + { + RotationType = rotationType, + RotationSpeedType = rotationSpeedType, + DeltaTime = Time.deltaTime + }; + + return job.Schedule(m_Query, inputDependencies); +} +``` + +A EntityQuery uses Jobs internally to create the required arrays. When you pass the group to the `Schedule()` method, the EntityQuery Jobs are scheduled along with the system's own Jobs and can take advantage of parallel processing. + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_gameplay.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_gameplay.md new file mode 100644 index 000000000..a34372001 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/ecs_gameplay.md @@ -0,0 +1,8 @@ +--- +uid: ecs-gameplay +--- +# Creating Gameplay with ECS + +sIA1*I_THj-7i>H|Jv6pwa(_`WxH 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 R)cyfK5+bs~C4yhP{tsyN-(mm& literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/EntitiesSplash.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/EntitiesSplash.png new file mode 100644 index 0000000000000000000000000000000000000000..715e8ae538310119e06204b0212075573fee5a3b GIT binary patch literal 135344 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

g7_j`;9{idf9b7$r?|(C_ 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 literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/SlideArrows.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/SlideArrows.png new file mode 100644 index 0000000000000000000000000000000000000000..4376343f64687473a056b67047a8ce00952d315e GIT binary patch literal 10943 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 A8UO$Q literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/WhatIsECSinfographic0000.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/WhatIsECSinfographic0000.png new file mode 100644 index 0000000000000000000000000000000000000000..ce695a0e77b8c8a8d2f006f63c2ea6ed47811dc1 GIT binary patch literal 209890 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

|V2x=I#t8@ZaC~8J1~s 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�BICVHog40S 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 BA}s&_ literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/WhatIsECSinfographic0001.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/WhatIsECSinfographic0001.png new file mode 100644 index 0000000000000000000000000000000000000000..ff51c4896c24d1cf78274c7a9d3359abe9851c1c GIT binary patch literal 181742 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ƈ#axpzthjBNS{ry}vt%27qn@=vC=3nl4 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

lzIXR4Qbmh`~;W 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

WxsR)U&3f;s!7;X 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 z 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

cx_FV;ozS zD<}a8&qo`X!1FwOKfoQIBJ_Q_W{Wh<7MU5F!nW(tUssDgJqwP)N>OuMs7lffA zm9nUoZ9=7xnue~+hDedLwMYF1N>@lJBUj#pP9a~|@8SjE*S~m#AP7n5lIG?8Os7(4 zar5T>q0wifg&{nTZ`__MD|ohtiL4{qsZ_r4mB9CWq^{vQ^{A9zt>MoU zDeF38V>776La*r>DpW{aBW3CYx=GTAwx5(zB&`J5TnZzZz-%tCDxn~iA-imVd_p5^ zG+(AN)qLkv%Mh?}UKMNtStOP+2Vxmz4p34(y$saYyQ(7JIezJmF=G6)c1h-es?C0&nD z2z1*f^c6@VFP5r}Bx<&0iKwVg7kN}j2zT&QBX>$I5k6rUBBjJIbhLzt5`uKf!t!d= z%@kU~L<%r8fhI*{te1=?vN}53&~=SeYYXT)eF?C=fTpev$mG~~``tL@3a0NcSBjthH4jSvgf5g$-U z1R-Igmtm=FQ$*q?`i5FkjS>xE)DUh`plOnH7&7~TcQJd|!Dx1D9Ul|(5{R34V`5_V ze^qA>+CEI&)Lz0zp-dCi)`kGaT3Zn)W)5805D^L?C88en*&syZ0kRN=DbVIin0|og zID~$H>v~8TB^3h*$3c`z3uCw4lQX!6L8xow$0pHT55MjbdeJ0Tz3x&e*N`gm^4TM} zmNr<6AVi?>T@U-nHPjDW9to?Mn3$JDEMQ_{Vt#*x&k_N&NBqcVHzqfFccO1DCJYN; zs5*fSi#>Bj2;w_|@n3$LstD735=6im>R3t4GM$g_F3ztkb zDJi1rPosY)cHNDMd0E6;NHH-nF)#XwZ;9C0tC@KpA|$S`#KgSv$oLe*#KgqJ#Kgn` zCMG5(CMG5(CKfO;F)=YQF)=Z*fQgBTiHV7ci3LndOiWBnOiWBHU}9ooVq#)qVqyUk z6B82?6B82)n3$NDn3$NDnEi?l)EYu2jzW!ziHV7ciFvIff!co$0BUQr!vqvnVE_OC M07*qoM6N<$g6Nx=NdN!< literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/WhatIsECSinfographic0003.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/WhatIsECSinfographic0003.png new file mode 100644 index 0000000000000000000000000000000000000000..3a3744a650aa5ce65d3f3fe66047806a40b4aa3a GIT binary patch literal 216892 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

A@dg(F-V%jkqLakJ}ZmGubuf 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

f4^eSn~ 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

-z7qezf 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 BeK-IB literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/WhatIsECSinfographic0004.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/WhatIsECSinfographic0004.png new file mode 100644 index 0000000000000000000000000000000000000000..2360f45a5d237d6ca90a7a010ae306095424288e GIT binary patch literal 174234 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 mM8tEWFqG%3)tCZU|9=43^9DuXhg_Qg0000 rect.left + (rect.right - rect.left)/2){ + advanceSlide(1); + } else { + advanceSlide(-1); + } +} + +function advanceSlide(n) { + slideNumber += n; + var slides = document.getElementsByClassName("infographic"); + if (slideNumber > slides.length) + { + slideNumber = 1; + } + else if (slideNumber < 1) + { + slideNumber = slides.length; + } + + for (var i = 0; i < slides.length; i++) + { + slides[i].style.display = "none"; + } + slides[slideNumber - 1].style.display = "block"; +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/pixel.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/pixel.png new file mode 100644 index 0000000000000000000000000000000000000000..6dbaec7d2bb2bc415513b5819eea153f3aeb833a GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx3?$;uu;>Cgk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X*aCb)T>t<74`hZOx?BgOxIA4PLn>}1Cji+@42)0J@BIO? O7(8A5T-G@yGywq0>>!%} literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec1-1.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..594d1c4c25abfb563311413b65f0a1746e904c18 GIT binary patch literal 10519 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 AZvX%Q literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec1-2.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec1-2.png new file mode 100644 index 0000000000000000000000000000000000000000..a9c48e285d0678abf70818e877da9b5899be9a86 GIT binary patch literal 12922 zcmdUVc{G)8*zSuAA#;*>h$M5S$UIA?%(Dz3QwW)bP$a2PndfGyzOL(jBQ(?$FX2<;BM5RySxHU{K`=Am z-}!hr@UtZPl@2^zbWt*JLl8<<^f!jG*0l`;AvCj-mDSL&b#`}lvvqc1RF;)xba8dI zv2(CS5U+_sJx}fX`^Wx&m1Hn2p0neTS>dO3zG1qhDlH`>B1^^?Ny2lH*(p=EzosoH z{Z&ngEnVPHgyBOSm(fjmu2(8te}lg6M_;gC+fSakjoSa@v+k4ByDhO^y+1#X9XX<; zohLIu#jcf?kdecysbKRyd>gqS(ieQ?fXps}Lx7Ku2&qXvuMi%ULK>}wBUE(4&p#$~ z&a-L-DqVQZbu)$%qg5iX=ye{IVB;RPxv+Gh7S^gJazRzWhO$u?gJj3Q6 z3{+Mo!&*%YObU`~p2vKC36aYjFcviT!V0X_%F@78@J60xJSDqoPI1XxN>j6xkXH-K z<@=e;^?im9E&0o;iTX_2Gz=FpBSw~2->NXb!Pvpc!TG{3P-&!S`i69L>ZK|@ed=0b%{9HOKS!B{ zI)6&8nXD4%SfssD-<}WER7Q?4Ds+_X%DCSXY2CU}<0;pXKNN9eLUei6x2r_XQQZCN zFGd9sxjv~72MQL37X)j&Yb48R%uE=;#+|cSvNbFNOc+?K*OU})pM{XQzTIgJmBz$z zeJc~8E}paZ_c^UnV+w`q+Z2SjDFv^TJ%pB;_qFVJEY~GeaL_Na@l19FrWZ|8o026O z;iTEJ0#h~2=}v57&*;9tvQaEM9(?akLMPSHFYS&;C+E}GP+{g-8L(|YZ1An%xFEkk zcjQ~?i-aD%({Nte!oDRNR>i$I@xfOWxNG;q`h(m_)^JI=GPq_HeEJ*Q+38eq`=%=x zT5G-v9#ri~dLKOaBT7G-c-PhEv268sGezneD)0TA&eW5Rkcvv1{T`hkZd*_MH?PFL zPo*j~yOn!;$n+1zlSolnx{N9tr;*!lcRz9DJEcou&PA_^s~Ty zSlxsrfhUE>%u9GtNt&%)>ct(3pr#9|?Swt;cQ~6}3);OMnuSin#dA8OXu2#+m^ra#C z_Z%2MlS`7~hFi8?O-ra&{=t$&!V^w>O`iHS=D-K{Yq&8DR_s^rX1z}DGIqUVpr-qp zp!40lg6nkyMS7Or7`-mtts93QFf-LJ-Z1(awUybbjrmS~L4#26U0z0BPLwv+uu@_g z_x(a`vE3w_L7R$jk94dhThVv#2j-S@cYM7C>!XU&)%)U>ecW+R6WSgclo}hH6;SEo z+>8?p68xysHqkuME811_)!wq+qI_KDGr13**oVZf?+?`<^gb-MUVp$~EnLn}V&*17 zOYrLE_1CeDF)l-&#y{zNO8ms~iBgSbF)^tjDJm(APv7`WA04@8})T zFYU&-MUuinH|Nymx#yjJ3%T;RPF5%0Ax|Rbc^%i>z4+~C;r#HH+LqI{>7SLA{lWb~ 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 MifPlmjhTgi0Hp<+p#T5? literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec2-3.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec2-3.png new file mode 100644 index 0000000000000000000000000000000000000000..86df61780eedbf499e76fb3c7fa162533bd85d04 GIT binary patch literal 28299 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%0Aa;>JQPbNlr($(HW3bI7RVdb=W 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 literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec4-2.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec4-2.png new file mode 100644 index 0000000000000000000000000000000000000000..96e3a2d057180e1aa24d1a1b9932c86a8337bbf8 GIT binary patch literal 11571 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 literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec4-3.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec4-3.png new file mode 100644 index 0000000000000000000000000000000000000000..46d70a21abd5dccb445555ab24699a1e6f36c795 GIT binary patch literal 22917 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 literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec4-4.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec4-4.png new file mode 100644 index 0000000000000000000000000000000000000000..0f5d78dbd8dab13ae1524df04ef6e9c46c53a3c3 GIT binary patch literal 22115 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 literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec4-5.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec4-5.png new file mode 100644 index 0000000000000000000000000000000000000000..aa61d9234663a3cf33b27f06b1f700bb25a1ac0b GIT binary patch literal 34326 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 literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec5-1.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec5-1.png new file mode 100644 index 0000000000000000000000000000000000000000..dc3a9ab15f111dcb4b4b2915012c683b1a52ff77 GIT binary patch literal 25089 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 Y(PJ&wXGala0W~$3-S6$H*cp`gZ=G5a;Q#;t literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec5-4.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec5-4.png new file mode 100644 index 0000000000000000000000000000000000000000..248c011336ed66af98a152fc2679ceb8b986ebf6 GIT binary patch literal 44037 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 Ld~!QR$WjL3(JU83F0e5s;G3p@yO7 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 literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec5-7.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/images/sec5-7.png new file mode 100644 index 0000000000000000000000000000000000000000..306c06574e62868c2763c9324b32214c4e80b0a9 GIT binary patch literal 45985 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 literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/index.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/index.md new file mode 100644 index 000000000..425d05c24 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/index.md @@ -0,0 +1,42 @@ +--- +uid: ecs-overview +--- + +

+ +# Entity Component System + +The Entity Component System (ECS) is the core of the Unity Data-Oriented Tech Stack. As the +name indicates, ECS has three principal parts: + +* [Entities](ecs_entities.md) — the entities, or things, that populate your game or program. +* [Components](ecs_components.md) — the data associated with your entities, but organized by + the data itself rather than by entity. (This difference in organization is one of the key differences + between an object-oriented and a data-oriented design.) +* [Systems](ecs_systems.md) — the logic that transforms the component data from its current state + to its next state— for example, a system might update the positions of all moving entities by their + velocity times the time interval since the previous frame. + + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/job_component_system.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/job_component_system.md new file mode 100644 index 000000000..4b32a22cd --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/job_component_system.md @@ -0,0 +1,67 @@ +--- +uid: ecs-job-component-system +--- +# JobComponentSystem + +## Automatic job dependency management + +Managing dependencies is hard. This is why in `JobComponentSystem` we are doing it automatically for you. The rules are simple: jobs from different systems can read from `IComponentData` of the same type in parallel. If one of the jobs is writing to the data then they can't run in parallel and will be scheduled with a dependency between the jobs. + +```cs +public class RotationSpeedSystem : JobComponentSystem +{ + [BurstCompile] + struct RotationSpeedRotation : IJobForEach + { + public float dt; + + public void Execute(ref Rotation rotation, [ReadOnly]ref RotationSpeed speed) + { + rotation.value = math.mul(math.normalize(rotation.value), quaternion.axisAngle(math.up(), speed.speed * dt)); + } + } + + // Any previously scheduled jobs reading/writing from Rotation or writing to RotationSpeed + // will automatically be included in the inputDeps dependency. + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + var job = new RotationSpeedRotation() { dt = Time.deltaTime }; + return job.Schedule(this, inputDeps); + } +} +``` + +## How does this work? + +All jobs and thus systems declare what ComponentTypes they read or write to. As a result when a JobComponentSystem returns a [JobHandle](https://docs.unity3d.com/ScriptReference/Unity.Jobs.JobHandle.html) it is automatically registered with the `EntityManager` and all the types including the information about if it is reading or writing. + +Thus if a system writes to component `A`, and another system later on reads from component `A`, then the `JobComponentSystem` looks through the list of types it is reading from and thus passes you a dependency against the job from the first system. + +`JobComponentSystem` simply chains jobs as dependencies where needed and thus causes no stalls on the main thread. But what happens if a non-job `ComponentSystem` accesses the same data? Because all access is declared, the `ComponentSystem` automatically completes all jobs running against component types that the system uses before invoking `OnUpdate`. + +## Dependency management is conservative & deterministic + +Dependency management is conservative. `ComponentSystem` simply tracks all `EntityQuery`objects ever used and stores which types are being written or read based on that. + + + +Also when scheduling multiple jobs in a single system, dependencies must be passed to all jobs even though different jobs may need less dependencies. If that proves to be a performance issue the best solution is to split a system into two. + +The dependency management approach is conservative. It allows for deterministic and correct behaviour while providing a very simple API. + +## Sync points + +All structural changes have hard sync points. `CreateEntity`, `Instantiate`, `Destroy`, `AddComponent`, `RemoveComponent`, `SetSharedComponentData` all have a hard sync point. Meaning all jobs scheduled through `JobComponentSystem` will be completed before creating the entity, for example. This happens automatically. So for instance: calling `EntityManager.CreateEntity` in the middle of the frame might result in a large stall waiting for all previously scheduled jobs in the `World` to complete. + +See [EntityCommandBuffer](entity_command_buffer.md) for more on avoiding sync points when creating entities during game play. + +## Multiple Worlds + +Every `World` has its own `EntityManager` and thus a separate set of `JobHandle` dependency management. A hard sync point in one world will not affect the other `World`. As a result, for streaming and procedural generation scenarios, it is useful to create entities in one `World` and then move them to another `World` in one transaction at the beginning of the frame. + +See [ExclusiveEntityTransaction](exclusive_entity_transaction.md) for more on avoiding sync points for procedural generation & streaming scenarios and [System update order](system_update_order.md). + + + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/manual_iteration.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/manual_iteration.md new file mode 100644 index 000000000..589472a18 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/manual_iteration.md @@ -0,0 +1,89 @@ +# Manual iteration + +You can also request all the chunks explicitly in a NativeArray and process them with a Job such as `IJobParallelFor`. This method is recommended if you need to manage chunks in some way that is not appropriate for the simplified model of simply iterating over all the Chunks in a EntityQuery. As in: + +```c# +public class RotationSpeedSystem : JobComponentSystem +{ + [BurstCompile] + struct RotationSpeedJob : IJobParallelFor + { + [DeallocateOnJobCompletion] public NativeArray Chunks; + public ArchetypeChunkComponentType RotationType; + [ReadOnly] public ArchetypeChunkComponentType RotationSpeedType; + public float DeltaTime; + + public void Execute(int chunkIndex) + { + var chunk = Chunks[chunkIndex]; + var chunkRotation = chunk.GetNativeArray(RotationType); + var chunkSpeed = chunk.GetNativeArray(RotationSpeedType); + var instanceCount = chunk.Count; + + for (int i = 0; i < instanceCount; i++) + { + var rotation = chunkRotation[i]; + var speed = chunkSpeed[i]; + rotation.Value = math.mul(math.normalize(rotation.Value), quaternion.AxisAngle(math.up(), speed.RadiansPerSecond * DeltaTime)); + chunkRotation[i] = rotation; + } + } + } + + EntityQuery m_Query; + + protected override void OnCreate() + { + var queryDesc = new EntityQueryDesc + { + All = new ComponentType[]{ typeof(RotationQuaternion), ComponentType.ReadOnly() } + }; + + m_Query = GetEntityQuery(queryDesc); + } + + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + var rotationType = GetArchetypeChunkComponentType(); + var rotationSpeedType = GetArchetypeChunkComponentType(true); + var chunks = m_Query.CreateArchetypeChunkArray(Allocator.TempJob); + + var rotationsSpeedJob = new RotationSpeedJob + { + Chunks = chunks, + RotationType = rotationType, + RotationSpeedType = rotationSpeedType, + DeltaTime = Time.deltaTime + }; + return rotationsSpeedJob.Schedule(chunks.Length,32,inputDeps); + } +} +``` + +## Iterating manually in a ComponentSystem + +Although not a generally recommended practice, you can use the EntityManager class to manually iterate through the entities or chunks. These iteration methods should only be used in test or debugging code (or when you are just experimenting) or in an isolated World in which you have a perfectly controlled set of entities. + +For example, the following snippet iterates through all of the entities in the active World: + +``` c# +var entityManager = World.Active.EntityManager; +var allEntities = entityManager.GetAllEntities(); +foreach (var entity in allEntities) +{ + //... +} +allEntities.Dispose(); +``` + + While this snippet iterates through all of the chunks in the active World: + +``` c# +var entityManager = World.Active.EntityManager; +var allChunks = entityManager.GetAllChunks(); +foreach (var chunk in allChunks) +{ + //... +} +allChunks.Dispose(); +``` diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/shared_component_data.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/shared_component_data.md new file mode 100644 index 000000000..c15762413 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/shared_component_data.md @@ -0,0 +1,41 @@ +--- +uid: ecs-shared-component-data +--- +# Shared Component Data + +Shared components are a special kind of data component that you can use to subdivide entities based on the specific values in the shared component (in addition to their archetype). When you add a shared component to an entity, the EntityManager places all entities with the same shared data values into the same Chunk. Shared components allow your systems to process like entities together. For example, the shared component `Rendering.RenderMesh`, which is part of the Hybrid.rendering package, defines several fields, including **mesh**, **material**, **receiveShadows**, etc. When rendering, it is most efficient to process all the 3D objects that all have the same value for those fields together. Because these properties are specified in a shared component the EntityManager places the matching entities together in memory so the rendering system can efficiently iterate over them. + +**Note:** Over using shared components can lead to poor Chunk utilization since it involves a combinatorial expansion of the number of memory Chunks required based on archetype and every unique value of each shared component field. Avoid adding unnecessary fields to a shared component Use the [Entity Debugger](ecs_debugging.md) to view the current Chunk utilization. + +If you add or remove a component from an entity, or change the value of a SharedComponent, The EntityManager moves the entity to a different Chunk, creating a new Chunk if necessary. + + +[IComponentData](xref:Unity.Entities.IComponentData) is generally appropriate for data that varies between entities, such as storing a world position, agent hit points, particle time-to-live, etc. In contrast, [ISharedComponentData](xref:Unity.Entities.ISharedComponentData) is appropriate when many entities share something in common. For example in the `Boid` demo we instantiate many entities from the same [Prefab](https://docs.unity3d.com/Manual/Prefabs.html) and thus the `RenderMesh` between many `Boid` entities is exactly the same. + +```cs +[System.Serializable] +public struct RenderMesh : ISharedComponentData +{ + public Mesh mesh; + public Material material; + + public ShadowCastingMode castShadows; + public bool receiveShadows; +} +``` + +The great thing about `ISharedComponentData` is that there is literally zero memory cost on a per entity basis. + +We use `ISharedComponentData` to group all entities using the same `InstanceRenderer` data together and then efficiently extract all matrices for rendering. The resulting code is simple & efficient because the data is laid out exactly as it is accessed. + +- `RenderMeshSystemV2` (see file: _Packages/com.unity.entities/Unity.Rendering.Hybrid/RenderMeshSystemV2.cs_) + +## Some important notes about SharedComponentData: + +- Entities with the same `SharedComponentData` are grouped together in the same [Chunks](chunk_iteration.md). The index to the `SharedComponentData` is stored once per `Chunk`, not per entity. As a result `SharedComponentData` have zero memory overhead on a per entity basis. +- Using `EntityQuery` we can iterate over all entities with the same type. +- Additionally we can use [EntityQuery.SetFilter()](xref:Unity.Entities.EntityQuery.SetFilter*) to iterate specifically over entities that have a specific `SharedComponentData` value. Due to the data layout this iteration has low overhead. +- Using `EntityManager.GetAllUniqueSharedComponents` we can retrieve all unique `SharedComponentData` that is added to any alive entities. +- `SharedComponentData` are automatically [reference counted](https://en.wikipedia.org/wiki/Reference_counting). +- `SharedComponentData` should change rarely. Changing a `SharedComponentData` involves using [memcpy](https://msdn.microsoft.com/en-us/library/aa246468(v=vs.60).aspx) to copy all `ComponentData` for that entity into a different `Chunk`. + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/sync_points.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/sync_points.md new file mode 100644 index 000000000..e2b4c28c2 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/sync_points.md @@ -0,0 +1,22 @@ +--- +uid: sync-points +--- + +# Sync points +A synchronization point (sync point) is a point in the program execution that will wait for the completion of all jobs that have been scheduled so far. Sync points hence limit your ability to use all worker threads available in the job system for a period of time. You should generally aim to avoid sync points. + +## Structural changes +Sync points are caused by operations that you cannot safely perform when there are any other jobs that operate on components. *Structural changes* to the data in the ECS are the primary cause of sync points. All of the following are structural changes: + + * Creating entities + * Deleting entities + * Adding components to an entity + * Removing components from an entity + * Changing the value of shared components + +Broadly speaking, any operation that changes the archetype of an entity or causes the order of entities within a chunk to change is a structural change. These structural changes can only be performed on the main thread. + +Structural changes not only require a sync point, but they also invalidate all direct references to any component data. This includes instances of [`DynamicBuffer`](xref:Unity.Entities.DynamicBuffer``1) and the result of methods that provide direct access to the components such as [`ComponentSystemBase.GetComponentDataFromEntity`](xref:Unity.Entities.ComponentSystemBase.GetComponentDataFromEntity*). + +## Avoiding sync points +You can use [entity command buffers](entity_command_buffer.md) (ECBs) to queue up structural changes instead of immediately performing them. Commands stored in an ECB can be played back at a later point during the frame. This reduces multiple sync points spread across the frame to a single sync point when the ECB is played back. \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/system_state_components.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/system_state_components.md new file mode 100644 index 000000000..09df48c62 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/system_state_components.md @@ -0,0 +1,206 @@ +--- +uid: ecs-system-state-component-data +--- +# System State Components + +The purpose of `SystemStateComponentData` is to allow you to track resources internal to a system and have the opportunity to appropriately create and destroy those resources as needed without relying on individual callbacks. + +`SystemStateComponentData` and `SystemStateSharedComponentData` are exactly like `ComponentData` and `SharedComponentData`, respectively, except in one important respect: + +1. `SystemStateComponentData` is not deleted when an entity is destroyed. + +`DestroyEntity` is shorthand for + +1. Find all components which reference this particular entity ID. +2. Delete those components. +3. Recycle the entity id for reuse. + +However, if `SystemStateComponentData` is present, it is not removed. This gives a system the opportunity to cleanup any resources or state associated with an entity ID. The entity ID will only be reused once all `SystemStateComponentData` has been removed. + +## Motivation + +- Systems may need to keep an internal state based on `ComponentData`. For instance, resources may be allocated. +- Systems need to be able to manage that state as values and state changes are made by other systems. For example, when values in components change, or when relevant components are added or deleted. +- "No callbacks" is an important element of the ECS design rules. + +## Concept + +The general use of `SystemStateComponentData` is expected to mirror a user component, providing the internal state. + +For instance, given: +- FooComponent (`ComponentData`, user assigned) +- FooStateComponent (`SystemComponentData`, system assigned) + +### Detecting Component Add + +When user adds FooComponent, FooStateComponent does not exist. The FooSystem update queries for FooComponent without FooStateComponent and can infer that they have been added. At that point, the FooSystem will add the FooStateComponent and any needed internal state. + +### Detecting Component Remove + +When user removes FooComponent, FooStateComponent still exists. The FooSystem update queries for FooStateComponent without FooComponent and can infer that they have been removed. At that point, the FooSystem will remove the FooStateComponent and fix up any needed internal state. + +### Detecting Destroy Entity + +`DestroyEntity` is actually a shorthand utility for: + +- Find components which reference given entity ID. +- Delete components found. +- Recycle entity ID. + +However, `SystemStateComponentData` are not removed on `DestroyEntity` and the entity ID is not recycled until the last component is deleted. This gives the system the opportunity to clean up the internal state in the exact same way as with component removal. + +## SystemStateComponent + +A `SystemStateComponentData` is analogous to a `ComponentData` and used similarly. + +``` +struct FooStateComponent : ISystemStateComponentData +{ +} +``` + +Visibility of a `SystemStateComponentData` is also controlled in the same way as a component (using `private`, `public`, `internal`) However, it's expected, as a general rule, that a `SystemStateComponentData` will be `ReadOnly` outside the system that creates it. + +## SystemStateSharedComponent + +A `SystemStateSharedComponentData` is analogous to a `SharedComponentData` and used similarly. + +``` +struct FooStateSharedComponent : ISystemStateSharedComponentData +{ + public int Value; +} +``` + +## Example system using state components + +The following example shows a simplified system that illustrates how to manage entities with system state components. The example defines a general-purpose IComponentData instance and a system state, ISystemStateComponentData instance. It also defines three queries based on those entities: + +* m_newEntities selects entities that have the general-purpose, but not the system state component. This query finds new entities that the system has not seen before. The system runs a job using the new entities query that adds the system state component. +* m_activeEntities selects entities that have both the general-purpose and the system state component. In a real application, other systems could be the ones that process or destroy the entities. +* m_destroyedEntities selects entities that have the system state, but not the general-purpose component. Since the system state component is never added to an entity by itself, the entities selected by this query must have been deleted, either by this system or another system. The system runs a job using the destroyed entities query to remove the system state component from the entities, which allows the ECS code to recycle the Entity identifier. + +Note that this simplified example does not maintain any state within the system. One purpose for system state components is to track when persistent resources need to be allocated or cleaned up. + + +``` +using Unity.Collections; +using Unity.Entities; +using Unity.Jobs; +using UnityEngine; + +public struct GeneralPurposeComponentA : IComponentData +{ + public bool IsAlive; +} + +public struct StateComponentB : ISystemStateComponentData +{ + public int State; +} + +public class StatefulSystem : JobComponentSystem +{ + private EntityQuery m_newEntities; + private EntityQuery m_activeEntities; + private EntityQuery m_destroyedEntities; + private EntityCommandBufferSystem m_ECBSource; + + protected override void OnCreate() + { + // Entities with GeneralPurposeComponentA but not StateComponentB + m_newEntities = GetEntityQuery(new EntityQueryDesc() + { + All = new ComponentType[] {ComponentType.ReadOnly()}, + None = new ComponentType[] {ComponentType.ReadWrite()} + }); + + // Entities with both GeneralPurposeComponentA and StateComponentB + m_activeEntities = GetEntityQuery(new EntityQueryDesc() + { + All = new ComponentType[] + { + ComponentType.ReadWrite(), + ComponentType.ReadOnly() + } + }); + + // Entities with StateComponentB but not GeneralPurposeComponentA + m_destroyedEntities = GetEntityQuery(new EntityQueryDesc() + { + All = new ComponentType[] {ComponentType.ReadWrite()}, + None = new ComponentType[] {ComponentType.ReadOnly()} + }); + + m_ECBSource = World.GetOrCreateSystem(); + } + + struct NewEntityJob : IJobForEachWithEntity + { + public EntityCommandBuffer.Concurrent ConcurrentECB; + + public void Execute(Entity entity, int index, [ReadOnly] ref GeneralPurposeComponentA gpA) + { + // Add an ISystemStateComponentData instance + ConcurrentECB.AddComponent(index, entity, new StateComponentB() {State = 1}); + } + } + + struct ProcessEntityJob : IJobForEachWithEntity + { + public EntityCommandBuffer.Concurrent ConcurrentECB; + + public void Execute(Entity entity, int index, ref GeneralPurposeComponentA gpA) + { + // Process entity, possibly setting IsAlive false -- + // In which case, destroy the entity + if (!gpA.IsAlive) + { + ConcurrentECB.DestroyEntity(index, entity); + } + } + } + + struct CleanupEntityJob : IJobForEachWithEntity + { + public EntityCommandBuffer.Concurrent ConcurrentECB; + + public void Execute(Entity entity, int index, [ReadOnly] ref StateComponentB state) + { + // This system is responsible for removing any ISystemStateComponentData instances it adds + // Otherwise, the entity is never truly destroyed. + ConcurrentECB.RemoveComponent(index, entity); + } + } + + protected override JobHandle OnUpdate(JobHandle inputDependencies) + { + var newEntityJob = new NewEntityJob() + { + ConcurrentECB = m_ECBSource.CreateCommandBuffer().ToConcurrent() + }; + var newJobHandle = newEntityJob.ScheduleSingle(m_newEntities, inputDependencies); + m_ECBSource.AddJobHandleForProducer(newJobHandle); + + var processEntityJob = new ProcessEntityJob() + {ConcurrentECB = m_ECBSource.CreateCommandBuffer().ToConcurrent()}; + var processJobHandle = processEntityJob.Schedule(m_activeEntities, newJobHandle); + m_ECBSource.AddJobHandleForProducer(processJobHandle); + + var cleanupEntityJob = new CleanupEntityJob() + { + ConcurrentECB = m_ECBSource.CreateCommandBuffer().ToConcurrent() + }; + var cleanupJobHandle = cleanupEntityJob.ScheduleSingle(m_destroyedEntities, processJobHandle); + m_ECBSource.AddJobHandleForProducer(cleanupJobHandle); + + return cleanupJobHandle; + } + + protected override void OnDestroy() + { + // Implement OnDestroy to cleanup any resources allocated by this system. + // (This simplified example does not allocate any resources.) + } +} +``` \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/system_update_order.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/system_update_order.md new file mode 100644 index 000000000..5b6007536 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/system_update_order.md @@ -0,0 +1,99 @@ +--- +uid: ecs-system-update-order +--- + +# System Update Order + +Use Component System Groups to specify the update order of your systems. You can place a systems in a group using the [UpdateInGroup] attribute on the system’s class declaration. You can then use [UpdateBefore] and [UpdateAfter] attributes to specify the update order within the group. + +The ECS framework creates a set of [default system groups](#default-system-groups) that you can use to update your systems in the correct phase of a frame. You can nest one group inside another so that all systems in your group update in the correct phase and, then, also update according to the order within their group. + +## Component System Groups + +The ComponentSystemGroup class represents a list of related component systems that should be updated together in a specific order. ComponentSystemGroup is derived from ComponentSystemBase, so it acts like a component system in all the important ways -- it can be ordered relative to other systems, has an OnUpdate() method, etc. Most relevantly, this means component system groups can be nested in other component system groups, forming a hierarchy. + +By default, when a ComponentSystemGroup’s `Update()` method is called, it calls Update() on each system in its sorted list of member systems. If any member systems are themselves system groups, they will recursively update their own members. The resulting system ordering follows a depth-first traversal of a tree. + + +## System Ordering Attributes + +The existing system ordering attributes are maintained, with slightly different semantics and restrictions. + +* [UpdateInGroup] — specifies a ComponentSystemGroup that this system should be a member of. If this attribute is omitted, the system is automatically added to the default World’s SimulationSystemGroup (see below). +* [UpdateBefore] and [UpdateAfter] — order systems relative to other systems. The system type specified for these attributes must be a member of the same group. Ordering across group boundaries is handled at the appropriate deepest group containing both systems: + * __Example:__ if SystemA is in GroupA and SystemB is in GroupB, and GroupA and GroupB are both members of GroupC, then the ordering of GroupA and GroupB implicitly determines the relative ordering of SystemA and SystemB; no explicit ordering of the systems is necessary. +* [DisableAutoCreation] — prevents the system from being created during default world initialization. You must explicitly create and update the system. However, you can add a system with this tag to a ComponentSystemGroup’s update list, and it will then be automatically updated just like the other systems in that list. + + +## Default System Groups + +The default World contains a hierarchy of ComponentSystemGroup instances. Only three root-level system groups are added to the Unity player loop (the following list also shows the pre-defined member systems in each group): + +* InitializationSystemGroup (updated at the end of the `Initialization` phase of the player loop) + * BeginInitializationEntityCommandBufferSystem + * CopyInitialTransformFromGameObjectSystem + * SubSceneLiveLinkSystem + * SubSceneStreamingSystem + * EndInitializationEntityCommandBufferSystem +* SimulationSystemGroup (updated at the end of the `Update` phase of the player loop) + * BeginSimulationEntityCommandBufferSystem + * TransformSystemGroup + * EndFrameParentSystem + * CopyTransformFromGameObjectSystem + * EndFrameTRSToLocalToWorldSystem + * EndFrameTRSToLocalToParentSystem + * EndFrameLocalToParentSystem + * CopyTransformToGameObjectSystem + * LateSimulationSystemGroup + * EndSimulationEntityCommandBufferSystem +* PresentationSystemGroup (updated at the end of the `PreLateUpdate` phase of the player loop) + * BeginPresentationEntityCommandBufferSystem + * CreateMissingRenderBoundsFromMeshRenderer + * RenderingSystemBootstrap + * RenderBoundsUpdateSystem + * RenderMeshSystem + * LODGroupSystemV1 + * LodRequirementsUpdateSystem + * EndPresentationEntityCommandBufferSystem + +Note that the specific contents of this list is subject to change. + +## Multiple Worlds + +You can create multiple Worlds, in addition to (or instead of) the default World described above. The same component system class can be instantiated in more than one World, and each instance can be updated at different rates from different points in the update order. + +There is currently no way to manually update every system in a given World; instead, you can control which systems are created in which World, and which of the existing system groups they should be added to. Thus, a custom WorldB could instantiate SystemX and SystemY, adding SystemX to the default World’s SimulationSystemGroup, and adding SystemY to the default World’s PresentationSystemGroup. These systems can order themselves relative to their group siblings as usual, and will be updated along with the corresponding group. + +To support this use case, a new ICustomBootstrap interface is now available: + +``` c# +public interface ICustomBootstrap +{ + // Returns the systems which should be handled by the default bootstrap process. + // If null is returned the default world will not be created at all. + // Empty list creates default world and entrypoints + List Initialize(List systems); +} +``` + +When you implement this interface, the full list of component system types will be passed to the classes `Initialize()` method, prior to default world initialization. A custom bootstrapper can iterate through this list and create systems in whatever World it wants. You can return a list of systems from the Initialize() method and they will be created as part of the normal, default world initialization. + +For example, here’s the typical procedure of a custom `MyCustomBootstrap.Initialize()` implementation: + +1. Create any additional Worlds and their top-level ComponentSystemGroups. +2. For each Type in the system Type list: + 1. Traverse upward through the ComponentSystemGroup hierarchy to find this system Type’s top-level group. + 2. If it’s one of the groups created in step 1, create the system in that World and add it to the hierarchy with `group.AddSystemToUpdateList()`. + 3. If not, append this Type to the List to return to DefaultWorldInitialization. +3. Call group.SortSystemUpdateList() on new top-level groups. + 4. Optionally add them to one of the default world groups +4. Return list of unhandled systems to DefaultWorldInitialization. + +**Note:** the ECS framework finds your ICustomBootstrap implementation by reflection. + +## Tips and Best Practices + +* __Use [UpdateInGroup] to specify the system group for each system you write.__ If not specified, the implicit default group is SimulationSystemGroup. +* __Use manually-ticked ComponentSystemGroups to update systems elsewhere in the Unity player loop.__ Adding the [DisableAutoCreation] attribute to a component system (or system group) prevents it from being created or added to the default system groups. You can still manually create the system with World.GetOrCreateSystem() and update it by calling manually calling MySystem.Update() from the main thread. This is an easy way to insert systems elsewhere in the Unity player loop (for example, if you have a system that should run later or earlier in the frame). +* __Use the existing `EntityCommandBufferSystem`s instead of adding new ones, if possible.__ An `EntityCommandBufferSystem` represents a sync point where the main thread waits for worker threads to complete before processing any outstanding `EntityCommandBuffer`s. Reusing one of the predefined Begin/End systems in each root-level system group is less likely to introduce a new "bubble" into the frame pipeline than creating a new one. +* __Avoid putting custom logic in `ComponentSystemGroup.OnUpdate()`__. Since `ComponentSystemGroup` is functionally a component system itself, it may be tempting to add custom processing to its OnUpdate() method, to perform some work, spawn some jobs, etc. We advise against this in general, as it’s not immediately clear from the outside whether the custom logic is executed before or after the group’s members are updated. It’s preferable to keep system groups limited to a grouping mechanism, and to implement the desired logic in a separate component system, explicitly ordered relative to the group. diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/transform_system.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/transform_system.md new file mode 100644 index 000000000..a1f3609c8 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/transform_system.md @@ -0,0 +1,1034 @@ +--- +uid: gameplay-transform-system +--- +# TransformSystem + +---------------------------------------------- +Section 1: Non-hierarchical Transforms (Basic) +---------------------------------------------- + +LocalToWorld (float4x4) represents the transform from local space to world space. It is the canonical representation and is the only component and can be relied upon to communicate local space among systems. + +- Some DOTS features may rely on the existence of LocalToWorld in order to function. +- For example, the RenderMesh component relies on the LocalToWorld component to exist for rendering an instance. +- If only the LocalToWorld transform component exists, no transform system will write or affect the LocalToWorld data. +- User code may write directly to LocalToWorld to define the transform for an instance, if no other transform components are associated with the same entity. + +The purpose of all transform systems and all other transform components is to provide interfaces to write to LocalToWorld. + +LocalToWorld = Translation * Rotation * Scale + +If any combination of Translation (float3), Rotation (quaternion), or Scale (float) components are present along with a LocalToWorld component, a transform system will combine those components and write to LocalToWorld. + +Concretely, each of these component combinations will write to LocalToWorld as: + +- [TRSToLocalToWorldSystem] LocalToWorld <= Translation +- [TRSToLocalToWorldSystem] LocalToWorld <= Translation * Rotation +- [TRSToLocalToWorldSystem] LocalToWorld <= Translation * Rotation * Scale +- [TRSToLocalToWorldSystem] LocalToWorld <= Rotation +- [TRSToLocalToWorldSystem] LocalToWorld <= Rotation * Scale +- [TRSToLocalToWorldSystem] LocalToWorld <= Scale + +e.g. If the following components are present... + +| (Entity) | +| --------------| +| LocalToWorld | +| Translation | +| Rotation | + +...then the transform system will: + +- [TRSToLocalToWorldSystem] Write LocalToWorld <= Translation * Rotation + +![](images/sec1-1.png) + +Or, if the following components are present... + +| (Entity) | +| --------------| +| LocalToWorld | +| Translation | +| Rotation | +| Scale | + +...then the transform system will: + +- [TRSToLocalToWorldSystem] Write LocalToWorld <= Translation * Rotation * Scale + +![](images/sec1-2.png) + +------------------------------------------ +Section 2: Hierarchical Transforms (Basic) +------------------------------------------ + +LocalToParent and Parent components are required for the transform system to write a LocalToWorld based on a hierarchical transform. + +- LocalToParent (float4x4) represents the transform from local space to parent local space. +- Parent (Entity) references the parent's LocalToWorld. +- User code may write directly to LocalToParent, if no other transform system is defined as writing to it. + +e.g. If the following components are present... + +| Parent (Entity) | Child (Entity) | +| --------------- | -------------- | +| LocalToWorld | LocalToWorld | +| Translation | LocalToParent | +| Rotation | Parent | +| Scale | | + +...then the transform system will: + +1. [TRSToLocalToWorldSystem] Parent: Write LocalToWorld as defined above in "Non-hierarchical Transforms (Basic)" +2. [LocalToParentSystem] Child: Write LocalToWorld <= LocalToWorld[Parent] * LocalToParent + +![](images/sec2-1.png) + +LocalToWorld components associated with Parent Entity IDs are guaranteed to be computed before multiplies with LocalToParent associated with Child Entity ID. + +Note: Cyclical graph relationships are invalid. Results are undefined. + +When the hierarchy (topology) is changed (i.e. Any Parent component is added, removed or changed) internal state is added as SystemStateComponentData as: + +- Child component (ISystemStateBufferElementData of Entity) associated with the Parent Entity ID +- PreviousParent component (ISystemStateComponentData of Entity) associated with the Child Entity ID + +| Parent (Entity) | Child (Entity) | +| --------------- | --------------- | +| LocalToWorld | LocalToWorld | +| Translation | LocalToParent | +| Rotation | Parent | +| Scale | PreviousParent* | +| Child* | | + +Adding, removing, and updating of these components is handled by the [ParentSystem]. It is not expected that systems external to transform systems will read or write to these components. + +LocalToParent = Translation * Rotation * Scale + +If any combination of Translation (float3), Rotation (quaternion), or Scale (float) components are present along with a LocalToParent component, a transform system will combine those components and write to LocalToParent. + +Concretely, each of these component combinations will write to LocalToParent as: + +- [TRSToLocalToParentSystem] LocalToParent <= Translation +- [TRSToLocalToParentSystem] LocalToParent <= Translation * Rotation +- [TRSToLocalToParentSystem] LocalToParent <= Translation * Rotation * Scale +- [TRSToLocalToParentSystem] LocalToParent <= Rotation +- [TRSToLocalToParentSystem] LocalToParent <= Rotation * Scale +- [TRSToLocalToParentSystem] LocalToParent <= Scale + +e.g. If the following components are present... + +| Parent (Entity) | Child (Entity) | +| --------------- | --------------- | +| LocalToWorld | LocalToWorld | +| Translation | LocalToParent | +| Rotation | Parent | +| Scale | PreviousParent* | +| Child* | Translation | +| | Rotation | +| | Scale | + +...then the transform system will: + +1. [TRSToLocalToWorldSystem] Parent: Write LocalToWorld as defined above in "Non-hierarchical Transforms (Basic)" +2. [TRSToLocalToParentSystem] Child: Write LocalToParent <= Translation * Rotation * Scale +3. [LocalToParentSystem] Child: Write LocalToWorld <= LocalToWorld[Parent] * LocalToParent + +![](images/sec2-2.png) + +Parents may of course themselves be children of other LocalToWorld components. + +e.g. If the following components are present... + +| Parent (Entity) | Child (Entity) | +| --------------- | --------------- | +| LocalToWorld | LocalToWorld | +| LocalToParent | LocalToParent | +| Parent | Parent | +| PreviousParent* | PreviousParent* | +| Child* | Translation | +| Translation | Rotation | +| Rotation | Scale | +| Scale | | + +...then the transform system will: + +1. [TRSToLocalToParentSystem] Parent: Write LocalToParent <= Translation * Rotation * Scale +2. [TRSToLocalToParentSystem] Child: Write LocalToParent <= Translation * Rotation * Scale +3. [LocalToParentSystem] Parent: Write LocalToWorld <= LocalToWorld[Parent] * LocalToParent +4. [LocalToParentSystem] Child: Write LocalToWorld <= LocalToWorld[Parent] * LocalToParent + +![](images/sec2-3.png) + +------------------------------------- +Section 3: Default Conversion (Basic) +------------------------------------- + +Hybrid Conversion: + +UnityEngine.Transform MonoBehaviours which are part of GameObjects and are included in Sub Scenes or are on GameObjects with "Convert To Entity" Monobehaviours attached, have a default conversion to Transform system components. That conversion can be found in TransformConversion system in the Unity.Transforms.Hybrid assembly. + +1. Entities associated with the GameObject being transformed which have a Static component, only have LocalToWorld added to the resulting entity. So in the case of static instances, no transform system update will happen at runtime. +2. For non-Static entities, + a. Translation component will be added with the Transform.position value. + b. Rotation component will be added with the Transform.rotation value. + c. Transform.parent == null + - For non-unit Transform.localScale, NonUniformScale component will be added with the Transform.localScale value. + d. If Transform.parent != null, but at the start of the (partial) hierarchy being converted: + - For non-unit Transform.lossyScale, NonUniformScale component will be added with the Transform.lossyScale value. + e. For other cases where Transform.parent != null, + - Parent component will be added with the Entity referring to the converted Transform.parent GameObject. + - LocalToParent component will be added. + +------------------------------------------------- +Section 4: Non-hierarchical Transforms (Advanced) +------------------------------------------------- + +NonUniformScale (float3) as an alternative to Scale to specify scale per-axis. Note that not all DOTS features fully support non-uniform scale. Be sure to check those features’ documentation to understand their limitations. + +- [TRSToLocalToWorldSystem] LocalToWorld <= Translation +- [TRSToLocalToWorldSystem] LocalToWorld <= Translation * Rotation +- [TRSToLocalToWorldSystem] LocalToWorld <= Translation * Rotation * NonUniformScale +- [TRSToLocalToWorldSystem] LocalToWorld <= Rotation +- [TRSToLocalToWorldSystem] LocalToWorld <= Rotation * NonUniformScale +- [TRSToLocalToWorldSystem] LocalToWorld <= NonUniformScale + +The presence of both Scale and NonUniform scale is not a valid case, but the result is defined. Scale will be used, NonUniformScale will be ignored. + +e.g. If the following components are present... + +| (Entity) | +| ---------------- | +| LocalToWorld | +| Translation | +| Rotation | +| NonUniformScale | + +...then the transform system will: + +- [TRSToLocalToWorldSystem] Write LocalToWorld <= Translation * Rotation * NonUniformScale + +![](images/sec4-1.png) + +The Rotation component may be written to directly as a quaternion by user code. However, if an Euler interface is preferred, components are available for each rotation order which will cause a write to the Rotation component if present. + +- [RotationEulerSystem] Rotation <= RotationEulerXYZ +- [RotationEulerSystem] Rotation <= RotationEulerXZY +- [RotationEulerSystem] Rotation <= RotationEulerYXZ +- [RotationEulerSystem] Rotation <= RotationEulerYZX +- [RotationEulerSystem] Rotation <= RotationEulerZXY +- [RotationEulerSystem] Rotation <= RotationEulerZYX + +e.g. If the following components are present... + +| (Entity) | +| ---------------- | +| LocalToWorld | +| Translation | +| Rotation | +| RotationEulerXYZ | + +...then the transform system will: + +1. [RotationEulerSystem] Write Rotation <= RotationEulerXYZ +2. [TRSToLocalToWorldSystem] Write LocalToWorld <= Translation * Rotation * Scale + +![](images/sec4-2.png) + +It is a setup error to have more than one RotationEuler*** component is associated with the same Entity, however the result is defined. The first to be found in the order of precedence will be applied. That order is: + +1. RotationEulerXYZ +2. RotationEulerXZY +3. RotationEulerYXZ +4. RotationEulerYZX +5. RotationEulerZXY +6. RotationEulerZYX + +For more complex Rotation requirements, a CompositeRotation (float4x4) component may be used as an alternative to Rotation. + +All of the combinations which are valid for Rotation are also valid for CompositeRotation. i.e. + +- [TRSToLocalToWorldSystem] LocalToWorld <= Translation * CompositeRotation +- [TRSToLocalToWorldSystem] LocalToWorld <= Translation * CompositeRotation * Scale +- [TRSToLocalToWorldSystem] LocalToWorld <= CompositeRotation +- [TRSToLocalToWorldSystem] LocalToWorld <= CompositeRotation * Scale +- [TRSToLocalToWorldSystem] LocalToWorld <= Translation * CompositeRotation +- [TRSToLocalToWorldSystem] LocalToWorld <= Translation * CompositeRotation * NonUniformScale +- [TRSToLocalToWorldSystem] LocalToWorld <= CompositeRotation +- [TRSToLocalToWorldSystem] LocalToWorld <= CompositeRotation * NonUniformScale + +The CompositeRotation component may be written to directly as a float4x4 by user code. However, if a Maya/FBX-style interface is preferred, components are available which will write to the CompositeRotation component if present. + +CompositeRotation = RotationPivotTranslation * RotationPivot * Rotation * PostRotation * RotationPivot^-1 + +If any combination of RotationPivotTranslation (float3), RotationPivot (float3), Rotation (quaternion), or PostRotation (quaternion) components are present along with a CompositeRotation component, a transform system will combine those components and write to CompositeRotation. + +Concretely, each of these component combinations will write to CompositeRotation as: + +- [CompositeRotationSystem] CompositeRotation <= RotationPivotTranslation +- [CompositeRotationSystem] CompositeRotation <= RotationPivotTranslation * RotationPivot * Rotation * RotationPivot^-1 +- [CompositeRotationSystem] CompositeRotation <= RotationPivotTranslation * RotationPivot * Rotation * PostRotation * RotationPivot^-1 +- [CompositeRotationSystem] CompositeRotation <= RotationPivotTranslation * RotationPivot * PostRotation * RotationPivot^-1 +- [CompositeRotationSystem] CompositeRotation <= RotationPivotTranslation * Rotation +- [CompositeRotationSystem] CompositeRotation <= RotationPivotTranslation * Rotation * PostRotation +- [CompositeRotationSystem] CompositeRotation <= RotationPivotTranslation * PostRotation +- [CompositeRotationSystem] CompositeRotation <= RotationPivot * Rotation * RotationPivot^-1 +- [CompositeRotationSystem] CompositeRotation <= RotationPivot * Rotation * PostRotation * RotationPivot^-1 +- [CompositeRotationSystem] CompositeRotation <= PostRotation +- [CompositeRotationSystem] CompositeRotation <= Rotation +- [CompositeRotationSystem] CompositeRotation <= Rotation * PostRotation + +Cases where RotationPivot is specified without either of Rotation, PostRotation have no additional affect on CompositeRotation. + +Note that since Rotation is re-used as a source for CompositeRotation, the alternative data interfaces to Rotation are still available. + +e.g. If the following components are present... + +| (Entity) | +| ------------------------ | +| LocalToWorld | +| Translation | +| CompositeRotation | +| Rotation | +| RotationPivotTranslation | +| RotationPivot | +| PostRotation | +| RotationEulerXYZ | +| Scale | + +...then the transform system will: + +1. [CompositeRotationSystem] Write CompositeRotation <= RotationPivotTranslation * RotationPivot * Rotation * PostRotation * RotationPivot^-1 +2. [TRSToLocalToWorldSystem] Write LocalToWorld <= Translation * CompositeRotation * Scale + +![](images/sec4-3.png) + +The PostRotation component may be written to directly as a quaternion by user code. However, if an Euler interface is preferred, components are available for each rotation order which will cause a write to the PostRotation component if present. + +- [PostRotationEulerSystem] PostRotation <= PostRotationEulerXYZ +- [PostRotationEulerSystem] PostRotation <= PostRotationEulerXZY +- [PostRotationEulerSystem] PostRotation <= PostRotationEulerYXZ +- [PostRotationEulerSystem] PostRotation <= PostRotationEulerYZX +- [PostRotationEulerSystem] PostRotation <= PostRotationEulerZXY +- [PostRotationEulerSystem] PostRotation <= PostRotationEulerZYX + +e.g. If the following components are present... + +| (Entity) | +| ------------------------ | +| LocalToWorld | +| Translation | +| CompositeRotation | +| Rotation | +| RotationPivotTranslation | +| RotationPivot | +| RotationEulerXYZ | +| PostRotation | +| PostRotationEulerXYZ | +| Scale | + +...then the transform system will: + +1. [RotationEulerSystem] Write Rotation <= RotationEulerXYZ +2. [PostRotationEulerSystem] Write PostRotation <= PostRotationEulerXYZ +3. [CompositeRotationSystem] Write CompositeRotation <= RotationPivotTranslation * RotationPivot * Rotation * PostRotation * RotationPivot^-1 +4. [TRSToLocalToWorldSystem] Write LocalToWorld <= Translation * CompositeRotation * Scale + +![](images/sec4-4.png) + +For more complex Scale requirements, a CompositeScale (float4x4) component may be used as an alternative to Scale (or NonUniformScale). + +All of the combinations which are valid for Scale or NonUniformScale are also valid for CompositeScale. i.e. + +- [TRSToLocalToWorldSystem] LocalToWorld <= Translation * Rotation * CompositeScale +- [TRSToLocalToWorldSystem] LocalToWorld <= Rotation * CompositeScale +- [TRSToLocalToWorldSystem] LocalToWorld <= CompositeScale +- [TRSToLocalToWorldSystem] LocalToWorld <= Translation * CompositeRotation * CompositeScale +- [TRSToLocalToWorldSystem] LocalToWorld <= CompositeRotation * CompositeScale + +The CompositeScale component may be written to directly as a float4x4 by user code. However, if a Maya/FBX-style interface is preferred, components are available which will write to the CompositeScale component if present. + +CompositeScale = ScalePivotTranslation * ScalePivot * Scale * ScalePivot^-1 +CompositeScale = ScalePivotTranslation * ScalePivot * NonUniformScale * ScalePivot^-1 + +If any combination of ScalePivotTranslation (float3), ScalePivot (float3), Scale (float) components are present along with a CompositeScale component, a transform system will combine those components and write to CompositeScale. + +Alternatively, if any combination of ScalePivotTranslation (float3), ScalePivot (float3), NonUniformScale (float3) components are present along with a CompositeScale component, a transform system will combine those components and write to CompositeScale. + +Concretely, each of these component combinations will write to CompositeRotation as: + +- [CompositeScaleSystem] CompositeScale <= ScalePivotTranslation +- [CompositeScaleSystem] CompositeScale <= ScalePivotTranslation * ScalePivot * Scale * ScalePivot^-1 +- [CompositeScaleSystem] CompositeScale <= ScalePivotTranslation * Scale +- [CompositeScaleSystem] CompositeScale <= ScalePivot * Scale * ScalePivot^-1 +- [CompositeScaleSystem] CompositeScale <= Scale +- [CompositeScaleSystem] CompositeScale <= ScalePivotTranslation * ScalePivot * NonUniformScale * ScalePivot^-1 +- [CompositeScaleSystem] CompositeScale <= ScalePivotTranslation * Scale +- [CompositeScaleSystem] CompositeScale <= ScalePivot * NonUniformScale * ScalePivot^-1 +- [CompositeScaleSystem] CompositeScale <= NonUniformScale + +Cases where ScalePivot is specified without either of Scale, NonUniformScale have no additional effect have no additional affect on CompositeScale. + +e.g. If the following components are present... + +| (Entity) | +| ------------------------ | +| LocalToWorld | +| Translation | +| CompositeRotation | +| Rotation | +| RotationPivotTranslation | +| RotationPivot | +| RotationEulerXYZ | +| PostRotation | +| PostRotationEulerXYZ | +| CompositeScale | +| Scale | +| ScalePivotTranslation | +| ScalePivot | + +...then the transform system will: + +1. [RotationEulerSystem] Write Rotation <= RotationEulerXYZ +2. [PostRotationEulerSystem] Write PostRotation <= PostRotationEulerXYZ +3. [CompositeScaleSystem] Write CompositeScale <= ScalePivotTranslation * ScalePivot * Scale * ScalePivot^-1 +4. [CompositeRotationSystem] Write CompositeRotation <= RotationPivotTranslation * RotationPivot * Rotation * PostRotation * RotationPivot^-1 +5. [TRSToLocalToWorldSystem] Write LocalToWorld <= Translation * CompositeRotation * CompositeScale + +![](images/sec4-5.png) + +--------------------------------------------- +Section 5: Hierarchical Transforms (Advanced) +--------------------------------------------- + +Note: Advanced Hierarchical transform component rules largely mirror the use of the non-hierarchical components, except that they are writing to LocalToParent (instead of LocalToWorld.) The main additional component unique to hierarchical transforms is ParentScaleInverse. + +----- + +NonUniformScale (float3) as an alternative to Scale to specify scale per-axis. Note that not all DOTS features fully support non-uniform scale. Be sure to check those features’ documentation to understand their limitations. + +- [TRSToLocalToParentSystem] LocalToParent <= Translation +- [TRSToLocalToParentSystem] LocalToParent <= Translation * Rotation +- [TRSToLocalToParentSystem] LocalToParent <= Translation * Rotation * NonUniformScale +- [TRSToLocalToParentSystem] LocalToParent <= Rotation +- [TRSToLocalToParentSystem] LocalToParent <= Rotation * NonUniformScale +- [TRSToLocalToParentSystem] LocalToParent <= NonUniformScale + +The presence of both Scale and NonUniform scale is not a valid case, but the result is defined. Scale will be used, NonUniformScale will be ignored. + +e.g. If the following components are present... + +| Parent (Entity) | Child (Entity) | +| --------------- | ---------------- | +| LocalToWorld | LocalToWorld | +| Translation | LocalToParent | +| Rotation | Parent | +| Scale | PreviousParent* | +| Child* | Translation | +| | Rotation | +| | NonUniformScale | + +...then the transform system will: + +1. [TRSToLocalToWorldSystem] Parent: Write LocalToWorld as defined above in "Non-hierarchical Transforms (Basic)" +2. [TRSToLocalToParentSystem] Child: Write LocalToParent <= Translation * Rotation * NonUniformScale +3. [LocalToParentSystem] Child: Write LocalToWorld <= LocalToWorld[Parent] * LocalToParent + +![](images/sec5-1.png) + +Parent LocalToWorld is multiplied with the Child LocalToWorld, which includes any scaling. However, if removing Parent scale is preferred (AKA Scale Compensate), ParentScaleInverse is available for that purpose. + +- [TRSToLocalToParentSystem] LocalToParent <= ParentScaleInverse +- [TRSToLocalToParentSystem] LocalToParent <= Translation * ParentScaleInverse +- [TRSToLocalToParentSystem] LocalToParent <= Translation * ParentScaleInverse * Rotation +- [TRSToLocalToParentSystem] LocalToParent <= Translation * ParentScaleInverse * Rotation * NonUniformScale +- [TRSToLocalToParentSystem] LocalToParent <= Translation * ParentScaleInverse * CompositeRotation +- [TRSToLocalToParentSystem] LocalToParent <= Translation * ParentScaleInverse * CompositeRotation * NonUniformScale +- [TRSToLocalToParentSystem] LocalToParent <= Translation * ParentScaleInverse * Rotation * Scale +- [TRSToLocalToParentSystem] LocalToParent <= Translation * ParentScaleInverse * CompositeRotation * Scale +- [TRSToLocalToParentSystem] LocalToParent <= Translation * ParentScaleInverse * Rotation * CompositeScale +- [TRSToLocalToParentSystem] LocalToParent <= Translation * ParentScaleInverse * CompositeRotation * CompositeScale +- [TRSToLocalToParentSystem] LocalToParent <= ParentScaleInverse * Rotation +- [TRSToLocalToParentSystem] LocalToParent <= ParentScaleInverse * Rotation * NonUniformScale +- [TRSToLocalToParentSystem] LocalToParent <= ParentScaleInverse * CompositeRotation * NonUniformScale +- [TRSToLocalToParentSystem] LocalToParent <= ParentScaleInverse * Rotation * Scale +- [TRSToLocalToParentSystem] LocalToParent <= ParentScaleInverse * CompositeRotation +- [TRSToLocalToParentSystem] LocalToParent <= ParentScaleInverse * CompositeRotation * Scale +- [TRSToLocalToParentSystem] LocalToParent <= ParentScaleInverse * Rotation * CompositeScale +- [TRSToLocalToParentSystem] LocalToParent <= ParentScaleInverse * CompositeRotation * CompositeScale + +Inverse of any explicitly assigned parent scale values if present are written to ParentScaleInverse, as: + +- [ParentScaleInverseSystem] ParentScaleInverse <= CompositeScale[Parent]^-1 +- [ParentScaleInverseSystem] ParentScaleInverse <= Scale[Parent]^-1 +- [ParentScaleInverseSystem] ParentScaleInverse <= NonUniformScale[Parent]^-1 + +If LocalToWorld[Parent] is written directly by the user, or scaling is otherwise applied in a way that is not explicitly using the scale components, then nothing is written to the ParentScaleInverse. It is the responsibility of the system applying that scaling to write inverse to ParentScaleInverse. The results of a system not updating ParentScaleInverse in this case are undefined. + +e.g. If the following components are present... + +| Parent (Entity) | Child (Entity) | +| --------------- | ------------------ | +| LocalToWorld | LocalToWorld | +| Translation | LocalToParent | +| Rotation | Parent | +| Scale | PreviousParent* | +| Child* | Translation | +| | Rotation | +| | ParentScaleInverse | + +...then the transform system will: + +1. [TRSToLocalToWorldSystem] Parent: Write LocalToWorld as defined above in "Non-hierarchical Transforms (Basic)" +2. [ParentScaleInverseSystem] Child: ParentScaleInverse <= Scale[Parent]^-1 +3. [TRSToLocalToParentSystem] Child: Write LocalToParent <= Translation * ParentScaleInverse * Rotation +4. [LocalToParentSystem] Child: Write LocalToWorld <= LocalToWorld[Parent] * LocalToParent + +![](images/sec5-2.png) + +The Rotation component may be written to directly as a quaternion by user code. However, if an Euler interface is preferred, components are available for each rotation order which will cause a write to the Rotation component if present. + +- [RotationEulerSystem] Rotation <= RotationEulerXYZ +- [RotationEulerSystem] Rotation <= RotationEulerXZY +- [RotationEulerSystem] Rotation <= RotationEulerYXZ +- [RotationEulerSystem] Rotation <= RotationEulerYZX +- [RotationEulerSystem] Rotation <= RotationEulerZXY +- [RotationEulerSystem] Rotation <= RotationEulerZYX + +e.g. If the following components are present... + +| Parent (Entity) | Child (Entity) | +| --------------- | ---------------- | +| LocalToWorld | LocalToWorld | +| Translation | LocalToParent | +| Rotation | Parent | +| Scale | PreviousParent* | +| Child* | Translation | +| | Rotation | +| | RotationEulerXYZ | + +...then the transform system will: + +1. [TRSToLocalToWorldSystem] Parent: Write LocalToWorld as defined above in "Non-hierarchical Transforms (Basic)" +2. [RotationEulerSystem] Child: Write Rotation <= RotationEulerXYZ +3. [TRSToLocalToParentSystem] Child: Write LocalToParent <= Translation * Rotation +4. [LocalToParentSystem] Child: Write LocalToWorld <= LocalToWorld[Parent] * LocalToParent + +![](images/sec5-3.png) + +For more complex Rotation requirements, a CompositeRotation (float4x4) component may be used as an alternative to Rotation. + +All of the combinations which are valid for Rotation are also valid for CompositeRotation. i.e. + +- [TRSToLocalToParentSystem] LocalToParent <= Translation * CompositeRotation +- [TRSToLocalToParentSystem] LocalToParent <= Translation * CompositeRotation * Scale +- [TRSToLocalToParentSystem] LocalToParent <= Translation * CompositeRotation * NonUniformScale +- [TRSToLocalToParentSystem] LocalToParent <= Translation * CompositeRotation * CompositeScale +- [TRSToLocalToParentSystem] LocalToParent <= Translation * ParentScaleInverse * CompositeRotation +- [TRSToLocalToParentSystem] LocalToParent <= Translation * ParentScaleInverse * CompositeRotation * Scale +- [TRSToLocalToParentSystem] LocalToParent <= Translation * ParentScaleInverse * CompositeRotation * NonUniformScale +- [TRSToLocalToParentSystem] LocalToParent <= Translation * ParentScaleInverse * CompositeRotation * CompositeScale +- [TRSToLocalToParentSystem] LocalToParent <= ParentScaleInverse * CompositeRotation +- [TRSToLocalToParentSystem] LocalToParent <= ParentScaleInverse * CompositeRotation * Scale +- [TRSToLocalToParentSystem] LocalToParent <= ParentScaleInverse * CompositeRotation * NonUniformScale +- [TRSToLocalToParentSystem] LocalToParent <= ParentScaleInverse * CompositeRotation * CompositeScale +- [TRSToLocalToParentSystem] LocalToParent <= CompositeRotation +- [TRSToLocalToParentSystem] LocalToParent <= CompositeRotation * Scale +- [TRSToLocalToParentSystem] LocalToParent <= CompositeRotation * NonUniformScale +- [TRSToLocalToParentSystem] LocalToParent <= CompositeRotation * CompositeScale + +The CompositeRotation component may be written to directly as a float4x4 by user code. However, if a Maya/FBX-style interface is preferred, components are available which will write to the CompositeRotation component if present. + +CompositeRotation = RotationPivotTranslation * RotationPivot * Rotation * PostRotation * RotationPivot^-1 + +If any combination of RotationPivotTranslation (float3), RotationPivot (float3), Rotation (quaternion), or PostRotation (quaternion) components are present along with a CompositeRotation component, a transform system will combine those components and write to CompositeRotation. + +Concretely, each of these component combinations will write to CompositeRotation as: + +- [CompositeRotationSystem] CompositeRotation <= RotationPivotTranslation +- [CompositeRotationSystem] CompositeRotation <= RotationPivotTranslation * RotationPivot * Rotation * RotationPivot^-1 +- [CompositeRotationSystem] CompositeRotation <= RotationPivotTranslation * RotationPivot * Rotation * PostRotation * RotationPivot^-1 +- [CompositeRotationSystem] CompositeRotation <= RotationPivotTranslation * RotationPivot * PostRotation * RotationPivot^-1 +- [CompositeRotationSystem] CompositeRotation <= RotationPivotTranslation * Rotation +- [CompositeRotationSystem] CompositeRotation <= RotationPivotTranslation * Rotation * PostRotation +- [CompositeRotationSystem] CompositeRotation <= RotationPivotTranslation * PostRotation +- [CompositeRotationSystem] CompositeRotation <= RotationPivot * Rotation * RotationPivot^-1 +- [CompositeRotationSystem] CompositeRotation <= RotationPivot * Rotation * PostRotation * RotationPivot^-1 +- [CompositeRotationSystem] CompositeRotation <= PostRotation +- [CompositeRotationSystem] CompositeRotation <= Rotation +- [CompositeRotationSystem] CompositeRotation <= Rotation * PostRotation + +Cases where RotationPivot is specified without either of Rotation, PostRotation have no additional affect on CompositeRotation. + +Note that since Rotation is re-used as a source for CompositeRotation, the alternative data interfaces to Rotation are still available. + +e.g. If the following components are present... + +| Parent (Entity) | Child (Entity) | +| --------------- | ------------------------ | +| LocalToWorld | LocalToWorld | +| Translation | LocalToParent | +| Rotation | Parent | +| Scale | PreviousParent* | +| Child* | Translation | +| | CompositeRotation | +| | Rotation | +| | RotationPivotTranslation | +| | RotationPivot | +| | PostRotation | +| | RotationEulerXYZ | +| | Scale | + +...then the transform system will: + +1. [TRSToLocalToWorldSystem] Parent: Write LocalToWorld as defined above in "Non-hierarchical Transforms (Basic)" +2. [RotationEulerSystem] Child: Write Rotation <= RotationEulerXYZ +3. [CompositeRotationSystem] Child: Wirte CompositeRotation <= RotationPivotTranslation * RotationPivot * Rotation * PostRotation * RotationPivot^-1 +4. [TRSToLocalToParentSystem] Child: Write LocalToParent <= Translation * CompositeRotation * Scale +5. [LocalToParentSystem] Child: Write LocalToWorld <= LocalToWorld[Parent] * LocalToParent + +![](images/sec5-4.png) + +The PostRotation component may be written to directly as a quaternion by user code. However, if an Euler interface is preferred, components are available for each rotation order which will cause a write to the PostRotation component if present. + +- [PostRotationEulerSystem] PostRotation <= PostRotationEulerXYZ +- [PostRotationEulerSystem] PostRotation <= PostRotationEulerXZY +- [PostRotationEulerSystem] PostRotation <= PostRotationEulerYXZ +- [PostRotationEulerSystem] PostRotation <= PostRotationEulerYZX +- [PostRotationEulerSystem] PostRotation <= PostRotationEulerZXY +- [PostRotationEulerSystem] PostRotation <= PostRotationEulerZYX + +e.g. If the following components are present... + +| Parent (Entity) | Child (Entity) | +| --------------- | ------------------------ | +| LocalToWorld | LocalToWorld | +| Translation | LocalToParent | +| Rotation | Parent | +| Scale | PreviousParent* | +| Child* | Translation | +| | CompositeRotation | +| | Rotation | +| | RotationPivotTranslation | +| | RotationPivot | +| | PostRotation | +| | RotationEulerXYZ | +| | Scale | +| | PostRotationEulerXYZ | + +...then the transform system will: + +1. [TRSToLocalToWorldSystem] Parent: Write LocalToWorld as defined above in "Non-hierarchical Transforms (Basic)" +2. [PostRotationEulerSystem] Child: Write PostRotation <= PostRotationEulerXYZ +3. [RotationEulerSystem] Child: Write Rotation <= RotationEulerXYZ +4. [CompositeRotationSystem] Child: Wirte CompositeRotation <= RotationPivotTranslation * RotationPivot * Rotation * PostRotation * RotationPivot^-1 +5. [TRSToLocalToParentSystem] Child: Write LocalToParent <= Translation * CompositeRotation * Scale +6. [LocalToParentSystem] Child: Write LocalToWorld <= LocalToWorld[Parent] * LocalToParent + +![](images/sec5-5.png) + +It is a setup error to have more than one PostRotationEuler*** component is associated with the same Entity, however the result is defined. The first to be found in the order of precedence will be applied. That order is: + +1. PostRotationEulerXYZ +2. PostRotationEulerXZY +3. PostRotationEulerYXZ +4. PostRotationEulerYZX +5. PostRotationEulerZXY +6. PostRotationEulerZYX + +For more complex Scale requirements, a CompositeScale (float4x4) component may be used as an alternative to Scale (or NonUniformScale). + +All of the combinations which are valid for Scale or NonUniformScale are also valid for CompositeScale. i.e. + +- [TRSToLocalToParentSystem] LocalToParent <= Translation * Rotation * CompositeScale +- [TRSToLocalToParentSystem] LocalToParent <= Rotation * CompositeScale +- [TRSToLocalToParentSystem] LocalToParent <= CompositeScale +- [TRSToLocalToParentSystem] LocalToParent <= Translation * CompositeRotation * CompositeScale +- [TRSToLocalToParentSystem] LocalToParent <= CompositeRotation * CompositeScale +- [TRSToLocalToParentSystem] LocalToParent <= Translation * ParentScaleInverse * Rotation * CompositeScale +- [TRSToLocalToParentSystem] LocalToParent <= Translation * ParentScaleInverse * CompositeRotation * CompositeScale +- [TRSToLocalToParentSystem] LocalToParent <= ParentScaleInverse * Rotation * CompositeScale +- [TRSToLocalToParentSystem] LocalToParent <= ParentScaleInverse * CompositeRotation * CompositeScale +- [TRSToLocalToParentSystem] LocalToParent <= ParentScaleInverse * CompositeScale + +The CompositeScale component may be written to directly as a float4x4 by user code. However, if a Maya/FBX-style interface is preferred, components are available which will write to the CompositeScale component if present. + +CompositeScale = ScalePivotTranslation * ScalePivot * Scale * ScalePivot^-1 +CompositeScale = ScalePivotTranslation * ScalePivot * NonUniformScale * ScalePivot^-1 + +If any combination of ScalePivotTranslation (float3), ScalePivot (float3), Scale (float) components are present along with a CompositeScale component, a transform system will combine those components and write to CompositeScale. + +Alternatively, if any combination of ScalePivotTranslation (float3), ScalePivot (float3), NonUniformScale (float3) components are present along with a CompositeScale component, a transform system will combine those components and write to CompositeScale. + +Concretely, each of these component combinations will write to CompositeRotation as: + +- [CompositeScaleSystem] CompositeScale <= ScalePivotTranslation +- [CompositeScaleSystem] CompositeScale <= ScalePivotTranslation * ScalePivot * Scale * ScalePivot^-1 +- [CompositeScaleSystem] CompositeScale <= ScalePivotTranslation * Scale +- [CompositeScaleSystem] CompositeScale <= ScalePivot * Scale * ScalePivot^-1 +- [CompositeScaleSystem] CompositeScale <= Scale +- [CompositeScaleSystem] CompositeScale <= ScalePivotTranslation * ScalePivot * NonUniformScale * ScalePivot^-1 +- [CompositeScaleSystem] CompositeScale <= ScalePivotTranslation * Scale +- [CompositeScaleSystem] CompositeScale <= ScalePivot * NonUniformScale * ScalePivot^-1 +- [CompositeScaleSystem] CompositeScale <= NonUniformScale + +Cases where ScalePivot is specified without either of Scale, NonUniformScale have no additional effect have no additional affect on CompositeScale. + +e.g. If the following components are present... + +| Parent (Entity) | Child (Entity) | +| --------------- | ------------------------ | +| LocalToWorld | LocalToWorld | +| Translation | LocalToParent | +| Rotation | Parent | +| Scale | PreviousParent* | +| Child* | Translation | +| | CompositeRotation | +| | Rotation | +| | RotationPivotTranslation | +| | RotationPivot | +| | PostRotation | +| | RotationEulerXYZ | +| | Scale | +| | PostRotationEulerXYZ | +| | CompositeScale | +| | ScalePivotTranslation | +| | ScalePivot | + +...then the transform system will: + +1. [TRSToLocalToWorldSystem] Parent: Write LocalToWorld as defined above in "Non-hierarchical Transforms (Basic)" +2. [PostRotationEulerSystem] Child: Write PostRotation <= PostRotationEulerXYZ +2. [RotationEulerSystem] Child: Write Rotation <= RotationEulerXYZ +3. [CompositeRotationSystem] Child: Wirte CompositeRotation <= RotationPivotTranslation * RotationPivot * Rotation * PostRotation * RotationPivot^-1 +4. [TRSToLocalToParentSystem] Child: Write LocalToParent <= Translation * CompositeRotation * Scale +5. [LocalToParentSystem] Child: Write LocalToWorld <= LocalToWorld[Parent] * LocalToParent + +![](images/sec5-6.png) + +...then the transform system will: + +1. [TRSToLocalToWorldSystem] Parent: Write LocalToWorld as defined above in "Non-hierarchical Transforms (Basic)" +2. [PostRotationEulerSystem] Child: Write PostRotation <= PostRotationEulerXYZ +3. [RotationEulerSystem] Child: Write Rotation <= RotationEulerXYZ +4. [CompositeScaleSystem] Child: Write CompositeScale <= ScalePivotTranslation * ScalePivot * Scale * ScalePivot^-1 +5. [CompositeRotationSystem] Child: Wirte CompositeRotation <= RotationPivotTranslation * RotationPivot * Rotation * PostRotation * RotationPivot^-1 +6. [TRSToLocalToParentSystem] Child: Write LocalToParent <= Translation * CompositeRotation * Scale +7. [LocalToParentSystem] Child: Write LocalToWorld <= LocalToWorld[Parent] * LocalToParent + +![](images/sec5-7.png) + +--------------------------------------- +Section 6: Custom Transforms (Advanced) +--------------------------------------- + +There are two methods for writing user-defined transforms that are fully compatible with the transform system. + +1. Overriding transform components +2. Extending transform components + +Overriding transform components +------------------------------- + +A user component (UserComponent) is defined and added to the LocalToWorld WriteGroup, as in: + +[Serializable] +[WriteGroup(typeof(LocalToWorld))] +struct UserComponent : IComponentData +{ +} + +Overriding transform components means that no additional extensions are possible. The user defined transform is the only transform that can occur with the specified user component. + +In the UserTransformSystem, use the default query method to request write access to LocalToWorld. + +e.g. + + public class UserTransformSystem : JobComponentSystem + { + [BurstCompile] + struct UserTransform : IJobForEach + { + public void Execute(ref LocalToWorld localToWorld, [ReadOnly] ref UserComponent userComponent) + { + localToWorld.Value = ... // Assign localToWorld as needed for UserTransform + } + } + + protected override JobHandle OnUpdate(JobHandle inputDependencies) + { + var job = new UserTransform() + { + }; + return job.Schedule(this, inputDependencies); + } + } + +All other transform components which write to LocalToWorld will be ignored by the transform system where UserComponent is included. + +e.g. +If the following components are present... + +| (Entity) | +| --------------| +| LocalToWorld | +| Translation | +| Rotation | +| Scale | +| UserComponent | + +...then: + +- [TRSToLocalToWorldSystem] Will not run on this Entity +- [UserTransformSystem] Will run on this Entity + +However, unexpected behavior may result if two different systems both override LocalToWorld and both components are present. e.g. + +e.g. If there is an additional: + + [Serializable] + [WriteGroup(typeof(LocalToWorld))] + struct UserComponent2 : IComponentData + { + } + +And the equivalent system: + + public class UserTransformSystem2 : JobComponentSystem + { + [BurstCompile] + struct UserTransform2 : IJobForEach + { + public void Execute(ref LocalToWorld localToWorld, [ReadOnly] ref UserComponent2 userComponent2) + { + localToWorld.Value = ... // Assign localToWorld as needed for UserTransform + } + } + + protected override JobHandle OnUpdate(JobHandle inputDependencies) + { + var job = new UserTransform() + { + }; + return job.Schedule(this, inputDependencies); + } + } + +Then if the following components are present... + +| (Entity) | +| -------------- | +| LocalToWorld | +| Translation | +| Rotation | +| Scale | +| UserComponent | +| UserComponent2 | + +Both systems will attempt to write to LocalToWorld, likely resulting in unexpected behavior. This may not be an issue in context. + + +Extending transform components +------------------------------ + +In order to ensure that multiple overridden transform components can interact in a way which is well-defined, a WriteGroup query can be used to only explicitly match the requested components. + +e.g. If there is a: + + [Serializable] + [WriteGroup(typeof(LocalToWorld))] + struct UserComponent : IComponentData + { + } + +And a system which filters based on the WriteGroup of LocalToWorld: + + public class UserTransformSystem : JobComponentSystem + { + private EntityQuery m_Query; + + protected override void OnCreate() + { + m_Query = GetEntityQuery(new EntityQueryDesc() + { + All = new ComponentType[] + { + ComponentType.ReadWrite(), + ComponentType.ReadOnly(), + }, + Options = EntityQueryDescOptions.FilterWriteGroup + }); + } + + [BurstCompile] + struct UserTransform : IJobForEach + { + public void Execute(ref LocalToWorld localToWorld, [ReadOnly] ref UserComponent userComponent) + { + localToWorld.Value = ... // Assign localToWorld as needed for UserTransform + } + } + + protected override JobHandle OnUpdate(JobHandle inputDependencies) + { + var job = new UserTransform() + { + }; + return job.ScheduleGroup(m_Query, inputDependencies); + } + } + +m_Query in UserTransformSystem will only match the explicitly mentioned components. + +For instance, the following with match and be included in the EntityQuery: + +| (Entity) | +| -------------- | +| LocalToWorld | +| UserComponent | + +But this will not: + +| (Entity) | +| -------------- | +| LocalToWorld | +| Translation | +| Rotation | +| Scale | +| UserComponent | + +The implicit expectation is that UserComponent is a completely orthogonal set of requirements to write to LocalToWorld, so no other (unstated) components which are in the same WriteGroup should be present. + +However, they may be explicitly supported by UserComponent systems by adding to the queries, as: + + public class UserTransformExtensionSystem : JobComponentSystem + { + private EntityQuery m_Query; + + protected override void OnCreate() + { + m_Query = GetEntityQuery(new EntityQueryDesc() + { + All = new ComponentType[] + { + ComponentType.ReadWrite(), + ComponentType.ReadOnly(), + ComponentType.ReadOnly(), + ComponentType.ReadOnly(), + ComponentType.ReadOnly(), + }, + Options = EntityQueryDescOptions.FilterWriteGroup + }); + } + + [BurstCompile] + struct UserTransform : IJobForEach + { + public void Execute(ref LocalToWorld localToWorld, [ReadOnly] ref UserComponent userComponent, + [ReadOnly] ref Translation translation, + [ReadOnly] ref Rotation rotation, + [ReadOnly] ref Scale scale) + { + localToWorld.Value = ... // Assign localToWorld as needed for UserTransform + } + } + + protected override JobHandle OnUpdate(JobHandle inputDependencies) + { + var job = new UserTransform() + { + }; + return job.ScheduleGroup(m_Query, inputDependencies); + } + } + +In the same way, if there is an additional: + + [Serializable] + [WriteGroup(typeof(LocalToWorld))] + struct UserComponent2 : IComponentData + { + } + +And there is: + +| (Entity) | +| -------------- | +| LocalToWorld | +| UserComponent | +| UserComponent2 | + +The UserTransformSystem defined above would not match, since UserComponent2 is not explicitly mentioned and it is in the LocalToWorld WriteGroup. + +However, an explicit query can be created which can resolve the case and ensure the behavior is well defined. As in: + + public class UserTransformComboSystem : JobComponentSystem + { + private EntityQuery m_Query; + + protected override void OnCreate() + { + m_Query = GetEntityQuery(new EntityQueryDesc() + { + All = new ComponentType[] + { + ComponentType.ReadWrite(), + ComponentType.ReadOnly(), + ComponentType.ReadOnly(), + }, + Options = EntityQueryDescOptions.FilterWriteGroup + }); + } + + [BurstCompile] + struct UserTransform : IJobForEach + { + public void Execute(ref LocalToWorld localToWorld, + [ReadOnly] ref UserComponent userComponent, + [ReadOnly] ref UserComponent2 userComponent2 + { + localToWorld.Value = ... // Assign localToWorld as needed for UserTransform + } + } + + protected override JobHandle OnUpdate(JobHandle inputDependencies) + { + var job = new UserTransform() + { + }; + return job.ScheduleGroup(m_Query, inputDependencies); + } + } + +Then the following systems (or equivalents): + - UserTransformSystem (LocalToWorld FilterWriteGroup:UserComponent) + - UserTransformSystem2 (LocalToWorld FilterWriteGroup:UserComponent2) + - UserTransformComboSystem (LocalToWorld FilterWriteGroup:UserComponent, UserComponent2) + +Will all run side-by-side, query and run on their respective component archetypes, and have well-defined behavior. + +----------------------------------------------- +Section 7: Relationship to Maya transform nodes +----------------------------------------------- + +For reference on Maya transform nodes, see: https://download.autodesk.com/us/maya/2010help/Nodes/transform.html + +Maya Transformation Matrix is defined as: +> matrix = SP^-1 * S * SH * SP * ST * RP^-1 * RA * R * RP * RT * T + +These can be mapped to transform components as follows: + +| Maya | Unity | +| -------------------------- | ------------------------- | +| T | Translation | +| (RT * RP * R * RA * RP^-1) | CompositeRotation | +| RT | RotationPivotTranslation | +| RP | RotationPivot | +| R | Rotation | +| RA | PostRotation | +| (ST * SP * S * SP^-1) | CompositeScale | +| ST | ScalePivotTranslation | +| SP | ScalePivot | +| SH | --- Unused --- | +| S | NonUniformScale | + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/version_numbers.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/version_numbers.md new file mode 100644 index 000000000..461a5a2c4 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/version_numbers.md @@ -0,0 +1,65 @@ +--- +uid: ecs-version-numbers +--- +# Version Numbers + +## Scope + +The purpose of version numbers (aka. generations) is the detection of potential changes. Amongst other things, they can be used to implement cheap and efficient optimization strategies, e.g. some processing might be skipped when the data it operates on is guaranteed not to have changed since last frame. + +It often happens that by performing a very quick conservative version check for a bunch of entities at once, significant performance gains can be easily obtained. + +This page lists and documents all the different version numbers used by ECS, in particular conditions that will cause them to change. + +## Preliminary Remarks + +All version numbers are 32 bits signed integers, they always increase unless they wrap around, signed integer overflow is defined behavior in C#. This means that comparing version numbers should be done using the (in)equality operator, not relational operators. + +The right way to check if VersionB is more recent than VersionA is: +`bool VersionBIsMoreRecent = (VersionB - VersionA) > 0;` + +There is usually no guarantee by how much a version number will increase. + +## EntityId.Version + +An `EntityId` is made of an index and a version number. Since indices are recycled, the version number is increased in `EntityManager` every time the entity is destroyed. If there is a mismatch in the version numbers when an `EntityId` is looked up in `EntityManager`, it means the entity referred to doesn’t exist anymore. + +> Before fetching the position of the enemy some unit is tracking via an EntityId, you can call `ComponentDataFromEntity.Exists` that uses the version number to check if the entity still exists. + +## World.Version + +The version number of a world is increased every time a manager (i.e. system) is created or destroyed. + +## EntityDataManager.GlobalVersion + +Is increased before every single (job) component system update. + +> The purpose of this version number is to be used in conjunction with `System.LastSystemVersion`. + +## System.LastSystemVersion + +Takes the value of `EntityDataManager.GlobalVersion` after every single (job) component system update. + +> The purpose of this version number is to be used in conjunction with `Chunk.ChangeVersion[]`. + +## Chunk.ChangeVersion + +For each component type in the archetype, this array contains the value of `EntityDataManager.GlobalVersion` at the time the component array was last accessed as writeable within this chunk. This in no way guarantees that anything has effectively changed, only that it could have potentially changed. + +Shared components can never be accessed as writeable, even if there is technically a version number stored for those too, it serves no purpose. + +When using the `[ChangedFilter]` attribute in an `IJobForEach`, the `Chunk.ChangeVersion` for that specific component is compared to `System.LastSystemVersion`, so only chunks whose component arrays have been accessed as writeable since after the system last started running will be processed. + +> If the amount of health points of a group of units is guaranteed not to have changed since the previous frame, checking if those units should update their damage model can be skipped altogether. + +## EntityManager.m_ComponentTypeOrderVersion[] + +For each non-shared component type, the version number is increased every time an iterator involving that type should become invalid. In other words, anything that might modify arrays of that type (not instances). + +> If we have static objects identified by a particular component, and a per-chunk bounding box, we know we only need to update those bounding boxes if the type order version changes for that component. + +## SharedComponentDataManager.m_SharedComponentVersion[] + +These version numbers increase when any structural change happens to the entities stored in a chunk referencing that shared component. + +> Imagine we keep a count of entities per shared component, we can rely on that version number to only redo each count if the corresponding version number changes. diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/world.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/world.md new file mode 100644 index 000000000..1eb5ba8b5 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Documentation~/world.md @@ -0,0 +1,18 @@ +--- +uid: ecs-world +--- +# World + +A `World` owns both an [EntityManager](xref:Unity.Entities.EntityManager) and a set of [ComponentSystems](component_system.md). You can create as many `World` objects as you like. Commonly you would create a simulation `World` and rendering or presentation `World`. + +By default we create a single `World` when entering __Play Mode__ and populate it with all available `ComponentSystem` objects in the project, but you can disable the default `World` creation and replace it with your own code via global defines. + +`#UNITY_DISABLE_AUTOMATIC_SYSTEM_BOOTSTRAP_RUNTIME_WORLD` disables generation of the default runtime world. + +`#UNITY_DISABLE_AUTOMATIC_SYSTEM_BOOTSTRAP_EDITOR_WORLD` disables generation of the default editor world. + +`#UNITY_DISABLE_AUTOMATIC_SYSTEM_BOOTSTRAP` disables generation of both default worlds. + +- **Default World creation code** (see file: _Packages/com.unity.entities/Unity.Entities.Hybrid/Injection/DefaultWorldInitialization.cs_) +- **Automatic bootstrap entry point** (see file: _Packages/com.unity.entities/Unity.Entities.Hybrid/Injection/AutomaticWorldBootstrap.cs_) + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor.meta new file mode 100644 index 000000000..42dd0dda4 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f0f21eaba1f122546a6193cade21a738 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink.meta new file mode 100644 index 000000000..cbab52079 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 89270300a1061644fb91278d2e4b0bb0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons.meta new file mode 100644 index 000000000..335d507dc --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fe5d47006e6e7b14b93fdc37df4a67ae +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/Connected@2x.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/Connected@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..02b0fed6199dd5e936ba65bbe1d4f67243aa0958 GIT binary patch literal 681 zcmV;a0#^NrP)nx~eY&klh^HSb=Of}T3> zOc%CJMf}+Pw#Tv z-pLTKn!_sj^xf%oDqTubutU|_RZIYC}R-@ zbE-swAPO$h4xZFMR3*k)ECs9HWc)&X?zqWwLEsWXNT4L}`3=A{Jcl(=62e;77PMSj zGjRpvTze!Jd=TX>FQcTP$;he?xpzTzrAGl%HST0upb=_OzojpJM(1e}8VytzBy^^X zo5JGu5pIS0;towOC++P!z6l^gJSbSTAItlLw`R)0rh$2yns1+j$J*ga*nh>$JZd;L z2k*i?&^+OOjoWA8oBctP1ep1;QYT#19#_>)o@GR642+@K!YXHgwL3Dpc~5Y~nZ8R0 zH^}`jForzEMoh1!5qI-!M4;n#@h4_$ZW`n>^~Cj~vrVUIfdT~z{CE5TJHynmMD^Ju P00000NkvXXu0mjf)f+5! literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/Connected@2x.png.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/Connected@2x.png.meta new file mode 100644 index 000000000..b2a81951c --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/Connected@2x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: cc784809538520a4c8804e09435e88b8 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/ConnectionError@2x.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/ConnectionError@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7cdebfe00d197cd8b70ff9a2eb776d07f5525bd6 GIT binary patch literal 693 zcmV;m0!safP)F!K#-tSrAlpYP)^Wv14_Gqo*>Q%FpD;nP0|y<4QM5#(iExX2IdA~ z1F95z_-0~{?buGJVTXTGRmbyY-skskfSQ{B9f68monTi1BOx#q4Lo0afm>8SqB?y# zclf`J0B=x{zY$;wQJrSl!p#WI-B0XEiB9_cS`Yi?LBfa1u4yJijMBfA!g(lgvC*Ub zp9+|~!>hYraD{}U^2mkY2o7`5sbu`pR&!*-6}cM5mEfoW0`x#8ABHL!xqkprfIad8Wh;osnS9?vX3ZwjGCI7 bnhN{|o{`R#Ee8KwV@4X?&F<{ZH?!Z)oe&3k>5}0_tyXjKXhA#ue*a3OAeLr-fu2A| z5=^=PR;$%d`Ffld2%8&|$>dL=P{=?$m`BiNu~__t@&DqP#MTE8>@rOd8Pi0iQu%6G zR!f>QXxT)}X0z!m7K^q%zFaP^ZQK6a>-D~ieE>8XjTROMV$B6{ABbwTdVz|46lRGq zA0z>Z9YMWbZ-b1V#k%||@R8VZ95^!aaS`N3`YTll(9*NP(H+xKkr8^rw&t?a z?I4>4r|bhhpSdS1C6Q*&5cre2rdaa>YZO5@D#5cSumqZKWF=)K*5@3tVMkL}YrWU( zJ&~9aaG=LCevC-)L87cYG>=#M95`~OI3l~iJ+ zK;-lJZ`0}YM)!SeCp3zFMbUm!`N@q55mb`-AO}g5TMQaY^`BHrHvj+t07*qoM6N<$ Ef^54tL;wH) literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/Disconnected@2x.png.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/Disconnected@2x.png.meta new file mode 100644 index 000000000..51ab7eaa9 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/Disconnected@2x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 6cf33ed766c62af48b6a2f99560aaee3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLink.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLink.png new file mode 100644 index 0000000000000000000000000000000000000000..faf3e4c938bd508f7d10b4bac90b968660b3f0e9 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{!vdC$B+ufyMYIJ4=eDn9Ac1Eys4mF(xl{C zS>9UKRMwg|pYPYI0PSd@AlU>oCe^%4BT-M|_J63iE z+43A#J!0b>SD5zv&THYu?{Uj5)HMPtd@f(nH!Y35{vh*H=h7)%lY1F{N-8BDUC~#% zdco-vd<{?R`jTTsjw(Ja6V!Q_-SnbSU=f$Tn@;c?XHC=RrP;Zx_DQ<;3T~`lDUqCY v?kBJBavOg8j9;zu);KTzDcPp*zuo+HoqeIllx0Rh4>5SU`njxgN@xNA*+gz7 literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLink.png.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLink.png.meta new file mode 100644 index 000000000..d5ad5958c --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLink.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 0fff1784e1b8d394788c7f3945ffee38 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLink@2x.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLink@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b5d3e41ffe4d645a5186ac3b02dbef1787d008 GIT binary patch literal 379 zcmV->0fhdEP)xtX`p+SLuLk7QGsEragIn=OZ$At&rL=P7isN_``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBevPM#V@L(#)kz0A8w_|{gI~tFU#OIExpT-= z#^ty`#)G~d4PV~wa>>)DoyGXjc{ z3^MnQZ)@g=eCzBKlQHE`QA^-TZVQz$s=Jm~&6{=v+9Weqo(Ki|FnpW&eGy~|fQ YU$0QUET+7G6X*^GPgg&ebxsLQ0E44bBme*a literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLinkActive.png.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLinkActive.png.meta new file mode 100644 index 000000000..8b75fef94 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLinkActive.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 01794d5501cc415458a671364fc96d96 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLinkActive@2x.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/LiveLinkActive@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ebfcd5452262e4745c0b9abd90280059cf7137f7 GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?2=RS;(M3{v?36l5$8 za(7}_cTVOdki(Mh=F{Fa=?X=Up4GID-?2qq?X}F&Mw$Lf_)71ZoMWXA3Xa^l8g%A~)8UWGoHmnR z@rCY=d2qLJ!}7j*L-j8h<^BWuH*Bpt_ea5SoWwF ze0g=f{=mKOS@UOqNoTjP5eVSr@Y%p5eMah|gR{WK4GbNB&@Rk|n!_69AiTnRQapg)Vn;@fJqdJV%cmi^ag zG@S8x{C=_m?RMMVZnr~_u7)*Ouh;#gBF$#Ax8Lt=C~$YoTwn%hwOaQOzAz9@=)gk@ z5}FY1tC+P4&;fAqK&)|CgsBTFuV9fy1M6!HvMx^W`EdIzO*p~Q2~Qlb1l^xZCWEwp z>h*fpvaCnRry$c6(48lRW7KrQ37jWjhEOW7*=&44ljX7qmVw`WhZ#bu09g+=-tuK^ zV!05myK^H25MYj=p@`4UB%DxE?7M=%p&v{GDl(MkEamQDNF?2tZ6cBbaRofh&IY4G z^y>=1ol8NZ_S@`?kj4O-%pv7UrILrqC<~53v4QD3pb^+;58?8MEZL95ENH~S4Lcpr z7(+fPG6tyvT+@gzU8Go-Wdt=aOg3Kzsy3|*LiG1T-9}9GxI2wNyvYVe?ODaERA4k3 z#Sr|!m*l>gi6^+_GqI*JuCkt>&2iKOA92u2Y{gU^sX&STK$(I!0L2OgteX^$GVZ6H zZ&YL?N@zjeGwC5kW`Oy89#yN=C*12L6mc|yBXrW*bUJ-u2FP4y`P7IWMybL zm1$NFv@P9yg3xf&Z$VXOX1&a+`~VOmMvNH$8MsN2?OrDD@a-Bhm!kBfRD04$xn`g5 z&a;ZB6={cRAYRT_w(Cel2@B5GC&=1n;3RJhk<8Drw>7qiwJ0kDssqEK=*)ZLW~#le zSL=ejGnbp_9s?v{10<#eY5m?8FbrTjk_==QJ?;=!zbmDPatk;B zCN)gDY9Y2(7t*93e|&!LU1R_S=ju|HtfxROj~jPK@E4GOHLakf&Xx{G<7T=X3gCWs zR!T4q&0g}}pET0PA)@ZIB1f`Ye1R4R7ZHIMoLOJa)^7M!ZdH_i5hgTcL0LB+q|et0 ziV`3*p1}?nLb>sy$&1V&C}*h?MDPMoOb=yoy*=y+y5{7*wwiJ8n(<$Nty?2xueBs9 z>qwS<(9qmS(p0txN?RF;-HVr*PzsQtvP$?*glV>s@TTumtJWZUraoH4b>&oXvU7AnGt7_bvrEI$AapaikgI=o|hxb(@Dx(-<*g#Q5j<1u4_zRt!T?rT_o{07*qo IM6N<$f@B3F{{R30 literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_Connected@2x.png.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_Connected@2x.png.meta new file mode 100644 index 000000000..404af19c1 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_Connected@2x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 0b48d6e0871ebd144bba5c476199ecc0 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_ConnectionError@2x.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_ConnectionError@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7cdebfe00d197cd8b70ff9a2eb776d07f5525bd6 GIT binary patch literal 693 zcmV;m0!safP)F!K#-tSrAlpYP)^Wv14_Gqo*>Q%FpD;nP0|y<4QM5#(iExX2IdA~ z1F95z_-0~{?buGJVTXTGRmbyY-skskfSQ{B9f68monTi1BOx#q4Lo0afm>8SqB?y# zclf`J0B=x{zY$;wQJrSl!p#WI-B0XEiB9_cS`Yi?LBfa1u4yJijMBfA!g(lgvC*Ub zp9+|~!>hYraD{}U^2mkY2o7`5sbu`pR&!*-6}cM5mEfoW0`x#8ABHL!xqkprfIad8Wh;osnS9?vX3ZwjGCI7 bnhN{|oXz|;B;WFJoE32#jItS7zn9t30K@TC@Y#2!A`1bs%$eh4h z8{Lu|@y6!!=xnkb+N+$TiIa>ZHM&;0T>iW!C&(u4^&#k5UMiK!Sm+`kosjeGc59Jy z8l&%B`a0muCR;wZzySkMI08@=l$7X)mSwqoAwfVtJ_P|AHAJhXLXa)0uKuvNSS<1( zfK)1VRAO-`ykr>qI#cN&T(pr6g4@J3Jca-+lmG;sl){ZjdFn!)E&zZs%uiiY7g9dp z6c*@P)L2ME5V`~fz_a|u-tVKHFM<)rckXRAne5Tm*4xLQUKqQpY_X(QYGIgi& z@7QGy^SnV-``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{zXq0$B+uft3elen+ybUxtR@^at`QoPOxaq zd%$JYXw@Wb&?KGE(2}n{LGYI+)53jbYZa5Uj_BVzAFKEN-rjptCtPiwwM3(9?qiGF zmcC9La>qXgK3k`0bj*+AtN~AdJkyjQyTX8JPlZoSH}Tz^?^`*qy+ESROXkjO?=+^f z>^{@{pWJHIXI4I4;5$j>#qYXgE^k(~AJGnP7p%*c-}a=^W@i1QMH*QpuQK1wUc4?K zbm|7*gG|lqUZ1o0S{HLXe!(e5vspJ;Zf$!iu(LT`c1zG6hTR99_@gu}*8@Gr;OXk; Jvd$@?2>`rpb(H`B literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLink.png.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLink.png.meta new file mode 100644 index 000000000..d5a71dfe5 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLink.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: e076e7def95e5854da2873c7d05db25e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLink@2x.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLink@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f83808ca1f9d45ceae5573813379fa8378942561 GIT binary patch literal 393 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?2=RS;(M3{v?36l5$8 za(7}_cTVOdki(Mh=m7^ppH=?0=qnDMY;xCTN>JVenG1i|!Z>!W>?{;A`@ebPPgOPb3*T!QnANuj ziu|3B%3>?&X?&Qs$LJro;=XlDatn8PYqNd$uA*^Y->XvlY9HeQ>53OsygscQohxq| zERZxW3>3Mq;hU7@pYN1@K(b=4XGCb|iH(_3rU#jp-gS<>-frT{zs&64y@=|p1-Z9n z-S>4!@bt27*?pg7M#G=;>wSFJt_;YYy(gak!|LZ@e1752UkH`Ne!pc loGzL1dwS9JCj}O4eW4#BtEz=Jy#t0EgQu&X%Q~loCIDsioaX=l literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLink@2x.png.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLink@2x.png.meta new file mode 100644 index 000000000..15c5b523f --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLink@2x.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 39a7a17fa4d94bc46ba9819880346957 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkActive.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkActive.png new file mode 100644 index 0000000000000000000000000000000000000000..991c0cce42f4198373a65ae8094bfc6db60d0a77 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBeyyjAV@L(#)kzz98x%xb{0}pHJLcjo>n~ow zly*sT%jC9OoIIa8?G?=&ba<}U{A=C)L8#$P=!e7!zf2rNrSBZOmC7oum(z9hLDWQr zhx#J-mZ!Njxx6_V_v&!pwartGzF5SqapsQy!iABK7XQ;P@L6c@@aD{)Z^3a3n5x(9 aV(e;F)|vL<@*ki>7(8A5T-G@yGywp?yHv~o literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkActive.png.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkActive.png.meta new file mode 100644 index 000000000..7babfddfe --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkActive.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 79b611f3a6dfd2546af7ce44f64ec49f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkActive@2x.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkActive@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..687d0eb03786e47b12f9f12b31ceafe374c13af6 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?2=RS;(M3{v?36l5$8 za(7}_cTVOdki(Mh={xBD!5_@HCsIsIxib16RiNe$^i zcNb+%=iXy2@J(>f!i?*364RmtHznq5%6fmR{J@r-i#EPHa4?vuyPEB(p{gRQ17ijM zgEd#z|8H3Q?y8mf%T#uY3WXIiGY+ynT4?Ac&@0u{(ay{DLUH}gHR(k_hcbA&`njxg HN@xNAZ_r_v literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkActive@2x.png.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkActive@2x.png.meta new file mode 100644 index 000000000..910098029 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkActive@2x.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: a5d4c6d9a1e1b2443bbe27f3c6208d3b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkReset@2x.png b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkReset@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..afb6737bbf584b3a55d8a746f1628df7cf2a847d GIT binary patch literal 631 zcmV--0*L*IP)gNm=4Gp5OxL7L7;*_1(*s#2RIcZ9oXh0j)4k73FOQ#Z_rv=IlFj3BFVu| zLf%=%J8ynF7NS6bKZYf)L=;7pQmNFjEURYQ_54RyPyC z0dBcmo?z+asD>aiQi&`UiyjE6quBA3CIJ+ z%2o`yk2F*pjfO=(>^&k4J?w8%B{Djn&!bDm2^Pb6AP?Lk&m$NdUwS7=5+e8V!;oc# zSEYb*t{UI(_kNynLaWsxolr1gBmgghbWNV?Dp&`Z`>tR@OMtvbi#^er^2+f%HJ+Dq z76Eu)OV{u|5O*?8aCDn6>M7z{2w;VDUfY;H?S_EUnhW2 zZqxO0xpc)Hp{)VrYXuVL_2F>n;KAyGENB3w1&wpw(aPJbjy3|MtcY!KBOJ$hLoH3{ z2eG2l(GrkMV<~#5^1iqdG{6u=SBjx&OdE?3BUQb(hqBdJpwO!WjK;G`*GPaEBNYQF zQurcHB*=4wK1yW}8JWB%p6x-i~YB5$E|poq}Q2#y%CSry6fIo57{? zS(i+f1QP?!3}IbF&4?f|>xqtr!jd)bdtx;sq0UZB9g#y2-j4fa4c Rqm2Ln002ovPDHLkV1g{n2fzRT literal 0 HcmV?d00001 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkReset@2x.png.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkReset@2x.png.meta new file mode 100644 index 000000000..df0215caf --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/Icons/d_LiveLinkReset@2x.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 2cbf1e92fa2b5034a94439f1a49716aa +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss.meta new file mode 100644 index 000000000..133af7e26 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 283ee47717398b84682b54daea2275f5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown.uss b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown.uss new file mode 100644 index 000000000..d2affb9da --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown.uss @@ -0,0 +1,103 @@ +.live-link-connections-dropdown { + border-width: 1px; +} + +.live-link-connections-dropdown__all-connections-actions-section { + padding-top: 2px; + padding-bottom: 2px; + border-bottom-width: 1px; + border-top-width: 1px; +} + +.live-link-connections-dropdown__start-section { + padding-top: 2px; + padding-bottom: 2px; +} + +.live-link-connections-dropdown__label-button { + border-width: 0; + border-radius: 0; + flex-direction: row; + -unity-text-align: middle-left; + align-items: center; + background-color: rgba(0, 0, 0, 0); + margin: 0; + padding-left: 8px; + padding-right: 4px; + padding-top: 0px; + padding-bottom: 0px; + height: 20px; +} + +#live-link-connections-dropdown__EmptyMessage { + padding-left: 8px; + padding-right: 4px; + padding-top: 2px; + padding-bottom: 2px; + margin-top: 2px; + margin-bottom: 2px; +} + +#live-link-connections-dropdown__Groups { + padding-top: 2px; +} + +.live-link-connections-dropdown__groups__item { + margin-bottom: 2px; +} + +.live-link-connections-dropdown__groups__item__title { + flex-direction: row; + align-items: center; + padding-left: 8px; + padding-right: 4px; + height: 20px; + -unity-text-align: middle-left; +} + +.live-link-connections-dropdown__groups__item__title Label { + flex-grow: 1; + -unity-font-style: bold; + padding: 0; + margin-bottom: 0; +} + +.live-link-connections-dropdown__groups__item__title ToolbarMenu { + border-width: 0; + background-color: rgba(0, 0, 0, 0); + height: 16px; + width: 16px; +} + +.live-link-connections-dropdown__groups__item__title ToolbarMenu .unity-toolbar-menu__arrow { + background-image: none; +} + +.live-link-connections-dropdown__groups__item__device { + flex-direction: row; + align-items: center; + padding-left: 8px; + padding-right: 4px; + height: 20px; +} + +.live-link-connections-dropdown__groups__item__device Label { + flex-grow: 1; + padding-left: 4px; + padding-right: 8px; +} + +.live-link-connections-dropdown__groups__item__device Image { + width: 16px; + height: 16px; +} + +.live-link-connections-dropdown__icon-button { + width: 16px; + height: 16px; + margin: 0; + padding: 0; + border-width: 0; + border-radius: 0; + background-color: rgba(0, 0, 0, 0); +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown.uss.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown.uss.meta new file mode 100644 index 000000000..2ff67533d --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown.uss.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 606f6e333b4a3ff4fa8f4ab620c5d3ad +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} + disableValidation: 0 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown_dark.uss b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown_dark.uss new file mode 100644 index 000000000..6b1a49411 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown_dark.uss @@ -0,0 +1,44 @@ +.live-link-connections-dropdown { + border-color: #636363; +} + +.live-link-connections-dropdown__all-connections-actions-section { + border-color: #636363; +} + +.live-link-connections-dropdown__start-section { + border-color: #636363; +} + +.live-link-connections-dropdown__label-button:hover { + background-color: rgb(86, 86, 86); +} + +.live-link-connections-dropdown__icon-button:hover { + background-color: #606060; +} + +.live-link-connections-dropdown__groups__item__device__hover { + background-color: #444444; +} + +.live-link-connections-dropdown__groups__item__title ToolbarMenu { + background-image: resource('d__Menu'); +} + +.live-link-connections-dropdown__status--connected { background-image: url("../Icons/d_Connected@2x.png"); } +.live-link-connections-dropdown__status--error { background-image: url("../Icons/d_ConnectionError@2x.png"); } +.live-link-connections-dropdown__status--disabled { background-image: url("../Icons/d_Disconnected@2x.png"); } +.live-link-connections-dropdown__status--reseting { background-image: url("../Icons/d_LiveLinkReset@2x.png"); } + +.live-link-connections-dropdown__groups__item__device__disable-button { + background-image: url('../Icons/d_Disconnected@2x.png'); +} + +.live-link-connections-dropdown__groups__item__device__reset-button { + background-image: url('../Icons/d_LiveLinkReset@2x.png'); +} + +.live-link-connections-dropdown__groups__item__device__reset-when-disabled-button { + background-image: url('../Icons/d_LiveLinkReset@2x.png'); +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown_dark.uss.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown_dark.uss.meta new file mode 100644 index 000000000..d97f56410 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown_dark.uss.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c914196abebf7264d89806863991f479 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} + disableValidation: 0 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown_light.uss b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown_light.uss new file mode 100644 index 000000000..37010aabc --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown_light.uss @@ -0,0 +1,44 @@ +.live-link-connections-dropdown { + border-color: #636363; +} + +.live-link-connections-dropdown__all-connections-actions-section { + border-color: #636363; +} + +.live-link-connections-dropdown__start-section { + border-color: #636363; +} + +.live-link-connections-dropdown__groups__item__device__hover { + background-color: #d6d6d6; +} + +.live-link-connections-dropdown__label-button:hover { + background-color: #DFDFDF; +} + +.live-link-connections-dropdown__icon-button:hover { + background-color: #EFEFEF; +} + +.live-link-connections-dropdown__groups__item__title ToolbarMenu { + background-image: resource('_Menu'); +} + +.live-link-connections-dropdown__status--connected { background-image: url("../Icons/Connected@2x.png"); } +.live-link-connections-dropdown__status--error { background-image: url("../Icons/ConnectionError@2x.png"); } +.live-link-connections-dropdown__status--disabled { background-image: url("../Icons/Disconnected@2x.png"); } +.live-link-connections-dropdown__status--reseting { background-image: url("../Icons/LiveLinkReset@2x.png"); } + +.live-link-connections-dropdown__groups__item__device__disable-button { + background-image: url('../Icons/Disconnected@2x.png'); +} + +.live-link-connections-dropdown__groups__item__device__reset-button { + background-image: url('../Icons/LiveLinkReset@2x.png'); +} + +.live-link-connections-dropdown__groups__item__device__reset-when-disabled-button { + background-image: url('../Icons/LiveLinkReset@2x.png'); +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown_light.uss.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown_light.uss.meta new file mode 100644 index 000000000..77f7e76af --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/LiveLinkConnectionsDropdown_light.uss.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 778f4a83bd54da64fbce1b62c95446f8 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} + disableValidation: 0 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow.uss b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow.uss new file mode 100644 index 000000000..3f714dcfe --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow.uss @@ -0,0 +1,164 @@ +#start-live-link { + padding: 15px; + flex-shrink: 0; + flex-grow: 1; +} + +#start-live-link__header-title { + font-size: 20px; +} + +#start-live-link__body { + margin-top: 15px; + flex-grow: 1; + flex-basis: auto; + flex-direction: column; + flex-shrink: 0; +} + +#start-live-link__body__search { + margin: 0; + padding-left: 0; + width: auto; +} + +#start-live-link__body__empty-message { + margin-top: 10px; + border-left-width: 1px; + border-right-width: 1px; + border-top-width: 1px; + border-bottom-width: 1px; + min-height: 100px; + flex-grow: 1; + flex-shrink: 0; + padding: 5px; +} +#start-live-link__body__empty-message Label { + white-space: normal; +} + +#start-live-link__body__configurations-list { + margin-top: 10px; + border-left-width: 1px; + border-right-width: 1px; + border-top-width: 1px; + border-bottom-width: 1px; + flex-grow: 1; + flex-shrink: 0; + display: none; +} + +#start-live-link__body__new-build-button { + border-left-width: 1px; + border-right-width: 1px; + border-top-width: 0; + border-bottom-width: 1px; + border-radius: 0; + margin: 0; + padding: 3px 3px 4px 3px; + background-color: rgba(93, 93, 93, 0); + -unity-text-align: middle-left; + flex-direction: row; +} + +#start-live-link__body__new-build-button__icon { + width: 16px; + height: 16px; + margin-left: 2px; + margin-right: 2px; +} + +#start-live-link__build-message { + margin-top: 15px; + flex-direction: row-reverse; +} + +#start-live-link__footer { + margin-top: 15px; + flex-direction: row-reverse; +} + +#start-live-link__footer__start-button { + width: 110px; + border-radius: 4px; +} + +#start-live-link__footer__build-mode-container { + flex-shrink: 0; + width: 140px; +} + +.start-live-link__item-template { + flex-direction: row; +} + +.start-live-link__item-template Image { + width: 16px; + height: 16px; +} + +.start-live-link__item-template__device-icon { + margin: 2px 1px 2px 2px; +} + +.start-live-link__item-template__error-icon { + margin: 2px; +} + +.start-live-link__item-template Label { + flex: 1; + -unity-text-align: middle-left; +} + +#start-live-link__message { + margin-top: 10px; + border-radius: 3px; + border-width: 1px; + flex-direction: row; + padding: 3px 5px; +} + +#start-live-link__message Image { + margin: 0; + width: 32px; + height: 32px; + flex-shrink: 0; +} + +#start-live-link__message Label { + flex-shrink: 1; + white-space: normal; + -unity-text-align: middle-left; +} + +#start-live-link__new-build-name { + flex-direction: row; + border-left-width: 1px; + border-right-width: 1px; + border-top-width: 0; + border-bottom-width: 1px; + margin: 0; + padding: 3px; + -unity-text-align: middle-left; +} + +#start-live-link__new-build-name TextField { + flex-grow: 1; + padding: 0; + margin: 0; +} + +#start-live-link__new-build-name__submit { + margin: 0 0 0 3px; +} +#start-live-link__new-build-name__cancel { + margin: 0; +} + +#start-live-link__new-build-name Button { + width: 16px; + height: 16px; + border-width: 0; + padding: 0; + background-color: rgba(0,0,0,0); +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow.uss.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow.uss.meta new file mode 100644 index 000000000..eca4e2edf --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow.uss.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4643d5fd547f13a499e796851acc9d81 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} + disableValidation: 0 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow_dark.uss b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow_dark.uss new file mode 100644 index 000000000..5be3042b5 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow_dark.uss @@ -0,0 +1,75 @@ + +#start-live-link__body__configurations-list { + border-color: #232323; +} + +#start-live-link__body__empty-message { + border-color: #232323; +} + +#start-live-link__body__new-build-button { + border-color: #232323; +} +#start-live-link__body__new-build-button:hover { + background-color: rgb(86, 86, 86); +} + +#start-live-link__body__new-build-button__icon { + background-image: resource('d_Toolbar Plus'); +} + +.start-live-link__item-template__error-icon { + background-image: resource("d_console.erroricon.png"); +} + +#start-live-link__footer__start-button { + background-color: #4271AD; + color: #EEEEEE; + border-top-color: #3B659B; + border-left-color: #3B659B; + border-right-color: #3B659B; + border-bottom-color: #223A59; +} +#start-live-link__footer__start-button:hover { + background-color: #4678B9; +} +#start-live-link__footer__start-button:active { + background-color: #416EAA; +} + +.start-live-link__item-template__icon-noTarget { background-image: resource("d_BuildSettings.Standalone.png"); } +.start-live-link__item-template__icon-windows { background-image: resource("d_BuildSettings.Metro.png"); } +.start-live-link__item-template__icon-xboxOne { background-image: resource("d_BuildSettings.XboxOne.png"); } +.start-live-link__item-template__icon-standalone { background-image: resource("d_BuildSettings.Standalone.png"); } +.start-live-link__item-template__icon-iOS { background-image: resource("d_BuildSettings.iPhone.png"); } +.start-live-link__item-template__icon-android { background-image: resource("d_BuildSettings.Android.png"); } +.start-live-link__item-template__icon-webGL { background-image: resource("d_BuildSettings.WebGL.png"); } +.start-live-link__item-template__icon-ps4 { background-image: resource("d_BuildSettings.PS4.png"); } +.start-live-link__item-template__icon-tvOS { background-image: resource("d_BuildSettings.tvOS.png"); } +.start-live-link__item-template__icon-switch { background-image: resource("d_BuildSettings.Switch.png"); } +.start-live-link__item-template__icon-lumin { background-image: resource("d_BuildSettings.Lumin.png"); } +.start-live-link__item-template__icon-stadia { background-image: resource("d_BuildSettings.Stadia.png"); } + +#start-live-link__message { + border-color: #232323; +} + +.start-live-link__message__icon-error { + background-image: resource("d_console.erroricon@2x.png"); +} +.start-live-link__message__icon-info { + background-image: resource("d_console.infoicon@2x.png"); +} +#start-live-link__new-build-name { + border-color: #232323; + } + +#start-live-link__new-build-name__cancel { + background-image: resource("d_winbtn_win_close.png"); +} +#start-live-link__new-build-name__submit { + background-image: resource("d_Toolbar Plus"); +} +#start-live-link__new-build-name Button:hover { + background-color: rgb(86, 86, 86); +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow_dark.uss.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow_dark.uss.meta new file mode 100644 index 000000000..fcb5c432c --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow_dark.uss.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89f0f0669a0907d4bbafdda7cfdc63c6 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} + disableValidation: 0 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow_light.uss b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow_light.uss new file mode 100644 index 000000000..39a32de2f --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow_light.uss @@ -0,0 +1,74 @@ + +#start-live-link__body__configurations-list { + border-color: #A9A9A9; +} + +#start-live-link__body__empty-message { + border-color: #A9A9A9; +} + +#start-live-link__body__new-build-button { + border-color: #A9A9A9; +} +#start-live-link__body__new-build-button:hover { + background-color: #DFDFDF; +} + +#start-live-link__body__new-build-button__icon { + background-image: resource('Toolbar Plus'); +} + +.start-live-link__item-template__error-icon { + background-image: resource("console.erroricon.png"); +} + +#start-live-link__footer__start-button { + background-color: #4672AB; + color: #EEEEEE; + border-top-color: #3E6599; + border-left-color: #3E6599; + border-right-color: #3E6599; + border-bottom-color: #294465; +} +#start-live-link__footer__start-button:hover { + background-color: #4E7BB6; +} +#start-live-link__footer__start-button:active { + background-color: #446FA6; +} + +.start-live-link__item-template__icon-noTarget { background-image: resource("BuildSettings.Standalone.png"); } +.start-live-link__item-template__icon-windows { background-image: resource("BuildSettings.Metro.png"); } +.start-live-link__item-template__icon-xboxOne { background-image: resource("BuildSettings.XboxOne.png"); } +.start-live-link__item-template__icon-standalone { background-image: resource("BuildSettings.Standalone.png"); } +.start-live-link__item-template__icon-iOS { background-image: resource("BuildSettings.iPhone.png"); } +.start-live-link__item-template__icon-android { background-image: resource("BuildSettings.Android.png"); } +.start-live-link__item-template__icon-webGL { background-image: resource("BuildSettings.WebGL.png"); } +.start-live-link__item-template__icon-ps4 { background-image: resource("BuildSettings.PS4.png"); } +.start-live-link__item-template__icon-tvOS { background-image: resource("BuildSettings.tvOS.png"); } +.start-live-link__item-template__icon-switch { background-image: resource("BuildSettings.Switch.png"); } +.start-live-link__item-template__icon-lumin { background-image: resource("BuildSettings.Lumin.png"); } +.start-live-link__item-template__icon-stadia { background-image: resource("BuildSettings.Stadia.png"); } + +#start-live-link__message { + border-color: #A9A9A9; +} + +.start-live-link__message__icon-error { + background-image: resource("console.erroricon@2x.png"); +} +.start-live-link__message__icon-info { + background-image: resource("console.infoicon@2x.png"); +} +#start-live-link__new-build-name { + border-color: #A9A9A9; +} +#start-live-link__new-build-name__cancel { + background-image: resource("winbtn_win_close.png"); +} +#start-live-link__new-build-name__submit { + background-image: resource("Toolbar Plus"); +} +#start-live-link__new-build-name Button:hover { + background-color: #DFDFDF; +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow_light.uss.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow_light.uss.meta new file mode 100644 index 000000000..18ed0840e --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uss/StartLiveLinkWindow_light.uss.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 348cdd2a060ae1740b9d5463e13fdb07 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} + disableValidation: 0 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml.meta new file mode 100644 index 000000000..d7fbd4aeb --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 22ef28789e01dcb46ad26bdf0bc6c0a7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.GroupItemTemplate.uxml b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.GroupItemTemplate.uxml new file mode 100644 index 000000000..2cc668940 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.GroupItemTemplate.uxml @@ -0,0 +1,9 @@ + + + + + + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.GroupItemTemplate.uxml.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.GroupItemTemplate.uxml.meta new file mode 100644 index 000000000..6a3c50205 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.GroupItemTemplate.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1363105fe896cf24c905db74775d28f3 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.GroupTemplate.uxml b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.GroupTemplate.uxml new file mode 100644 index 000000000..4137b76aa --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.GroupTemplate.uxml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.GroupTemplate.uxml.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.GroupTemplate.uxml.meta new file mode 100644 index 000000000..e9d3df366 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.GroupTemplate.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8787935a01b8247469c5d909bbe90d93 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.uxml b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.uxml new file mode 100644 index 000000000..6a73ca806 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.uxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.uxml.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.uxml.meta new file mode 100644 index 000000000..2d707564e --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/LiveLinkConnectionsDropdown.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 613b0664925065744af2335a50a7215d +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/StartLiveLinkWindow.ListViewItemTemplate.uxml b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/StartLiveLinkWindow.ListViewItemTemplate.uxml new file mode 100644 index 000000000..62884598e --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/StartLiveLinkWindow.ListViewItemTemplate.uxml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/StartLiveLinkWindow.ListViewItemTemplate.uxml.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/StartLiveLinkWindow.ListViewItemTemplate.uxml.meta new file mode 100644 index 000000000..1853badce --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/StartLiveLinkWindow.ListViewItemTemplate.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d69dc6c76f1ab704baf11b3b43facf1c +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/StartLiveLinkWindow.uxml b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/StartLiveLinkWindow.uxml new file mode 100644 index 000000000..77fbcfe44 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/StartLiveLinkWindow.uxml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/StartLiveLinkWindow.uxml.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/StartLiveLinkWindow.uxml.meta new file mode 100644 index 000000000..e42058e14 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Editor/LiveLink/uxml/StartLiveLinkWindow.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2eeaa18da16aee949992c91a77576421 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/LICENSE.md b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/LICENSE.md new file mode 100644 index 000000000..a569e0fb8 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/LICENSE.md @@ -0,0 +1,30 @@ +Unity Companion License (“License”) +Software Copyright © 2017-2020 Unity Technologies ApS + +Unity Technologies ApS (“Unity”) grants to you a worldwide, non-exclusive, no-charge, and royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute the software that is made available under this License (“Software”), subject to the following terms and conditions: + +1. Unity Companion Use Only. Exercise of the license granted herein is limited to exercise for the creation, use, and/or distribution of applications, software, or other content pursuant to a valid Unity content authoring and rendering engine software license (“Engine License”). That means while use of the Software is not limited to use in the software licensed under the Engine License, the Software may not be used for any purpose other than the creation, use, and/or distribution of Engine License-dependent applications, software, or other content. No other exercise of the license granted herein is permitted, and in no event may the Software be used for competitive analysis or to develop a competing product or service. + +2. No Modification of Engine License. Neither this License nor any exercise of the license granted herein modifies the Engine License in any way. + +3. Ownership & Grant Back to You. + +3.1 You own your content. In this License, “derivative works” means derivatives of the Software itself--works derived only from the Software by you under this License (for example, modifying the code of the Software itself to improve its efficacy); “derivative works” of the Software do not include, for example, games, apps, or content that you create using the Software. You keep all right, title, and interest to your own content. + +3.2 Unity owns its content. While you keep all right, title, and interest to your own content per the above, as between Unity and you, Unity will own all right, title, and interest to all intellectual property rights (including patent, trademark, and copyright) in the Software and derivative works of the Software, and you hereby assign and agree to assign all such rights in those derivative works to Unity. + +3.3 You have a license to those derivative works. Subject to this License, Unity grants to you the same worldwide, non-exclusive, no-charge, and royalty-free copyright license to derivative works of the Software you create as is granted to you for the Software under this License. + +4. Trademarks. You are not granted any right or license under this License to use any trademarks, service marks, trade names, products names, or branding of Unity or its affiliates (“Trademarks”). Descriptive uses of Trademarks are permitted; see, for example, Unity’s Branding Usage Guidelines at https://unity3d.com/public-relations/brand. + +5. Notices & Third-Party Rights. This License, including the copyright notice associated with the Software, must be provided in all substantial portions of the Software and derivative works thereof (or, if that is impracticable, in any other location where such notices are customarily placed). Further, if the Software is accompanied by a Unity “third-party notices” or similar file, you acknowledge and agree that software identified in that file is governed by those separate license terms. + +6. DISCLAIMER, LIMITATION OF LIABILITY. THE SOFTWARE AND ANY DERIVATIVE WORKS THEREOF IS PROVIDED ON AN "AS IS" BASIS, AND IS PROVIDED WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND/OR NONINFRINGEMENT. IN NO EVENT SHALL ANY COPYRIGHT HOLDER OR AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES (WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL, INCLUDING PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS, AND BUSINESS INTERRUPTION), OR OTHER LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM OR OUT OF, OR IN CONNECTION WITH, THE SOFTWARE OR ANY DERIVATIVE WORKS THEREOF OR THE USE OF OR OTHER DEALINGS IN SAME, EVEN WHERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +7. USE IS ACCEPTANCE and License Versions. Your receipt and use of the Software constitutes your acceptance of this License and its terms and conditions. Software released by Unity under this License may be modified or updated and the License with it; upon any such modification or update, you will comply with the terms of the updated License for any use of any of the Software under the updated License. + +8. Use in Compliance with Law and Termination. Your exercise of the license granted herein will at all times be in compliance with applicable law and will not infringe any proprietary rights (including intellectual property rights); this License will terminate immediately on any breach by you of this License. + +9. Severability. If any provision of this License is held to be unenforceable or invalid, that provision will be enforced to the maximum extent possible and the other provisions will remain in full force and effect. + +10. Governing Law and Venue. This License is governed by and construed in accordance with the laws of Denmark, except for its conflict of laws rules; the United Nations Convention on Contracts for the International Sale of Goods will not apply. If you reside (or your principal place of business is) within the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the state and federal courts located in San Francisco County, California concerning any dispute arising out of this License (“Dispute”). If you reside (or your principal place of business is) outside the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the courts located in Copenhagen, Denmark concerning any Dispute. diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/LICENSE.md.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/LICENSE.md.meta new file mode 100644 index 000000000..ea7decbc9 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 559b8f3d8bc388f4584b463e878e6576 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests.meta new file mode 100644 index 000000000..3d9484e0b --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5ed49115bdcb3394f844c380b8625b72 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstDelegateTest.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstDelegateTest.cs new file mode 100644 index 000000000..b1a845040 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstDelegateTest.cs @@ -0,0 +1,73 @@ +using System; +using System.ComponentModel; +using NUnit.Framework; +using Unity.Burst; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Jobs; + +[BurstCompile] +public unsafe class BurstDelegateTest +{ + delegate void DoThingDelegate(ref int value); + + [BurstCompile] + static void DoThing(ref int value) + { + value++; + } + + static void DoThingMissingBurstCompile(ref int value) + { + value++; + } + + + + [Test] + public void ManagedDelegateTest() + { + var funcPtr = BurstCompiler.CompileFunctionPointer(DoThing); + + // NOTE: funcPtr.Invoke allocates GC memory, + // so in real world use cases we want to cache the managed delegate, not the FunctionPointer + DoThingDelegate cachableDelegate = funcPtr.Invoke; + + int value = 5; + cachableDelegate(ref value); + Assert.AreEqual(6, value); + } + + [Test] + public void JobFunctionPointerTest() + { + var funcPtr = BurstCompiler.CompileFunctionPointer(DoThing); + + var job = new MyJob(); + int value = 5; + job.Blah = &value; + job.FunctionPointer = funcPtr; + + job.Schedule().Complete(); + + Assert.AreEqual(6, value); + } + + [BurstCompile] + struct MyJob : IJob + { + [NativeDisableUnsafePtrRestriction] + public int* Blah; + public FunctionPointer FunctionPointer; + + unsafe public void Execute() + { + FunctionPointer.Invoke(ref *Blah); + } + } + + [Test] + public void CompileMissingBurstCompile() + { + Assert.Throws(()=>BurstCompiler.CompileFunctionPointer(DoThingMissingBurstCompile)); + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstDelegateTest.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstDelegateTest.cs.meta new file mode 100644 index 000000000..9c672eb89 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstDelegateTest.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ae11c6c31c6e242158bb5e41cbcfac7c +timeCreated: 1514054198 \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstSafetyTests.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstSafetyTests.cs new file mode 100644 index 000000000..c7c1e90a4 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstSafetyTests.cs @@ -0,0 +1,123 @@ +using System.Text.RegularExpressions; +using NUnit.Framework; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Jobs; +using Unity.Burst; +using UnityEngine; +using UnityEngine.TestTools; + +public class BurstSafetyTests +{ + [BurstCompile(CompileSynchronously = true)] + struct ThrowExceptionJob : IJobParallelFor + { + public void Execute(int index) + { + throw new System.ArgumentException("Blah"); + } + } + + [Test] + [Ignore("JOE FIXES IN PROGRESS")] + public void ThrowExceptionParallelForStress() + { + LogAssert.Expect(LogType.Exception, new Regex("ArgumentException: Blah")); + + var jobData = new ThrowExceptionJob(); + jobData.Schedule(100, 1).Complete(); + } + + [BurstCompile(CompileSynchronously = true)] + struct WriteToReadOnlyArrayJob : IJob + { + [ReadOnly] + public NativeArray test; + public void Execute() + { + test[0] = 5; + } + } + + [Test] + [Ignore("JOE FIXES IN PROGRESS")] + public void WriteToReadOnlyArray() + { + LogAssert.Expect(LogType.Exception, new Regex("InvalidOperationException")); + + var jobData = new WriteToReadOnlyArrayJob(); + jobData.test = new NativeArray(1, Allocator.Persistent); + + jobData.Run(); + + jobData.test.Dispose(); + } + + [BurstCompile(CompileSynchronously = true)] + struct ParallelForIndexChecksJob : IJobParallelFor + { + public NativeArray test; + + public void Execute(int index) + { + test[0] = 5; + } + } + + [Test] + [Ignore("JOE FIXES IN PROGRESS")] + public void ParallelForMinMaxChecks() + { + LogAssert.Expect(LogType.Exception, new Regex("IndexOutOfRangeException")); + + var jobData = new ParallelForIndexChecksJob(); + jobData.test = new NativeArray(2, Allocator.Persistent); + + jobData.Schedule(100, 1).Complete(); + + jobData.test.Dispose(); + } + + [BurstCompile(CompileSynchronously = true)] + struct AccessNullNativeArrayJob : IJobParallelFor + { + public void Execute(int index) + { + var array = new NativeArray(); + array[0] = 5; + } + } + + [Test] + [Ignore("Crashes Unity - Important")] + public void AccessNullNativeArray() + { + LogAssert.Expect(LogType.Exception, new Regex("NullReferenceException")); + + new AccessNullNativeArrayJob().Schedule(100, 1).Complete(); + } + + [BurstCompile(CompileSynchronously = true)] + unsafe struct AccessNullUnsafePtrJob : IJob + { +#pragma warning disable 649 + [NativeDisableUnsafePtrRestriction] float* myArray; +#pragma warning restore 649 + + public void Execute() + { + myArray[0] = 5; + } + } + +#if !UNITY_DOTSPLAYER + [Test] + [Ignore("Crashes Unity - No user is supposed to write code like this, so not very important")] + public void AccessNullUnsafePtr() + { + LogAssert.Expect(LogType.Exception, new Regex("NullReferenceException")); + + new AccessNullUnsafePtrJob().Run(); + } +#endif +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstSafetyTests.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstSafetyTests.cs.meta new file mode 100644 index 000000000..fc3ea1015 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstSafetyTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 59b8b28c3dab488299e4f95aafe64588 +timeCreated: 1514054198 \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstTests.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstTests.cs new file mode 100644 index 000000000..33c2cfdde --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstTests.cs @@ -0,0 +1,228 @@ +using System; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Jobs; +using Unity.Burst; +using NUnit.Framework; + +public class BurstTests +{ + [BurstCompile(CompileSynchronously = true)] + public struct SimpleArrayAssignJob : IJob + { + public float value; + public NativeArray input; + public NativeArray output; + + public void Execute() + { + for (int i = 0; i != output.Length; i++) + output[i] = i + value + input[i]; + } + } + + [Test] + public void SimpleFloatArrayAssignSimple() + { + var job = new SimpleArrayAssignJob(); + job.value = 10.0F; + job.input = new NativeArray(3, Allocator.Persistent); + job.output = new NativeArray(3, Allocator.Persistent); + + for (int i = 0;i != job.input.Length;i++) + job.input[i] = 1000.0F * i; + + job.Schedule().Complete(); + + Assert.AreEqual(3, job.output.Length); + for (int i = 0;i != job.output.Length;i++) + Assert.AreEqual(i + job.value + job.input[i], job.output[i]); + + job.input.Dispose(); + job.output.Dispose(); + } + + [BurstCompile(CompileSynchronously = true)] + public struct SimpleArrayAssignForJob : IJobParallelFor + { + public float value; + public NativeArray input; + public NativeArray output; + + public void Execute(int i) + { + output[i] = i + value + input[i]; + } + } + [Test] + public void SimpleFloatArrayAssignForEach() + { + var job = new SimpleArrayAssignForJob(); + job.value = 10.0F; + job.input = new NativeArray(1000, Allocator.Persistent); + job.output = new NativeArray(1000, Allocator.Persistent); + + for (int i = 0;i != job.input.Length;i++) + job.input[i] = 1000.0F * i; + + job.Schedule(job.input.Length, 40).Complete(); + + Assert.AreEqual(1000, job.output.Length); + for (int i = 0; i != job.output.Length; i++) + Assert.AreEqual(i + job.value + job.input[i], job.output[i]); + + job.input.Dispose(); + job.output.Dispose(); + } + + + [BurstCompile(CompileSynchronously = true)] + struct MallocTestJob : IJob + { + unsafe public void Execute() + { + void* allocated = UnsafeUtility.Malloc(UnsafeUtility.SizeOf() * 100, 4, Allocator.Persistent); + UnsafeUtility.Free(allocated, Allocator.Persistent); + } + + } + + [Test] + public void MallocTest() + { + var jobData = new MallocTestJob(); + jobData.Run(); + } + + + [BurstCompile(CompileSynchronously = true)] + struct ListCapacityJob : IJob + { + public NativeList list; + public void Execute() + { + list.Capacity = 100; + } + + } + + [Test] + public void ListCapacityJobTest() + { + var jobData = new ListCapacityJob() { list = new NativeList(Allocator.TempJob) }; + jobData.Run(); + + Assert.IsTrue( jobData.list.Capacity >= 100); + Assert.AreEqual(0, jobData.list.Length); + + jobData.list.Dispose(); + } + + + [BurstCompile(CompileSynchronously = true)] + struct NativeListAssignValue : IJob + { + public NativeList list; + + public void Execute() + { + list[0] = 1; + } + } + [Test] + public void AssignValue() + { + var jobData = new NativeListAssignValue() { list = new NativeList(Allocator.TempJob) }; + jobData.list.Add(5); + + jobData.Run(); + + Assert.AreEqual(1, jobData.list.Length); + Assert.AreEqual(1, jobData.list[0]); + + jobData.list.Dispose(); + } + + [BurstCompile(CompileSynchronously = true)] + struct NativeListAddValue : IJob + { + public NativeList list; + + public void Execute() + { + list.Add(1); + list.Add(2); + } + } + [Test] + public void AddValue() + { + var jobData = new NativeListAddValue() { list = new NativeList(1, Allocator.Persistent) }; + + jobData.list.Add(-1); + + jobData.Run(); + + Assert.AreEqual(3, jobData.list.Length); + Assert.AreEqual(-1, jobData.list[0]); + Assert.AreEqual(1, jobData.list[1]); + Assert.AreEqual(2, jobData.list[2]); + + jobData.list.Dispose(); + } + + unsafe struct ConditionalTestStruct + { + public void* a; + public void* b; + } + + [BurstCompile(CompileSynchronously = true)] + unsafe struct PointerConditional : IJob + { + [NativeDisableUnsafePtrRestriction] + public ConditionalTestStruct* t; + + public void Execute() + { + t->b = t->a != null ? t->a : null; + } + } + + [Test] + public unsafe void PointerConditionalDoesntCrash() + { + ConditionalTestStruct dummy; + dummy.a = (void*) 0x1122334455667788; + dummy.b = null; + var jobData = new PointerConditional { t = &dummy }; + jobData.Schedule().Complete(); + Assert.AreEqual((IntPtr) dummy.a, (IntPtr) dummy.b); + } + + [BurstCompile(CompileSynchronously = true)] + unsafe struct TempAllocationJob : IJob + { + [NativeDisableUnsafePtrRestriction] + public int* res; + + public void Execute() + { + var array = new NativeArray(10, Allocator.Temp); + for (int i = 0; i != array.Length; i++) + array[i] = 10; + for (int i = 0; i != array.Length; i++) + *res += array[i]; + } + } + + [Test] + public unsafe void TempAllocationInJob() + { + int value = 0; + TempAllocationJob job; + job.res = &value; + job.Schedule().Complete(); + Assert.AreEqual(100, value); + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstTests.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstTests.cs.meta new file mode 100644 index 000000000..94f4e1e8f --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/BurstTests.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 439e116ae3ad84cd8a9179fd7d291846 +timeCreated: 1485518760 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/Unity.Burst.Tests.asmdef b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/Unity.Burst.Tests.asmdef new file mode 100644 index 000000000..54b64f2f1 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/Unity.Burst.Tests.asmdef @@ -0,0 +1,17 @@ +{ + "name": "Unity.Burst.Tests", + "references": [ + "Unity.Jobs", + "Unity.Mathematics", + "Unity.Collections", + "Unity.Burst" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": true +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/Unity.Burst.Tests.asmdef.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/Unity.Burst.Tests.asmdef.meta new file mode 100644 index 000000000..86c820e66 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Burst.Tests/Unity.Burst.Tests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7b78590e8aa944971a230c4bf6c7ccb2 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core.meta new file mode 100644 index 000000000..9a4a1fa3c --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c127976b3a8c6dc43a6a2e965ec3f0c0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes.meta new file mode 100644 index 000000000..a6b443f34 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2145fc3b12f2cd14993846b60f997be6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes/LICENSE-XXHASH b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes/LICENSE-XXHASH new file mode 100644 index 000000000..e0d022b93 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes/LICENSE-XXHASH @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, 2016 Sedat Kapanoglu + +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 diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes/LICENSE-XXHASH.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes/LICENSE-XXHASH.meta new file mode 100644 index 000000000..56d288c9a --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes/LICENSE-XXHASH.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f2ac68dd01f7d86498e63cb097d7b31b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes/XXHash.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes/XXHash.cs new file mode 100644 index 000000000..ad4fd7cf4 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes/XXHash.cs @@ -0,0 +1,569 @@ +// +// Copyright (c) 2015-2019 Sedat Kapanoglu +// MIT License (see LICENSE file for details) +// +// +// Modified to work under DOTS Runtime +using System; +using System.Runtime.CompilerServices; +using Unity.Burst; + +namespace Unity.Core +{ + /// + /// XXHash implementation. + /// + [BurstCompile] + public static class XXHash + { + private const ulong prime64v1 = 11400714785074694791ul; + private const ulong prime64v2 = 14029467366897019727ul; + private const ulong prime64v3 = 1609587929392839161ul; + private const ulong prime64v4 = 9650029242287828579ul; + private const ulong prime64v5 = 2870177450012600261ul; + + private const uint prime32v1 = 2654435761u; + private const uint prime32v2 = 2246822519u; + private const uint prime32v3 = 3266489917u; + private const uint prime32v4 = 668265263u; + private const uint prime32v5 = 374761393u; + + /// + /// Generate a 32-bit xxHash value. + /// + /// Input buffer. + /// Optional seed. + /// 32-bit hash value. + public static unsafe uint Hash32(byte* buffer, int bufferLength, uint seed = 0) + { + const int stripeLength = 16; + + int len = bufferLength; + int remainingLen = len; + uint acc; + + byte* pInput = buffer; + if (len >= stripeLength) + { + // var (acc1, acc2, acc3, acc4) = initAccumulators32(seed); + uint acc1 = seed + prime32v1 + prime32v2; + uint acc2 = seed + prime32v2; + uint acc3 = seed; + uint acc4 = seed - prime32v1; + + do + { + acc = processStripe32(ref pInput, ref acc1, ref acc2, ref acc3, ref acc4); + remainingLen -= stripeLength; + } + while (remainingLen >= stripeLength); + } + else + { + acc = seed + prime32v5; + } + + acc += (uint)len; + acc = processRemaining32(pInput, acc, remainingLen); + + return avalanche32(acc); + } + +#if !NET_DOTS + /// + /// Generate a 32-bit xxHash value from a stream. + /// + /// Input stream. + /// Optional seed. + /// 32-bit hash value. + public static unsafe uint Hash32(System.IO.Stream stream, uint seed = 0) + { + const int stripeLength = 16; + const int readBufferSize = stripeLength * 1024; // 16kb read buffer - has to be stripe aligned + + var buffer = new byte[readBufferSize]; + uint acc; + + int readBytes = stream.Read(buffer, 0, readBufferSize); + int len = readBytes; + + fixed (byte* inputPtr = buffer) + { + byte* pInput = inputPtr; + if (readBytes >= stripeLength) + { + // var (acc1, acc2, acc3, acc4) = initAccumulators32(seed); + uint acc1 = seed + prime32v1 + prime32v2; + uint acc2 = seed + prime32v2; + uint acc3 = seed; + uint acc4 = seed - prime32v1; + + do + { + do + { + acc = processStripe32(ref pInput, ref acc1, ref acc2, ref acc3, ref acc4); + readBytes -= stripeLength; + } + while (readBytes >= stripeLength); + + // read more if the alignment is still intact + if (readBytes == 0) + { + readBytes = stream.Read(buffer, 0, readBufferSize); + pInput = inputPtr; + len += readBytes; + } + } + while (readBytes >= stripeLength); + } + else + { + acc = seed + prime32v5; + } + + acc += (uint)len; + acc = processRemaining32(pInput, acc, readBytes); + } + + return avalanche32(acc); + } +#endif + + /// + /// Generate a 64-bit xxHash value. + /// + /// Input buffer. + /// Optional seed. + /// Computed 64-bit hash value. + public static unsafe ulong Hash64(byte* buffer, int bufferLength, ulong seed = 0) + { + const int stripeLength = 32; + + int len = bufferLength; + int remainingLen = len; + ulong acc; + + byte* pInput = buffer; + if (len >= stripeLength) + { + //var (acc1, acc2, acc3, acc4) = initAccumulators64(seed); + var acc1 = seed + prime64v1 + prime64v2; + var acc2 = seed + prime64v2; + var acc3 = seed; + var acc4 = seed - prime64v1; + + do + { + acc = processStripe64(ref pInput, ref acc1, ref acc2, ref acc3, ref acc4); + remainingLen -= stripeLength; + } + while (remainingLen >= stripeLength); + } + else + { + acc = seed + prime64v5; + } + + acc += (ulong)len; + acc = processRemaining64(pInput, acc, remainingLen); + + + return avalanche64(acc); + } + +#if !NET_DOTS + /// + /// Generate a 64-bit xxHash value from a stream. + /// + /// Input stream. + /// Optional seed. + /// Computed 64-bit hash value. + public static unsafe ulong Hash64(System.IO.Stream stream, ulong seed = 0) + { + const int stripeLength = 32; + const int readBufferSize = stripeLength * 1024; // 32kb buffer length + + ulong acc; + + var buffer = new byte[readBufferSize]; + int readBytes = stream.Read(buffer, 0, readBufferSize); + ulong len = (ulong)readBytes; + + fixed (byte* inputPtr = buffer) + { + byte* pInput = inputPtr; + if (readBytes >= stripeLength) + { + //var (acc1, acc2, acc3, acc4) = initAccumulators64(seed); + var acc1 = seed + prime64v1 + prime64v2; + var acc2 = seed + prime64v2; + var acc3 = seed; + var acc4 = seed - prime64v1; + + do + { + do + { + acc = processStripe64( + ref pInput, + ref acc1, + ref acc2, + ref acc3, + ref acc4); + readBytes -= stripeLength; + } + while (readBytes >= stripeLength); + + // read more if the alignment is intact + if (readBytes == 0) + { + readBytes = stream.Read(buffer, 0, readBufferSize); + pInput = inputPtr; + len += (ulong)readBytes; + } + } + while (readBytes >= stripeLength); + } + else + { + acc = seed + prime64v5; + } + + acc += len; + acc = processRemaining64(pInput, acc, readBytes); + } + + return avalanche64(acc); + } +#endif + + //[MethodImpl(MethodImplOptions.AggressiveInlining)] + //private static unsafe (ulong, ulong, ulong, ulong) initAccumulators64(ulong seed) + //{ + // return (seed + prime64v1 + prime64v2, seed + prime64v2, seed, seed - prime64v1); + //} + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static unsafe ulong processStripe64( + ref byte* pInput, + ref ulong acc1, + ref ulong acc2, + ref ulong acc3, + ref ulong acc4) + { + processLane64(ref acc1, ref pInput); + processLane64(ref acc2, ref pInput); + processLane64(ref acc3, ref pInput); + processLane64(ref acc4, ref pInput); + + ulong acc = Bits.RotateLeft(acc1, 1) + + Bits.RotateLeft(acc2, 7) + + Bits.RotateLeft(acc3, 12) + + Bits.RotateLeft(acc4, 18); + + mergeAccumulator64(ref acc, acc1); + mergeAccumulator64(ref acc, acc2); + mergeAccumulator64(ref acc, acc3); + mergeAccumulator64(ref acc, acc4); + return acc; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static unsafe void processLane64(ref ulong accn, ref byte* pInput) + { + ulong lane = *(ulong*)pInput; + accn = round64(accn, lane); + pInput += 8; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static unsafe ulong processRemaining64( + byte* pInput, + ulong acc, + int remainingLen) + { + for (ulong lane; remainingLen >= 8; remainingLen -= 8, pInput += 8) + { + lane = *(ulong*)pInput; + + acc ^= round64(0, lane); + acc = Bits.RotateLeft(acc, 27) * prime64v1; + acc += prime64v4; + } + + for (uint lane32; remainingLen >= 4; remainingLen -= 4, pInput += 4) + { + lane32 = *(uint*)pInput; + + acc ^= lane32 * prime64v1; + acc = Bits.RotateLeft(acc, 23) * prime64v2; + acc += prime64v3; + } + + for (byte lane8; remainingLen >= 1; remainingLen--, pInput++) + { + lane8 = *pInput; + acc ^= lane8 * prime64v5; + acc = Bits.RotateLeft(acc, 11) * prime64v1; + } + + return acc; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static ulong avalanche64(ulong acc) + { + acc ^= acc >> 33; + acc *= prime64v2; + acc ^= acc >> 29; + acc *= prime64v3; + acc ^= acc >> 32; + return acc; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static ulong round64(ulong accn, ulong lane) + { + accn += lane * prime64v2; + return Bits.RotateLeft(accn, 31) * prime64v1; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void mergeAccumulator64(ref ulong acc, ulong accn) + { + acc ^= round64(0, accn); + acc *= prime64v1; + acc += prime64v4; + } + + //[MethodImpl(MethodImplOptions.AggressiveInlining)] + //private static unsafe (uint, uint, uint, uint) initAccumulators32( + // uint seed) + //{ + // return (seed + prime32v1 + prime32v2, seed + prime32v2, seed, seed - prime32v1); + //} + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static unsafe uint processStripe32( + ref byte* pInput, + ref uint acc1, + ref uint acc2, + ref uint acc3, + ref uint acc4) + { + + processLane32(ref pInput, ref acc1); + processLane32(ref pInput, ref acc2); + processLane32(ref pInput, ref acc3); + processLane32(ref pInput, ref acc4); + + return Bits.RotateLeft(acc1, 1) + + Bits.RotateLeft(acc2, 7) + + Bits.RotateLeft(acc3, 12) + + Bits.RotateLeft(acc4, 18); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static unsafe void processLane32(ref byte* pInput, ref uint accn) + { + uint lane = *(uint*)pInput; + accn = round32(accn, lane); + pInput += 4; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static unsafe uint processRemaining32( + byte* pInput, + uint acc, + int remainingLen) + { + for (uint lane; remainingLen >= 4; remainingLen -= 4, pInput += 4) + { + lane = *(uint*)pInput; + acc += lane * prime32v3; + acc = Bits.RotateLeft(acc, 17) * prime32v4; + } + + for (byte lane; remainingLen >= 1; remainingLen--, pInput++) + { + lane = *pInput; + acc += lane * prime32v5; + acc = Bits.RotateLeft(acc, 11) * prime32v1; + } + + return acc; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static unsafe uint round32(uint accn, uint lane) + { + accn += lane * prime32v2; + accn = Bits.RotateLeft(accn, 13); + accn *= prime32v1; + return accn; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static uint avalanche32(uint acc) + { + acc ^= acc >> 15; + acc *= prime32v2; + acc ^= acc >> 13; + acc *= prime32v3; + acc ^= acc >> 16; + return acc; + } + + /// + /// Bit operations. + /// + [BurstCompile] + static class Bits + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static ulong RotateLeft(ulong value, int bits) + { + return (value << bits) | (value >> (64 - bits)); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static uint RotateLeft(uint value, int bits) + { + return (value << bits) | (value >> (32 - bits)); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static uint RotateRight(uint value, int bits) + { + return (value >> bits) | (value << (32 - bits)); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static ulong RotateRight(ulong value, int bits) + { + return (value >> bits) | (value << (64 - bits)); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static unsafe ulong PartialBytesToUInt64(byte* ptr, int leftBytes) + { + // a switch/case approach is slightly faster than the loop but .net + // refuses to inline it due to larger code size. + ulong result = 0; + + // trying to modify leftBytes would invalidate inlining + // need to use local variable instead + for (int i = 0; i < leftBytes; i++) + { + result |= ((ulong)ptr[i]) << (i << 3); + } + + return result; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static unsafe ulong PartialBytesToUInt64(byte[] buffer, int leftBytes) + { + // a switch/case approach is slightly faster than the loop but .net + // refuses to inline it due to larger code size. + ulong result = 0; + + // trying to modify leftBytes would invalidate inlining + // need to use local variable instead + for (int i = 0; i < leftBytes; i++) + { + result |= ((ulong)buffer[i]) << (i << 3); + } + + return result; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static unsafe uint PartialBytesToUInt32(byte* ptr, int leftBytes) + { + if (leftBytes > 3) + { + return *((uint*)ptr); + } + + // a switch/case approach is slightly faster than the loop but .net + // refuses to inline it due to larger code size. + uint result = *ptr; + if (leftBytes > 1) + { + result |= (uint)(ptr[1] << 8); + } + + if (leftBytes > 2) + { + result |= (uint)(ptr[2] << 16); + } + + return result; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static unsafe uint PartialBytesToUInt32(byte[] buffer, int leftBytes) + { + if (leftBytes > 3) + { + return ToUInt32(buffer, 0); + } + + // a switch/case approach is slightly faster than the loop but .net + // refuses to inline it due to larger code size. + uint result = buffer[0]; + if (leftBytes > 1) + { + result |= (uint)(buffer[1] << 8); + } + + if (leftBytes > 2) + { + result |= (uint)(buffer[2] << 16); + } + + return result; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static uint SwapBytes32(uint num) + { + return (Bits.RotateLeft(num, 8) & 0x00FF00FFu) + | (Bits.RotateRight(num, 8) & 0xFF00FF00u); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static ulong SwapBytes64(ulong num) + { + num = (Bits.RotateLeft(num, 48) & 0xFFFF0000FFFF0000ul) + | (Bits.RotateLeft(num, 16) & 0x0000FFFF0000FFFFul); + return (Bits.RotateLeft(num, 8) & 0xFF00FF00FF00FF00ul) + | (Bits.RotateRight(num, 8) & 0x00FF00FF00FF00FFul); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static uint ToUInt32(byte[] value, int startIndex) + { + return (uint)ToInt32(value, startIndex); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe int ToInt32(byte[] value, int startIndex) + { + fixed (byte* pbyte = &value[startIndex]) + { + if ((startIndex & 3) == 0) + { + return *((int*)pbyte); + } + else + { + return (*pbyte) | (*(pbyte + 1) << 8) | (*(pbyte + 2) << 16) | (*(pbyte + 3) << 24); + } + } + } + } + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes/XXHash.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes/XXHash.cs.meta new file mode 100644 index 000000000..32b45589a --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Hashes/XXHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: adb5240b892580142be52f89bdce8001 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/TimeData.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/TimeData.cs new file mode 100644 index 000000000..973d2e70d --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/TimeData.cs @@ -0,0 +1,114 @@ +using System; +using System.ComponentModel; + +namespace Unity.Core +{ + public readonly struct TimeData + { + /// + /// The total cumulative elapsed time in seconds. + /// + public readonly double ElapsedTime; + + /// + /// The time in seconds since the last time-updating event occurred. (For example, a frame.) + /// + public readonly float DeltaTime; + + /// + /// Create a new TimeData struct with the given values. + /// + /// Time since the start of time collection. + /// Elapsed time since the last time-updating event occurred. + public TimeData(double elapsedTime, float deltaTime) + { + ElapsedTime = elapsedTime; + DeltaTime = deltaTime; + } + + [EditorBrowsable(EditorBrowsableState.Never)] + #if UNITY_SKIP_UPDATES_WITH_VALIDATION_SUITE + [Obsolete("deltaTime has been renamed to DeltaTime and will be (RemovedAfter 2020-02-20). If you see this message in a user project, remove the UNITY_SKIP_UPDATES_WITH_VALIDATION_SUITE define from the Entities assembly definition file.", true)] + #else + [Obsolete("deltaTime has been renamed to DeltaTime and will be (RemovedAfter 2020-02-20). (UnityUpgradable) -> DeltaTime")] + #endif + public float deltaTime => DeltaTime; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("time has been replaced by ElapsedTime with double precision. Please use `(float)ElapsedTime` explicitly when you want to use single precision. (RemovedAfter 2020-02-20)")] + public float time => (float)ElapsedTime; + + #if !UNITY_DOTSPLAYER + + // This member will be deprecated once a native fixed delta time is introduced in dots. + [EditorBrowsable(EditorBrowsableState.Never)] + public float fixedDeltaTime => UnityEngine.Time.fixedDeltaTime; + + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("timeSinceLevelLoad is only available in UnityEngine.Time. Please use the explicit UnityEngine prefix. This property will be (RemovedAfter 2020-02-20)")] + public float timeSinceLevelLoad => UnityEngine.Time.timeSinceLevelLoad; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("captureFramerate is only available in UnityEngine.Time. Please use the explicit UnityEngine prefix. This property will be (RemovedAfter 2020-02-20)")] + public int captureFramerate => UnityEngine.Time.captureFramerate; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("fixedTime is only available in UnityEngine.Time. Please use the explicit UnityEngine prefix. This property will be (RemovedAfter 2020-02-20)")] + public float fixedTime => UnityEngine.Time.fixedTime; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("frameCount is only available in UnityEngine.Time. Please use the explicit UnityEngine prefix. This property will be (RemovedAfter 2020-02-20)")] + public int frameCount => UnityEngine.Time.frameCount; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("timeScale is only available in UnityEngine.Time. Please use the explicit UnityEngine prefix. This property will be (RemovedAfter 2020-02-20)")] + public float timeScale => UnityEngine.Time.timeScale; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("unscaledTime is only available in UnityEngine.Time. Please use the explicit UnityEngine prefix. This property will be (RemovedAfter 2020-02-20)")] + public float unscaledTime => UnityEngine.Time.unscaledTime; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("captureDeltaTime is only available in UnityEngine.Time. Please use the explicit UnityEngine prefix. This property will be (RemovedAfter 2020-02-20)")] + public float captureDeltaTime => UnityEngine.Time.captureDeltaTime; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("fixedUnscaledTime is only available in UnityEngine.Time. Please use the explicit UnityEngine prefix. This property will be (RemovedAfter 2020-02-20)")] + public float fixedUnscaledTime => UnityEngine.Time.fixedUnscaledTime; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("maximumDeltaTime is only available in UnityEngine.Time. Please use the explicit UnityEngine prefix. This property will be (RemovedAfter 2020-02-20)")] + public float maximumDeltaTime => UnityEngine.Time.maximumDeltaTime; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("realtimeSinceStartup is only available in UnityEngine.Time. Please use the explicit UnityEngine prefix. This property will be (RemovedAfter 2020-02-20)")] + public float realtimeSinceStartup => UnityEngine.Time.realtimeSinceStartup; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("renderedFrameCount is only available in UnityEngine.Time. Please use the explicit UnityEngine prefix. This property will be (RemovedAfter 2020-02-20)")] + public int renderedFrameCount => UnityEngine.Time.renderedFrameCount; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("smoothDeltaTime is only available in UnityEngine.Time. Please use the explicit UnityEngine prefix. This property will be (RemovedAfter 2020-02-20)")] + public float smoothDeltaTime => UnityEngine.Time.smoothDeltaTime; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("unscaledDeltaTime is only available in UnityEngine.Time. Please use the explicit UnityEngine prefix. This property will be (RemovedAfter 2020-02-20)")] + public float unscaledDeltaTime => UnityEngine.Time.unscaledDeltaTime; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("fixedUnscaledDeltaTime is only available in UnityEngine.Time. Please use the explicit UnityEngine prefix. This property will be (RemovedAfter 2020-02-20)")] + public float fixedUnscaledDeltaTime => UnityEngine.Time.fixedUnscaledDeltaTime; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("maximumParticleDeltaTime is only available in UnityEngine.Time. Please use the explicit UnityEngine prefix. This property will be (RemovedAfter 2020-02-20)")] + public float maximumParticleDeltaTime => UnityEngine.Time.maximumParticleDeltaTime; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("inFixedTimeStep is only available in UnityEngine.Time. Please use the explicit UnityEngine prefix. This property will be (RemovedAfter 2020-02-20)")] + public bool inFixedTimeStep => UnityEngine.Time.inFixedTimeStep; + #endif + + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/TimeData.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/TimeData.cs.meta new file mode 100644 index 000000000..1080d7cb9 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/TimeData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d79cab95eff79224092dd6db9e00d76f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Unity.Core.asmref b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Unity.Core.asmref new file mode 100644 index 000000000..3ca7deaba --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Unity.Core.asmref @@ -0,0 +1,3 @@ +{ + "reference": "Unity.Entities" +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Unity.Core.asmref.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Unity.Core.asmref.meta new file mode 100644 index 000000000..5d128ee99 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Core/Unity.Core.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1fcc4311a0ca88c4badfb93d49f0b1ba +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests.meta new file mode 100644 index 000000000..c8a671710 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e64c35fc54df9e943a20f093612bf431 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests/AutoCreateComponentSystemTests.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests/AutoCreateComponentSystemTests.cs new file mode 100644 index 000000000..d05003201 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests/AutoCreateComponentSystemTests.cs @@ -0,0 +1,181 @@ +using System; +using System.Linq; +using NUnit.Framework; +using Unity.Burst; +using Unity.Collections; +using Unity.Entities; +using Unity.Jobs; +#if UNITY_DOTSPLAYER +using Unity.Tiny; +#endif + +namespace Unity.Entities.Tests +{ + public class AutoCreateComponentSystemTestsFixture + { + protected World m_PreviousWorld; + protected World World; + protected EntityManager m_Manager; + protected EntityManager.EntityManagerDebug m_ManagerDebug; + + protected int StressTestEntityCount = 1000; + + [SetUp] + public void Setup() + { + m_PreviousWorld = World.DefaultGameObjectInjectionWorld; + const string kTestWorldName = "Test World"; +#if UNITY_DOTSPLAYER + // Tiny always runs outside of process from the Editor, as such we need to + // invoke the tiny bootstrapping for worlds manually + World = DefaultWorldInitialization.Initialize(kTestWorldName); +#else + World = World.DefaultGameObjectInjectionWorld = new World(kTestWorldName); +#endif + + m_Manager = World.EntityManager; + m_ManagerDebug = new EntityManager.EntityManagerDebug(m_Manager); + } + + [TearDown] + public void TearDown() + { + if (m_Manager != null && m_Manager.IsCreated) + { + // Clean up systems before calling CheckInternalConsistency because we might have filters etc + // holding on SharedComponentData making checks fail + while (World.Systems.ToArray().Length > 0) + { + World.DestroySystem(World.Systems.ToArray()[0]); + } + + m_ManagerDebug.CheckInternalConsistency(); + + World.Dispose(); + World = null; + + World.DefaultGameObjectInjectionWorld = m_PreviousWorld; + m_PreviousWorld = null; + m_Manager = null; + } + } + } + + // Editor manages its own SystemGroups, so this test case is meaningless there. +#if !UNITY_EDITOR + class Issue1792 : AutoCreateComponentSystemTestsFixture + { + static bool aCreated = false; + static bool bCreated = false; + private static bool systemBWasCreated = false; + + [UpdateBefore(typeof(SystemB))] + class SystemA : ComponentSystem + { + SystemB OtherSystem; + + protected override void OnCreate() + { + aCreated = true; + base.OnCreate(); + OtherSystem = World.GetOrCreateSystem(); + systemBWasCreated = bCreated; + } + protected override void OnUpdate() + { + } + } + + [UpdateAfter(typeof(SystemA))] + class SystemB : ComponentSystem + { + protected override void OnCreate() + { + bCreated = true; + base.OnCreate(); + } + + protected override void OnUpdate() + { + } + } + + [Test] + public void Test1792() + { + Assert.NotNull(World.GetExistingSystem()); + Assert.NotNull(World.GetExistingSystem()); + + var sim = World.GetExistingSystem(); + Assert.NotNull(sim.Systems.FirstOrDefault(i => i.GetType() == typeof(SystemA))); + Assert.NotNull(sim.Systems.FirstOrDefault(i => i.GetType() == typeof(SystemB))); + Assert.IsTrue(aCreated); + Assert.IsTrue(bCreated); + Assert.IsTrue(systemBWasCreated); + } + } +#endif + + class AutoCreateComponentSystemTests : AutoCreateComponentSystemTestsFixture + { + + internal class SystemA : ComponentSystem + { + protected override void OnCreate() + { + base.OnCreate(); + World.GetOrCreateSystem(); + } + + protected override void OnUpdate() + { + } + } + + internal class SystemB : ComponentSystem + { + protected override void OnCreate() + { + base.OnCreate(); + World.GetOrCreateSystem(); + } + + protected override void OnUpdate() + { + } + } + + internal class SystemC : ComponentSystem + { + protected override void OnCreate() + { + base.OnCreate(); + World.GetOrCreateSystem(); + } + + protected override void OnUpdate() + { + } + } + + [Test] + public void TestCircularAutoCreateComponentSystem() + { +#if UNITY_EDITOR + World.CreateSystem(); // Everyone else should auto-create. +#endif + + Assert.NotNull(World.GetExistingSystem(), "Test A not null"); + Assert.NotNull(World.GetExistingSystem(), "Test B not null"); + Assert.NotNull(World.GetExistingSystem(), "Test C not null"); + +#if !UNITY_EDITOR + // Editor manages its own SystemGroups. + var sim = World.GetExistingSystem(); + Assert.NotNull(sim.Systems.FirstOrDefault(i => i.GetType() == typeof(SystemA)), "Query A not null"); + Assert.NotNull(sim.Systems.FirstOrDefault(i => i.GetType() == typeof(SystemB)), "Query B not null"); + Assert.NotNull(sim.Systems.FirstOrDefault(i => i.GetType() == typeof(SystemC)), "QueryC not null"); +#endif + } + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests/AutoCreateComponentSystemTests.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests/AutoCreateComponentSystemTests.cs.meta new file mode 100644 index 000000000..a60810b2b --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests/AutoCreateComponentSystemTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5e601ded5c7fb7449e73985eff8c4bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests/Unity.Entities.AutoCreation.Tests.asmdef b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests/Unity.Entities.AutoCreation.Tests.asmdef new file mode 100644 index 000000000..679d7a018 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests/Unity.Entities.AutoCreation.Tests.asmdef @@ -0,0 +1,16 @@ +{ + "name": "Unity.Entities.AutoCreation.Tests", + "references": [ + "Unity.Collections", + "Unity.Entities", + "Unity.Entities.Tests" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": true +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests/Unity.Entities.AutoCreation.Tests.asmdef.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests/Unity.Entities.AutoCreation.Tests.asmdef.meta new file mode 100644 index 000000000..65f886cba --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.AutoCreation.Tests/Unity.Entities.AutoCreation.Tests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 86033609e2b3842478eebec259f03100 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils.meta new file mode 100644 index 000000000..651c585bf --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cf8e095628cab9c4e9d6579230621451 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/MonoExtensions.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/MonoExtensions.cs new file mode 100644 index 000000000..531531cea --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/MonoExtensions.cs @@ -0,0 +1,296 @@ +#if !UNITY_EDITOR + +using System; +using System.Collections.Generic; +using System.Linq; +using Mono.Cecil; +using Unity.IL2CPP.ILPreProcessor; + +namespace Unity.Entities.BuildUtils +{ + public static class MonoExtensions + { + public static bool IsCppBasicType(this TypeDefinition type) + { + return type.MetadataType == MetadataType.Boolean || type.MetadataType == MetadataType.Void + || type.MetadataType == MetadataType.SByte || type.MetadataType == MetadataType.Byte + || type.MetadataType == MetadataType.Int16 || type.MetadataType == MetadataType.UInt16 || type.MetadataType == MetadataType.Char + || type.MetadataType == MetadataType.Int32 || type.MetadataType == MetadataType.UInt32 + || type.MetadataType == MetadataType.Int64 || type.MetadataType == MetadataType.UInt64 + || type.MetadataType == MetadataType.Single || type.MetadataType == MetadataType.Double + || type.MetadataType == MetadataType.IntPtr || type.MetadataType == MetadataType.UIntPtr; + } + + public static Type GetSystemReflectionType(this TypeReference type) + { + return Type.GetType(type.GetReflectionName(), true); + } + + public static string GetReflectionName(this TypeReference type) + { + if (type.IsGenericInstance) + { + var genericInstance = (GenericInstanceType)type; + return string.Format("{0}.{1}[{2}]", genericInstance.Namespace, type.Name, + String.Join(",", genericInstance.GenericArguments.Select(p => p.GetReflectionName()).ToArray())); + } + + return type.FullName; + } + + public static TypeReference DynamicArrayElementType(this TypeReference typeRef) + { + var type = typeRef.Resolve(); + + if (!type.IsDynamicArray()) + throw new ArgumentException("Expected DynamicArray type reference."); + + GenericInstanceType genericInstance = (GenericInstanceType)typeRef; + return genericInstance.GenericArguments[0]; + } + + public static TypeDefinition FixedSpecialType(this TypeReference typeRef) + { + TypeDefinition type = typeRef.Resolve(); + if (type.MetadataType == MetadataType.IntPtr) return type.Module.TypeSystem.IntPtr.Resolve(); + if (type.MetadataType == MetadataType.Void) return type.Module.TypeSystem.Void.Resolve(); + if (type.MetadataType == MetadataType.String) return type.Module.TypeSystem.String.Resolve(); + if (IsCppBasicType(type)) return type; + else return null; + } + + public static bool IsStructValueType(this TypeReference type) + { + if (!type.IsValueType) + return false; + if (type.Resolve().IsEnum || type.IsPrimitive) + return false; + if (type.IsDynamicArray()) + return false; + if (type.FixedSpecialType() != null) + return false; + if (type.MetadataType == MetadataType.IntPtr) + return false; + return true; + } + + public static bool IsStructValueType(this TypeDefinition type) + { + if (!type.IsValueType) + return false; + if (type.IsEnum || type.IsPrimitive) + return false; + if (type.FixedSpecialType() != null) + return false; + if (type.IsComponentType()) + return false; + if (type.MetadataType == MetadataType.IntPtr) + return false; + return true; + } + + public static bool IsStructWithInterface(this TypeDefinition type, string fullName) + { + return type.IsStructValueType() + && type.HasInterfaces + && type.Interfaces.FirstOrDefault(i => i.InterfaceType.FullName == fullName) != null; + } + + public static bool IsEntityType(this TypeReference typeRef) + { + return (typeRef.FullName == "Unity.Entities.Entity"); + } + + public static bool IsManagedType(this TypeReference typeRef) + { + // We must check this before calling Resolve() as cecil loses this property otherwise + if (typeRef.IsPointer) + return false; + + if (typeRef.IsArray || typeRef.IsGenericParameter) + return true; + + var type = typeRef.Resolve(); + + if (type.IsDynamicArray()) + return true; + + TypeDefinition fixedSpecialType = type.FixedSpecialType(); + if (fixedSpecialType != null) + { + if (fixedSpecialType.MetadataType == MetadataType.String) + return true; + return false; + } + + if (type.IsEnum) + return false; + + if (type.IsValueType) + { + // if none of the above check the type's fields + var typeResolver = TypeResolver.For(typeRef); + foreach (var field in type.Fields) + { + if (field.IsStatic) + continue; + + var fieldType = typeResolver.Resolve(field.FieldType); + if (fieldType.IsManagedType()) + return true; + } + + return false; + } + + return true; + } + + + public static bool IsComplex(this TypeReference typeRef) + { + // We must check this before calling Resolve() as cecil loses this property otherwise + if (typeRef.IsPointer) + return false; + + + if (TypeUtils.ValueTypeIsComplex[0].ContainsKey(typeRef)) + return TypeUtils.ValueTypeIsComplex[0][typeRef]; + + if (typeRef.IsDynamicArray()) + return true; + + TypeDefinition fixedSpecialType = typeRef.FixedSpecialType(); + if (fixedSpecialType != null) + { + if (fixedSpecialType.MetadataType == MetadataType.String) + return true; + return false; + } + + if (typeRef.Resolve().IsEnum) + return false; + + TypeUtils.PreprocessTypeFields(typeRef, 0); + + return TypeUtils.ValueTypeIsComplex[0][typeRef]; + } + + public static bool IsPodType(this TypeReference typeRef) + { + TypeDefinition type = typeRef.Resolve(); + if (type.IsCppBasicType() || type.IsEnum) return true; + + var typeResolver = TypeResolver.For(typeRef); + foreach (var f in type.Fields) + { + var fieldType = typeResolver.Resolve(f.FieldType); + if (fieldType.MetadataType == MetadataType.String || fieldType.IsDynamicArray()) + return false; + bool recursiveIsPodType = IsPodType(fieldType); + if (!recursiveIsPodType) + return false; + } + + return true; + } + + public static bool IsDynamicArray(this TypeReference type) + { + return type.Name.StartsWith("DynamicArray`"); + } + + public static bool IsComponentType(this TypeReference typeRef) + { + if (!typeRef.IsValueType || typeRef.IsPrimitive) + return false; + + return typeRef.Resolve().Interfaces.Any(i => i.InterfaceType.Name == "IComponentData") || + IsSharedComponentType(typeRef) || + IsSystemStateComponentType(typeRef) || + IsBufferElementComponentType(typeRef); + } + + public static bool IsBufferElementComponentType(this TypeReference typeRef) + { + if (!typeRef.IsValueType || typeRef.IsPrimitive) + return false; + + return typeRef.Resolve().Interfaces.Any(i => i.InterfaceType.Name == "IBufferElementData"); + } + + public static bool IsSharedComponentType(this TypeReference typeRef) + { + if (!typeRef.IsValueType || typeRef.IsPrimitive) + return false; + + return typeRef.Resolve().Interfaces.Any(i => i.InterfaceType.Name == "ISharedComponentData"); + } + + public static bool IsSystemStateComponentType(this TypeReference typeRef) + { + if (!typeRef.IsValueType || typeRef.IsPrimitive) + return false; + + return typeRef.Resolve().Interfaces.Any(i => i.InterfaceType.Name == "ISystemStateComponentData"); + } + + public static bool IsSystemType(this TypeDefinition type) + { + if (!type.IsClass) + return false; + + return type.Interfaces.Any(i => i.InterfaceType.Name == "IComponentSystem"); + } + + public static bool IsSystemFenceType(this TypeDefinition type) + { + if (!type.IsClass) + return false; + + return type.Interfaces.Any(i => i.InterfaceType.Name == "IComponentSystemFence"); + } + + public static TypeDefinition[] GetSystemRunsBefore(this TypeDefinition type) + { + var deps = new List(); + foreach (var attr in type.CustomAttributes) + { + if (attr.AttributeType.Name == "UpdateBeforeAttribute") + { + TypeReference reference = (TypeReference)attr.ConstructorArguments[0].Value; + deps.Add(reference.Resolve()); + } + } + + return deps.ToArray(); + } + + public static TypeDefinition[] GetSystemRunsAfter(this TypeDefinition type) + { + var deps = new List(); + foreach (var attr in type.CustomAttributes) + { + if (attr.AttributeType.Name == "UpdateAfterAttribute") + { + TypeReference reference = (TypeReference)attr.ConstructorArguments[0].Value; + deps.Add(reference.Resolve()); + } + } + + return deps.ToArray(); + } + + public static ulong CalculateStableTypeHash(this TypeDefinition typeDef) + { + return TypeHash.CalculateStableTypeHash(typeDef); + } + + public static ulong CalculateMemoryOrdering(this TypeDefinition typeDef) + { + return TypeHash.CalculateMemoryOrdering(typeDef); + } + } +} + +#endif \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/MonoExtensions.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/MonoExtensions.cs.meta new file mode 100644 index 000000000..2908edfb4 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/MonoExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b13c4dd2fbb97bb478affedfdb213a1b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/TypeHash.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/TypeHash.cs new file mode 100644 index 000000000..ea5bc4a11 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/TypeHash.cs @@ -0,0 +1,224 @@ +#if !UNITY_EDITOR + +using System; +using System.Linq; +using System.Reflection; +using Mono.Cecil; + +namespace Unity.Entities.BuildUtils +{ + public class TypeHash + { + // http://www.isthe.com/chongo/src/fnv/hash_64a.c + // with basis and prime: + const ulong kFNV1A64OffsetBasis = 14695981039346656037; + const ulong kFNV1A64Prime = 1099511628211; + + public static ulong FNV1A64(string text) + { + ulong result = kFNV1A64OffsetBasis; + foreach (var c in text) + { + result = kFNV1A64Prime * (result ^ (byte)(c & 255)); + result = kFNV1A64Prime * (result ^ (byte)(c >> 8)); + } + return result; + } + + public static ulong FNV1A64(int val) + { + ulong result = kFNV1A64OffsetBasis; + unchecked + { + result = (((ulong)(val & 0x000000FF) >> 0) ^ result) * kFNV1A64Prime; + result = (((ulong)(val & 0x0000FF00) >> 8) ^ result) * kFNV1A64Prime; + result = (((ulong)(val & 0x00FF0000) >> 16) ^ result) * kFNV1A64Prime; + result = (((ulong)(val & 0xFF000000) >> 24) ^ result) * kFNV1A64Prime; + } + + return result; + } + + public static ulong CombineFNV1A64(ulong hash, params ulong[] values) + { + foreach (var value in values) + { + hash ^= value; + hash *= kFNV1A64Prime; + } + + return hash; + } + + static string GetSanitizedFullName(TypeReference type) + { + string name = type.FullName; + + if (type.IsGenericInstance) + { + // Cecil produces a different field name than System.Reflection when a field contains a generic, + // so we convert the name to System.Reflection's form since it is a more precise string + var genericField = type as GenericInstanceType; + name = genericField.FullName.Substring(0, type.FullName.IndexOf('<')); + name += "["; + for (int i = 0; i < genericField.GenericArguments.Count; ++i) + { + var genericType = genericField.GenericArguments[i].Resolve(); + name += "["; + name += Assembly.CreateQualifiedName(genericType.Module.Assembly.FullName, genericType.FullName); + name += "]"; + + if (i < genericField.GenericArguments.Count - 1) + name += ","; + } + name += "]"; + } + + // Reflection uses '+' as a delimiter for nested classes whereas cecil uses ECMA notation which uses '/' + name = name.Replace('/', '+'); + + return name; + } + + public static ulong HashType(TypeDefinition typeDef, int fieldIndex = 0) + { + ulong hash = kFNV1A64OffsetBasis; + + foreach (var field in typeDef.Fields) + { + if (!field.IsStatic) + { + string fieldName = GetSanitizedFullName(field.FieldType); + hash = CombineFNV1A64(hash, FNV1A64(fieldName)); + hash = CombineFNV1A64(hash, FNV1A64(fieldIndex)); + ++fieldIndex; + } + } + + return hash; + } + + public static ulong HashType(Type type, int fieldIndex = 0) + { + ulong hash = kFNV1A64OffsetBasis; + + foreach (var field in type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)) + { + if (!field.IsStatic) + { + var fieldName = field.FieldType.FullName; + hash = CombineFNV1A64(hash, FNV1A64(fieldName)); + hash = CombineFNV1A64(hash, FNV1A64(fieldIndex)); + ++fieldIndex; + } + } + + return hash; + } + + public static ulong HashVersionAttribute(TypeDefinition typeDef) + { + int version = 0; + if (typeDef.CustomAttributes.Count > 0) + { + var versionAttribute = typeDef.CustomAttributes.FirstOrDefault(ca => ca.Constructor.DeclaringType.Name == "TypeVersionAttribute"); + if (versionAttribute != null) + { + version = (int)versionAttribute.ConstructorArguments + .First(arg => arg.Type.Name == "Int32") + .Value; + } + } + + return FNV1A64(version); + } + + private static unsafe ulong HashVersionAttribute(Type type) + { + int version = 0; + if (type.CustomAttributes.Count() > 0) + { + var versionAttribute = type.CustomAttributes.FirstOrDefault(ca => ca.Constructor.DeclaringType.Name == "TypeVersionAttribute"); + if (versionAttribute != null) + { + version = (int)versionAttribute.ConstructorArguments + .First(arg => arg.ArgumentType.Name == "Int32") + .Value; + } + } + + return FNV1A64(version); + } + + public static ulong CalculateStableTypeHash(TypeDefinition typeDef) + { + ulong asmNameHash = FNV1A64(Assembly.CreateQualifiedName(typeDef.Module.Assembly.FullName, typeDef.FullName)); + ulong typeHash = HashType(typeDef); + ulong versionHash = HashVersionAttribute(typeDef); + + return CombineFNV1A64(asmNameHash, typeHash, versionHash); + } + + // Note: We do not use method overloading for Type/TypeDefinition because overloading the method would force users + // of the method to require an assembly reference on System.Reflection AND Mono.Cecil + public static ulong CalculateStableTypeHashRefl(Type type) + { + ulong asmNameHash = FNV1A64(type.AssemblyQualifiedName); + ulong typeHash = HashType(type); + ulong versionHash = HashVersionAttribute(type); + + return CombineFNV1A64(asmNameHash, typeHash, versionHash); + } + + public static ulong CalculateMemoryOrdering(TypeDefinition typeDef) + { + if (typeDef == null || typeDef.IsEntityType()) + { + return 0; + } + + if (typeDef.CustomAttributes.Count > 0) + { + var forcedMemoryOrderAttribute = typeDef.CustomAttributes.FirstOrDefault(ca => ca.Constructor.DeclaringType.Name == "ForcedMemoryOrderingAttribute"); + if (forcedMemoryOrderAttribute != null) + { + ulong memoryOrder = (ulong)forcedMemoryOrderAttribute.ConstructorArguments + // despite the field being a 'ulong', Mono.Cecil says it's a UInt64. Not a big issue but a possible inconsistency so we check for either + .First(arg => arg.Type.Name == "UInt64" || arg.Type.Name == "ulong") + .Value; + + return memoryOrder; + } + } + + return CalculateStableTypeHash(typeDef); + } + + // Note: We do not use method overloading for Type/TypeDefinition because overloading the method would force users + // of the method to require an assembly reference on System.Reflection AND Mono.Cecil + public static ulong CalculateMemoryOrderingRefl(Type type) + { + if (type == null || type.FullName == "Unity.Entities.Entity") + { + return 0; + } + + if (type.CustomAttributes.Count() > 0) + { + var forcedMemoryOrderAttribute = type.CustomAttributes.FirstOrDefault(ca => ca.Constructor.DeclaringType.Name == "ForcedMemoryOrderingAttribute"); + if (forcedMemoryOrderAttribute != null) + { + ulong memoryOrder = (ulong)forcedMemoryOrderAttribute.ConstructorArguments + .First(arg => arg.ArgumentType.Name == "UInt64" || arg.ArgumentType.Name == "ulong") + .Value; + + return memoryOrder; + } + } + + return CalculateStableTypeHashRefl(type); + } + } +} + +#endif \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/TypeHash.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/TypeHash.cs.meta new file mode 100644 index 000000000..e13c87b53 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/TypeHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35d5e9bfbfd823c418625d6a4d28f592 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/TypeUtils.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/TypeUtils.cs new file mode 100644 index 000000000..4cf8ea9f9 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/TypeUtils.cs @@ -0,0 +1,402 @@ +#if !UNITY_EDITOR + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using Mono.Cecil; +using Unity.IL2CPP.Common; +using Unity.IL2CPP.ILPreProcessor; + +namespace Unity.Entities.BuildUtils +{ + public static class TypeUtils + { + public struct AlignAndSize + { + public readonly int align; + public readonly int size; + public readonly int offset; + public readonly bool empty; + + public AlignAndSize(int single) + { + align = size = single; + offset = 0; + empty = false; + } + + public AlignAndSize(int a, int s) + { + align = a; + size = s; + offset = 0; + empty = false; + } + + public AlignAndSize(int a, int s, int o) + { + align = a; + size = s; + offset = o; + empty = false; + } + + public AlignAndSize(int a, int s, int o, bool e) + { + align = a; + size = s; + offset = o; + empty = e; + } + + public static readonly AlignAndSize Zero = new AlignAndSize(0); + public static readonly AlignAndSize One = new AlignAndSize(1); + public static readonly AlignAndSize Two = new AlignAndSize(2); + public static readonly AlignAndSize Four = new AlignAndSize(4); + public static readonly AlignAndSize Eight = new AlignAndSize(8); + public static readonly AlignAndSize Pointer2_32 = new AlignAndSize(4, 8); + public static readonly AlignAndSize Pointer2_64 = new AlignAndSize(8, 16); + public static readonly AlignAndSize Pointer3_32 = new AlignAndSize(4, 12); + public static readonly AlignAndSize Pointer3_64 = new AlignAndSize(8, 24); + public static readonly AlignAndSize Pointer4_32 = new AlignAndSize(4, 16); + public static readonly AlignAndSize Pointer4_64 = new AlignAndSize(8, 32); + public static readonly AlignAndSize Sentinel = new AlignAndSize(-1); + + public static AlignAndSize Pointer(int bits) => (bits == 32 || bits == 0) ? Four : Eight; + public static AlignAndSize DynamicArray(int bits) => (bits == 32 || bits == 0) ? new AlignAndSize(4, 12) : new AlignAndSize(8, 16); + public static AlignAndSize NativeString(int bits) => (bits == 32 || bits == 0) ? new AlignAndSize(4, 8) : new AlignAndSize(8, 16); // 64-bit has 4 bytes of wasted space to make the alignment work + + public bool IsSentinel => size == -1; + + public override string ToString() + { + return String.Format("[{0};{1}]", align, size); + } + } + + private static Dictionary[] ValueTypeAlignment = { + new Dictionary(new TypeReferenceEqualityComparer()), new Dictionary(new TypeReferenceEqualityComparer()) + }; + + private static Dictionary[] StructFieldAlignment = { + new Dictionary(new FieldReferenceComparer()), new Dictionary(new FieldReferenceComparer()) + }; + + internal static Dictionary[] ValueTypeIsComplex = { + new Dictionary(new TypeReferenceEqualityComparer()), new Dictionary(new TypeReferenceEqualityComparer()) + }; + + public static AlignAndSize AlignAndSizeOfType(MetadataType mtype, int bits) + { + if (mtype == MetadataType.Boolean || mtype == MetadataType.Byte || mtype == MetadataType.SByte) return AlignAndSize.One; + if (mtype == MetadataType.Int16 || mtype == MetadataType.UInt16 || mtype == MetadataType.Char) return AlignAndSize.Two; + if (mtype == MetadataType.Int32 || mtype == MetadataType.UInt32 || mtype == MetadataType.Single) return AlignAndSize.Four; + if (mtype == MetadataType.Int64 || mtype == MetadataType.UInt64 || mtype == MetadataType.Double) return AlignAndSize.Eight; + if (mtype == MetadataType.IntPtr || mtype == MetadataType.UIntPtr) return AlignAndSize.Pointer(bits); + if (mtype == MetadataType.String) return AlignAndSize.NativeString(bits); + + throw new ArgumentException($"Metadata type {mtype} is a special type which is not supported"); + } + + public static AlignAndSize AlignAndSizeOfType(TypeReference typeRef, int bits) + { + // This is a gross hack and i'm not proud of it; we use bits as an array index, + // and we call this method recursively. + if (bits == 32) bits = 0; + else if (bits == 64) bits = 1; + + if (typeRef.IsPointer) + return AlignAndSize.Pointer(bits); + + TypeDefinition fixedSpecialType = typeRef.FixedSpecialType(); + if (fixedSpecialType != null) + { + return AlignAndSizeOfType(fixedSpecialType.MetadataType, bits); + } + + var type = typeRef.Resolve(); + + // Handle the case where we have a fixed buffer. Cecil will name it: "e_FixedBuffer" + if (type.ClassSize != -1 && typeRef.Name.Contains(">e__FixedBuffer")) + { + // Fixed buffers can only be of primitive types so inspect the fields of the buffer (there should only be one) + // and determine the packing requirement for the type + if (type.Fields.Count() != 1) + throw new ArgumentException("A FixedBuffer type contains more than one field, this should not happen"); + + var fieldAlignAndSize = AlignAndSizeOfType(type.Fields[0].FieldType.MetadataType, bits); + return new AlignAndSize(fieldAlignAndSize.align, type.ClassSize); + } + else if (type.IsExplicitLayout && type.ClassSize > 0 && type.PackingSize > 0) + { + return new AlignAndSize(type.PackingSize, type.ClassSize); + } + + if (ValueTypeAlignment[bits].ContainsKey(typeRef)) + { + var sz = ValueTypeAlignment[bits][typeRef]; + + if(sz.IsSentinel) + throw new ArgumentException($"Type {typeRef} triggered sentinel; recursive value type definition"); + + return sz; + } + + if (typeRef.IsArray) + throw new ArgumentException($"Can't represent {typeRef}: C# array types cannot be represented directly, use DynamicArray"); + + if (typeRef.IsDynamicArray()) + { + var elementType = typeRef.DynamicArrayElementType(); + //Console.WriteLine($"{nts.TypeArguments[0]}"); + // call this just for the side effect checks + if (AlignAndSizeOfType(elementType, bits).size == 0) + throw new Exception("Unexpected type with size 0: " + elementType); + + // arrays match std::array, for emscripten at least + return AlignAndSize.DynamicArray(bits); + } + + if (type.IsEnum) + { + // Inspect the __value member to determine the underlying type size + var enumBaseType = type.Fields.First(f => f.Name == "value__").FieldType; + return AlignAndSizeOfType(enumBaseType, bits); + } + + if (!type.IsValueType) + { + // Why not throw? Really should expect this: + //throw new ArgumentException($"Type {type} ({type.Name}) was expected to be a value type"); + // However, the DisposeSentinel is a ManagedType that sits in the NativeContainers. + // Treat it as an opaque pointer and skip over it. + return AlignAndSizeOfType(MetadataType.IntPtr, bits); + } + + ValueTypeAlignment[bits].Add(typeRef, AlignAndSize.Sentinel); + PreprocessTypeFields(typeRef, bits); + return ValueTypeAlignment[bits][typeRef]; + } + + public static AlignAndSize AlignAndSizeOfField(FieldReference fieldRef, int bits) + { + if (bits == 32) bits = 0; + else if (bits == 64) bits = 1; + + if (!StructFieldAlignment[bits].ContainsKey(fieldRef)) + { + PreprocessTypeFields(fieldRef.DeclaringType, bits); + } + return StructFieldAlignment[bits][fieldRef]; + } + + public static int AlignUp(int sz, int align) + { + if (align == 0) + return sz; + int k = (sz + align - 1); + return k - k % align; + } + + public static bool HasNestedDynamicArrayType(TypeReference type) + { + if (type.IsPrimitive || type.Resolve().IsEnum || type.MetadataType == MetadataType.String) return false; + if (type.IsDynamicArray()) return true; + + foreach (var field in type.Resolve().Fields) + { + if (field.IsNotSerialized) continue; + if (HasNestedDynamicArrayType(field.FieldType)) + return true; + } + + return false; + } + + private static HashSet AlreadyValidated = new HashSet(); + + public static void ValidateAllowedObjectType(TypeReference typeRef) + { + TypeDefinition type = typeRef.Resolve(); + if (typeRef.IsPrimitive || type.IsEnum || typeRef.MetadataType == MetadataType.String) + return; + + if (AlreadyValidated.Contains(type)) + return; + + AlreadyValidated.Add(type); + + var typeResolver = TypeResolver.For(type); + foreach (var field in type.Fields) + ValidateAllowedObjectType(typeResolver.Resolve(field.FieldType)); + } + + public static void PreprocessTypeFields(TypeReference valuetype, int bits) + { + if (bits == 32) bits = 0; + else if (bits == 64) bits = 1; + + int size = 0; + int highestFieldAlignment = 0; + bool isComplex = false; + + // have we already preprocessed this? + if (ValueTypeAlignment[bits].ContainsKey(valuetype) && + !ValueTypeAlignment[bits][valuetype].IsSentinel) + { + return; + } + + // For each field, calculate its layout as if it was a C++ struct + //Console.WriteLine($"Type {valuetype}"); + var typeResolver = TypeResolver.For(valuetype); + var typeDef = valuetype.Resolve(); + foreach (var fs in typeDef.Fields) + { + if (fs.IsStatic) + continue; + + var fieldType = typeResolver.Resolve(fs.FieldType); + + var sz = AlignAndSizeOfType(fieldType, bits); + isComplex = isComplex || fieldType.IsComplex(); + + // In C++, all members of a struct must have their own address. + // If we have a "struct {}" as a member, treat its size as at least one byte. + sz = new AlignAndSize(sz.align, Math.Max(sz.size, 1)); + highestFieldAlignment = Math.Max(highestFieldAlignment, sz.align); + size = AlignUp(size, sz.align); + //Console.WriteLine($" Field: {fs.Name} ({fs.GetType()}) - offset: {size} alignment {sz.align} sz {sz.size}"); + StructFieldAlignment[bits].Add(typeResolver.Resolve(fs) /*VERIFY*/, new AlignAndSize(sz.align, sz.size, size)); + + int offset = fs.Offset; + if (offset >= 0) + size = offset + sz.size; + else + size += sz.size; + } + // same min size for outer struct + size = Math.Max(size, 1); + + // C++ aligns struct sizes up to the highest alignment required + size = AlignUp(size, highestFieldAlignment); + + // If an explicit size have been provided use that instead + if (typeDef.IsExplicitLayout && typeDef.ClassSize > 0) + size = typeDef.ClassSize; + + // Alignment requirements are > 0 + highestFieldAlignment = Math.Max(highestFieldAlignment, 1); + + // If an explict alignment has been provided use that instead + if (typeDef.IsExplicitLayout && typeDef.PackingSize > 0) + size = typeDef.PackingSize; + + ValueTypeAlignment[bits].Remove(valuetype); + ValueTypeAlignment[bits].Add(valuetype, new AlignAndSize(highestFieldAlignment, size, 0, typeDef.Fields.Count == 0)); + //Console.WriteLine($"ValueType: {valuetype.Name} ({valuetype.GetType()}) - alignment {highestFieldAlignment} sz {size}"); + ValueTypeIsComplex[bits].Add(valuetype, isComplex); + } + + internal static void GetFieldOffsetsOfRecurse(Func match, int offset, TypeReference type, List list, int bits) + { + int in_type_offset = 0; + var typeResolver = TypeResolver.For(type); + foreach (var f in type.Resolve().Fields) + { + if (f.IsStatic) + continue; + + uint alignUp(uint a, uint align) => (a + ((align - a) % align)); + int valueOr1(int v) => Math.Max(v, 1); + + TypeUtils.AlignAndSize resize(TypeUtils.AlignAndSize s) => new TypeUtils.AlignAndSize( + valueOr1(s.align), + valueOr1(s.size)); + + var fieldReference = typeResolver.Resolve(f); + var fieldType = typeResolver.Resolve(f.FieldType); + + var tinfo = resize(TypeUtils.AlignAndSizeOfType(fieldType, bits)); + if (f.Offset != -1) + in_type_offset = f.Offset; + else + in_type_offset = (int)alignUp((uint)in_type_offset, (uint)tinfo.align); + + if (fieldType.IsDynamicArray() && match(fieldReference, fieldType.DynamicArrayElementType())) + { + // +1 so that we have a way to indicate an Array at position 0 + // fixup code subtracts 1 + list.Add(-(offset + in_type_offset + 1)); + } + else if (match(fieldReference, fieldType)) + { + list.Add(offset + in_type_offset); + } + else if (fieldType.IsValueType && !fieldType.IsPrimitive) + { + GetFieldOffsetsOfRecurse(match, offset + in_type_offset, fieldType, list, bits); + } + + in_type_offset += tinfo.size; + } + } + + public static List GetFieldOffsetsOf(TypeReference typeToFind, TypeReference typeToLookIn, int archBits) + { + var offsets = new List(); + + if (typeToLookIn != null) + { + GetFieldOffsetsOfRecurse((_, typeRef) => TypeReferenceEqualityComparer.AreEqual(typeRef, typeToFind), 0, typeToLookIn, offsets, archBits); + } + + return offsets; + } + + /* match: 1st param is the Field, 2nd param is the FieldType */ + public static List GetFieldOffsetsOf(Func match, TypeReference typeToLookIn, int archBits) + { + var offsets = new List(); + + if (typeToLookIn != null) + { + GetFieldOffsetsOfRecurse(match, 0, typeToLookIn, offsets, archBits); + } + + return offsets; + } + + public static List GetFieldOffsetsOf(string fieldTypeName, TypeReference typeToLookIn, int archBits) + { + var offsets = new List(); + + if (typeToLookIn != null) + { + GetFieldOffsetsOfRecurse((_, typeRef) => typeRef.Resolve().FullName == fieldTypeName, 0, typeToLookIn, offsets, archBits); + } + + return offsets; + } + + public static List GetFieldOffsetsOfByFieldName(string fieldName, TypeReference typeToLookIn, int archBits) + { + var offsets = new List(); + + if (typeToLookIn != null) + { + GetFieldOffsetsOfRecurse((fieldRef, typeRef) => fieldRef.Name == fieldName, 0, typeToLookIn, offsets, archBits); + } + + return offsets; + } + + public static List GetEntityFieldOffsets(TypeReference type, int archBits) + { + return GetFieldOffsetsOf("Unity.Entities.Entity", type, archBits); + } + } +} + +#endif \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/TypeUtils.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/TypeUtils.cs.meta new file mode 100644 index 000000000..198ccc334 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/TypeUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e83640b4ccaafb24686f45f255d3920c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/Unity.Entities.BuildUtils.asmdef b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/Unity.Entities.BuildUtils.asmdef new file mode 100644 index 000000000..902df8f74 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/Unity.Entities.BuildUtils.asmdef @@ -0,0 +1,16 @@ +{ + "name": "Unity.Entities.BuildUtils", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": ["Editor"], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": true, + "precompiledReferences": [ + "Mono.Cecil.dll", + "Mono.Cecil.Rocks.dll", + "Mono.Cecil.Mdb.dll", + "Mono.Cecil.Pdb.dll" + ], + "defineConstraints": [] +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/Unity.Entities.BuildUtils.asmdef.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/Unity.Entities.BuildUtils.asmdef.meta new file mode 100644 index 000000000..ad1b1a6f5 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.BuildUtils/Unity.Entities.BuildUtils.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e31c28f855847544bb5a2b10844a00b0 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests.meta new file mode 100644 index 000000000..6e8f0c8a6 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a6ed173e746bcdc46be55800be2bf18e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/BlobAssetSafetyVerifier.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/BlobAssetSafetyVerifier.meta new file mode 100644 index 000000000..b3d75d472 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/BlobAssetSafetyVerifier.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a4c63ef175e2a374f8cf73c86db128e8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/BlobAssetSafetyVerifier/BlobAssetSafetyVerifierTests.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/BlobAssetSafetyVerifier/BlobAssetSafetyVerifierTests.cs new file mode 100644 index 000000000..92f7537ba --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/BlobAssetSafetyVerifier/BlobAssetSafetyVerifierTests.cs @@ -0,0 +1,162 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Mono.Cecil; +using NUnit.Framework; +using Unity.CompilationPipeline.Common.Diagnostics; +using Unity.Entities.CodeGen.Tests.TestTypes; + +namespace Unity.Entities.CodeGen.Tests +{ + [TestFixture] + public class BlobAssetSafetyVerifierTests : PostProcessorTestBase + { + public struct MyBlob + { + public BlobArray myfloats; + } + + class StoreBlobAssetReferenceValueInLocal_Class + { + static BlobAssetReference _blobAssetReference; + + void Method() + { + MyBlob blob = _blobAssetReference.Value; + EnsureNotOptimizedAway(blob.myfloats.Length); + } + } + + [Test] + public void StoreBlobAssetReferenceValueInLocal() + { + AssertProducesError( + typeof(StoreBlobAssetReferenceValueInLocal_Class), + "error MayOnlyLiveInBlobStorageViolation: MyBlob may only live in blob storage. Access it by ref instead: `ref MyBlob yourVariable = ref ...`"); + } + + class LoadFieldFromBlobAssetReference_Class + { + static BlobAssetReference _blobAssetReference; + + void Method() + { + BlobArray myFloats = _blobAssetReference.Value.myfloats; + EnsureNotOptimizedAway(myFloats.Length); + } + } + + [Test] + public void LoadFieldFromBlobAssetReference() + { + AssertProducesError( + typeof(LoadFieldFromBlobAssetReference_Class), + " error MayOnlyLiveInBlobStorageViolation: You may only access .myfloats by ref, as it may only live in blob storage. try `ref BlobArray yourVariable = ref yourMyBlob.myfloats`"); + } + + class WithReferenceToValidType_Class + { + BoidInAnotherAssembly someField; + void Method() + { + this.someField = new BoidInAnotherAssembly(); + EnsureNotOptimizedAway(this.someField); + } + } + + [Test] + public void FailResolveWithWarning() + { + AssertProducesWarning(typeof(WithReferenceToValidType_Class), + failResolve: true, + "ResolveFailureWarning: Unable to resolve type Unity.Entities.CodeGen.Tests.TestTypes.BoidInAnotherAssembly for verification"); + } + + class ClassWithValidBlobReferenceUsage + { + public class GenericTypeWithVolatile + { + public volatile T[] buffer; + public T this[int i] { get { return buffer[i]; } set { buffer[i] = value; } } + } + GenericTypeWithVolatile _intGeneric; + BoidInAnotherAssembly _someField; + BlobAssetReference _blobAssetReference; + + void Method() + { + _intGeneric = new GenericTypeWithVolatile(); + _intGeneric.buffer = new[] {32, 12, 41}; + EnsureNotOptimizedAway(_intGeneric.buffer); + + _someField = new BoidInAnotherAssembly(); + EnsureNotOptimizedAway(_someField); + + ref BlobArray myFloats = ref _blobAssetReference.Value.myfloats; + EnsureNotOptimizedAway(myFloats.Length); + + ref MyBlob blob = ref _blobAssetReference.Value; + EnsureNotOptimizedAway(blob.myfloats.Length); + } + } + + [Test] + public void ValidBlobReferenceUsageSucceeds() + { + AssertProducesNoError(typeof(ClassWithValidBlobReferenceUsage)); + } + + private void AssertProducesNoError(Type typeWithCodeUnderTest) + { + Assert.DoesNotThrow(() => + { + var methodToAnalyze = MethodDefinitionForOnlyMethodOf(typeWithCodeUnderTest); + var diagnosticMessages = new List(); + + try + { + var verifyDiagnosticMessages = BlobAssetSafetyVerifier.VerifyMethod(methodToAnalyze, new HashSet()); + diagnosticMessages.AddRange(verifyDiagnosticMessages); + } + catch (FoundErrorInUserCodeException exc) + { + diagnosticMessages.AddRange(exc.DiagnosticMessages); + } + + Assert.AreEqual(0, diagnosticMessages.Count); + }); + } + + protected override void AssertProducesInternal( + Type typeWithCodeUnderTest, + DiagnosticType diagnosticType, + string[] shouldContains, + bool failResolve = false) + { + var methodToAnalyze = MethodDefinitionForOnlyMethodOf(typeWithCodeUnderTest, failResolve); + var diagnosticMessages = new List(); + + try + { + var verifyDiagnosticMessages = BlobAssetSafetyVerifier.VerifyMethod(methodToAnalyze, new HashSet()); + diagnosticMessages.AddRange(verifyDiagnosticMessages); + } + catch (FoundErrorInUserCodeException exc) + { + diagnosticMessages.AddRange(exc.DiagnosticMessages); + } + + Assert.AreEqual(1, diagnosticMessages.Count); + Assert.AreEqual(diagnosticType, diagnosticMessages.Single().DiagnosticType); + + StringAssert.Contains(shouldContains.Single(), diagnosticMessages.Single().MessageData); + + AssertDiagnosticHasSufficientFileAndLineInfo(diagnosticMessages); + } + + private void AssertProducesWarning(Type systemType, bool failResolve, params string[] shouldContainErrors) + { + AssertProducesInternal(systemType, DiagnosticType.Warning, shouldContainErrors, failResolve); + } + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/BlobAssetSafetyVerifier/BlobAssetSafetyVerifierTests.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/BlobAssetSafetyVerifier/BlobAssetSafetyVerifierTests.cs.meta new file mode 100644 index 000000000..e47a2447f --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/BlobAssetSafetyVerifier/BlobAssetSafetyVerifierTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 93bdd891a8fb4fb184d0e24bd1944071 +timeCreated: 1575732554 \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/CecilHelpersTests.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/CecilHelpersTests.cs new file mode 100644 index 000000000..fdd6a5e34 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/CecilHelpersTests.cs @@ -0,0 +1,53 @@ +using System; +using System.Linq; +using System.Text.RegularExpressions; +using NUnit.Framework; +using Mono.Cecil.Cil; + +namespace Unity.Entities.CodeGen.Tests +{ + [TestFixture] + public class CecilHelpersTests + { + [Test] + public void MatchStartInExactMatch() + { + var instructions = MakeInstructions(Pattern1Instructions); + var pattern = Pattern1; + + Assert.IsTrue(CecilHelpers.IsStartOfSequence(instructions.First(), pattern, out var match)); + CollectionAssert.AreEquivalent(instructions, match); + } + + [Test] + public void MatchEndInExactMatch() + { + var instructions = MakeInstructions(Pattern1Instructions); + var pattern = Pattern1; + + Assert.IsTrue(CecilHelpers.IsEndOfSequence(instructions.Last(), pattern, out var match)); + CollectionAssert.AreEquivalent(instructions, match); + } + + + private static Func[] Pattern1 => + new Func[] + { + i => i.OpCode == OpCodes.Add, + i => i.OpCode == OpCodes.Dup, + }; + + private static Instruction[] Pattern1Instructions => MakeInstructions(new[]{Instruction.Create(OpCodes.Add), Instruction.Create(OpCodes.Dup)}); + + private static Instruction[] MakeInstructions(params Instruction[] inputs) + { + for (int i = 0; i != inputs.Length - 1;i++) + { + inputs[i].Next = inputs[i + 1]; + inputs[i + 1].Previous = inputs[i]; + } + + return inputs; + } + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/CecilHelpersTests.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/CecilHelpersTests.cs.meta new file mode 100644 index 000000000..bd0cd2273 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/CecilHelpersTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 365c8b8e81598644f8d83417b51f6ec9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/IntegrationTest.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/IntegrationTest.cs new file mode 100644 index 000000000..9868cae4a --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/IntegrationTest.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using Mono.Cecil; +using NUnit.Framework; +using Unity.Entities.Editor; +using Unity.Entities.Hybrid; + +namespace Unity.Entities.CodeGen.Tests +{ + [TestFixture] + public abstract class IntegrationTest : LambdaJobsPostProcessorTestBase + { + // Make sure to not check this in with true or your tests will always pass! + public static bool overwriteExpectationWithReality = false; + + protected abstract string ExpectedPath { get; } + protected virtual string AdditionalIL => string.Empty; + + static bool IsAssemblyBuiltAsDebug() + { + var debuggableAttributes = typeof(IntegrationTest).Assembly.GetCustomAttributes(typeof(DebuggableAttribute), false); + return debuggableAttributes.Any(debuggableAttribute => ((DebuggableAttribute) debuggableAttribute).IsJITTrackingEnabled); + } + + protected void RunTest(TypeReference type) + { + // Ideally these tests to run in Release codegen or otherwise the generated IL won't be deterministic (due to differences between /optimize+ and /optimize-. + // We attempt to make the tests generate the same decompiled C# in any case (by making sure all variables are used). + if (IsAssemblyBuiltAsDebug()) + UnityEngine.Debug.LogWarning("Integration tests should only be run with release code optimizations turned on for consistent codegen. Switch your settings in Preferences->External Tools->Editor Attaching (in 2019.3) or Preferences->General->Code Optimization On Startup (in 2020.1+) to be able to run these tests."); + + var expectationFile = Path.GetFullPath($"{ExpectedPath}/{GetType().Name}.expectation.txt"); + var jobCSharp = Decompiler.DecompileIntoCSharpAndIL(type, DecompiledLanguage.CSharpOnly).CSharpCode; + var actualLines = jobCSharp.Split('\n').Where(s => !string.IsNullOrWhiteSpace(s)).ToArray(); + + var shouldOverWrite = overwriteExpectationWithReality || !File.Exists(expectationFile); + + if (shouldOverWrite) + { + File.WriteAllText(expectationFile, jobCSharp); + } + string expected = File.ReadAllText(expectationFile); + var expectedLines = expected.Split('\n').Where(s => !string.IsNullOrWhiteSpace(s)).ToArray(); + + var attributeRegex = new Regex(@"^[\t, ]*\[[\w]+(\(.*\))*\][\s]*$"); + var actualAttributes = new List(); + var expectedAttributes = new List(); + + bool success = expectedLines.Length == actualLines.Length; + if (!success) + Console.WriteLine($"Incorrect number of lines. Expected lines: {expectedLines.Length}, actual lines: {actualLines.Length}"); + if (success) + { + for (int i = 0; i < actualLines.Length; ++i) + { + string actualLine = actualLines[i]; + string expectedLine = expectedLines[i]; + + if (attributeRegex.IsMatch(actualLine)) + { + actualAttributes.Add(actualLine.Trim()); + expectedAttributes.Add(expectedLine.Trim()); + continue; + } + + if (expectedLine != actualLine) + { + success = false; + Console.WriteLine($"Mismatched line at {i}.\nExpected line:\n\n{expectedLine}\n\nActual line:\n\n{actualLine}\n\n"); + break; + } + } + + actualAttributes.Sort(); + expectedAttributes.Sort(); + if (success && !expectedAttributes.SequenceEqual(actualAttributes)) + { + success = false; + var expectedAttributesStr = String.Join("\n", expectedAttributes); + var actualAttributesStr = String.Join("\n", actualAttributes); + Console.WriteLine($"Mismatched attributes.\nExpected attributes:\n\n{expectedAttributesStr}\n\nActual attributes:\n\n {actualAttributesStr}\n\n"); + } + } + + if (!success || overwriteExpectationWithReality) + { + var tempFolder = Path.GetTempPath(); + var path = $@"{tempFolder}decompiled.cs"; + File.WriteAllText(path, jobCSharp + Environment.NewLine + Environment.NewLine + AdditionalIL); + Console.WriteLine("Actual Decompiled C#: "); + Console.WriteLine((string)jobCSharp); + if (!String.IsNullOrEmpty(AdditionalIL)) + { + Console.WriteLine("Addition IL: "); + Console.WriteLine(AdditionalIL); + } + UnityEngine.Debug.Log($"Wrote expected csharp to editor log and to {path}"); + } + + if (shouldOverWrite) + return; + + Assert.IsTrue(success); + } + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/IntegrationTest.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/IntegrationTest.cs.meta new file mode 100644 index 000000000..14e85fa9b --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/IntegrationTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2cdefb8ca901a3e458eddc57fac5e9e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobDescriptionConstructionTests.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobDescriptionConstructionTests.cs new file mode 100644 index 000000000..f6977457a --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobDescriptionConstructionTests.cs @@ -0,0 +1,384 @@ +using System; +using System.Linq; +using Mono.Cecil; +using NUnit.Framework; +using Unity.Entities.CodeGen.Tests.LambdaJobs.Infrastructure; +using Unity.Collections; +using Unity.Entities.CodeGeneratedJobForEach; +using Unity.Jobs; + +namespace Unity.Entities.CodeGen.Tests +{ + [TestFixture] + public class LambdaJobDescriptionConstructionTests : LambdaJobsPostProcessorTestBase + { + [Test] + public void EntitiesForEachTest() + { + var methodToAnalyze = MethodDefinitionForOnlyMethodOf(typeof(WithForEachSystem)); + + var forEachDescriptionConstruction = LambdaJobDescriptionConstruction.FindIn(methodToAnalyze).Single(); + + var icm = forEachDescriptionConstruction.InvokedConstructionMethods; + + CollectionAssert.AreEqual(new[] + { + nameof(LambdaJobQueryConstructionMethods.WithEntityQueryOptions), + nameof(LambdaJobDescriptionConstructionMethods.WithBurst), + nameof(LambdaJobQueryConstructionMethods.WithNone), + nameof(LambdaJobQueryConstructionMethods.WithChangeFilter), + nameof(LambdaJobDescriptionConstructionMethods.WithName), + nameof(LambdaForEachDescriptionConstructionMethods.ForEach), + }, icm.Select(i => i.MethodName)); + + + CollectionAssert.AreEqual(new[] + { + 1, + 3, + 0, + 0, + 1, + 1, + }, icm.Select(i => i.Arguments.Length)); + + Assert.AreEqual("MyJobName", icm[4].Arguments[0]); + CollectionAssert.AreEqual(new[] {nameof(Translation), nameof(Velocity)},icm[3].TypeArguments.Select(t => t.Name)); + + Assert.AreEqual(EntityQueryOptions.IncludePrefab, (EntityQueryOptions) icm[0].Arguments.Single()); + } + + class WithForEachSystem : JobComponentSystem + { + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + float dt = 2.34f; + + return Entities + .WithEntityQueryOptions(EntityQueryOptions.IncludePrefab) + .WithBurst(synchronousCompilation:true) + .WithNone() + .WithChangeFilter() + .WithName("MyJobName") + .ForEach( + (ref Translation translation, ref Boid boid,in Velocity velocity) => + { + translation.Value += velocity.Value * dt; + }) + .Schedule(inputDeps); + } + } + + [Test] + public void SingleJobTest() + { + var methodToAnalyze = MethodDefinitionForOnlyMethodOf(typeof(SingleJobTestSystem)); + + var forEachDescriptionConstruction = LambdaJobDescriptionConstruction.FindIn(methodToAnalyze).Single(); + + var icm = forEachDescriptionConstruction.InvokedConstructionMethods; + + Assert.AreEqual( LambdaJobDescriptionKind.Job, forEachDescriptionConstruction.Kind); + + CollectionAssert.AreEqual(new[] + { + nameof(LambdaJobDescriptionConstructionMethods.WithBurst), + nameof(LambdaJobDescriptionConstructionMethods.WithName), + nameof(LambdaSingleJobDescriptionConstructionMethods.WithCode), + }, icm.Select(i => i.MethodName)); + + CollectionAssert.AreEqual(new[] + { + 3, + 1, + 1, + }, icm.Select(i => i.Arguments.Length)); + + Assert.AreEqual("MyJobName", icm[1].Arguments[0]); + } + + class SingleJobTestSystem : JobComponentSystem + { + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + return Job + .WithBurst(synchronousCompilation:true) + .WithName("MyJobName") + .WithCode(() + => + { + }) + .Schedule(inputDeps); + } + } + +#if ENABLE_DOTS_COMPILER_CHUNKS + [Test] + public void JobChunkTest() + { + var methodToAnalyze = MethodDefinitionForOnlyMethodOf(typeof(JobChunkTestSystem)); + + var forEachDescriptionConstruction = LambdaJobDescriptionConstruction.FindIn(methodToAnalyze).Single(); + + var icm = forEachDescriptionConstruction.InvokedConstructionMethods; + Assert.AreEqual( LambdaJobDescriptionKind.Chunk, forEachDescriptionConstruction.Kind); + CollectionAssert.AreEqual(new[] + { + nameof(LambdaJobDescriptionConstructionMethods.WithBurst), + nameof(LambdaJobDescriptionConstructionMethods.WithName), + nameof(LambdaJobChunkDescriptionConstructionMethods.ForEach), + }, icm.Select(i => i.MethodName)); + + CollectionAssert.AreEqual(new[] + { + 4, + 1, + 1, + }, icm.Select(i => i.Arguments.Length)); + + Assert.AreEqual("MyJobName", icm[1].Arguments[0]); + } + + class JobChunkTestSystem : JobComponentSystem + { + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + return Chunks + .WithName("MyJobName") + .ForEach(delegate(ArchetypeChunk chunk, int index, int query) { }) + .Schedule(inputDeps); + } + } +#endif + + [Test] + public void DoesNotCaptureTest() + { + var methodToAnalyze = MethodDefinitionForOnlyMethodOf(typeof(WithCodeThatDoesNotCaptureSystem)); + + var icm = LambdaJobDescriptionConstruction.FindIn(methodToAnalyze).Single().InvokedConstructionMethods; + + CollectionAssert.AreEqual(new[] + { + nameof(LambdaForEachDescriptionConstructionMethods.ForEach), + }, icm.Select(i => i.MethodName)); + } + + class WithCodeThatDoesNotCaptureSystem : JobComponentSystem + { + protected override JobHandle OnUpdate(JobHandle inputDependency) + { + return Entities + .ForEach((ref Velocity e1) => { e1.Value += 1f;}) + .Schedule(inputDependency); + } + } + + [Test] + public void ControlFlowInsideWithChainTest() + { + AssertProducesError(typeof(ControlFlowInsideWithChainSystem), nameof(UserError.DC0010)); + } + + public class ControlFlowInsideWithChainSystem : JobComponentSystem + { + public bool maybe; + + protected override JobHandle OnUpdate(JobHandle inputDependencies) + { + return Entities + .WithName(maybe ? "One" : "Two") + .ForEach( + (ref Translation translation, ref Boid boid, in Velocity velocity) => + { + translation.Value += velocity.Value; + }) + .Schedule(inputDependencies); + } + } + + [Test] + public void UsingConstructionMultipleTimesThrows() + { + AssertProducesError(typeof(UseConstructionMethodMultipleTimes), nameof(UserError.DC0009), "WithName"); + } + + public class UseConstructionMethodMultipleTimes : JobComponentSystem + { + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + return Entities + .WithName("Cannot") + .WithName("Make up my mind") + .ForEach( + (ref Translation translation, ref Boid boid, in Velocity velocity) => + { + translation.Value += velocity.Value; + }) + .Schedule(inputDeps); + } + } + + [Test] + public void InvalidJobNamesThrow() + { + AssertProducesError(typeof(InvalidJobNameWithSpaces), nameof(UserError.DC0039), "WithName"); + AssertProducesError(typeof(InvalidJobNameStartsWithDigit), nameof(UserError.DC0039), "WithName"); + AssertProducesError(typeof(InvalidJobNameCompilerReservedName), nameof(UserError.DC0039), "WithName"); + } + + public class InvalidJobNameWithSpaces : JobComponentSystem + { + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + return Entities + .WithName("This name may not contain spaces") + .ForEach( + (ref Translation translation, ref Boid boid, in Velocity velocity) => + { + translation.Value += velocity.Value; + }) + .Schedule(inputDeps); + } + } + + public class InvalidJobNameStartsWithDigit : JobComponentSystem + { + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + return Entities + .WithName("1job") + .ForEach( + (ref Translation translation, ref Boid boid, in Velocity velocity) => + { + translation.Value += velocity.Value; + }) + .Schedule(inputDeps); + } + } + + public class InvalidJobNameCompilerReservedName : JobComponentSystem + { + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + return Entities + .WithName("__job") + .ForEach( + (ref Translation translation, ref Boid boid, in Velocity velocity) => + { + translation.Value += velocity.Value; + }) + .Schedule(inputDeps); + } + } + + [Test] + public void ForgotToAddForEachTest() + { + AssertProducesError(typeof(ForgotToAddForEach), nameof(UserError.DC0006)); + } + + class ForgotToAddForEach : TestJobComponentSystem + { + void Test() + { + Entities + .WithAny() + .Schedule(default); + } + } + + [Test] + public void WithReadOnlyCapturedVariableTest() + { + var methodToAnalyze = MethodDefinitionForOnlyMethodOf(typeof(WithReadOnlyCapturedVariable)); + var description = LambdaJobDescriptionConstruction.FindIn(methodToAnalyze).Single(); + var withReadOnly = description.InvokedConstructionMethods.Single(m => m.MethodName == nameof(LambdaJobDescriptionConstructionMethods.WithReadOnly)); + Assert.IsInstanceOf(withReadOnly.Arguments.Single()); + } + + class WithReadOnlyCapturedVariable : TestJobComponentSystem + { + void Test() + { + NativeArray myarray = new NativeArray(); + + Entities + .WithReadOnly(myarray) + .ForEach((ref Translation translation) => translation.Value += myarray[0]) + .Schedule(default); + } + } + + [Test] + public void WithReadOnlyCapturedVariableFromTwoScopesTest() + { + var methodToAnalyze = MethodDefinitionForOnlyMethodOf(typeof(WithReadOnlyCapturedVariableFromTwoScopes)); + var description = LambdaJobDescriptionConstruction.FindIn(methodToAnalyze).Single(); + + var withReadOnlyMethods = description.InvokedConstructionMethods.Where(m => m.MethodName == nameof(LambdaJobDescriptionConstructionMethods.WithReadOnly)); + Assert.AreEqual(2, withReadOnlyMethods.Count()); + foreach (var withReadOnly in withReadOnlyMethods) + Assert.IsInstanceOf(withReadOnly.Arguments.Single()); + } + + class WithReadOnlyCapturedVariableFromTwoScopes : TestJobComponentSystem + { + void Test() + { + NativeArray outerScopeArray = new NativeArray(); + { + NativeArray innerScopeArray = new NativeArray(); + Entities + .WithReadOnly(outerScopeArray) + .WithReadOnly(innerScopeArray) + .ForEach((ref Translation translation) => translation.Value += outerScopeArray[0] + innerScopeArray[0]) + .Schedule(default); + } + } + } + + [Test] + public void WithoutScheduleInvocationTest() + { + AssertProducesError(typeof(WithoutScheduleInvocation), nameof(UserError.DC0011)); + } + + public class WithoutScheduleInvocation : JobComponentSystem + { + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + Entities.ForEach( + (ref Translation translation, ref Boid boid, in Velocity velocity) => + { + translation.Value += velocity.Value; + }); + return default; + } + } + + [Test] + public void RunInsideLoopCapturingLoopConditionTest() + { + var methodToAnalyze = MethodDefinitionForOnlyMethodOf(typeof(RunInsideLoopCapturingLoopCondition)); + + LambdaJobDescriptionConstruction.FindIn(methodToAnalyze).Single(); + } + + public class RunInsideLoopCapturingLoopCondition : JobComponentSystem + { + protected override JobHandle OnUpdate(JobHandle inputDeps) + { + int variable = 10; + for (int i = 0; i != variable; i++) + { + Entities + .ForEach((ref Translation e1) => { e1.Value += variable; }) + .Run(); + } + + return default; + } + } + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobDescriptionConstructionTests.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobDescriptionConstructionTests.cs.meta new file mode 100644 index 000000000..f5fa8656b --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobDescriptionConstructionTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d76df3870686f2346b9e947bb66c2c35 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs.meta new file mode 100644 index 000000000..6575930cc --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b674d7258ce55e14dab008ae35b91f3e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure.meta new file mode 100644 index 000000000..84d34520c --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9d4fa7cf4d6433d49aa35a430ffcd858 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/LambdaJobIntegrationTest.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/LambdaJobIntegrationTest.cs new file mode 100644 index 000000000..60e54128b --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/LambdaJobIntegrationTest.cs @@ -0,0 +1,47 @@ +using System; +using System.IO; +using System.Linq; +using System.Text; +using System.Collections.Generic; +using Mono.Cecil; +using NUnit.Framework; +using Unity.CompilationPipeline.Common.Diagnostics; + +namespace Unity.Entities.CodeGen.Tests.LambdaJobs.Infrastructure +{ + [TestFixture] + public abstract class LambdaJobIntegrationTest : IntegrationTest + { + protected override string ExpectedPath + { + get { return "Packages/com.unity.entities/Unity.Entities.CodeGen.Tests/LambdaJobs/IntegrationTests"; } + } + + StringBuilder _methodIL; + protected override string AdditionalIL + { + get { return _methodIL.ToString(); } + } + + protected void RunTest(Type type) + { + var methodToAnalyze = MethodDefinitionForOnlyMethodOf(type); + var forEachDescriptionConstructions = LambdaJobDescriptionConstruction.FindIn(methodToAnalyze); + JobStructForLambdaJob jobStructForLambdaJob = null; + foreach (var forEachDescriptionConstruction in forEachDescriptionConstructions) + { + List diagnosticMessages; + (jobStructForLambdaJob, diagnosticMessages) = LambdaJobsPostProcessor.Rewrite(methodToAnalyze, forEachDescriptionConstruction); + } + + _methodIL = new StringBuilder(); + if (methodToAnalyze != null) + { + foreach (var instruction in methodToAnalyze.Body.Instructions) + _methodIL.AppendLine(instruction.ToString()); + } + + RunTest(jobStructForLambdaJob.TypeDefinition.DeclaringType); + } + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/LambdaJobIntegrationTest.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/LambdaJobIntegrationTest.cs.meta new file mode 100644 index 000000000..57f3edb3c --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/LambdaJobIntegrationTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 438004e34a6ca4483aab5011bb92e17b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/TestJobComponentSystem.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/TestJobComponentSystem.cs new file mode 100644 index 000000000..6e7f13c07 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/TestJobComponentSystem.cs @@ -0,0 +1,12 @@ +using Unity.Entities; +using Unity.Jobs; + +[assembly: DisableAutoCreation] + +namespace Unity.Entities.CodeGen.Tests.LambdaJobs.Infrastructure +{ + public class TestJobComponentSystem : JobComponentSystem + { + protected override JobHandle OnUpdate(JobHandle inputDeps) => default; + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/TestJobComponentSystem.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/TestJobComponentSystem.cs.meta new file mode 100644 index 000000000..be2d69495 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/TestJobComponentSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 70c491931c5f1ec41b78cabaa63567a1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/TestTypes.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/TestTypes.cs new file mode 100644 index 000000000..811ae1509 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/TestTypes.cs @@ -0,0 +1,28 @@ +using Unity.Entities; + +public struct Boid : IComponentData +{ +} + +public struct Translation : IComponentData +{ + public float Value; +} + +public struct Velocity : IComponentData +{ + public float Value; +} + +public struct Acceleration : IComponentData +{ + public float Value; +} +public struct MyBufferInt : IBufferElementData +{ + public int Value; +} +public struct MyBufferFloat : IBufferElementData +{ + public float Value; +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/TestTypes.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/TestTypes.cs.meta new file mode 100644 index 000000000..fafade644 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobs/Infrastructure/TestTypes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0eacb32795b7b01428c38af43cc649cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobsLambdaJobsPostProcessorTests.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobsLambdaJobsPostProcessorTests.cs new file mode 100644 index 000000000..785447464 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobsLambdaJobsPostProcessorTests.cs @@ -0,0 +1,1127 @@ +using System; +using System.Linq; +using NUnit.Framework; +using Unity.Entities.CodeGen.Tests.LambdaJobs.Infrastructure; +using Unity.Collections; +using Unity.Entities.CodeGen.Tests.TestTypes; +using UnityEngine; + +namespace Unity.Entities.CodeGen.Tests +{ + [TestFixture] + public class LambdaJobsLambdaJobsPostProcessorTests : LambdaJobsPostProcessorTestBase + { + [Test] + public void LambdaTakingUnsupportedArgumentTest() + { + AssertProducesError(typeof(LambdaTakingUnsupportedArgument), nameof(UserError.DC0005)); + } + + class LambdaTakingUnsupportedArgument : TestJobComponentSystem + { + void Test() + { + Entities.ForEach( + (string whyAreYouPuttingAStringHereMakesNoSense) => { Console.WriteLine("Hello"); }) + .Schedule(default); + } + } + + + [Test] + public void WithConflictingNameTest() + { + AssertProducesError(typeof(WithConflictingName), nameof(UserError.DC0003)); + } + + class WithConflictingName : TestJobComponentSystem + { + void Test() + { + Entities + .WithName("VeryCommonName") + .ForEach( + (ref Translation t) => { }) + .Schedule(default); + + Entities + .WithName("VeryCommonName") + .ForEach( + (ref Translation t) => { }) + .Schedule(default); + } + } + + [Test] + public void ConflictingWithNoneTest() + { + AssertProducesError(typeof(ConflictingWithNone), nameof(UserError.DC0015), "Translation"); + } + + class ConflictingWithNone : TestJobComponentSystem + { + void Test() + { + Entities + .WithNone() + .ForEach((in Translation translation) => { }) + .Schedule(default); + } + } + + + + [Test] + public void ConflictingWithNoneBufferElementTest() + { + AssertProducesError(typeof(ConflictingWithNoneBufferElement), nameof(UserError.DC0015), "MyBufferFloat"); + } + + class ConflictingWithNoneBufferElement : TestJobComponentSystem + { + void Test() + { + Entities + .WithNone() + .ForEach((in DynamicBuffer myBuffer) => { }) + .Run(); + } + } + + + [Test] + public void ConflictingWithNoneAndWithAnyTest() + { + AssertProducesError(typeof(ConflictingWithNoneAndWithAny), nameof(UserError.DC0016), "Translation"); + } + + class ConflictingWithNoneAndWithAny : TestJobComponentSystem + { + void Test() + { + Entities + .WithNone() + .WithAny() + .ForEach((in Boid translation) => { }) + .Schedule(default); + } + } + + + [Test] + public void WithNoneWithInvalidTypeTest() + { + AssertProducesError(typeof(WithNoneWithInvalidType), nameof(UserError.DC0025), "ANonIComponentDataClass"); + } + + class WithNoneWithInvalidType : TestJobComponentSystem + { + class ANonIComponentDataClass + { + } + void Test() + { + Entities + .WithNone() + .ForEach((in Boid translation) => { }) + .Schedule(default); + } + } + + [Test] + public void WithNoneWithInvalidGenericParameterTest() + { + AssertProducesError(typeof(WithNoneWithInvalidGenericParameter), nameof(UserError.DC0025), "TValue"); + } + class WithNoneWithInvalidGenericParameter : TestJobComponentSystem + { + void Test() where TValue : struct + { + Entities + .WithNone() + .ForEach((in Boid translation) => { }) + .Schedule(default); + } + } + + [Test] + public void WithNoneWithInvalidGenericTypeTest() + { + AssertProducesError(typeof(WithNoneWithInvalidGenericType), nameof(UserError.DC0025), "GenericType`1"); + } + class WithNoneWithInvalidGenericType : TestJobComponentSystem + { + struct GenericType : IComponentData {} + void Test() + { + Entities + .WithNone>() + .ForEach((in Boid translation) => { }) + .Schedule(default); + } + } + + [Test] + public void ParameterWithInvalidGenericParameterTest() + { + AssertProducesError(typeof(ParameterWithInvalidGenericParameter), nameof(UserError.DC0025), "TValue"); + } + class ParameterWithInvalidGenericParameter : TestJobComponentSystem + { + void Test() where TValue : struct + { + Entities + .ForEach((in TValue generic) => { }) + .Schedule(default); + } + } + + [Test] + public void ParameterWithInvalidGenericTypeTest() + { + AssertProducesError(typeof(ParameterWithInvalidGenericType), nameof(UserError.DC0025), "GenericType`1"); + } + class ParameterWithInvalidGenericType : TestJobComponentSystem + { + struct GenericType : IComponentData {} + void Test() + { + Entities + .ForEach((in GenericType generic) => { }) + .Schedule(default); + } + } + + [Test] + public void InGenericSystemTypeTest() + { + AssertProducesError(typeof(InGenericSystemType<>), nameof(UserError.DC0025), "InGenericSystemType`1"); + } + public class InGenericSystemType : SystemBase + where T : struct, IComponentData + { + protected override void OnUpdate() + { + Entities.WithNone().ForEach((Entity e, ref T n) => { }).Run(); + } + } + + [Test] + public void WithReadOnly_IllegalArgument_Test() + { + AssertProducesError(typeof(WithReadOnly_IllegalArgument), nameof(UserError.DC0012)); + } + + class WithReadOnly_IllegalArgument : TestJobComponentSystem + { + void Test() + { + Entities + .WithReadOnly("stringLiteral") + .ForEach((in Boid translation) => { }) + .Schedule(default); + } + } + + [Test] + public void WithReadOnly_NonCapturedVariable_Test() + { + AssertProducesError(typeof(WithReadOnly_NonCapturedVariable), nameof(UserError.DC0012)); + } + + class WithReadOnly_NonCapturedVariable : TestJobComponentSystem + { + void Test() + { + var myNativeArray = new NativeArray(); + + Entities + .WithReadOnly(myNativeArray) + .ForEach((in Boid translation) => { }) + .Schedule(default); + } + } + + [Test] + public void WithUnsupportedParameterTest() + { + AssertProducesError(typeof(WithUnsupportedParameter), nameof(UserError.DC0005)); + } + + class WithUnsupportedParameter : TestJobComponentSystem + { + void Test() + { + Entities + .ForEach((string whoKnowsWhatThisMeans, in Boid translation) => { }) + .Schedule(default); + } + } + + [Test] + public void WithCapturedReferenceTypeTest() + { + AssertProducesError(typeof(WithCapturedReferenceType), nameof(UserError.DC0004)); + } + + class WithCapturedReferenceType : TestJobComponentSystem + { + class CapturedClass + { + public float value; + } + + void Test() + { + var capturedClass = new CapturedClass() {value = 3.0f}; + Entities + .ForEach((ref Translation t) => { t.Value = capturedClass.value; }) + .Schedule(default); + } + } + + [Test] + public void NestedScopeWithNonLambdaJobLambdaTest() + { + AssertProducesNoError(typeof(NestedScopeWithNonLambdaJobLambda)); + } + + class NestedScopeWithNonLambdaJobLambda : TestJobComponentSystem + { + void Test() + { + var outerValue = 3.0f; + { + var innerValue = 3.0f; + Entities + .ForEach((ref Translation t) => { t.Value = outerValue + innerValue; }) + .Schedule(default); + } + + DoThing(() => { outerValue = 4.0f; }); + } + + void DoThing(Action action) + { + action(); + } + } + + [Test] + public void CaptureFieldInLocalCapturingLambdaTest() + { + AssertProducesError(typeof(CaptureFieldInLocalCapturingLambda), nameof(UserError.DC0001), "myfield"); + } + + class CaptureFieldInLocalCapturingLambda : TestJobComponentSystem + { + private int myfield = 123; + + void Test() + { + int also_capture_local = 1; + Entities + .ForEach((ref Translation t) => { t.Value = myfield + also_capture_local; }) + .Schedule(default); + } + } + + [Test] + public void InvokeBaseMethodInBurstLambdaTest() + { + AssertProducesError(typeof(InvokeBaseMethodInBurstLambda), nameof(UserError.DC0002), "get_EntityManager"); + } + + class InvokeBaseMethodInBurstLambda : TestJobComponentSystem + { + void Test() + { + int version = 0; + Entities.ForEach((ref Translation t) => { version = base.EntityManager.Version; }).Run(); + } + } + + [Test] + public void InvokeExtensionMethodOnRefTypeInBurstLambdaTest() + { + AssertProducesError(typeof(InvokeExtensionMethodOnRefTypeInBurstLambda), nameof(UserError.DC0002), nameof(TestJobComponentSystemExtensionMethods.MyTestExtension)); + } + + class InvokeExtensionMethodOnRefTypeInBurstLambda : TestJobComponentSystem + { + void Test() + { + Entities.ForEach((ref Translation t) => { this.MyTestExtension(); }).Run(); + } + } + + [Test] + public void InvokeInterfaceExtensionMethodOnRefTypeInBurstLambdaTest() + { + AssertProducesError(typeof(InvokeInterfaceExtensionMethodOnRefTypeInBurstLambda), nameof(UserError.DC0002), nameof(TestJobComponentSystemExtensionMethods.MyTestExtensionInterface)); + } + + class InvokeInterfaceExtensionMethodOnRefTypeInBurstLambda : TestJobComponentSystem, TestJobComponentSystemExtensionMethods.ITestInterface + { + void Test() + { + Entities.ForEach((ref Translation t) => { this.MyTestExtensionInterface(); }).Run(); + } + } + + [Test] + public void InvokeStaticFunctionOnRefTypeInBurstLambdaTest() + { + AssertProducesError(typeof(InvokeStaticFunctionOnRefTypeInBurstLambda), nameof(UserError.DC0002), nameof(InvokeStaticFunctionOnRefTypeInBurstLambda.ActualProblem)); + } + + class InvokeStaticFunctionOnRefTypeInBurstLambda : TestJobComponentSystem + { + void Test() + { + Entities.ForEach((ref Translation t) => + { + NotAProblem(); + ActualProblem(this); + }).Run(); + } + + static void NotAProblem() { } + internal static void ActualProblem(JobComponentSystem s) { } + } + + [Test] + public void InvokeStaticFunctionOnValueTypeInBurstLambdaTest() + { + AssertProducesError(typeof(InvokeStaticFunctionOnValueTypeInBurstLambda), nameof(UserError.DC0002), nameof(InvokeStaticFunctionOnValueTypeInBurstLambda.ActualProblem)); + } + + class InvokeStaticFunctionOnValueTypeInBurstLambda : TestJobComponentSystem + { + void Test() + { + Entities.ForEach((ref Translation t) => + { + NotAProblem(t.Value); + ActualProblem(); + }).Run(); + } + + static void NotAProblem(float x) { } + internal void ActualProblem() {} + } + + [Test] + public void UseSharedComponentData_UsingSchedule_ProducesError() + { + AssertProducesError(typeof(SharedComponentDataUsingSchedule), nameof(UserError.DC0019), "MySharedComponentData"); + } + + class SharedComponentDataUsingSchedule : TestJobComponentSystem + { + struct MySharedComponentData : ISharedComponentData + { + } + + void Test() + { + Entities + .ForEach((MySharedComponentData mydata) => {}) + .Schedule(default); + } + } + + [Test] + public void SharedComponentDataReceivedByRef_ProducesError() + { + AssertProducesError(typeof(SharedComponentDataReceivedByRef), nameof(UserError.DC0020), "MySharedComponentData"); + } + + class SharedComponentDataReceivedByRef : TestJobComponentSystem + { + struct MySharedComponentData : ISharedComponentData + { + } + + void Test() + { + Entities + .WithoutBurst() + .ForEach((ref MySharedComponentData mydata) => {}) + .Run(); + } + } + + [Test] + public void CustomStructArgumentThatDoesntImplementSupportedInterfaceTest() + { + AssertProducesError(typeof(CustomStructArgumentThatDoesntImplementSupportedInterface), nameof(UserError.DC0021), "parameter 't' has type ForgotToAddInterface. This type is not a"); + } + + class CustomStructArgumentThatDoesntImplementSupportedInterface : TestJobComponentSystem + { + struct ForgotToAddInterface + { + + } + + void Test() + { + Entities + .ForEach((ref ForgotToAddInterface t) => { }) + .Schedule(default); + } + } + + + [Test] + public void CaptureFromMultipleScopesTest() + { + AssertProducesNoError(typeof(CaptureFromMultipleScopes)); + } + + class CaptureFromMultipleScopes : TestJobComponentSystem + { + void Test() + { + int scope1 = 1; + { + int scope2 = 2; + { + int scope3 = 3; + Entities + .ForEach((ref Translation t) => { t.Value = scope1 + scope2 + scope3;}) + .Schedule(default); + } + } + } + } + + [Test] + public void CaptureFieldInNonLocalCapturingLambdaTest() + { + AssertProducesError(typeof(CaptureFieldInNonLocalCapturingLambda), nameof(UserError.DC0001), "myfield"); + } + + class CaptureFieldInNonLocalCapturingLambda : TestJobComponentSystem + { + private int myfield = 123; + + void Test() + { + Entities + .ForEach((ref Translation t) => { t.Value = myfield; }) + .Schedule(default); + } + } + + [Test] + public void CaptureFieldByRefTest() + { + AssertProducesError(typeof(CaptureFieldByRef), nameof(UserError.DC0001), "m_MyField"); + } + + class CaptureFieldByRef : TestJobComponentSystem + { + int m_MyField = 123; + + void Test() + { + Entities + .ForEach((ref Translation t) => { NotAProblem(ref m_MyField); }) + .Schedule(default); + } + + static void NotAProblem(ref int a) { } + } + + [Test] + public void InvokeInstanceMethodInCapturingLambdaTest() + { + AssertProducesError(typeof(InvokeInstanceMethodInCapturingLambda), nameof(UserError.DC0002)); + } + + class InvokeInstanceMethodInCapturingLambda : TestJobComponentSystem + { + public object GetSomething(int i) => default; + + void Test() + { + int also_capture_local = 1; + Entities + .ForEach((ref Translation t) => { GetSomething(also_capture_local); }) + .Schedule(default); + } + } + + [Test] + public void InvokeInstanceMethodInNonCapturingLambdaTest() + { + AssertProducesError(typeof(InvokeInstanceMethodInNonCapturingLambda), nameof(UserError.DC0002)); + } + + class InvokeInstanceMethodInNonCapturingLambda : TestJobComponentSystem + { + public object GetSomething(int i) => default; + + void Test() + { + Entities + .ForEach((ref Translation t) => { GetSomething(3); }) + .Schedule(default); + } + } + + + + [Test] + public void LocalFunctionThatWritesBackToCapturedLocalTest() + { + AssertProducesError(typeof(LocalFunctionThatWritesBackToCapturedLocal), nameof(UserError.DC0013)); + } + + class LocalFunctionThatWritesBackToCapturedLocal : TestJobComponentSystem + { + void Test() + { + int capture_me = 123; + Entities + .ForEach((ref Translation t) => + { + void MyLocalFunction() + { + capture_me++; + } + + MyLocalFunction(); + }).Schedule(default); + } + } + + [Test] + public void LambdaThatWritesBackToCapturedLocalTest() + { + AssertProducesError(typeof(LambdaThatWritesBackToCapturedLocal), nameof(UserError.DC0013)); + } + + class LambdaThatWritesBackToCapturedLocal : TestJobComponentSystem + { + void Test() + { + int capture_me = 123; + Entities + .ForEach((ref Translation t) => { capture_me++; }).Schedule(default); + } + } + +#if !UNITY_DISABLE_MANAGED_COMPONENTS + [Test] + public void ManagedComponentInBurstJobTest() + { + AssertProducesError(typeof(ManagedComponentInBurstJob), nameof(UserError.DC0023)); + } + + class ManagedComponent : IComponentData, IEquatable + { + public bool Equals(ManagedComponent other) => false; + public override bool Equals(object obj) => false; + public override int GetHashCode() => 0; + } + + class ManagedComponentInBurstJob : TestJobComponentSystem + { + + void Test() + { + Entities.ForEach((ManagedComponent t) => {}).Run(); + } + } + + public void ManagedComponentInScheduleTest() + { + AssertProducesError(typeof(ManagedComponentInSchedule), nameof(UserError.DC0023)); + } + + class ManagedComponentInSchedule : TestJobComponentSystem + { + void Test() + { + Entities.ForEach((ManagedComponent t) => {}).Schedule(default); + } + } + + [Test] + public void ManagedComponentByReferenceTest() + { + AssertProducesError(typeof(ManagedComponentByReference), nameof(UserError.DC0024)); + } + + class ManagedComponentByReference : TestJobComponentSystem + { + void Test() + { + Entities.WithoutBurst().ForEach((ref ManagedComponent t) => {}).Run(); + } + } +#endif + + [Test] + public void WithAllWithSharedFilterTest() + { + AssertProducesError(typeof(WithAllWithSharedFilter), nameof(UserError.DC0026), "MySharedComponentData"); + } + + class WithAllWithSharedFilter : TestJobComponentSystem + { + struct MySharedComponentData : ISharedComponentData + { + public int Value; + } + + void Test() + { + Entities + .WithAll() + .WithSharedComponentFilter(new MySharedComponentData() { Value = 3 }) + .ForEach((in Boid translation) => { }) + .Schedule(default); + } + } + + + [Test] + public void WithSwitchStatementTest() + { + AssertProducesNoError(typeof(WithSwitchStatement)); + } + + class WithSwitchStatement : TestJobComponentSystem + { + struct AbilityControl : IComponentData + { + public enum State + { + Idle, + Active, + Cooldown + } + + public State behaviorState; + } + + void Test() + { + Entities.WithAll() + .ForEach((Entity entity, ref AbilityControl abilityCtrl) => + { + switch (abilityCtrl.behaviorState) + { + case AbilityControl.State.Idle: + abilityCtrl.behaviorState = AbilityControl.State.Active; + break; + case AbilityControl.State.Active: + abilityCtrl.behaviorState = AbilityControl.State.Cooldown; + break; + case AbilityControl.State.Cooldown: + abilityCtrl.behaviorState = AbilityControl.State.Idle; + break; + } + }).Run(); + } + } + + [Test] + public void HasTypesInAnotherAssemblyTest() + { + AssertProducesNoError(typeof(HasTypesInAnotherAssembly)); + } + + class HasTypesInAnotherAssembly : TestJobComponentSystem + { + void Test() + { + Entities + .WithAll() + .WithNone() + .WithReadOnly(new VelocityInAnotherAssembly() { Value = 3.0f }) + .WithAny() + .WithoutBurst() + .ForEach((ref RotationInAnotherAssembly a) => {}).Run(); + } + } + + [Test] + public void LambdaThatMakesNonExplicitStructuralChangesTest() + { + AssertProducesError(typeof(LambdaThatMakesNonExplicitStructuralChanges), nameof(UserError.DC0027)); + } + + class LambdaThatMakesNonExplicitStructuralChanges : TestJobComponentSystem + { + void Test() + { + float delta = 0.0f; + Entities + .WithoutBurst() + .ForEach((Entity entity, ref Translation t) => + { + float blah = delta + 1.0f; + EntityManager.RemoveComponent(entity); + }).Run(); + } + } + + [Test] + public void LambdaThatMakesStructuralChangesWithScheduleTest() + { + AssertProducesError(typeof(LambdaThatMakesStructuralChangesWithSchedule), nameof(UserError.DC0028)); + } + + class LambdaThatMakesStructuralChangesWithSchedule : TestJobComponentSystem + { + void Test() + { + float delta = 0.0f; + Entities.WithoutBurst() + .WithStructuralChanges() + .ForEach((Entity entity, ref Translation t) => + { + float blah = delta + 1.0f; + EntityManager.RemoveComponent(entity); + }).Schedule(default); + } + } + + [Test] + public void LambdaThatHasNestedLambdaTest() + { + AssertProducesError(typeof(LambdaThatHasNestedLambda), nameof(UserError.DC0029)); + } + + class LambdaThatHasNestedLambda : TestJobComponentSystem + { + void Test() + { + float delta = 0.0f; + Entities + .WithoutBurst() + .ForEach((Entity e1, ref Translation t1) => + { + Entities + .WithoutBurst() + .ForEach((Entity e2, ref Translation t2) => { delta += 1.0f; }).Run(); + }).Run(); + } + } + + [Test] + public void LambdaThatTriesToStoreNonValidEntityQueryVariableTest() + { + AssertProducesError(typeof(LambdaThatTriesToStoreNonValidEntityQueryVariable), nameof(UserError.DC0031)); + } + + class LambdaThatTriesToStoreNonValidEntityQueryVariable : TestJobComponentSystem + { + class EntityQueryHolder + { + public EntityQuery m_Query; + } + + void Test() + { + EntityQueryHolder entityQueryHolder = new EntityQueryHolder(); + + float delta = 0.0f; + Entities + .WithStoreEntityQueryInField(ref entityQueryHolder.m_Query) + .ForEach((Entity e2, ref Translation t2) => { delta += 1.0f; }).Run(); + } + } + + [Test] + public void LambdaThatTriesToStoreLocalEntityQueryVariableTest() + { + AssertProducesError(typeof(LambdaThatTriesToStoreLocalEntityQueryVariable), nameof(UserError.DC0031)); + } + + class LambdaThatTriesToStoreLocalEntityQueryVariable : TestJobComponentSystem + { + void Test() + { + EntityQuery query = null; + + float delta = 0.0f; + Entities + .WithStoreEntityQueryInField(ref query) + .ForEach((Entity e2, ref Translation t2) => { delta += 1.0f; }).Run(); + } + } + +#if !NET_DOTS + [Test] + public void LambdaInSystemWithExecuteAlwaysTest() + { + AssertProducesWarning(typeof(LambdaInSystemWithExecuteAlways), nameof(UserError.DC0032)); + } + + [ExecuteAlways] + class LambdaInSystemWithExecuteAlways : TestJobComponentSystem + { + void Test() + { + float delta = 0.0f; + Entities + .ForEach((Entity e1, ref Translation t1) => + { + delta += 1.0f; + }).Run(); + } + } +#endif + + [Test] + public void CallsMethodInComponentSystemBaseTest() + { + AssertProducesError(typeof(CallsMethodInComponentSystemBase), nameof(UserError.DC0002), "Time"); + } + + class CallsMethodInComponentSystemBase : TestJobComponentSystem + { + void Test() + { + Entities + .ForEach((ref Translation t) => { var targetDistance = Time.DeltaTime; }) + .Schedule(default); + } + } + + + [Test] + public void IncorrectUsageOfBufferIsDetected() + { + AssertProducesError(typeof(IncorrectUsageOfBuffer), nameof(UserError.DC0033), "MyBufferFloat"); + } + + class IncorrectUsageOfBuffer : TestJobComponentSystem + { + void Test() + { + Entities + .ForEach((MyBufferFloat f) => { }) + .Schedule(default); + } + } + + [Test] + public void CorrectUsageOfBufferIsNotDetected() + { + AssertProducesNoError(typeof(CorrectUsageOfBuffer)); + } + + class CorrectUsageOfBuffer : TestJobComponentSystem + { + void Test() + { + Entities + .ForEach((DynamicBuffer f) => { }) + .Schedule(default); + } + } + + + [Test] + public void ParameterNamesHaveStablePath() + { + // We expect that the fields for the parameters of a generated job have this path: + // {jobName}.Data._lambdaParameterValueProviders.forParameter_{parameterName}._type + // which we rewrite to + // {jobName}.Data.{parameterName} + // when we retrieve the job data in native code. + // The important part here is everything following {jobName}.Data. + var methodToAnalyze = MethodDefinitionForOnlyMethodOf(typeof(ParameterNamesPath)); + var forEachDescriptionConstructions = LambdaJobDescriptionConstruction.FindIn(methodToAnalyze); + var (jobStructForLambdaJob, diagnosticMessages) = LambdaJobsPostProcessor.Rewrite(methodToAnalyze, forEachDescriptionConstructions.First()); + + Assert.IsEmpty(diagnosticMessages); + + const string valueProviderFieldName = "_lambdaParameterValueProviders"; + var valueProvidersField = jobStructForLambdaJob.TypeDefinition.Fields.FirstOrDefault(f => f.Name == valueProviderFieldName); + Assert.IsNotNull(valueProvidersField, $"Could not find field {valueProviderFieldName} in generated lambda job!"); + + const string parameterFieldName = "forParameter_floatBuffer"; + var parameterField = valueProvidersField.FieldType.Resolve().Fields.FirstOrDefault(f => f.Name == parameterFieldName); + Assert.IsNotNull(parameterField, $"Could not find field {valueProviderFieldName}.{parameterFieldName} in generated lambda job!"); + + const string typeFieldName = "_type"; + var typeField = parameterField.FieldType.Resolve().Fields.FirstOrDefault(f => f.Name == typeFieldName); + Assert.IsNotNull(typeField, $"Could not find field {valueProviderFieldName}.{parameterFieldName}.{typeFieldName} in generated lambda job!"); + } + + class ParameterNamesPath : TestJobComponentSystem + { + void Test() + { + Entities + .WithName("ParameterNamesTest") + .ForEach((DynamicBuffer floatBuffer) => { }) + .Schedule(default); + } + } + + [Test] + public void ReadOnlyWarnsAboutArgumentType() + { + AssertProducesNoError(typeof(CorrectReadOnlyUsage)); + AssertProducesError(typeof(IncorrectReadOnlyUsage), nameof(UserError.DC0034), "myVar"); + } + + class CorrectReadOnlyUsage : TestJobComponentSystem + { + void Test() + { + NativeArray array = default; + Entities + .WithReadOnly(array) + .ForEach((ref Translation t) => { t.Value += array[0]; }) + .Schedule(default); + } + } + + class IncorrectReadOnlyUsage : TestJobComponentSystem + { + void Test() + { + int myVar = 0; + Entities + .WithReadOnly(myVar) + .ForEach((ref Translation t) => { t.Value += myVar; }) + .Schedule(default); + } + } + + [Test] + public void DeallocateOnJobCompletionWarnsAboutArgumentType() + { + AssertProducesNoError(typeof(CorrectDeallocateOnJobCompletionUsage)); + AssertProducesError(typeof(IncorrectDeallocateOnJobCompletionUsage), nameof(UserError.DC0035), "myVar"); + } + + class CorrectDeallocateOnJobCompletionUsage : TestJobComponentSystem + { + void Test() + { + NativeArray array = default; + Entities + .WithReadOnly(array) + .WithDeallocateOnJobCompletion(array) + .ForEach((ref Translation t) => { t.Value += array[0]; }) + .Schedule(default); + } + } + + class IncorrectDeallocateOnJobCompletionUsage : TestJobComponentSystem + { + void Test() + { + int myVar = 0; + Entities + .WithDeallocateOnJobCompletion(myVar) + .ForEach((ref Translation t) => { t.Value += myVar; }) + .Schedule(default); + } + } + + [Test] + public void DisableContainerSafetyRestrictionWarnsAboutArgumentType() + { + AssertProducesNoError(typeof(CorrectDisableContainerSafetyRestrictionUsage)); + AssertProducesError(typeof(IncorrectDisableContainerSafetyRestrictionUsage), nameof(UserError.DC0036), "myVar"); + } + + class CorrectDisableContainerSafetyRestrictionUsage : TestJobComponentSystem + { + void Test() + { + NativeArray array = default; + Entities + .WithReadOnly(array) + .WithNativeDisableContainerSafetyRestriction(array) + .ForEach((ref Translation t) => { t.Value += array[0]; }) + .Schedule(default); + } + } + + class IncorrectDisableContainerSafetyRestrictionUsage : TestJobComponentSystem + { + void Test() + { + int myVar = 0; + Entities + .WithNativeDisableContainerSafetyRestriction(myVar) + .ForEach((ref Translation t) => { t.Value += myVar; }) + .Schedule(default); + } + } + + [Test] + public void DisableParallelForRestrictionWarnsAboutArgumentType() + { + AssertProducesNoError(typeof(CorrectDisableParallelForRestrictionUsage)); + AssertProducesError(typeof(IncorrectDisableParallelForRestrictionUsage), nameof(UserError.DC0037), "myVar"); + } + + class CorrectDisableParallelForRestrictionUsage : TestJobComponentSystem + { + unsafe void Test() + { + NativeArray array = default; + Entities + .WithNativeDisableParallelForRestriction(array) + .ForEach((ref Translation t) => { t.Value += array[0]; }) + .Schedule(default); + } + } + + class IncorrectDisableParallelForRestrictionUsage : TestJobComponentSystem + { + void Test() + { + int myVar = 0; + Entities + .WithNativeDisableParallelForRestriction(myVar) + .ForEach((ref Translation t) => { t.Value += myVar; }) + .Schedule(default); + } + } + + [Test] + public void AttributesErrorWhenUsedOnUserTypeFields() + { + AssertProducesError(typeof(CaptureFieldInUserStructLambda), nameof(UserError.DC0038), "UserStruct.Array"); + } + + class CaptureFieldInUserStructLambda : TestJobComponentSystem + { + void Test() + { + var localStruct = new UserStruct() { Array = default }; + Entities + .WithReadOnly(localStruct.Array) + .ForEach((ref Translation t) => { t.Value += localStruct.Array[0]; }) + .Schedule(default); + } + struct UserStruct + { + public NativeArray Array; + } + } + } + + public static class TestJobComponentSystemExtensionMethods + { + public interface ITestInterface { } + + public static void MyTestExtension(this TestJobComponentSystem test) { } + public static void MyTestExtensionInterface(this ITestInterface test) { } + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobsLambdaJobsPostProcessorTests.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobsLambdaJobsPostProcessorTests.cs.meta new file mode 100644 index 000000000..188c70582 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobsLambdaJobsPostProcessorTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c65a03d3adb199408453cde5b678ee1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobsPostProcessorTestBase.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobsPostProcessorTestBase.cs new file mode 100644 index 000000000..c1b71ec8e --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobsPostProcessorTestBase.cs @@ -0,0 +1,204 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using System.Runtime.CompilerServices; +using Mono.Cecil; +using Mono.Cecil.Cil; +using Mono.Cecil.Rocks; +using NUnit.Framework; +using NUnit.Framework.Constraints; +using Unity.CompilationPipeline.Common.Diagnostics; +using Unity.Entities.CodeGen; + +namespace Unity.Entities.CodeGen.Tests +{ + public abstract class PostProcessorTestBase + { + class FailResolver : IAssemblyResolver + { + public void Dispose() { } + public AssemblyDefinition Resolve(AssemblyNameReference name) { return null; } + public AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters parameters) { return null; } + } + + protected AssemblyDefinition AssemblyDefinitionFor(Type type, bool useFailResolver = false) + { + var assemblyLocation = type.Assembly.Location; + + IAssemblyResolver resolver; + if (useFailResolver) + resolver = new FailResolver(); + else + resolver = new LambdaJobsPostProcessorTestBase.OnDemandResolver(); + + var ad = AssemblyDefinition.ReadAssembly(new MemoryStream(File.ReadAllBytes(assemblyLocation)), + new ReaderParameters(ReadingMode.Immediate) + { + ReadSymbols = true, + ThrowIfSymbolsAreNotMatching = true, + SymbolReaderProvider = new PortablePdbReaderProvider(), + AssemblyResolver = resolver, + SymbolStream = PdbStreamFor(assemblyLocation) + } + ); + + if (!ad.MainModule.HasSymbols) + throw new Exception("NoSymbols"); + return ad; + } + + protected TypeDefinition TypeDefinitionFor(Type type, bool useFailResolver = false) + { + var ad = AssemblyDefinitionFor(type, useFailResolver); + var fullName = type.FullName.Replace("+", "/"); + return ad.MainModule.GetType(fullName).Resolve(); + } + + protected TypeDefinition TypeDefinitionFor(string typeName, Type nextToType, bool useFailResolver = false) + { + var ad = AssemblyDefinitionFor(nextToType, useFailResolver); + var fullName = nextToType.FullName.Replace("+", "/"); + fullName = fullName.Replace(nextToType.Name, typeName); + return ad.MainModule.GetType(fullName).Resolve(); + } + + protected MethodDefinition MethodDefinitionForOnlyMethodOf(Type type, bool useFailResolver = false) + { + return MethodDefinitionForOnlyMethodOfDefinition(TypeDefinitionFor(type, useFailResolver)); + } + + protected MethodDefinition MethodDefinitionForOnlyMethodOfDefinition(TypeDefinition typeDefinition) + { + var a = typeDefinition.GetMethods().Where(m => !m.IsConstructor && !m.IsStatic).ToList(); + return a.Count == 1 ? a.Single() : a.Single(m=>m.Name == "Test"); + } + + static MemoryStream PdbStreamFor(string assemblyLocation) + { + var file = Path.ChangeExtension(assemblyLocation, ".pdb"); + if (!File.Exists(file)) + return null; + return new MemoryStream(File.ReadAllBytes(file)); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + protected static T EnsureNotOptimizedAway(T x) { return x; } + + private class OnDemandResolver : IAssemblyResolver + { + public void Dispose() + { + } + + public AssemblyDefinition Resolve(AssemblyNameReference name) + { + return Resolve(name, new ReaderParameters(ReadingMode.Deferred)); + } + + public AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters parameters) + { + var assembly = AppDomain.CurrentDomain.GetAssemblies().First(a => a.GetName().Name == name.Name); + var fileName = assembly.Location; + parameters.AssemblyResolver = this; + parameters.SymbolStream = PdbStreamFor(fileName); + var bytes = File.ReadAllBytes(fileName); + return AssemblyDefinition.ReadAssembly(new MemoryStream(bytes), parameters); + } + } + + protected abstract void AssertProducesInternal(Type systemType, DiagnosticType type, string[] shouldContains, bool useFailResolver = false); + + protected void AssertProducesWarning(Type systemType, params string[] shouldContainErrors) + { + AssertProducesInternal(systemType, DiagnosticType.Warning, shouldContainErrors); + } + + protected void AssertProducesError(Type systemType, params string[] shouldContainErrors) + { + AssertProducesInternal(systemType, DiagnosticType.Error, shouldContainErrors); + } + + protected static void AssertDiagnosticHasSufficientFileAndLineInfo(List errors) + { + string diagnostic = errors.Select(dm=>dm.MessageData).SeparateByComma(); + if (!diagnostic.Contains(".cs")) + Assert.Fail("Diagnostic message had no file info: " + diagnostic); + + var match = Regex.Match(diagnostic, "\\.cs:?\\((?.*?),(?.*?)\\)"); + if (!match.Success) + Assert.Fail("Diagnostic message had no line info: " + diagnostic); + + var line = int.Parse(match.Groups["line"].Value); + if (line > 2000) + Assert.Fail("Unreasonable line number in errormessage: " + diagnostic); + } + } + + public class LambdaJobsPostProcessorTestBase : PostProcessorTestBase + { + protected void AssertProducesNoError(Type systemType) + { + Assert.DoesNotThrow(() => + { + var assemblyDefinition = AssemblyDefinitionFor(systemType); + var testSystemType = assemblyDefinition.MainModule + .GetAllTypes() + .Where(TypeDefinitionExtensions.IsComponentSystem) + .FirstOrDefault(t => t.Name == systemType.Name); + + foreach (var methodToAnalyze in testSystemType.Methods.ToList()) + { + foreach (var forEachDescriptionConstruction in LambdaJobDescriptionConstruction.FindIn(methodToAnalyze)) + { + var (jobStructForLambdaJob, diagnosticMessages) = LambdaJobsPostProcessor.Rewrite(methodToAnalyze, forEachDescriptionConstruction); + foreach (var diagnosticMessage in diagnosticMessages) + Assert.AreNotEqual(DiagnosticType.Error, diagnosticMessage.DiagnosticType); + } + } + + // Write out assembly to memory stream + // Missing ImportReference errors for types only happens here. + var pe = new MemoryStream(); + var pdb = new MemoryStream(); + var writerParameters = new WriterParameters + { + SymbolWriterProvider = new PortablePdbWriterProvider(), SymbolStream = pdb, WriteSymbols = true + }; + assemblyDefinition.Write(pe, writerParameters); + }); + } + + protected override void AssertProducesInternal( + Type systemType, + DiagnosticType type, + string[] shouldContains, + bool useFailResolver = false) + { + var methodToAnalyze = MethodDefinitionForOnlyMethodOf(systemType); + var diagnosticMessages = new List(); + + try + { + foreach (var forEachDescriptionConstruction in LambdaJobDescriptionConstruction.FindIn(methodToAnalyze)) + { + var (_, rewriteMessages) = LambdaJobsPostProcessor.Rewrite(methodToAnalyze, forEachDescriptionConstruction); + diagnosticMessages.AddRange(rewriteMessages); + } + } + catch (FoundErrorInUserCodeException exc) + { + diagnosticMessages.AddRange(exc.DiagnosticMessages); + } + + Assert.AreEqual(1, diagnosticMessages.Count); + Assert.AreEqual(type, diagnosticMessages[0].DiagnosticType); + + foreach (var str in shouldContains) + Assert.That(diagnosticMessages[0].MessageData.Contains(str), $"Error message \"{diagnosticMessages[0].MessageData}\" does not contain \"{str}\"."); + + AssertDiagnosticHasSufficientFileAndLineInfo(diagnosticMessages); + } + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobsPostProcessorTestBase.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobsPostProcessorTestBase.cs.meta new file mode 100644 index 000000000..2d23f0a4f --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/LambdaJobsPostProcessorTestBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f999bf7bdff436e4fa6f388c57342090 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags.meta new file mode 100644 index 000000000..8e1eacb97 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 266557f6a574662428fa916eba192f96 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure.meta new file mode 100644 index 000000000..e247a4306 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9282c8fb29dcc76499cafc3fef815c27 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure/PropertyBagIntegrationTest.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure/PropertyBagIntegrationTest.cs new file mode 100644 index 000000000..2ce3b38b5 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure/PropertyBagIntegrationTest.cs @@ -0,0 +1,39 @@ +using System; +using System.IO; +using System.Linq; +using System.Text; +using Mono.Cecil; +using NUnit.Framework; +using Unity.Entities.CodeGen; + +namespace Unity.Entities.CodeGen.Tests.PropertyBags.Infrastructure +{ + [TestFixture] + public abstract class PropertyBagsIntegrationTest : IntegrationTest + { + protected override string ExpectedPath + { + get { return "Packages/com.unity.entities/Unity.Entities.CodeGen.Tests/PropertyBags/IntegrationTests"; } + } + + protected void RunTest(Type type) + { + var assemblyDefinition = AssemblyDefinitionFor(type); + var typeReference = assemblyDefinition.MainModule.GetType(type.FullName); + var assemblyResolver = assemblyDefinition.MainModule.AssemblyResolver; + using (var scratchAssembly = AssemblyDefinition.CreateAssembly( + new AssemblyNameDefinition("PropertyBagIntegrationTest", new Version(0, 0)), + "PropertyBagIntegrationTest.dll", new ModuleParameters() + { + AssemblyResolver = assemblyResolver, + Kind = ModuleKind.Dll + })) + { + var generatedPropertyBag = PropertyBagPostProcessor.GeneratePropertyBag(scratchAssembly.MainModule, typeReference); + scratchAssembly.MainModule.Types.Add(generatedPropertyBag.GeneratedType); + + RunTest(scratchAssembly.MainModule.ImportReference(generatedPropertyBag.GeneratedType)); + } + } + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure/PropertyBagIntegrationTest.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure/PropertyBagIntegrationTest.cs.meta new file mode 100644 index 000000000..4be10c0f5 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure/PropertyBagIntegrationTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0507eeda91d29754b9c9356c9012dfa4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure/TestTypes.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure/TestTypes.cs new file mode 100644 index 000000000..90f6dc002 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure/TestTypes.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using Unity.Collections; +using Unity.Entities; + +namespace Unity.Entities.CodeGen.Tests.PropertyBags.Types +{ +#pragma warning disable 0649 + public struct ValueTypeIComponentData : IComponentData + { + public int IntField; + } + + public struct ValueTypeSharedComponentData : ISharedComponentData, IEquatable + { + public int IntField; + + public bool Equals(ValueTypeSharedComponentData other) + { + return IntField == other.IntField; + } + + public override int GetHashCode() + { + return IntField; + } + } + + public struct TypeWithClosedGenericField + { + public NativeArray NativeArrayField; + } + + public unsafe struct TypeWithPointerField + { + public int* IntPointer; + } + +#if !UNITY_DISABLE_MANAGED_COMPONENTS + public class ManagedIComponentData : IComponentData + { + public string StringField; + } +#endif +} + +namespace Some.Namespace +{ + public class SomeClass + { + public int Field0; + public int Field1; + } + + struct TypeWithListAndArray + { + public int MyInt; + public List MyList; + public SomeClass[] MyArray; + } +} +#pragma warning restore 0649 \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure/TestTypes.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure/TestTypes.cs.meta new file mode 100644 index 000000000..8bff9a655 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/PropertyBags/Infrastructure/TestTypes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f69d734efcb97042a40ab93e9327102 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes.meta new file mode 100644 index 000000000..6d2f3993d --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 38a827c0e28a2465e862180edb7177ab +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes/TestTypes.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes/TestTypes.cs new file mode 100644 index 000000000..f2549e984 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes/TestTypes.cs @@ -0,0 +1,48 @@ +using Unity.Entities; + +namespace Unity.Entities.CodeGen.Tests.TestTypes +{ + public struct BoidInAnotherAssembly : IComponentData + { + } + + public struct TranslationInAnotherAssembly : IComponentData + { + public float Value; + } + + public struct VelocityInAnotherAssembly : IComponentData + { + public float Value; + } + + public struct AccelerationInAnotherAssembly : IComponentData + { + public float Value; + } + + public struct RotationInAnotherAssembly : IComponentData + { + public int Value; + } + + public struct SharedDataInAnotherAssembly : ISharedComponentData + { + public int Value; + } + +#if !UNITY_DISABLE_MANAGED_COMPONENTS + public class SpeedInAnotherAssembly : IComponentData + { + public float Value; + } +#endif + + [InternalBufferCapacity(8)] + public struct TestBufferElementInAnotherAssembly : IBufferElementData + { + public static implicit operator float(TestBufferElementInAnotherAssembly e) { return e.Value; } + public static implicit operator TestBufferElementInAnotherAssembly(float e) { return new TestBufferElementInAnotherAssembly { Value = e }; } + public float Value; + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes/TestTypes.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes/TestTypes.cs.meta new file mode 100644 index 000000000..9dd26db9b --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes/TestTypes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15d7203043e93449d9aef4871c8cdbf8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes/Unity.Entities.CodeGen.Tests.TestTypes.asmdef b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes/Unity.Entities.CodeGen.Tests.TestTypes.asmdef new file mode 100644 index 000000000..9f051e6f9 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes/Unity.Entities.CodeGen.Tests.TestTypes.asmdef @@ -0,0 +1,16 @@ +{ + "name": "Unity.Entities.CodeGen.Tests.TestTypes", + "references": [ + "Unity.Entities" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": true, + "precompiledReferences": [ + ], + "autoReferenced": false, + "versionDefines": [] +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes/Unity.Entities.CodeGen.Tests.TestTypes.asmdef.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes/Unity.Entities.CodeGen.Tests.TestTypes.asmdef.meta new file mode 100644 index 000000000..199f15ffd --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.TestTypes/Unity.Entities.CodeGen.Tests.TestTypes.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6843ec46d9cab4a14b3dc136b03a3c74 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.asmdef b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.asmdef new file mode 100644 index 000000000..93e5a51f5 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.asmdef @@ -0,0 +1,34 @@ +{ + "name": "Unity.Entities.CodeGen.Tests", + "references": [ + "Unity.Collections", + "Unity.Entities", + "Unity.Entities.CodeGen", + "Unity.Entities.CodeGen.Tests.TestTypes", + "Unity.Burst", + "Unity.Properties", + "UnityEngine.TestRunner", + "UnityEditor.TestRunner", + "Unity.Entities.Hybrid", + "Unity.Entities.Editor" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": true, + "precompiledReferences": [ + "Mono.Cecil.dll", + "Mono.Cecil.Rocks.dll", + "Mono.Cecil.Pdb.dll", + "nunit.framework.dll", + "nunit.framework.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.asmdef.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.asmdef.meta new file mode 100644 index 000000000..cd672748b --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4fd5a72e5d614014db4a5bc43956b6a2 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.meta new file mode 100644 index 000000000..8752c9480 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8d7fafbd54510014bb5322c9feea4357 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/AssemblyInfo.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/AssemblyInfo.cs new file mode 100644 index 000000000..0e1eb8668 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo(assemblyName: "Unity.Entities.Hybrid.CodeGen.Tests")] diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/AssemblyInfo.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/AssemblyInfo.cs.meta new file mode 100644 index 000000000..328f4166d --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a5a75e524efe2c64587928a3cc01ff05 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/BlobAssetSafety.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/BlobAssetSafety.meta new file mode 100644 index 000000000..bc9202575 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/BlobAssetSafety.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: aa9c1bf184894596bb10e94b4b3b3e0f +timeCreated: 1575374540 \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/BlobAssetSafety/BlobAssetSafetyVerifier.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/BlobAssetSafety/BlobAssetSafetyVerifier.cs new file mode 100644 index 000000000..a21d8bd96 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/BlobAssetSafety/BlobAssetSafetyVerifier.cs @@ -0,0 +1,181 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using JetBrains.Annotations; +using Mono.Cecil; +using Mono.Cecil.Cil; +using Mono.Cecil.Rocks; +using Unity.CompilationPipeline.Common.Diagnostics; + +namespace Unity.Entities.CodeGen +{ + [UsedImplicitly] + internal class BlobAssetSafetyVerifier : EntitiesILPostProcessor + { + private static bool _enable = true; + + protected override bool PostProcessImpl() + { + if (_enable) + AssertNoBlobAssetLeavesBlobAssetStorage(); + return false; + } + + void AssertNoBlobAssetLeavesBlobAssetStorage() + { + HashSet _nonRestrictedTypes = new HashSet(); + + foreach (var type in AssemblyDefinition.MainModule.GetAllTypes()) + { + if (!type.HasMethods) + continue; + foreach (var method in type.Methods) + { + if (!method.HasBody) + continue; + + var verifyDiagnosticMessages = VerifyMethod(method, _nonRestrictedTypes); + _diagnosticMessages.AddRange(verifyDiagnosticMessages); + } + } + } + + public static List VerifyMethod(MethodDefinition method, HashSet _nonRestrictedTypes) + { + var diagnosticMessages = new List(); + + bool IsTypeRestrictedToBlobAssetStorage(TypeReference tr) + { + if (tr.IsPrimitive) + return false; + if (tr is GenericParameter) + return false; + if (tr is PointerType) + return false; + if (tr is ArrayType) + return false; + if (tr is RequiredModifierType || tr is GenericInstanceType) + { + tr = tr.GetElementType(); + return IsTypeRestrictedToBlobAssetStorage(tr); + } + if (_nonRestrictedTypes.Contains(tr)) + return false; + + if (tr.Scope is AssemblyNameReference anr) + if (anr.Name == "UnityEngine" || anr.Name == "UnityEditor" || anr.Name == "mscorlib" || + anr.Name == "System.Private.CoreLib") + return false; + + // Don't do a CheckedResolve here. If we somehow fail we don't want to block the user. + var td = tr.Resolve(); + if (td == null) + { + diagnosticMessages.Add( + UserError.MakeWarning("ResolveFailureWarning", + $"Unable to resolve type {tr.FullName} for verification.", + method, method.Body.Instructions.FirstOrDefault())); + _nonRestrictedTypes.Add(tr); + + return false; + } + + if (td.IsValueType()) + { + if (HasMayOnlyLiveInBlobStorageAttribute(td)) + return true; + + foreach (var field in td.Fields) + { + if (field.IsStatic) + continue; + if (IsTypeRestrictedToBlobAssetStorage(field.FieldType)) + return true; + } + } + + _nonRestrictedTypes.Add(tr); + return false; + } + + foreach (var instruction in method.Body.Instructions) + { + if (instruction.OpCode == OpCodes.Ldfld) + { + var fieldReference = (FieldReference) instruction.Operand; + var tr = fieldReference.FieldType; + if (IsTypeRestrictedToBlobAssetStorage(tr)) + { + var fancyName = FancyNameFor(fieldReference.FieldType); + + string error = + $"ref {fancyName} yourVariable = ref your{fieldReference.DeclaringType.Name}.{fieldReference.Name}"; + + diagnosticMessages.Add( + UserError.MakeError("MayOnlyLiveInBlobStorageViolation", + $"You may only access .{fieldReference.Name} by ref, as it may only live in blob storage. try `{error}`", + method, instruction)); + } + } + + if (instruction.OpCode == OpCodes.Ldobj) + { + var tr = (TypeReference) instruction.Operand; + if (IsTypeRestrictedToBlobAssetStorage(tr)) + { + var pushingInstruction = CecilHelpers.FindInstructionThatPushedArg(method, 0, instruction); + + string error = $"ref {tr.Name} yourVariable = ref ..."; + if (pushingInstruction.Operand is FieldReference fr) + { + var typeName = fr.DeclaringType.Name; + error = $"ref {tr.Name} yourVariable = ref your{typeName}.{fr.Name}"; + } + + diagnosticMessages.Add( + UserError.MakeError("MayOnlyLiveInBlobStorageViolation", + $"{tr.Name} may only live in blob storage. Access it by ref instead: `{error}`", method, + instruction)); + } + } + } + + return diagnosticMessages; + } + + private static string FancyNameFor(TypeReference typeReference) + { + if (typeReference is GenericInstanceType git) + { + var sb = new StringBuilder(); + sb.Append(typeReference.Name.Split('`')[0]); + sb.Append("<"); + bool first = true; + foreach (var ga in git.GenericArguments) + { + if (!first) + sb.Append(","); + sb.Append(FancyNameFor(ga)); + first = false; + } + + sb.Append(">"); + return sb.ToString(); + } + + return typeReference.Name; + } + + static bool HasMayOnlyLiveInBlobStorageAttribute(TypeDefinition td) + { + if (!td.HasCustomAttributes) + return false; + foreach(var ca in td.CustomAttributes) + if (ca.AttributeType.Name == nameof(MayOnlyLiveInBlobStorageAttribute)) + return true; + return false; + } + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/BlobAssetSafety/BlobAssetSafetyVerifier.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/BlobAssetSafety/BlobAssetSafetyVerifier.cs.meta new file mode 100644 index 000000000..b87d236be --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/BlobAssetSafety/BlobAssetSafetyVerifier.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4234abe6a19d4547bfa197e5369f204f +timeCreated: 1575374552 \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/CecilExtensionMethods.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/CecilExtensionMethods.cs new file mode 100644 index 000000000..b3b116676 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/CecilExtensionMethods.cs @@ -0,0 +1,458 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Mono.Cecil; +using Mono.Cecil.Cil; + +namespace Unity.Entities.CodeGen +{ + static class TypeReferenceExtensions + { + public static TypeDefinition CheckedResolve(this TypeReference typeReference) + { + return typeReference.Resolve() ?? throw new ResolutionException(typeReference); + } + + public static bool TypeReferenceEquals(this TypeReference ref1, TypeReference ref2) => + ref1.FullName == ref2.FullName; + + public static bool TypeReferenceEqualsOrInheritsFrom(this TypeReference ref1, TypeReference ref2) + { + if (ref1.TypeReferenceEquals(ref2)) + return true; + + var def1 = ref1.Resolve(); + if (def1 != null && def1.BaseType != null) + return def1.BaseType.TypeReferenceEqualsOrInheritsFrom(ref2); + + return false; + } + + public static bool IsIComponentDataStruct(this TypeDefinition typeDefinition) => typeDefinition.TypeImplements(typeof(IComponentData)) && typeDefinition.IsValueType(); + public static bool IsTagComponentDataStruct(this TypeDefinition typeDefinition) => typeDefinition.IsIComponentDataStruct() && typeDefinition.Fields.All(fd => fd.IsStatic); + public static bool IsIBufferElementData(this TypeDefinition typeDefinition) => typeDefinition.TypeImplements(typeof(IBufferElementData)) && typeDefinition.IsValueType(); + + public static bool IsIComponentDataClass(this TypeDefinition typeDefinition) + { + if (typeDefinition.IsValueType()) + return false; + + if (typeDefinition.TypeImplements(typeof(IComponentData))) + return true; + + var baseType = typeDefinition.BaseType; + if (baseType == null || baseType.FullName == "System.Object") + return false; + + return IsIComponentDataClass(baseType.Resolve()); + } + + public static bool IsISharedComponentData(this TypeDefinition typeDefinition) => + typeDefinition.TypeImplements(typeof(ISharedComponentData)); + + public static bool IsISharedComponentData(this TypeReference typeReference) => + typeReference.TypeImplements(typeof(ISharedComponentData)); + + public static bool IsDynamicBufferOfT(this TypeReference typeReference) => + typeReference.GetElementType().FullName == typeof(DynamicBuffer<>).FullName; + + public static bool TypeImplements(this TypeReference typeReference, Type interfaceType) + { + var resolvedType = typeReference.Resolve(); + if (resolvedType == null) return false; + return resolvedType.Interfaces.Any(i => + i.InterfaceType.FullName == typeReference.Module.ImportReference(interfaceType).FullName); + } + + public static bool TypeImplements(this TypeReference typeReference, TypeReference interfaceType) + { + var resolvedType = typeReference.Resolve(); + if (resolvedType == null) return false; + return resolvedType.Interfaces.Any(i => i.InterfaceType == interfaceType); + } + + public static TypeReference StripRef(this TypeReference tr) => tr is ByReferenceType brt ? brt.ElementType : tr; + + public static bool IsVoid(this TypeReference type) + { + return type.MetadataType == MetadataType.Void; + } + + public static bool IsDisplayClass(this TypeReference tr) => + tr.Name.Contains("<>c__DisplayClass"); + + // Safer version of TypeReference.IsValueType property as extension method since property is broken + // (Cecil doesn't have enough information without resolving references so it just guesses) + public static bool IsValueType(this TypeReference typeReference) + { + if (typeReference is ArrayType) + return false; + + if (typeReference is PointerType) + return false; + + if (typeReference is ByReferenceType) + return false; + + if (typeReference is GenericParameter) + return false; + + var pinnedType = typeReference as PinnedType; + if (pinnedType != null) + return pinnedType.ElementType.IsValueType(); + + var requiredModifierType = typeReference as RequiredModifierType; + if (requiredModifierType != null) + return requiredModifierType.ElementType.IsValueType(); + + var optionalModifierType = typeReference as OptionalModifierType; + if (optionalModifierType != null) + return optionalModifierType.ElementType.IsValueType(); + + var typeDefinition = typeReference.Resolve(); + + if (typeDefinition == null) + throw new InvalidOperationException($"Unable to locate the definition for {typeReference.FullName}. Is this assembly compiled against an older version of one of its dependencies?"); + + return typeDefinition.IsValueType; + } + } + + static class FieldReferenceExtensions + { + public static bool IsNestedDisplayClassField(this FieldReference fieldReference) => + fieldReference.FieldType.IsDisplayClass() && fieldReference.Name.Contains("__locals"); + } + + static class MethodReferenceExtensions + { + /// + /// Generates a closed/specialized MethodReference for the given method and types[] + /// e.g. + /// struct Foo { T Bar(T val) { return default(T); } + /// + /// In this case, if one would like a reference to "Foo::int Bar(int val)" this method will construct such a method + /// reference when provided the open "T Bar(T val)" method reference and the TypeReferences to the types you'd like + /// specified as generic arguments (in this case a TypeReference to "int" would be passed in). + /// + /// + /// + /// + public static MethodReference MakeGenericInstanceMethod(this MethodReference method, + params TypeReference[] types) + { + var result = new GenericInstanceMethod(method); + foreach (var type in types) + result.GenericArguments.Add(type); + return result; + } + + /// + /// Allows one to generate reference to a method contained in a generic type which has been closed/specialized. + /// e.g. + /// struct Foo { T Bar(T val) { return default(T); } + /// + /// In this case, if one would like a reference to "Foo::int Bar(int val)" this method will construct such a method + /// reference when provided the open "T Bar(T val)" method reference and the closed declaring TypeReference, "Foo". + /// + /// + /// See summary above for example. Typically construct this type using `MakeGenericInstanceMethod` + /// + public static MethodReference MakeGenericHostMethod(this MethodReference self, TypeReference closedDeclaringType) + { + var reference = new MethodReference(self.Name, self.ReturnType, closedDeclaringType) + { + HasThis = self.HasThis, + ExplicitThis = self.ExplicitThis, + CallingConvention = self.CallingConvention + }; + + foreach (var parameter in self.Parameters) + { + reference.Parameters.Add(new ParameterDefinition(parameter.ParameterType)); + } + + foreach (var genericParam in self.GenericParameters) + { + reference.GenericParameters.Add(new GenericParameter(genericParam.Name, reference)); + } + + return reference; + } + } + + static class ParameterDefinitionExtensions + { + internal static bool HasCompilerServicesIsReadOnlyAttribute(this ParameterDefinition p) + { + return p.HasCustomAttributes && p.CustomAttributes.Any(c => + c.AttributeType.FullName == "System.Runtime.CompilerServices.IsReadOnlyAttribute"); + } + } + + static class TypeDefinitionExtensions + { + public static bool IsDelegate(this TypeDefinition typeDefinition) => + typeDefinition.BaseType?.Name == nameof(MulticastDelegate); + + public static bool IsComponentSystem(this TypeDefinition arg) + { + var baseTypeRef = arg.BaseType; + + if (baseTypeRef == null) + return false; + + if (baseTypeRef.Namespace == "Unity.Entities" && baseTypeRef.Name == nameof(ComponentSystemBase)) + return true; + + if (baseTypeRef.Name == "Object" && baseTypeRef.Namespace == "System") + return false; + + if (baseTypeRef.Name == "ValueType" && baseTypeRef.Namespace == "System") + return false; + + return IsComponentSystem(baseTypeRef.Resolve()); + } + + public static bool IsUnityEngineObject(this TypeDefinition typeDefinition) + { + if (typeDefinition.IsValueType()) + return false; + if (typeDefinition.Name == "Object" && typeDefinition.Namespace == "UnityEngine") + return true; + if (typeDefinition.BaseType == null) + return false; + var baseType = typeDefinition.BaseType.Resolve(); + return IsUnityEngineObject(baseType); + } + } + + static class ILProcessorExtensions + { + public static void EnsurePreviousAndNextAreSet(this MethodBody body) + { + for (int i = 0; i != body.Instructions.Count - 1; i++) + { + var thisOne = body.Instructions[i]; + var nextOne = body.Instructions[i + 1]; + thisOne.Next = nextOne; + nextOne.Previous = thisOne; + } + } + + public static void InsertAfter(this ILProcessor ilProcessor, Instruction insertAfterThisOne, + IEnumerable instructions) + { + var prev = insertAfterThisOne; + foreach (var instruction in instructions) + { + ilProcessor.InsertAfter(prev, instruction); + prev = instruction; + } + } + + public static void InsertBefore(this ILProcessor ilProcessor, Instruction insertBeforeThisOne, + IEnumerable instructions) + { + foreach (var instruction in instructions) + ilProcessor.InsertBefore(insertBeforeThisOne, instruction); + } + + public static void Append(this ILProcessor ilProcessor, IEnumerable instructions) + { + foreach (var instruction in instructions) + ilProcessor.Append(instruction); + } + + public static void Replace(this ILProcessor ilProcessor, Instruction replaceThisOne, + IEnumerable withThese) + { + replaceThisOne.OpCode = withThese.First().OpCode; + replaceThisOne.Operand = withThese.First().Operand; + + ilProcessor.InsertAfter(replaceThisOne, withThese.Skip(1).ToArray()); + } + } + + static class InstructionExtensions + { + public static void MakeNOP(this Instruction instruction) + { + instruction.OpCode = OpCodes.Nop; + instruction.Operand = null; + } + + public static bool IsLoadLocalAddress(this Instruction instruction, out int index) + { + index = 0; + switch (instruction.OpCode.Code) + { + case Code.Ldloca: + case Code.Ldloca_S: + index = instruction.Operand is VariableDefinition vd ? vd.Index : (int) instruction.Operand; + return true; + default: + return false; + } + } + + public static bool IsInvocation(this Instruction instruction) + { + var opCode = instruction.OpCode; + return opCode == OpCodes.Call || (opCode == OpCodes.Callvirt || opCode == OpCodes.Calli); + } + + public static bool IsBranch(this Instruction instruction) + { + switch (instruction.OpCode.Code) + { + case Code.Brtrue: + case Code.Brtrue_S: + case Code.Brfalse: + case Code.Brfalse_S: + case Code.Br: + case Code.Br_S: + return true; + default: + return false; + } + } + + public static bool IsLoadLocal(this Instruction instruction, out int index) + { + index = 0; + switch (instruction.OpCode.Code) + { + case Code.Ldloc: + case Code.Ldloc_S: + index = instruction.Operand is VariableDefinition vd ? vd.Index : (int) instruction.Operand; + return true; + case Code.Ldloc_0: + index = 0; + return true; + case Code.Ldloc_1: + index = 1; + return true; + case Code.Ldloc_2: + index = 2; + return true; + case Code.Ldloc_3: + index = 3; + return true; + default: + return false; + } + } + + public static bool IsStoreLocal(this Instruction instruction, out int index) + { + index = 0; + switch (instruction.OpCode.Code) + { + case Code.Stloc: + case Code.Stloc_S: + if (instruction.Operand is VariableDefinition vd) + index = vd.Index; + else + index = (int) instruction.Operand; + return true; + case Code.Stloc_0: + index = 0; + return true; + case Code.Stloc_1: + index = 1; + return true; + case Code.Stloc_2: + index = 2; + return true; + case Code.Stloc_3: + index = 3; + return true; + default: + return false; + } + } + + public static int GetPushDelta(this Instruction instruction) + { + OpCode code = instruction.OpCode; + switch (code.StackBehaviourPush) + { + case StackBehaviour.Push0: + return 0; + + case StackBehaviour.Push1: + case StackBehaviour.Pushi: + case StackBehaviour.Pushi8: + case StackBehaviour.Pushr4: + case StackBehaviour.Pushr8: + case StackBehaviour.Pushref: + return 1; + + case StackBehaviour.Push1_push1: + return 2; + + case StackBehaviour.Varpush: + if (code.FlowControl == FlowControl.Call) + { + var method = (IMethodSignature) instruction.Operand; + return method.ReturnType.IsVoid() ? 0 : 1; + } + + break; + } + + throw new ArgumentException(instruction.ToString()); + } + + public static int GetPopDelta(this Instruction instruction) + { + OpCode code = instruction.OpCode; + switch (code.StackBehaviourPop) + { + case StackBehaviour.Pop0: + return 0; + case StackBehaviour.Popi: + case StackBehaviour.Popref: + case StackBehaviour.Pop1: + return 1; + + case StackBehaviour.Pop1_pop1: + case StackBehaviour.Popi_pop1: + case StackBehaviour.Popi_popi: + case StackBehaviour.Popi_popi8: + case StackBehaviour.Popi_popr4: + case StackBehaviour.Popi_popr8: + case StackBehaviour.Popref_pop1: + case StackBehaviour.Popref_popi: + return 2; + + case StackBehaviour.Popi_popi_popi: + case StackBehaviour.Popref_popi_popi: + case StackBehaviour.Popref_popi_popi8: + case StackBehaviour.Popref_popi_popr4: + case StackBehaviour.Popref_popi_popr8: + case StackBehaviour.Popref_popi_popref: + return 3; + + case StackBehaviour.Varpop: + if (code.FlowControl == FlowControl.Call) + { + var method = (IMethodSignature) instruction.Operand; + int count = method.Parameters.Count; + if (method.HasThis && OpCodes.Newobj.Value != code.Value) + ++count; + + return count; + } + + break; + } + + throw new ArgumentException(instruction.ToString()); + } + + public static bool IsLoadFieldOrLoadFieldAddress(this Instruction instruction) => (instruction.OpCode == OpCodes.Ldfld || instruction.OpCode == OpCodes.Ldflda); + public static bool IsStoreField(this Instruction instruction) => (instruction.OpCode == OpCodes.Stfld); + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/CecilExtensionMethods.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/CecilExtensionMethods.cs.meta new file mode 100644 index 000000000..d57e349ab --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/CecilExtensionMethods.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28f35890c41ff0d46ad0c8df55ba0004 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/CecilHelpers.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/CecilHelpers.cs new file mode 100644 index 000000000..6cd086a37 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/CecilHelpers.cs @@ -0,0 +1,871 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using Mono.Cecil; +using Mono.Cecil.Cil; +#if !UNITY_DOTSPLAYER +using System.Reflection; +using UnityEngine; +using UnityEngine.Scripting; +#endif +using MethodAttributes = Mono.Cecil.MethodAttributes; +using MethodBody = Mono.Cecil.Cil.MethodBody; + +namespace Unity.Entities.CodeGen +{ + static class CecilHelpers + { + public static Instruction MakeInstruction(OpCode opcode, object operand) + { + if (operand is Instruction[] instructions) + return Instruction.Create(opcode, instructions); + switch (operand) + { + case null: + return Instruction.Create(opcode); + case FieldReference o: + return Instruction.Create(opcode, o); + case MethodReference o: + return Instruction.Create(opcode, o); + case VariableDefinition o: + return Instruction.Create(opcode, o); + case ParameterDefinition o: + return Instruction.Create(opcode, o); + case GenericInstanceType o: + return Instruction.Create(opcode, o); + case TypeReference o: + return Instruction.Create(opcode, o); + case CallSite o: + return Instruction.Create(opcode, o); + case int o: + return Instruction.Create(opcode, o); + case float o: + return Instruction.Create(opcode, o); + case double o: + return Instruction.Create(opcode, o); + case sbyte o: + return Instruction.Create(opcode, o); + case byte o: + return Instruction.Create(opcode, o); + case long o: + return Instruction.Create(opcode, o); + case uint o: + return Instruction.Create(opcode, o); + case string o: + return Instruction.Create(opcode, o); + case Instruction o: + return Instruction.Create(opcode, o); + default: + throw new NotSupportedException("Unknown operand: " + operand.GetType()); + } + } + + public static SequencePoint FindBestSequencePointFor(MethodDefinition method, Instruction instruction) + { + var sequencePoints = method.DebugInformation?.GetSequencePointMapping().Values.OrderBy(s => s.Offset).ToList(); + + for (int i = 0; i != sequencePoints.Count-1; i++) + { + if (sequencePoints[i].Offset < instruction.Offset && + sequencePoints[i + 1].Offset > instruction.Offset) + return sequencePoints[i]; + } + + return sequencePoints.FirstOrDefault(); + } + + static IEnumerable DisplayClassDescendants(TypeReference rootDisplayClass) + { + var displayClasses = new Stack(new[] {rootDisplayClass}); + while (displayClasses.Any()) + { + TypeReference displayClass = displayClasses.Pop(); + yield return displayClass; + foreach (var displayClassField in displayClass.Resolve().Fields) + { + if (displayClassField.FieldType.IsDisplayClass()) + displayClasses.Push(displayClassField.FieldType); + } + } + } + + static IEnumerable WalkBackLdFldInstructionsToLdarg0(MethodDefinition containingMethod, Instruction startInstruction) + { + var currentInstruction = startInstruction; + while (currentInstruction != null && currentInstruction.OpCode != OpCodes.Ldarg_0) + { + if (currentInstruction.OpCode != OpCodes.Ldfld && currentInstruction.OpCode != OpCodes.Ldflda) + InternalCompilerError.DCICE005(containingMethod, currentInstruction).Throw(); + + yield return currentInstruction; + currentInstruction = currentInstruction.Previous; + } + } + + public static (MethodDefinition[], Dictionary capturedVariables) CloneClosureExecuteMethodAndItsLocalFunctions( + IEnumerable methodsToClone, TypeDefinition targetType, string newMethodName) + { + Dictionary capturedVariables = new Dictionary(); + + // Construct list of all DisplayClasses under our declaring type (we need to do this as other delegates might use generate their own DisplayClasses) + var lambdaDisplayClasses = DisplayClassDescendants(methodsToClone.First().DeclaringType); + + // Find all instructions that load or store a variable in one of our DisplayClasses + // We use these instructions to discover variables that are captured by our lambda. + // Note: we have to look for Stfld instructions as well for the case where a captured variable is only stored into. + var instructionsThatLoadsOrStoresVariableInDisplayClass = + methodsToClone.SelectMany(method=>method.Body.Instructions) + .Where(i => (i.IsLoadFieldOrLoadFieldAddress() || i.IsStoreField()) && i.Operand is FieldReference && + !(i.Operand as FieldReference).FieldType.IsDisplayClass() && lambdaDisplayClasses.Contains((i.Operand as FieldReference).DeclaringType)) + .ToArray(); + + // Walk through instructions that use a captured variable and try to construct list of CapturedVariableDescriptions (old and new fields) + foreach (var instructionThatLoadsOrStoresVariableInDisplayClass in instructionsThatLoadsOrStoresVariableInDisplayClass) + { + var oldField = instructionThatLoadsOrStoresVariableInDisplayClass.Operand as FieldReference; + if (capturedVariables.ContainsKey(oldField)) + continue; + + var oldFields = new List(); + oldFields.Add(oldField); + + var containingMethod = methodsToClone.Single(m => m.Body.Instructions.Contains(instructionThatLoadsOrStoresVariableInDisplayClass)); + var initialLdFldInstruction = CecilHelpers.FindInstructionThatPushedArg(containingMethod, 0, instructionThatLoadsOrStoresVariableInDisplayClass); + foreach (var instruction in WalkBackLdFldInstructionsToLdarg0(containingMethod, initialLdFldInstruction)) + { + var field = instruction.Operand as FieldReference; + oldFields.Insert(0, field); + } + + var oldFieldDefinition = oldField.Resolve(); + var newField = new FieldDefinition(oldFieldDefinition.Name, oldFieldDefinition.Attributes, oldFieldDefinition.FieldType); + capturedVariables[oldField] = new CapturedVariableDescription() + { + ChainOfFieldsToOldField = oldFields.ToArray(), + NewField = newField + }; + targetType.Fields.Add(newField); + } + + // Walk through all instructions that load or store are captured variables and nop out nested DisplayClasses + var instructionsThatLoadOrStoreCapturedVariable = + methodsToClone.SelectMany(method => method.Body.Instructions) + .Where(i => ((i.IsLoadFieldOrLoadFieldAddress() || i.IsStoreField()) && + capturedVariables.Keys.Any(fr => fr == (i.Operand as FieldReference)))).ToArray(); + foreach (var instructionThatLoadOrStoreCapturedVariable in instructionsThatLoadOrStoreCapturedVariable) + { + var containingMethod = methodsToClone.Single(m => m.Body.Instructions.Contains(instructionThatLoadOrStoreCapturedVariable)); + var initialLdFldInstruction = CecilHelpers.FindInstructionThatPushedArg(containingMethod, 0, instructionThatLoadOrStoreCapturedVariable); + foreach (var instruction in WalkBackLdFldInstructionsToLdarg0(containingMethod, initialLdFldInstruction)) + { + instruction.MakeNOP(); + } + } + + var executeMethod = methodsToClone.First(); + + if (executeMethod.HasGenericParameters) + throw new ArgumentException(); + + var clonedMethods = methodsToClone.ToDictionary(m => m, m => + { + var clonedMethod = new MethodDefinition(m == executeMethod ? newMethodName : m.Name, MethodAttributes.Public, m.ReturnType) + {HasThis = m.HasThis, DeclaringType = targetType}; + clonedMethod.DebugInformation.Scope = m.DebugInformation.Scope; + + targetType.Methods.Add(clonedMethod); + return clonedMethod; + } + ); + + foreach (var methodToClone in methodsToClone) + { + var methodDefinition = clonedMethods[methodToClone]; + + foreach (var lambdaParameter in methodToClone.Parameters) + { + var executeParameter = new ParameterDefinition(lambdaParameter.Name, lambdaParameter.Attributes, + lambdaParameter.ParameterType); + foreach (var ca in lambdaParameter.CustomAttributes) + executeParameter.CustomAttributes.Add(ca); + + methodDefinition.Parameters.Add(executeParameter); + } + + var ilProcessor = methodDefinition.Body.GetILProcessor(); + + var oldVarToNewVar = new Dictionary(); + foreach (var vd in methodToClone.Body.Variables) + { + var newVd = new VariableDefinition(vd.VariableType); + methodDefinition.Body.Variables.Add(newVd); + + var sourceVariable = methodToClone.DebugInformation?.Scope?.Variables?.FirstOrDefault(v => v.Index == vd.Index); + if (sourceVariable != null) + methodDefinition.DebugInformation.Scope.Variables.Add(new VariableDebugInformation(newVd, sourceVariable.Name)); + + oldVarToNewVar.Add(vd, newVd); + } + + var oldToNewInstructions = new Dictionary(); + Instruction previous = null; + foreach (var instruction in methodToClone.Body.Instructions) + { + instruction.Previous = previous; + if (previous != null) + previous.Next = instruction; + + var clonedOperand = instruction.Operand; + if (clonedOperand is FieldReference fr) + { + if (capturedVariables.TryGetValue(clonedOperand as FieldReference, out var capturedVariableForField)) + clonedOperand = capturedVariableForField.NewField; + } + + if (clonedOperand is VariableDefinition vd) + { + if (oldVarToNewVar.TryGetValue(vd, out var replacement)) + clonedOperand = replacement; + } + + if (clonedOperand is MethodReference mr) + { + var targetThatWeAreCloning = methodsToClone.FirstOrDefault(m => m.FullName == mr.FullName); + if (targetThatWeAreCloning != null) + { + var replacement = clonedMethods[targetThatWeAreCloning]; + clonedOperand = replacement; + } + } + + var newInstruction = MakeInstruction(instruction.OpCode, clonedOperand); + oldToNewInstructions.Add(instruction, newInstruction); + ilProcessor.Append(newInstruction); + + previous = instruction; + } + + var oldDebugInfo = methodToClone.DebugInformation; + var newDebugInfo = methodDefinition.DebugInformation; + foreach (var seq in oldDebugInfo.SequencePoints) + newDebugInfo.SequencePoints.Add(seq); + + // Need to clear variables and sequence points in old method or VS debugger gets confused. + // It is also only safe to clear the execute method and not other called methods (fortunately issue only seems to occur in lambda). + if (methodToClone == executeMethod) + { + oldDebugInfo.Scope = null; + oldDebugInfo.SequencePoints.Clear(); + } + + // For all instructions that point to another instruction (like branches), make sure we patch those instructions to the new ones too. + foreach (var newInstruction in oldToNewInstructions.Values) + { + if (newInstruction.Operand is Instruction oldInstruction) + newInstruction.Operand = oldToNewInstructions[oldInstruction]; + else if (newInstruction.Operand is Instruction[] instructions) + newInstruction.Operand = instructions.Select(i => oldToNewInstructions[i]).ToArray(); + } + } + + return (clonedMethods.Values.ToArray(), capturedVariables); + } + + + public static void EraseMethodInvocationFromInstructions(ILProcessor ilProcessor, Instruction callInstruction) + { + var argumentPushingInstructions = new List(); + int succesfullyEraseArguments = 0; + + if (!(callInstruction.Operand is MethodReference methodReference)) + return; + + bool isMethodThatReturnsItsFirstArgument = !methodReference.HasThis && (methodReference.Parameters.FirstOrDefault()?.ParameterType.TypeReferenceEquals(methodReference.ReturnType) ?? false); + + var parametersCount = methodReference.Parameters.Count + (methodReference.HasThis ? 1 : 0); + for (int i = 0; i != parametersCount; i++) + { + if (isMethodThatReturnsItsFirstArgument && i == 0) + continue; + + var instructionThatPushedArg = FindInstructionThatPushedArg(ilProcessor.Body.Method, i, callInstruction); + if (instructionThatPushedArg == null) + continue; + + if (InstructionExtensions.IsInvocation(instructionThatPushedArg)) + continue; + + var pushDelta = InstructionExtensions.GetPushDelta(instructionThatPushedArg); + var popDelta = InstructionExtensions.GetPopDelta(instructionThatPushedArg); + + if (pushDelta == 1 && popDelta == 0) + { + argumentPushingInstructions.Add(instructionThatPushedArg); + succesfullyEraseArguments++; + continue; + } + + if (pushDelta == 1 && popDelta == 1) + { + var whoPushedThat = FindInstructionThatPushedArg(ilProcessor.Body.Method, 0, instructionThatPushedArg); + if (InstructionExtensions.GetPopDelta(whoPushedThat) == 0 && InstructionExtensions.GetPushDelta(whoPushedThat) == 1) + { + argumentPushingInstructions.Add(instructionThatPushedArg); + argumentPushingInstructions.Add(whoPushedThat); + succesfullyEraseArguments++; + continue; + } + } + } + + + foreach (var i in argumentPushingInstructions) + i.MakeNOP(); + + //we're going to remove the invocation. While we do this we want to remain stack neutral. The stackbehaviour going in is that the jobdescription itself will be on the stack, + //plus any arguments the method might have. After the function, it will put the same jobdescription on the stack as the return value. + //we're going to pop all the arguments, but leave the jobdescription itself on the stack, since that the behaviour of the original method. + var parametersToErase = parametersCount - (isMethodThatReturnsItsFirstArgument ? 1 : 0); + var popInstructions = Enumerable.Repeat(Instruction.Create(OpCodes.Pop), parametersToErase - succesfullyEraseArguments); + ilProcessor.InsertBefore(callInstruction, popInstructions); + + //instead of removing the call instruction, we'll replace it with a NOP opcode. This is safer as this instruction + //might be the target of a branch instruction that we don't want to become invalid. + callInstruction.MakeNOP(); + + if (!methodReference.ReturnType.TypeReferenceEquals(methodReference.Module.TypeSystem.Void) && !isMethodThatReturnsItsFirstArgument) + { + callInstruction.OpCode = OpCodes.Ldnull; + } + } + + public class DelegateProducingSequence + { + public bool CapturesLocals; + public MethodDefinition MethodLambdaWasEmittedAs; + public MethodDefinition OriginalLambdaContainingMethod; + public Instruction[] Instructions; + + public void RewriteToProduceSingleNullValue() + { + if (CapturesLocals) + throw new ArgumentException($"Cannot {nameof(RewriteToProduceSingleNullValue)} when {nameof(CapturesLocals)} is true"); + + foreach (var i in Instructions) + i.MakeNOP(); + Instructions.Last().OpCode = OpCodes.Ldnull; + } + + + public void RewriteToKeepDisplayClassOnEvaluationStack() + { + if (!CapturesLocals) + throw new ArgumentException($"Cannot {nameof(RewriteToKeepDisplayClassOnEvaluationStack)} when {nameof(CapturesLocals)} is false"); + + var ldFtn = Instructions.Single(i => i.OpCode == OpCodes.Ldftn); + var ldLoc_that_loads_displayclass = ldFtn.Previous; + if (!ldLoc_that_loads_displayclass.IsLoadLocal(out _) && !ldLoc_that_loads_displayclass.IsLoadLocalAddress(out _)) + throw new PostProcessException("ldftn opcode was not preceeded with ldloc opcode", OriginalLambdaContainingMethod, ldFtn); + foreach (var i in Instructions) + { + if (i != ldLoc_that_loads_displayclass) + i.MakeNOP(); + } + } + } + + public class DelegateProducingPattern + { + public Func[] InstructionMatchers; + public bool CapturesLocal; + public bool CapturesField; + + public enum MatchSide + { + Start, + End + } + + public DelegateProducingSequence Match(MethodDefinition containingMethod, Instruction i, MatchSide side) + { + DelegateProducingSequence MakeResult(Instruction[] instructions) + { + return new DelegateProducingSequence() + { + Instructions = instructions, CapturesLocals = CapturesLocal, + OriginalLambdaContainingMethod = containingMethod, + MethodLambdaWasEmittedAs = FindLambdaMethod(instructions) + }; + } + + switch (side) + { + case MatchSide.Start: + { + return IsStartOfSequence(i, InstructionMatchers, out var instructions) ? MakeResult(instructions.ToArray()) : null; + } + case MatchSide.End: + { + return IsEndOfSequence(i, InstructionMatchers, out var instructions) ? MakeResult(instructions.ToArray()) : null; + } + default: + throw new ArgumentOutOfRangeException(nameof(side), side, null); + } + } + + private MethodDefinition FindLambdaMethod(Instruction[] instructions) + { + var instruction = instructions.FirstOrDefault(i => i.OpCode == OpCodes.Ldftn); + if (instruction == null) + throw new ArgumentException("Instruction array did not have ldftn opcode. Instruction array way: "+instructions.Select(i=>i.ToString()).SeparateBy(Environment.NewLine)); + return ((MethodReference) instruction.Operand).Resolve(); + } + } + + private static DelegateProducingPattern[] s_DelegateProducingPatterns; + private static DelegateProducingPattern[] GetDelegateProducingPatterns() + { + if (s_DelegateProducingPatterns != null) + return s_DelegateProducingPatterns; + + //roslyn will has a variety of ways it will emit IL code when it converts a lambda expression to a delegate object. This variety depends on several factors: + // + //which things the lambda expression captures. Possible things to capture: + //- locals + //- parameters. when captured, these will be copied into a local, and then the local is captured. going forward, I'll pretend parameter capture doesn't exist, and refer only to locals. + //- instance fields + // + // Example of local capture: + // https://sharplab.io/#v2:C4LglgNgPgAgTARgLACgYGYAE9MGFMDeqmJ2WMALJgLIAUAlIcaS2AHbCYC2AngDIB7AMYBDCJgC8mdAG5mLEgFEAHgFMhAV2CraDSQD48AtgGcBEVQDoA6gCcw22r0GiI9enJQsAvvOxUVdS0dGAQ4TBFGAl8UbyA== + // Emitted IL: the expression turns into a method on the displayclass. debug/release only differs through some NOP's sprinkled in between. + // + // Example of field capture: + // https://sharplab.io/#v2:D4AQTAjAsAUCDMACciDCiDetE8QSwDsAXRAWwE8AxPAUwBsATRAXkXgG5tcFkAWRALIAKAJSYuuXAFEAHjQDGAVyI0holgD40AewIBnbXRoA6AOoAnPCqEVq9BiJGcYkgL4S+iWQuWqQEMEQAQzEMdxhXIA= + // Emitted IL: lambda expression gets emitted as an instancemethod on the same type. (we do not support this kind of capture, and give a compile error about it). debug/release only differs through NOPs + // + // Example of local _and_ field capture + // https://sharplab.io/#v2:D4AQTAjAsAUCDMACciDCiDetE8QSwDsAXRAWwE8AxPAUwBsATRAXkXgG5tcFkAWRALIAKAJSYuuXIRIUAMgHsAxgEM6LRAFZOMSZICiADxqKArkRpDRLAHxp5BAM7y6NAHQB1AE55zQitXomAGoycgUVOhERbUkAXwk+RENjMwsQCDBEZTEMeJhYoA== + // Emitted IL: emitted like local capture, and the instance of the method's declaring type, gets stored in the displayclass. (we do not support this kind of capture, and give a compile error about it). debug/release only differs through NOPs + // + // Because creating a new delegate is a heap allocation, roslyn tries to be smart, and in situations where it can cache the delegate, it will. The first example of this is the surprisingly simple looking: + // + // Example of not capturing anything + // https://sharplab.io/#v2:CYLg1APgAgTAjAWAFBQMwAJboMLoN7LrqFGYZQAs6AsgBQCU+JppAogB4CmAxgK4AunWg3QBeAHw4A9gDsAzlIA2nAHQB1AE4BLQbQr16AbmboAvicroOPAUKhwY6AIaM85pKaA= + // Emitted IL: method gets emitted as an instance method on a compiler generated type. the type is a singleton, and the only instance is stored in a static field on the same type. + // The generated delegate object is cached on a static field in the same type. debug/release only differs through NOP. + // Sidenote: Roslyn used to emit this simply as a static method, which is a lot simpler, but CoreCLR is faster at invoking instance delegates than static ones, so roslyn changed to this method. + // + // + // Another dimension of "roslyn will choose a different codegen strategy" is wether or not the lambda expression is used more than once. If it's possible that it might be used more than once (like in a forloop) + // and it wasn't possible to permanently cache the delegate, it will attempt to cache the delegate for this method invocation, so we get 1 allocation, instead of the number of loop iterations. + // + // Example of local capture inside a loop + // https://sharplab.io/#v2:D4AQTAjAsAUCDMACciDCiDetE9wSwDsAXRAWwE8AzPAUwBsATAbm1wWQBZEBZACgEpMrXPmJlydAPYBjAIZ1EAXkTwWMESKzqNOSpIBOiXoRJ5FABiaI8AQkWrrAakf9hO3AFEAHjWkBXIhpeASUAPjRJAgBnSToaADoAdX08QN4KKTk6fn41d0QAXzci7RwQLm9fAKCQCDBEWUEMEoKgA== + // Emitted IL: like regular local capture, but it will cache the delegate in a field in the displayclass. + // Sidenote: using a forloop does cause the caching codegen to kick in, but using a while(true) loop does not. + // + // the extra attempt at caching only happens for "also captures locals" lambdas. lambdas that only capture fields are never cached. + // + // About local functions: While local functions can make the codegen look more complicated, in essence they don't affect the big picture. a local function in a lambda expression has access to every variable the lambda expression has access to + // this means that "what things the lambda expression captures" gets augmented by whatever its local functions capture, and for the rest normal rules are being followed. + // + // Now that we have written an sherlock holmes essay on how roslyn emits code today, what do we do with it. The only scenarios we support is "captures only locals", and "captures nothing". + // When nothing is captured, we can just NOP out the entire IL sequence that was responsible for making the delegate, as we only need to know what the target method was that our lambda expression ended up at. + // When locals are captured, we have to do work: + // - in all of these scenarios, the lambda expression will be emitted as an instance metho on the displayclass. + // - in some of these scnearios the delegate will be cached on the displayclass, in other cases not. + // + // the second case is just a "check if we stored this already, if yes use that, if not, create it, then store" wrapper around the first case. + // the first case (and thus also the second case) uses a "load displayclass on the stack, ldftn our executemethod, newobj our delegate type" sequence. We need to replace that with + // create our own jobstruct, populate its fields from the displayclass. _not_ create the delegate, not try to cache the delegate, and then schedule/run our jobstruct. + + var notCapturingPattern = new DelegateProducingPattern() + { + InstructionMatchers = new Func[] + { + i => i.OpCode == OpCodes.Ldsfld, + i => i.OpCode == OpCodes.Dup, + i => i.IsBranch(), + i => i.OpCode == OpCodes.Pop, + i => i.OpCode == OpCodes.Ldsfld, + i => i.OpCode == OpCodes.Ldftn, + i => i.OpCode == OpCodes.Newobj, + i => i.OpCode == OpCodes.Dup, + i => i.OpCode == OpCodes.Stsfld, + }, + CapturesLocal = false + }; + + var capturingLocal_InvokedOnce = new DelegateProducingPattern() + { + InstructionMatchers = new Func[] + { + i => i.IsLoadLocal(out _) || i.IsLoadLocalAddress(out _), + i => i.OpCode == OpCodes.Ldftn, + i => i.OpCode == OpCodes.Newobj, + }, + CapturesLocal = true + }; + + var capturingLocal_ExcetedMoreThanOnce = new DelegateProducingPattern() + { + InstructionMatchers = new Func[] + { + i => i.IsLoadLocal(out _), + i => i.OpCode == OpCodes.Ldfld, + i => i.OpCode == OpCodes.Dup, + i => i.IsBranch(), + i => i.OpCode == OpCodes.Pop, + i => i.IsLoadLocal(out _), + i => i.IsLoadLocal(out _), + i => i.OpCode == OpCodes.Ldftn, + i => i.OpCode == OpCodes.Newobj, + i => i.OpCode == OpCodes.Dup, + i => i.IsStoreLocal(out _), + i => i.OpCode == OpCodes.Stfld, + i => i.IsLoadLocal(out _), + }, + CapturesLocal = true, + }; + + var capturingOnlyFieldPattern = new DelegateProducingPattern() + { + InstructionMatchers = new Func[] + { + i => (i.OpCode == OpCodes.Ldarg_0) || (i.OpCode == OpCodes.Ldarg && ((ParameterDefinition)i.Operand).Index == -1), + i => i.OpCode == OpCodes.Ldftn, + i => i.OpCode == OpCodes.Newobj, + }, + CapturesLocal = false, + CapturesField = true + }; + + + s_DelegateProducingPatterns = new[] {notCapturingPattern, capturingLocal_InvokedOnce, capturingLocal_ExcetedMoreThanOnce, capturingOnlyFieldPattern}; + return s_DelegateProducingPatterns; + } + + internal static bool IsStartOfSequence(Instruction instruction, Func[] pattern, out List instructions) + { + Instruction cursor = instruction; + instructions = null; + + var results = new List(50); + int patternIndex = 0; + while(true) + { + if (cursor == null) + return false; + results.Add(cursor); + if (cursor.OpCode != OpCodes.Nop) + { + if (!pattern[patternIndex++].Invoke(cursor)) + return false; + + if (patternIndex == pattern.Length) + break; //match! + } + + cursor = cursor.Next; + } + + instructions = results; + return true; + } + + internal static bool IsEndOfSequence(Instruction instruction, Func[] pattern,out List instructions) + { + Instruction cursor = instruction; + instructions = null; + + var result = new List(50); + int patternIndex = pattern.Length-1; + while(true) + { + if (cursor == null) + return false; + result.Add(cursor); + if (cursor.OpCode != OpCodes.Nop) + { + if (!pattern[patternIndex--].Invoke(cursor)) + return false; + + if (patternIndex == -1) + break; //match! + } + cursor = cursor.Previous; + } + + result.Reverse(); + instructions = result; + return true; + } + + public static DelegateProducingSequence MatchesDelegateProducingPattern(MethodDefinition containingMethod, Instruction instruction, DelegateProducingPattern.MatchSide matchSide) + { + return GetDelegateProducingPatterns().Select(pattern => pattern.Match(containingMethod, instruction, matchSide)).FirstOrDefault(result => result != null); + } + + public static IEnumerable FindUsedInstanceMethodsOnSameType(MethodDefinition method, HashSet foundSoFar = null) + { + foundSoFar = foundSoFar ?? new HashSet(); + + var usedInThisMethod = method.Body.Instructions.Where(i=>i.IsInvocation()).Select(i => i.Operand).OfType().Where(mr => mr.DeclaringType.TypeReferenceEquals(method.DeclaringType)); + + foreach (var usedMethod in usedInThisMethod) + { + if (foundSoFar.Contains(usedMethod.FullName)) + continue; + foundSoFar.Add(usedMethod.FullName); + var usedMethodResolved = usedMethod.Resolve(); + yield return usedMethodResolved; + + foreach (var used in FindUsedInstanceMethodsOnSameType(usedMethodResolved, foundSoFar)) + yield return used; + } + } + + static readonly string _universalDelegatesNamespace = nameof(Unity) + "." + nameof(Unity.Entities) + "." + nameof(Unity.Entities.UniversalDelegates); + + public static bool AllDelegatesAreGuaranteedNotToOutliveMethodFor(MethodDefinition methodToAnalyze) + { + //in order to make lambda jobs be able to not allocate GC memory, we want to change the DisplayClass that stores the variables from a class to a struct. + //This is only safe if the only delegates that are used in the methods are the ones for lambda jobs, because we know that those will not leak. If any other + //delegates are used, we cannot guarantee this, and we will keep the displayclass as a class, which results in a heap allocation for every invocation of the method. + + foreach (var instruction in methodToAnalyze.Body.Instructions) + { + //we'll find all occurrences of delegates by scanning all constructor invocations. + if (instruction.OpCode != OpCodes.Newobj) + continue; + var mr = (MethodReference) instruction.Operand; + + //to avoid a potentially expensive resolve, we'll first try to rule out this instruction as delegate creating by doing some pattern checks: + + //all delegate creation constructors take two arguments. + if (mr.Parameters.Count != 2) + continue; + + //if this delegate is one of our UniversalDelegates we'll assume we're cool. This is not waterproof, as you could imagine a situation where someone + //makes an instance of our delegate manually, and intentionally leaks that. We'll consider that scenario near-malice for now, and assume that the UniversalDelegates + //are exclusively used as arguments for lambda jobs that do not leak. + if (mr.DeclaringType.Namespace == _universalDelegatesNamespace) + continue; + + if (mr.DeclaringType.Name == typeof(LambdaJobChunkDescriptionConstructionMethods.JobChunkDelegate).Name && mr.DeclaringType.DeclaringType?.Name == nameof(LambdaJobChunkDescriptionConstructionMethods)) + continue; + + if (mr.DeclaringType.Name == typeof(LambdaSingleJobDescriptionConstructionMethods.WithCodeAction).Name && mr.DeclaringType.DeclaringType?.Name == nameof(LambdaSingleJobDescriptionConstructionMethods)) + continue; + + //ok, it walks like a delegate constructor invocation, let's see if it talks like one: + var constructedType = mr.DeclaringType.Resolve(); + if (constructedType.BaseType.Name == nameof(MulticastDelegate)) + return false; + } + + return true; + } + + public static void PatchDisplayClassToBeAStruct(TypeDefinition displayClass) + { + displayClass.BaseType = displayClass.Module.ImportReference(typeof(ValueType)); + displayClass.IsClass = false; + + //we have to kill the body of the default constructor, as it invokes the base class constructor, which makes no sense for a valuetype + var constructorDefinition = displayClass.Methods.Single(m => m.IsConstructor); + constructorDefinition.Body = new MethodBody(constructorDefinition); + constructorDefinition.Body.GetILProcessor().Emit(OpCodes.Ret); + } + + public static void PatchMethodThatUsedDisplayClassToTreatItAsAStruct(MethodBody body, VariableDefinition displayClassVariable) + { + var displayClassTypeReference = displayClassVariable.VariableType; + var instructions = body.Instructions.ToArray(); + var ilProcessor = body.GetILProcessor(); + + foreach (var instruction in instructions) + { + // We will replace all LdLoc of our displayclass to LdLoca of our displayclass variable that now lives on the stack. + // Except in the case where we are storing a nested DisplayClass! + if ((instruction.IsLoadLocal(out int loadIndex) && displayClassVariable.Index == loadIndex) && + !(instruction.Next != null && instruction.Next.OpCode == OpCodes.Stfld && (instruction.Next.Operand as FieldReference).IsNestedDisplayClassField())) + { + instruction.OpCode = OpCodes.Ldloca; + instruction.Operand = body.Variables[loadIndex]; + } + + // We also need to replace and ldfld a nested DisplayClass that we turned into a struct with ldflda + if (instruction.OpCode == OpCodes.Ldfld && ((FieldReference)instruction.Operand).IsNestedDisplayClassField()) + instruction.OpCode = OpCodes.Ldflda; + + // Roselyn should never double assign the DisplayClass to a variable, throw if we somehow detect this. + if (instruction.IsStoreLocal(out int storeIndex) && displayClassVariable.Index == storeIndex) + { + InternalCompilerError.DCICE003(body.Method, instruction).Throw(); + } + + bool IsInstructionNewObjOfDisplayClass(Instruction thisInstruction) + { + return thisInstruction.OpCode.Code == Code.Newobj && ((MethodReference) thisInstruction.Operand).DeclaringType.TypeReferenceEquals(displayClassTypeReference); + } + + // We need to replace the creation of the displayclass object on the heap, with a initobj of the displayclass on the stack. + // The final sequence will be ldloca, initobj (which will replace newobj, stloc.1. + if (IsInstructionNewObjOfDisplayClass(instruction)) + { + // Remove next stloc.1 instruction so that we can replace both of these with the instructions below + if (!instruction.Next.IsStoreLocal(out _)) + InternalCompilerError.DCICE004(body.Method, instruction).Throw(); + instruction.Next.MakeNOP(); + ilProcessor.Replace(instruction, new[] + { + Instruction.Create(OpCodes.Ldloca, displayClassVariable), + Instruction.Create(OpCodes.Initobj, displayClassTypeReference), + }); + } + } + } + + public static void CloneMethodForDiagnosingProblems(MethodDefinition methodToAnalyze) + { + var cloneName = methodToAnalyze.Name + "_Unmodified"; + if (methodToAnalyze.DeclaringType.Methods.Any(m => m.Name == cloneName)) + return; + + var clonedMethod = new MethodDefinition(cloneName, methodToAnalyze.Attributes, methodToAnalyze.ReturnType); + foreach (var parameter in methodToAnalyze.Parameters) + clonedMethod.Parameters.Add(parameter); + foreach (var v in methodToAnalyze.Body.Variables) + clonedMethod.Body.Variables.Add(new VariableDefinition(v.VariableType)); + var p = clonedMethod.Body.GetILProcessor(); + var oldToNew = new Dictionary(); + foreach (var i in methodToAnalyze.Body.Instructions) + { + var newInstruction = CecilHelpers.MakeInstruction(i.OpCode, i.Operand); + oldToNew.Add(i, newInstruction); + p.Append(newInstruction); + } + + foreach (var i in oldToNew.Values) + { + if (i.Operand is Instruction operand) + { + if (oldToNew.TryGetValue(operand, out var replacement)) + i.Operand = replacement; + } + } + + methodToAnalyze.DeclaringType.Methods.Add(clonedMethod); + } + + public static Instruction FindInstructionThatPushedArg(MethodDefinition containingMethod, int argNumber, + Instruction callInstructionsWhoseArgumentsWeWantToFind) + { + containingMethod.Body.EnsurePreviousAndNextAreSet(); + + var cursor = callInstructionsWhoseArgumentsWeWantToFind.Previous; + + int stackSlotWhoseWriteWeAreLookingFor = argNumber; + int stackSlotWhereNextPushWouldBeWrittenTo = InstructionExtensions.GetPopDelta(callInstructionsWhoseArgumentsWeWantToFind); + + var seenInstructions = new HashSet() {callInstructionsWhoseArgumentsWeWantToFind, cursor}; + + while (cursor != null) + { + var pushAmount = cursor.GetPushDelta(); + var popAmount = cursor.GetPopDelta(); + + var result = CecilHelpers.MatchesDelegateProducingPattern(containingMethod, cursor, CecilHelpers.DelegateProducingPattern.MatchSide.End); + if (result != null) + { + //so we are crawling backwards through isntructions. if we find a "this is roslyn caching a delegate" sequence, + //we're going to pretend it is a single instruction, that pushes the delegate on the stack, and pops nothing. + cursor = result.Instructions.First(); + pushAmount = 1; + popAmount = 0; + } else if (cursor.IsBranch()) + { + var target = (Instruction) cursor.Operand; + if (!seenInstructions.Contains(target)) + { + if (IsUnsupportedBranch(cursor)) + UserError.DC0010(containingMethod, cursor).Throw(); + } + } + + for (int i = 0; i != pushAmount; i++) + { + stackSlotWhereNextPushWouldBeWrittenTo--; + if (stackSlotWhereNextPushWouldBeWrittenTo == stackSlotWhoseWriteWeAreLookingFor) + return cursor; + } + + for (int i = 0; i != popAmount; i++) + { + stackSlotWhereNextPushWouldBeWrittenTo++; + } + + cursor = cursor.Previous; + seenInstructions.Add(cursor); + } + + return null; + } + + public static bool IsUnsupportedBranch(Instruction cursor) + { + if (cursor.OpCode.FlowControl == FlowControl.Next) + return false; + + if (cursor.OpCode.FlowControl == FlowControl.Call) + return false; + + return true; + } + + public static MethodDefinition AddMethodImplementingInterfaceMethod(ModuleDefinition module, TypeDefinition type, System.Reflection.MethodInfo interfaceMethod) + { + var interfaceMethodReference = module.ImportReference(interfaceMethod); + var newMethod = new MethodDefinition(interfaceMethodReference.Name, + MethodAttributes.Virtual | MethodAttributes.NewSlot | MethodAttributes.Final | MethodAttributes.Public | + MethodAttributes.HideBySig, interfaceMethodReference.ReturnType); + + int index = 0; + foreach (var pd in interfaceMethodReference.Parameters) + { + var pdName = pd.Name; + if (pdName.Length == 0) + pdName = interfaceMethod.GetParameters()[index].Name; + newMethod.Parameters.Add(new ParameterDefinition(pdName, pd.Attributes, module.ImportReference(pd.ParameterType))); + index++; + } + + type.Methods.Add(newMethod); + return newMethod; + } + +#if !UNITY_DOTSPLAYER + /// + /// Adds the [Preserve] attribute to the MethodDefinition instance + /// + /// + public static void MarkAsPreserve(MethodDefinition methodDef, ModuleDefinition moduleDef) + { + var preserveAttributeCtor = moduleDef.ImportReference(typeof(PreserveAttribute).GetConstructor(Type.EmptyTypes)); + methodDef.CustomAttributes.Add(new CustomAttribute(preserveAttributeCtor)); + } + + /// + /// Adds the [Preserve] attribute to the TypeDefinition instance + /// + /// + public static void MarkAsPreserve(TypeDefinition typeDef, ModuleDefinition moduleDef) + { + var preserveAttributeCtor = moduleDef.ImportReference(typeof(PreserveAttribute).GetConstructor(Type.EmptyTypes)); + typeDef.CustomAttributes.Add(new CustomAttribute(preserveAttributeCtor)); + } +#endif + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/CecilHelpers.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/CecilHelpers.cs.meta new file mode 100644 index 000000000..cb1af1e97 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/CecilHelpers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd677955c25436e4ca5607323c2c1bd2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/EntitiesILPostProcessor.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/EntitiesILPostProcessor.cs new file mode 100644 index 000000000..a73983a52 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/EntitiesILPostProcessor.cs @@ -0,0 +1,249 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Threading; +using Mono.Cecil; +using Mono.Cecil.Cil; +using Unity.CompilationPipeline.Common.Diagnostics; +using Unity.CompilationPipeline.Common.ILPostProcessing; + +[assembly: InternalsVisibleTo("Unity.Entities.Hybrid.CodeGen")] +namespace Unity.Entities.CodeGen +{ + internal class EntitiesILPostProcessors : ILPostProcessor + { + public static string[] Defines { get; internal set; } + + static EntitiesILPostProcessor[] FindAllEntitiesILPostProcessors() + { + var processorTypes = new List(); + foreach(var assembly in AppDomain.CurrentDomain.GetAssemblies()) + { + if(assembly.FullName.Contains(".CodeGen")) + processorTypes.AddRange(assembly.GetTypes().Where(t => t.IsSubclassOf(typeof(EntitiesILPostProcessor)) && !t.IsAbstract)); + } + + return processorTypes.Select(t => (EntitiesILPostProcessor)Activator.CreateInstance(t)).ToArray(); + } + + public override ILPostProcessResult Process(ICompiledAssembly compiledAssembly) + { + if (!WillProcess(compiledAssembly)) + return null; + + Defines = compiledAssembly.Defines; + var assemblyDefinition = AssemblyDefinitionFor(compiledAssembly); + var postProcessors = FindAllEntitiesILPostProcessors(); + + var diagnostics = new List(); + bool madeAnyChange = false; + foreach (var postProcessor in postProcessors) + { + diagnostics.AddRange(postProcessor.PostProcess(assemblyDefinition, out var madeChange)); + madeAnyChange |= madeChange; + }; + + if (!madeAnyChange || diagnostics.Any(d=>d.DiagnosticType == DiagnosticType.Error)) + return new ILPostProcessResult(null, diagnostics); + + var pe = new MemoryStream(); + var pdb = new MemoryStream(); + var writerParameters = new WriterParameters + { + SymbolWriterProvider = new PortablePdbWriterProvider(), SymbolStream = pdb, WriteSymbols = true + }; + + assemblyDefinition.Write(pe, writerParameters); + return new ILPostProcessResult(new InMemoryAssembly(pe.ToArray(), pdb.ToArray()), diagnostics); + } + + public override ILPostProcessor GetInstance() + { + return this; + } + + public override bool WillProcess(ICompiledAssembly compiledAssembly) + { + if (compiledAssembly.Name == "Unity.Entities") + return true; + return compiledAssembly.References.Any(f => Path.GetFileName(f) == "Unity.Entities.dll") && + !compiledAssembly.Name.Contains("CodeGen.Tests"); + } + + class PostProcessorAssemblyResolver : IAssemblyResolver + { + private readonly string[] _references; + Dictionary _cache = new Dictionary(); + private ICompiledAssembly _compiledAssembly; + private AssemblyDefinition _selfAssembly; + + public PostProcessorAssemblyResolver(ICompiledAssembly compiledAssembly) + { + _compiledAssembly = compiledAssembly; + _references = compiledAssembly.References; + } + + public void Dispose() + { + } + + public AssemblyDefinition Resolve(AssemblyNameReference name) + { + return Resolve(name, new ReaderParameters(ReadingMode.Deferred)); + } + + + public AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters parameters) + { + lock (_cache) + { + if (name.Name == _compiledAssembly.Name) + return _selfAssembly; + + var fileName = FindFile(name); + if (fileName == null) + return null; + + var lastWriteTime = File.GetLastWriteTime(fileName); + + var cacheKey = fileName + lastWriteTime.ToString(); + + if (_cache.TryGetValue(cacheKey, out var result)) + return result; + + parameters.AssemblyResolver = this; + + var ms = MemoryStreamFor(fileName); + + var pdb = fileName + ".pdb"; + if (File.Exists(pdb)) + parameters.SymbolStream = MemoryStreamFor(pdb); + + var assemblyDefinition = AssemblyDefinition.ReadAssembly(ms, parameters); + _cache.Add(cacheKey, assemblyDefinition); + return assemblyDefinition; + } + } + + private string FindFile(AssemblyNameReference name) + { + var fileName = _references.FirstOrDefault(r => Path.GetFileName(r) == name.Name + ".dll"); + if (fileName != null) + return fileName; + + // perhaps the type comes from an exe instead + fileName = _references.FirstOrDefault(r => Path.GetFileName(r) == name.Name + ".exe"); + if (fileName != null) + return fileName; + + //Unfortunately the current ICompiledAssembly API only provides direct references. + //It is very much possible that a postprocessor ends up investigating a type in a directly + //referenced assembly, that contains a field that is not in a directly referenced assembly. + //if we don't do anything special for that situation, it will fail to resolve. We should fix this + //in the ILPostProcessing api. As a workaround, we rely on the fact here that the indirect references + //are always located next to direct references, so we search in all directories of direct references we + //got passed, and if we find the file in there, we resolve to it. + foreach (var parentDir in _references.Select(Path.GetDirectoryName).Distinct()) + { + var candidate = Path.Combine(parentDir,name.Name + ".dll"); + if (File.Exists(candidate)) + return candidate; + } + + return null; + } + + static MemoryStream MemoryStreamFor(string fileName) + { + return Retry(10, TimeSpan.FromSeconds(1), () => { + byte[] byteArray; + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + byteArray = new byte[fs.Length]; + var readLength = fs.Read(byteArray, 0, (int) fs.Length); + if (readLength != fs.Length) + throw new InvalidOperationException("File read length is not full length of file."); + } + + return new MemoryStream(byteArray); + }); + } + + private static MemoryStream Retry(int retryCount, TimeSpan waitTime, Func func) + { + try + { + return func(); + } + catch (IOException) + { + if (retryCount == 0) + throw; + Console.WriteLine($"Caught IO Exception, trying {retryCount} more times"); + Thread.Sleep(waitTime); + return Retry(retryCount - 1, waitTime, func); + } + } + + public void AddAssemblyDefinitionBeingOperatedOn(AssemblyDefinition assemblyDefinition) + { + _selfAssembly = assemblyDefinition; + } + } + + private static AssemblyDefinition AssemblyDefinitionFor(ICompiledAssembly compiledAssembly) + { + var resolver = new PostProcessorAssemblyResolver(compiledAssembly); + var readerParameters = new ReaderParameters + { + SymbolStream = new MemoryStream(compiledAssembly.InMemoryAssembly.PdbData.ToArray()), + SymbolReaderProvider = new PortablePdbReaderProvider(), + AssemblyResolver = resolver, + ReadingMode = ReadingMode.Immediate + }; + + var peStream = new MemoryStream(compiledAssembly.InMemoryAssembly.PeData.ToArray()); + var assemblyDefinition = AssemblyDefinition.ReadAssembly(peStream, readerParameters); + + //apparently, it will happen that when we ask to resolve a type that lives inside Unity.Entities, and we + //are also postprocessing Unity.Entities, type resolving will fail, because we do not actually try to resolve + //inside the assembly we are processing. Let's make sure we do that, so that we can use postprocessor features inside + //unity.entities itself as well. + resolver.AddAssemblyDefinitionBeingOperatedOn(assemblyDefinition); + + return assemblyDefinition; + } + } + + abstract class EntitiesILPostProcessor + { + protected AssemblyDefinition AssemblyDefinition; + + protected List _diagnosticMessages = new List(); + + public IEnumerable PostProcess(AssemblyDefinition assemblyDefinition, out bool madeAChange) + { + AssemblyDefinition = assemblyDefinition; + try + { + madeAChange = PostProcessImpl(); + } + catch (FoundErrorInUserCodeException e) + { + madeAChange = false; + return e.DiagnosticMessages; + } + + return _diagnosticMessages; + } + + protected abstract bool PostProcessImpl(); + + protected void AddDiagnostic(DiagnosticMessage diagnosticMessage) + { + _diagnosticMessages.Add(diagnosticMessage); + } + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/EntitiesILPostProcessor.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/EntitiesILPostProcessor.cs.meta new file mode 100644 index 000000000..2fd9bd203 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/EntitiesILPostProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8e091d006025c1245b9fe0688d2b147b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs.meta new file mode 100644 index 000000000..a7d595ade --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2bd8534cf3b25fe41b53a9cac6e8ff47 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachAttributes.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachAttributes.cs new file mode 100644 index 000000000..0254abc04 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachAttributes.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Mono.Cecil; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.CompilationPipeline.Common.Diagnostics; + +namespace Unity.Entities.CodeGen { + static class EntitiesForEachAttributes + { + public delegate DiagnosticMessage CheckAttributeApplicable( + MethodDefinition inMethod, + LambdaJobDescriptionConstruction.InvokedConstructionMethod constructionMethod, + FieldDefinition argument + ); + + public struct AttributeData + { + public AttributeData(string methodName, Type attributeType, CheckAttributeApplicable check = null) + { + MethodName = methodName; + AttributeType = attributeType; + CheckAttributeApplicable = check; + } + public Type AttributeType; + public string MethodName; + public CheckAttributeApplicable CheckAttributeApplicable; + } + + public static readonly List Attributes = new List + { + new AttributeData(nameof(LambdaJobDescriptionConstructionMethods.WithReadOnly), typeof(ReadOnlyAttribute), CheckReadOnly), + new AttributeData(nameof(LambdaJobDescriptionConstructionMethods.WithDeallocateOnJobCompletion), typeof(DeallocateOnJobCompletionAttribute), CheckDeallocateOnJobCompletion), + new AttributeData(nameof(LambdaJobDescriptionConstructionMethods.WithNativeDisableContainerSafetyRestriction), typeof(NativeDisableContainerSafetyRestrictionAttribute), CheckNativeDisableContainerSafetyRestriction), + new AttributeData(nameof(LambdaJobDescriptionConstructionMethods.WithNativeDisableUnsafePtrRestriction), typeof(NativeDisableUnsafePtrRestrictionAttribute)), + new AttributeData(nameof(LambdaJobDescriptionConstructionMethods.WithNativeDisableParallelForRestriction), typeof(NativeDisableParallelForRestrictionAttribute), CheckNativeDisableParallelForRestriction), + }; + + static bool IsType(TypeReference typeRef, Type type) => typeRef.Name == type.Name && typeRef.Namespace == type.Namespace; + static bool HasAttribute(TypeDefinition typeDef, Type attributeType) => typeDef.HasCustomAttributes && + typeDef.CustomAttributes.Any(attr => IsType(attr.AttributeType, attributeType)); + + static DiagnosticMessage CheckReadOnly( + MethodDefinition method, + LambdaJobDescriptionConstruction.InvokedConstructionMethod constructionMethod, + FieldDefinition field) + { + if (HasAttribute(field.FieldType.Resolve(), typeof(NativeContainerAttribute))) + return null; + return UserError.DC0034(method, field.Name, field.FieldType, constructionMethod.InstructionInvokingMethod); + } + + static DiagnosticMessage CheckDeallocateOnJobCompletion( + MethodDefinition method, + LambdaJobDescriptionConstruction.InvokedConstructionMethod constructionMethod, + FieldDefinition field) + { + if (HasAttribute(field.FieldType.Resolve(), typeof(NativeContainerSupportsDeallocateOnJobCompletionAttribute))) + return null; + return UserError.DC0035(method, field.Name, field.FieldType, constructionMethod.InstructionInvokingMethod); + } + + static DiagnosticMessage CheckNativeDisableContainerSafetyRestriction( + MethodDefinition method, + LambdaJobDescriptionConstruction.InvokedConstructionMethod constructionMethod, + FieldDefinition field) + { + if (HasAttribute(field.FieldType.Resolve(), typeof(NativeContainerAttribute))) + return null; + return UserError.DC0036(method, field.Name, field.FieldType, constructionMethod.InstructionInvokingMethod); + } + + static DiagnosticMessage CheckNativeDisableParallelForRestriction( + MethodDefinition method, + LambdaJobDescriptionConstruction.InvokedConstructionMethod constructionMethod, + FieldDefinition field) + { + if (HasAttribute(field.FieldType.Resolve(), typeof(NativeContainerAttribute))) + return null; + return UserError.DC0037(method, field.Name, field.FieldType, constructionMethod.InstructionInvokingMethod); + } + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachAttributes.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachAttributes.cs.meta new file mode 100644 index 000000000..58f41542e --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d7a08d088ed56e4c81664eb54b79954 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachJobCreator.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachJobCreator.cs new file mode 100644 index 000000000..e6bb1c23a --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachJobCreator.cs @@ -0,0 +1,988 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using Mono.Cecil; +using Mono.Cecil.Cil; +using Unity.Burst; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Entities.CodeGeneratedJobForEach; +using Unity.Jobs; +using CustomAttributeNamedArgument = Mono.Cecil.CustomAttributeNamedArgument; +using FieldAttributes = Mono.Cecil.FieldAttributes; +using MethodAttributes = Mono.Cecil.MethodAttributes; +using MethodBody = Mono.Cecil.Cil.MethodBody; +using ParameterAttributes = Mono.Cecil.ParameterAttributes; +using TypeAttributes = Mono.Cecil.TypeAttributes; + +namespace Unity.Entities.CodeGen +{ + class CapturedVariableDescription + { + // In order to have our lambda interact with our DisplayClass as a struct, we need + // to make sure that all fields exist in the root DisplayClass (since Roslyn will put captured variables + // in nested DisplayClasses in the case where variables are captured from multiple scopes): + // https://sharplab.io/#v2:CYLg1APgAgTAjAWAFBQMwAJboMLoN7LpGYZQAs6AsgBQCU6hxBSxr6AlgHYAu6AxgEMADgEF0AXnRwA3Izb5Wc+cS69BQgEIT0MWS2WL9BogBEA9gBUAFlwDm1OuIB8zY8qhwAnNXViw/YQ1aPTciAF9gpVYwqOIlGKMGRLRMCnNrO2oPGHRuG05bWiVXZTzMyMSEsKA + // + // We do this by building up the sequence of fields we use to get to our captured variable in + // CloneClosureExecuteMethodAndItsLocalFunctions. We then nop those + // Ldflds (since the field now exists in our root JobStruct) and create the ReadFromDisplayClass + // and WriteToDisplayClass methods to copy our new field from (and back to if necessary) the original field. + public FieldReference[] ChainOfFieldsToOldField; + public FieldReference NewField; + } + + internal class JobStructForLambdaJob + { + public LambdaJobDescriptionConstruction LambdaJobDescriptionConstruction { get; } + public TypeDefinition TypeDefinition; + public MethodDefinition ScheduleTimeInitializeMethod; + public MethodDefinition RunWithoutJobSystemMethod; + public FieldDefinition RunWithoutJobSystemDelegateFieldBurst; + public FieldDefinition RunWithoutJobSystemDelegateFieldNoBurst; + public FieldDefinition PerformLambdaDelegateField; + public MethodDefinition PerformLambdaMethod; + public MethodDefinition ReadFromDisplayClassMethod; + public MethodDefinition WriteToDisplayClassMethod; + public MethodDefinition DeallocateOnCompletionMethod; + public MethodDefinition ExecuteMethod; + public FieldDefinition SystemInstanceField; + + public MethodDefinition[] ClonedMethods; + public MethodDefinition ClonedLambdaBody => ClonedMethods.First(); + + public Dictionary CapturedVariables; + + static Type InterfaceTypeFor(LambdaJobDescriptionConstruction lambdaJobDescriptionConstruction) + { + switch (lambdaJobDescriptionConstruction.Kind) + { + case LambdaJobDescriptionKind.Entities: + case LambdaJobDescriptionKind.Chunk: + if (lambdaJobDescriptionConstruction.WithStructuralChanges) + return null; + else + return typeof(IJobChunk); + case LambdaJobDescriptionKind.Job: + return typeof(IJob); + default: + throw new ArgumentOutOfRangeException(); + } + } + + MethodDefinition AddMethod(MethodDefinition method) + { + TypeDefinition.Methods.Add(method); + return method; + } + + FieldDefinition AddField(FieldDefinition field) + { + TypeDefinition.Fields.Add(field); + return field; + } + + + public static JobStructForLambdaJob CreateNewJobStruct(LambdaJobDescriptionConstruction lambdaJobDescriptionConstruction) + { + return new JobStructForLambdaJob(lambdaJobDescriptionConstruction); + } + + JobStructForLambdaJob(LambdaJobDescriptionConstruction lambdaJobDescriptionConstruction2) + { + LambdaJobDescriptionConstruction = lambdaJobDescriptionConstruction2; + var containingMethod = LambdaJobDescriptionConstruction.ContainingMethod; + + if (containingMethod.DeclaringType.NestedTypes.Any(t => t.Name == LambdaJobDescriptionConstruction.ClassName)) + UserError.DC0003(LambdaJobDescriptionConstruction.LambdaJobName, containingMethod,LambdaJobDescriptionConstruction.ScheduleOrRunInvocationInstruction).Throw(); + + var moduleDefinition = containingMethod.Module; + + var typeAttributes = TypeAttributes.BeforeFieldInit | TypeAttributes.Sealed | + TypeAttributes.AnsiClass | TypeAttributes.SequentialLayout | + TypeAttributes.NestedPrivate; + + TypeDefinition = new TypeDefinition(containingMethod.DeclaringType.Namespace, LambdaJobDescriptionConstruction.ClassName, + typeAttributes,moduleDefinition.ImportReference(typeof(ValueType))) + { + DeclaringType = containingMethod.DeclaringType + }; + + TypeDefinition.CustomAttributes.Add( + new CustomAttribute(AttributeConstructorReferenceFor(typeof(DOTSCompilerGeneratedAttribute), TypeDefinition.Module))); + + var structInterfaceType = InterfaceTypeFor(LambdaJobDescriptionConstruction); + if (structInterfaceType != null) + TypeDefinition.Interfaces.Add(new InterfaceImplementation(moduleDefinition.ImportReference(structInterfaceType))); + + containingMethod.DeclaringType.NestedTypes.Add(TypeDefinition); + + + if (LambdaJobDescriptionConstruction.LambdaWasEmittedAsInstanceMethodOnContainingType) + { + //if you capture no locals, but you do use a field/method on the componentsystem, the lambda gets emitted as an instance method on the component system + //this is inconvenient for us. To make the rest of our code not have to deal with this case, we will emit an OriginalLambda method on our job type, that calls + //the lambda as it is emitted as an instance method on the component system. See EntitiesForEachNonCapturingInvokingInstanceMethod test for more details. + //example: + //https://sharplab.io/#v2:CYLg1APgAgTAjAWAFBQMwAJboMLoN7LpGYZQAs6AsgJ4CSAdgM4AuAhvQMYCmlXzAFgHtgACgCU+AL6FiMomkwVK4/HOJEAogA8uHAK7MuIlQF4AfFTpM2nHnyGixYgNxrpSdVDgA2Rem26BkZeMOisYnjukkA== + + MakeOriginalLambdaMethodThatRelaysToInstanceMethodOnComponentSystem(); + } + else + CloneLambdaMethodAndItsLocalMethods(); + + ApplyFieldAttributes(); + + var lambdaParameterValueProviderInformations = MakeLambdaParameterValueProviderInformations(); + + MakeDeallocateOnCompletionMethod(); + + if (LambdaJobDescriptionConstruction.WithStructuralChanges) + AddStructuralChangeMembers(lambdaParameterValueProviderInformations); + + ExecuteMethod = MakeExecuteMethod(lambdaParameterValueProviderInformations); + + ScheduleTimeInitializeMethod = AddMethod(MakeScheduleTimeInitializeMethod(lambdaParameterValueProviderInformations)); + + if (!LambdaJobDescriptionConstruction.WithStructuralChanges) + { + AddRunWithoutJobSystemMembers(); + ApplyBurstAttributeIfRequired(); + } + } + + private void MakeDeallocateOnCompletionMethod() + { + //we only have to clean up ourselves, in Run execution mode. + if (LambdaJobDescriptionConstruction.ExecutionMode != ExecutionMode.Run) + return; + + var fieldsToDeallocate = + LambdaJobDescriptionConstruction.InvokedConstructionMethods + .Where(m => m.MethodName == + nameof(LambdaJobDescriptionConstructionMethods.WithDeallocateOnJobCompletion)) + .Select(ca => ca.Arguments.Single()) + .Cast() + .ToList(); + + if (!fieldsToDeallocate.Any()) + return; + + DeallocateOnCompletionMethod = AddMethod(new MethodDefinition("DeallocateOnCompletionMethod",MethodAttributes.Public, TypeSystem.Void)); + var ilProcessor = DeallocateOnCompletionMethod.Body.GetILProcessor(); + + foreach (var fieldToDeallocate in fieldsToDeallocate) + { + var capturedVariable = CapturedVariables[fieldToDeallocate]; + ilProcessor.Emit(OpCodes.Ldarg_0); + ilProcessor.Emit(OpCodes.Ldflda, capturedVariable.NewField); + + var disposeReference = new MethodReference("Dispose", TypeSystem.Void, capturedVariable.NewField.FieldType){HasThis = true}; + var disposeMethod = ImportReference(disposeReference); + //todo: check for null + + ilProcessor.Emit(OpCodes.Call, disposeMethod); + } + ilProcessor.Emit(OpCodes.Ret); + } + + void AddRunWithoutJobSystemMembers() + { + if (LambdaJobDescriptionConstruction.ExecutionMode != ExecutionMode.Run) + return; + + RunWithoutJobSystemMethod = CreateRunWithoutJobSystemMethod(TypeDefinition); + + RunWithoutJobSystemDelegateFieldNoBurst = AddField(new FieldDefinition("s_RunWithoutJobSystemDelegateFieldNoBurst", FieldAttributes.Static,ImportReference(ExecuteDelegateType))); + + if (LambdaJobDescriptionConstruction.UsesBurst) + RunWithoutJobSystemDelegateFieldBurst = AddField(new FieldDefinition("s_RunWithoutJobSystemDelegateFieldBurst", FieldAttributes.Static,ImportReference(ExecuteDelegateType))); + } + + void AddStructuralChangeMembers(LambdaParameterValueInformations providerInformations) + { + // Add our PerformLambda method to just do the work of setting up our parameters, calling into the original lambda and doing write-back + PerformLambdaMethod = CreateStructuralChangesPerformLambdaMethod(providerInformations); + + // Perform lambda delegate field so that we can move most of the work in IterateEntities into StructuralChangeEntityProvider.IterateEntities + PerformLambdaDelegateField = new FieldDefinition("_performLambdaDelegate", FieldAttributes.Public | FieldAttributes.Static, + ImportReference(typeof(StructuralChangeEntityProvider.PerformLambdaDelegate))); + AddField(PerformLambdaDelegateField); + + // Add static constructor to set the above lambda delegate field + var cctor = new MethodDefinition(".cctor", + MethodAttributes.Static | MethodAttributes.Public | MethodAttributes.HideBySig | + MethodAttributes.SpecialName | MethodAttributes.RTSpecialName, TypeSystem.Void); + AddMethod(cctor); + + var ilProcessor = cctor.Body.GetILProcessor(); + ilProcessor.Emit(OpCodes.Ldnull); + ilProcessor.Emit(OpCodes.Ldftn, PerformLambdaMethod); + + var performLambdaDelegateConstructor = + TypeDefinition.Module.ImportReference(typeof(StructuralChangeEntityProvider.PerformLambdaDelegate).GetConstructors().First()); + ilProcessor.Emit(OpCodes.Newobj, performLambdaDelegateConstructor); + ilProcessor.Emit(OpCodes.Stsfld, PerformLambdaDelegateField); + ilProcessor.Emit(OpCodes.Ret); + } + + public Type ExecuteDelegateType => LambdaJobDescriptionConstruction.Kind == LambdaJobDescriptionKind.Job + ? typeof(InternalCompilerInterface.JobRunWithoutJobSystemDelegate) + : typeof(InternalCompilerInterface.JobChunkRunWithoutJobSystemDelegate); + + TypeReference ImportReference(Type t) => TypeDefinition.Module.ImportReference(t); + TypeReference ImportReference(TypeReference t) => TypeDefinition.Module.ImportReference(t); + MethodReference ImportReference(MethodReference m) => TypeDefinition.Module.ImportReference(m); + MethodReference ImportReference(MethodInfo m) => TypeDefinition.Module.ImportReference(m); + TypeSystem TypeSystem => TypeDefinition.Module.TypeSystem; + + LambdaParameterValueInformations MakeLambdaParameterValueProviderInformations() + { + switch (LambdaJobDescriptionConstruction.Kind) + { + case LambdaJobDescriptionKind.Entities: + return LambdaParameterValueInformations.For(this, LambdaJobDescriptionConstruction.WithStructuralChanges); + case LambdaJobDescriptionKind.Job: + return null; + case LambdaJobDescriptionKind.Chunk: + var allUsedParametersOfEntitiesForEachInvocations = ClonedMethods.SelectMany( + m => + m.Body.Instructions.Where(IsChunkEntitiesForEachInvocation).Select(i => + (m, + LambdaJobDescriptionConstruction.AnalyzeForEachInvocationInstruction(m, i) + .MethodLambdaWasEmittedAs))) + .SelectMany(m_and_dem => m_and_dem.MethodLambdaWasEmittedAs.Parameters.Select(p => (m_and_dem.m, p))) + .ToArray(); + return LambdaParameterValueInformations.For(this, false); + default: + throw new ArgumentOutOfRangeException(); + } + } + + private MethodDefinition MakeExecuteMethod(LambdaParameterValueInformations lambdaParameterValueInformations) + { + switch (LambdaJobDescriptionConstruction.Kind) + { + case LambdaJobDescriptionKind.Entities: + if (LambdaJobDescriptionConstruction.WithStructuralChanges) + return MakeExecuteMethod_EntitiesWithStructuralChanges(lambdaParameterValueInformations); + else + return MakeExecuteMethod_Entities(lambdaParameterValueInformations); + case LambdaJobDescriptionKind.Job: + return MakeExecuteMethod_Job(); + case LambdaJobDescriptionKind.Chunk: + return MakeExecuteMethod_Chunk(lambdaParameterValueInformations); + default: + throw new ArgumentOutOfRangeException(); + } + } + + void ApplyFieldAttributes() + { + //.Run mode doesn't go through the jobsystem, so there's no point in making all these attributes to explain the job system what everything means. + if (LambdaJobDescriptionConstruction.ExecutionMode == ExecutionMode.Run) + return; + + var containingMethod = LambdaJobDescriptionConstruction.ContainingMethod; + foreach (var attribute in EntitiesForEachAttributes.Attributes) + { + foreach (var constructionMethod in LambdaJobDescriptionConstruction.InvokedConstructionMethods.Where(m => m.MethodName == attribute.MethodName)) + { + if (constructionMethod.Arguments.Single() is FieldDefinition fieldDefinition) + { + if (!fieldDefinition.DeclaringType.IsDisplayClass()) + UserError.DC0038(containingMethod, fieldDefinition, constructionMethod).Throw(); + attribute.CheckAttributeApplicable?.Invoke(containingMethod, constructionMethod, fieldDefinition)?.Throw(); + + if (!CapturedVariables.TryGetValue(fieldDefinition, out var capturedVariable)) + InternalCompilerError.DCICE007(containingMethod, constructionMethod).Throw(); + var correspondingJobField = capturedVariable.NewField.Resolve(); + correspondingJobField.CustomAttributes.Add(new CustomAttribute(TypeDefinition.Module.ImportReference(attribute.AttributeType.GetConstructor(Array.Empty())))); + continue; + } + + UserError.DC0012(containingMethod, constructionMethod).Throw(); + } + } + } + + private MethodDefinition CreateRunWithoutJobSystemMethod(TypeDefinition newJobStruct) + { + var moduleDefinition = newJobStruct.Module; + var result = + new MethodDefinition("RunWithoutJobSystem", MethodAttributes.Public | MethodAttributes.Static, moduleDefinition.TypeSystem.Void) + { + HasThis = false, + Parameters = + { + new ParameterDefinition("jobData", ParameterAttributes.None, new PointerType(moduleDefinition.TypeSystem.Void)), + }, + }; + newJobStruct.Methods.Add(result); + + var ilProcessor = result.Body.GetILProcessor(); + if (LambdaJobDescriptionConstruction.Kind != LambdaJobDescriptionKind.Job) + { + result.Parameters.Insert(0,new ParameterDefinition("archetypeChunkIterator", ParameterAttributes.None,new PointerType(moduleDefinition.ImportReference(typeof(ArchetypeChunkIterator))))); + ilProcessor.Emit(OpCodes.Ldarg_1); + ilProcessor.Emit(OpCodes.Call,moduleDefinition.ImportReference(typeof(UnsafeUtilityEx).GetMethod(nameof(UnsafeUtilityEx.AsRef),BindingFlags.Public | BindingFlags.Static)).MakeGenericInstanceMethod(newJobStruct)); + ilProcessor.Emit(OpCodes.Ldarg_0); + ilProcessor.Emit(OpCodes.Call,moduleDefinition.ImportReference(typeof(JobChunkExtensions).GetMethod(nameof(JobChunkExtensions.RunWithoutJobs),BindingFlags.Public | BindingFlags.Static)).MakeGenericInstanceMethod(newJobStruct)); + ilProcessor.Emit(OpCodes.Ret); + return result; + } + else + { + ilProcessor.Emit(OpCodes.Ldarg_0); + ilProcessor.Emit(OpCodes.Call,ExecuteMethod); + ilProcessor.Emit(OpCodes.Ret); + return result; + } + } + + void CloneLambdaMethodAndItsLocalMethods() + { + var displayClassExecuteMethodAndItsLocalMethods = CecilHelpers.FindUsedInstanceMethodsOnSameType(LambdaJobDescriptionConstruction.MethodLambdaWasEmittedAs).Prepend(LambdaJobDescriptionConstruction.MethodLambdaWasEmittedAs).ToList(); + + if (LambdaJobDescriptionConstruction.ExecutionMode != ExecutionMode.Run) + VerifyClosureFunctionDoesNotWriteToCapturedVariable(displayClassExecuteMethodAndItsLocalMethods); + + var (doesMakeStructuralChange, changeMethod, changeInstruction) = DoesClosureFunctionMakeStructuralChanges(displayClassExecuteMethodAndItsLocalMethods); + if (!LambdaJobDescriptionConstruction.WithStructuralChanges && doesMakeStructuralChange) + UserError.DC0027(changeMethod, changeInstruction).Throw(); + + var (hasNestedLambdaJob, lambdaJobMethod, lambdaJobInstruction) = DoesClosureFunctionHaveNestedLambdaJob(displayClassExecuteMethodAndItsLocalMethods); + if (hasNestedLambdaJob) + UserError.DC0029(lambdaJobMethod, lambdaJobInstruction).Throw(); + + (ClonedMethods, CapturedVariables) = CecilHelpers.CloneClosureExecuteMethodAndItsLocalFunctions(displayClassExecuteMethodAndItsLocalMethods, TypeDefinition, "OriginalLambdaBody"); + + if (LambdaJobDescriptionConstruction.DelegateProducingSequence.CapturesLocals) + { + ReadFromDisplayClassMethod = AddMethodToTransferFieldsWithDisplayClass("ReadFromDisplayClass",TransferDirection.DisplayClassToJob); + if (LambdaJobDescriptionConstruction.ExecutionMode == ExecutionMode.Run) + WriteToDisplayClassMethod = AddMethodToTransferFieldsWithDisplayClass("WriteToDisplayClass", TransferDirection.JobToDisplayClass); + } + + // Kept around for reference when implementing IJobChunk ForEach + //ApplyPostProcessingOnJobCode(clonedMethods, providerInformations); + + VerifyDisplayClassFieldsAreValid(); + } + + private void MakeOriginalLambdaMethodThatRelaysToInstanceMethodOnComponentSystem() + { + SystemInstanceField = new FieldDefinition("hostInstance", FieldAttributes.Public, + LambdaJobDescriptionConstruction.ContainingMethod.DeclaringType); + TypeDefinition.Fields.Add(SystemInstanceField); + + var fakeClonedLambdaBody = new MethodDefinition("OriginalLambdaBody", MethodAttributes.Public, TypeSystem.Void); + foreach (var p in LambdaJobDescriptionConstruction.MethodLambdaWasEmittedAs.Parameters) + { + fakeClonedLambdaBody.Parameters.Add(new ParameterDefinition(p.Name ?? "p" + p.Index, p.Attributes, + p.ParameterType)); + } + + var ilProcessor = fakeClonedLambdaBody.Body.GetILProcessor(); + ilProcessor.Emit(OpCodes.Ldarg_0); + ilProcessor.Emit(OpCodes.Ldfld, SystemInstanceField); + for (int i = 0; i != fakeClonedLambdaBody.Parameters.Count; i++) + ilProcessor.Emit(OpCodes.Ldarg, i + 1); + ilProcessor.Emit(OpCodes.Callvirt, LambdaJobDescriptionConstruction.MethodLambdaWasEmittedAs); + ilProcessor.Emit(OpCodes.Ret); + + TypeDefinition.Methods.Add(fakeClonedLambdaBody); + ClonedMethods = new[] {fakeClonedLambdaBody}; + } + + private void VerifyDisplayClassFieldsAreValid() + { + if (LambdaJobDescriptionConstruction.AllowReferenceTypes) + return; + + foreach (var capturedVariable in CapturedVariables.Values) + { + var typeDefinition = capturedVariable.NewField.FieldType.Resolve(); + if (typeDefinition.TypeReferenceEquals(LambdaJobDescriptionConstruction.ContainingMethod.DeclaringType)) + { + foreach (var method in ClonedMethods) + { + var thisLoadingInstructions = method.Body.Instructions.Where(i => i.Operand is FieldReference fr && fr.FieldType.TypeReferenceEquals(typeDefinition)); + + foreach (var thisLoadingInstruction in thisLoadingInstructions) + { + var next = thisLoadingInstruction.Next; + if (next.Operand is FieldReference fr) + UserError.DC0001(method, next, fr).Throw(); + } + } + } + + if (typeDefinition.IsDelegate()) + continue; + + if (!typeDefinition.IsValueType()) + { + foreach (var clonedMethod in ClonedMethods) + { + var methodInvocations = clonedMethod.Body.Instructions.Where(i => i.Operand is MethodReference mr && mr.HasThis); + foreach(var methodInvocation in methodInvocations) + { + var pushThisInstruction = CecilHelpers.FindInstructionThatPushedArg(clonedMethod, 0, methodInvocation); + if (pushThisInstruction == null) + continue; + if (pushThisInstruction.Operand is FieldReference fr && fr.FieldType.TypeReferenceEquals(typeDefinition)) + { + var method = (MethodReference)methodInvocation.Operand; + UserError.DC0002(clonedMethod, methodInvocation, method, method.DeclaringType).Throw(); + } + } + } + + UserError.DC0004(LambdaJobDescriptionConstruction.ContainingMethod,LambdaJobDescriptionConstruction.WithCodeInvocationInstruction, capturedVariable.NewField.Resolve()).Throw(); + } + } + } + + + static bool IsChunkEntitiesForEachInvocation(Instruction instruction) + { + if (!(instruction.Operand is MethodReference mr)) + return false; + return mr.Name == nameof(LambdaJobChunkDescriptionConstructionMethods.ForEach) && mr.DeclaringType.Name == nameof(LambdaForEachDescriptionConstructionMethods); + } + + // Kept around for reference when implementing IJobChunk ForEach + private void ApplyPostProcessingOnJobCode(MethodDefinition[] methodUsedByLambdaJobs, LambdaParameterValueInformations lambdaParameterValueInformations) + { + var forEachInvocations = new List<(MethodDefinition, Instruction)>(); + var methodDefinition = methodUsedByLambdaJobs.First(); + forEachInvocations.AddRange(methodDefinition.Body.Instructions.Where(IsChunkEntitiesForEachInvocation).Select(i => (methodDefinition, i))); + + foreach (var methodUsedByLambdaJob in methodUsedByLambdaJobs) + { + var methodBody = methodUsedByLambdaJob.Body; + + var displayClassVariable = methodBody.Variables.SingleOrDefault(v => v.VariableType.Name.Contains("DisplayClass")); + if (displayClassVariable != null) + { + TypeDefinition displayClass = displayClassVariable.VariableType.Resolve(); + bool allDelegatesAreGuaranteedNotToOutliveMethod = + displayClass.IsValueType() || + CecilHelpers.AllDelegatesAreGuaranteedNotToOutliveMethodFor(methodUsedByLambdaJob); + + if (!displayClass.IsValueType() && allDelegatesAreGuaranteedNotToOutliveMethod) + { + CecilHelpers.PatchMethodThatUsedDisplayClassToTreatItAsAStruct(methodBody, displayClassVariable); + CecilHelpers.PatchDisplayClassToBeAStruct(displayClass); + } + } + } + + int counter = 1; + foreach (var (methodUsedByLambdaJob, instruction) in forEachInvocations) + { + var methodBody = methodUsedByLambdaJob.Body; + var (ldFtn, newObj) = FindClosureCreatingInstructions(methodBody, instruction); + + var newType = new TypeDefinition("", "InlineEntitiesForEachInvocation" + counter++, TypeAttributes.NestedPublic | TypeAttributes.SequentialLayout,methodUsedByLambdaJob.Module.ImportReference(typeof(ValueType))) + { + DeclaringType = methodUsedByLambdaJob.DeclaringType + }; + methodUsedByLambdaJob.DeclaringType.NestedTypes.Add(newType); + + CloneLambdaMethodAndItsLocalMethods(); + + var iterateEntitiesMethod = CreateIterateEntitiesMethod(lambdaParameterValueInformations); + + var variable = new VariableDefinition(newType); + methodBody.Variables.Add(variable); + + InstructionExtensions.MakeNOP(ldFtn.Previous); + InstructionExtensions.MakeNOP(ldFtn); + newObj.OpCode = OpCodes.Ldnull; + newObj.Operand = null; + + var displayClassVariable = methodBody.Variables.SingleOrDefault(v => v.VariableType.Name.Contains("DisplayClass")); + if (displayClassVariable == null) + continue; + var ilProcessor = methodBody.GetILProcessor(); + + ilProcessor.InsertAfter(instruction, new List + { + //no need to drop the delegate from the stack, because we just removed the function that placed it on the stack in the first place. + //do not drop the description from the stack, as the original method returns it, and we want to maintain stack behaviour. + + //call our new method + Instruction.Create(OpCodes.Ldloca, variable), + Instruction.Create(OpCodes.Initobj, newType), + + Instruction.Create(OpCodes.Ldloca, variable), + Instruction.Create(OpCodes.Ldloca, displayClassVariable), + Instruction.Create(OpCodes.Call, ReadFromDisplayClassMethod), + + Instruction.Create(OpCodes.Ldloca, variable), + Instruction.Create(OpCodes.Ldarga, methodBody.Method.Parameters.First(p=>p.ParameterType.Name == nameof(ArchetypeChunk))), + Instruction.Create(OpCodes.Ldarg_0), + Instruction.Create(OpCodes.Ldfld, lambdaParameterValueInformations._runtimesField), + Instruction.Create(OpCodes.Call, (MethodReference) iterateEntitiesMethod), + }); + +#if ENABLE_DOTS_COMPILER_CHUNKS + var chunkEntitiesInvocation = LambdaJobDescriptionConstruction.FindInstructionThatPushedArg(methodBody.Method, 0, instruction); + if (chunkEntitiesInvocation.Operand is MethodReference mr && mr.Name == "get_"+nameof(ArchetypeChunk.Entities) && mr.DeclaringType.Name == nameof(ArchetypeChunk)) + CecilHelpers.EraseMethodInvocationFromInstructions(ilProcessor, chunkEntitiesInvocation); +#endif + + CecilHelpers.EraseMethodInvocationFromInstructions(ilProcessor, instruction); + } + } + + private MethodDefinition MakeScheduleTimeInitializeMethod(LambdaParameterValueInformations lambdaParameterValueInformations) + { + var scheduleTimeInitializeMethod = + new MethodDefinition("ScheduleTimeInitialize", MethodAttributes.Public, TypeDefinition.Module.TypeSystem.Void) + { + HasThis = true, + Parameters = + { + new ParameterDefinition("componentSystem", ParameterAttributes.None,LambdaJobDescriptionConstruction.ContainingMethod.DeclaringType), + }, + }; + + if (ReadFromDisplayClassMethod != null) + scheduleTimeInitializeMethod.Parameters.Add(ReadFromDisplayClassMethod.Parameters.Last()); + + if (lambdaParameterValueInformations != null && !lambdaParameterValueInformations._withStructuralChanges) + lambdaParameterValueInformations.EmitInvocationToScheduleTimeInitializeIntoJobChunkScheduleTimeInitialize(scheduleTimeInitializeMethod); + + var scheduleIL = scheduleTimeInitializeMethod.Body.GetILProcessor(); + + if (ReadFromDisplayClassMethod != null) + { + scheduleIL.Emit(OpCodes.Ldarg_0); + scheduleIL.Emit(OpCodes.Ldarg_2); + scheduleIL.Emit(OpCodes.Call, ReadFromDisplayClassMethod); + } + + if (SystemInstanceField != null) + { + scheduleIL.Emit(OpCodes.Ldarg_0); + scheduleIL.Emit(OpCodes.Ldarg_1); + scheduleIL.Emit(OpCodes.Stfld, SystemInstanceField); + } + + scheduleIL.Emit(OpCodes.Ret); + return scheduleTimeInitializeMethod; + } + + private MethodDefinition MakeExecuteMethod_Job() + { + var executeMethod = CecilHelpers.AddMethodImplementingInterfaceMethod(TypeDefinition.Module, + TypeDefinition, typeof(IJob).GetMethod(nameof(IJob.Execute))); + + var executeIL = executeMethod.Body.GetILProcessor(); + executeIL.Emit(OpCodes.Ldarg_0); + executeIL.Emit(OpCodes.Call, ClonedLambdaBody); + EmitCallToDeallocateOnCompletion(executeIL); + executeIL.Emit(OpCodes.Ret); + return executeMethod; + } + + private MethodDefinition MakeExecuteMethod_Chunk(LambdaParameterValueInformations lambdaParameterValueInformations) + { + var executeMethod = CecilHelpers.AddMethodImplementingInterfaceMethod(TypeDefinition.Module, + TypeDefinition, typeof(IJobChunk).GetMethod(nameof(IJobChunk.Execute))); + + lambdaParameterValueInformations.EmitInvocationToPrepareToRunOnEntitiesInIntoJobChunkExecute(executeMethod); + + var executeIL = executeMethod.Body.GetILProcessor(); + + executeIL.Emit(OpCodes.Ldarg_0); + executeIL.Emit(OpCodes.Ldarg_1); + executeIL.Emit(OpCodes.Ldarg_2); + executeIL.Emit(OpCodes.Ldarg_3); + executeIL.Emit(OpCodes.Call, ClonedLambdaBody); + EmitCallToDeallocateOnCompletion(executeIL); + executeIL.Emit(OpCodes.Ret); + return executeMethod; + } + + private MethodDefinition MakeExecuteMethod_Entities(LambdaParameterValueInformations providerInformations) + { + var executeMethod = CecilHelpers.AddMethodImplementingInterfaceMethod(TypeDefinition.Module, + TypeDefinition, typeof(IJobChunk).GetMethod(nameof(IJobChunk.Execute))); + + providerInformations.EmitInvocationToPrepareToRunOnEntitiesInIntoJobChunkExecute(executeMethod); + + var ilProcessor = executeMethod.Body.GetILProcessor(); + + var iterateOnEntitiesMethod = CreateIterateEntitiesMethod(providerInformations); + + ilProcessor.Emit(OpCodes.Ldarg_0); + ilProcessor.Emit(OpCodes.Ldarga,1); + + ilProcessor.Emit(OpCodes.Ldarg_0); + ilProcessor.Emit(OpCodes.Ldfld,providerInformations._runtimesField); + + ilProcessor.Emit(OpCodes.Call, iterateOnEntitiesMethod); + + EmitCallToDeallocateOnCompletion(ilProcessor); + + ilProcessor.Emit(OpCodes.Ret); + + return executeMethod; + } + + private MethodDefinition MakeExecuteMethod_EntitiesWithStructuralChanges(LambdaParameterValueInformations providerInformations) + { + var executeMethod = new MethodDefinition("Execute", MethodAttributes.Public, TypeDefinition.Module.TypeSystem.Void) + { + Parameters = + { + new ParameterDefinition("componentSystem", ParameterAttributes.None, TypeDefinition.Module.ImportReference(typeof(ComponentSystemBase))), + new ParameterDefinition("query", ParameterAttributes.None, TypeDefinition.Module.ImportReference(typeof(EntityQuery))) + } + }; + TypeDefinition.Methods.Add(executeMethod); + + var runtimesVariable = providerInformations.EmitInvocationToPrepareToRunOnEntitiesInIntoJobChunkExecute(executeMethod); + + var ilProcessor = executeMethod.Body.GetILProcessor(); + + ilProcessor.Emit(OpCodes.Ldloca, runtimesVariable); + ilProcessor.Emit(OpCodes.Ldflda, providerInformations._entityProviderField); + + ilProcessor.Emit(OpCodes.Ldarg_0); + + ilProcessor.Emit(OpCodes.Ldarg_0); + ilProcessor.Emit(OpCodes.Ldfld, providerInformations._runtimesField); + + ilProcessor.Emit(OpCodes.Ldsfld, PerformLambdaDelegateField); + + ilProcessor.Emit(OpCodes.Call, ImportReference(typeof(StructuralChangeEntityProvider).GetMethod(nameof(StructuralChangeEntityProvider.IterateEntities)))); + + ilProcessor.Emit(OpCodes.Ret); + + return executeMethod; + } + + private void EmitCallToDeallocateOnCompletion(ILProcessor ilProcessor) + { + if (DeallocateOnCompletionMethod == null) + return; + ilProcessor.Emit(OpCodes.Ldarg_0); + ilProcessor.Emit(OpCodes.Call, DeallocateOnCompletionMethod); + } + + private MethodDefinition CreateIterateEntitiesMethod(LambdaParameterValueInformations lambdaParameterValueInformations) + { + var iterateEntitiesMethod = new MethodDefinition("IterateEntities", MethodAttributes.Public,TypeSystem.Void) + { + Parameters = + { + new ParameterDefinition("chunk", ParameterAttributes.None, new ByReferenceType(ImportReference(typeof(ArchetypeChunk)))), + new ParameterDefinition("runtimes", ParameterAttributes.None, new ByReferenceType(lambdaParameterValueInformations.RuntimesType)), + } + }; + if (LambdaJobDescriptionConstruction.UsesBurst && LambdaJobDescriptionConstruction.UsesNoAlias) + { + // Needed as there is an issue with LLVM version < 10.0 not applying optimizations correctly if the method is inlined. + // This should be fixed in LLVM 10+ and this can be removed once Burst relies on that version. + iterateEntitiesMethod.NoInlining = true; + + var burstNoAliasAttributeConstructor = TypeDefinition.Module.ImportReference( + typeof(NoAliasAttribute).GetConstructors().Single(c=>!c.GetParameters().Any())); + iterateEntitiesMethod.Parameters[1].CustomAttributes.Add(new CustomAttribute(burstNoAliasAttributeConstructor)); + } + + TypeDefinition.Methods.Add(iterateEntitiesMethod); + + var ilProcessor = iterateEntitiesMethod.Body.GetILProcessor(); + + var loopTerminator = new VariableDefinition(TypeSystem.Int32); + iterateEntitiesMethod.Body.Variables.Add(loopTerminator); + ilProcessor.Emit(OpCodes.Ldarg_1); + ilProcessor.Emit(OpCodes.Call, ImportReference(typeof(ArchetypeChunk).GetMethod("get_"+nameof(ArchetypeChunk.Count)))); + ilProcessor.Emit(OpCodes.Stloc, loopTerminator); + + var loopCounter = new VariableDefinition(TypeSystem.Int32); + iterateEntitiesMethod.Body.Variables.Add(loopCounter); + ilProcessor.Emit(OpCodes.Ldc_I4_0); + ilProcessor.Emit(OpCodes.Stloc, loopCounter); + + var beginLoopInstruction = Instruction.Create(OpCodes.Ldloc, loopCounter); + ilProcessor.Append(beginLoopInstruction); + ilProcessor.Emit(OpCodes.Ldloc, loopTerminator); + + // We use compare less than here so that the loop check is: + // for (int i = 0; i < count; i++) { /* ... */ } + // This is important because in C# integers have a defined wrapping behaviour on integer overflow - EG. if the integer + // is int.MaxValue and you add one to it, it becomes int.MinValue. This means that if you used i != count for the loop + // end condition, the compiler has to assume that count could have been negative and you are intending to increment + // the entire integer range and wrap around to negative before doing the check. By using i < count you have + // effectively told the compiler that within the for loop i can only ever be a positive integer [0..count), and this + // allows the compiler to output less instructions for the loops counts as a result. + ilProcessor.Emit(OpCodes.Clt); + + var exitDestination = Instruction.Create(OpCodes.Nop); + ilProcessor.Emit(OpCodes.Brfalse, exitDestination); + + ilProcessor.Emit(OpCodes.Ldarg_0); + foreach (var parameterDefinition in ClonedLambdaBody.Parameters) + lambdaParameterValueInformations.EmitILToLoadValueForParameterOnStack(parameterDefinition, ilProcessor, loopCounter); + + ilProcessor.Emit(OpCodes.Call, ClonedLambdaBody); + + ilProcessor.Emit(OpCodes.Ldloc, loopCounter); + ilProcessor.Emit(OpCodes.Ldc_I4_1); + ilProcessor.Emit(OpCodes.Add); + ilProcessor.Emit(OpCodes.Stloc, loopCounter); + + ilProcessor.Emit(OpCodes.Br, beginLoopInstruction); + ilProcessor.Append(exitDestination); + ilProcessor.Emit(OpCodes.Ret); + return iterateEntitiesMethod; + } + + MethodDefinition CreateStructuralChangesPerformLambdaMethod(LambdaParameterValueInformations lambdaParameterValueInformations) + { + var performLambdaMethod = new MethodDefinition("PerformLambda", MethodAttributes.Public | MethodAttributes.Static, TypeSystem.Void) + { + Parameters = + { + new ParameterDefinition("jobStructPtr", ParameterAttributes.None, new PointerType(TypeSystem.Void)), + new ParameterDefinition("runtimesPtr", ParameterAttributes.None, new PointerType(TypeSystem.Void)), + new ParameterDefinition("entity", ParameterAttributes.None, ImportReference(typeof(Entity))) + } + }; + + TypeDefinition.Methods.Add(performLambdaMethod); + var ilProcessor = performLambdaMethod.Body.GetILProcessor(); + + void CastPerformLambdaParameterToTypeAndLeaveOnStack(TypeReference castToType, int performLambdaParameterParameterIdx) + { + var openAsRefMethod = ImportReference(typeof(UnsafeUtilityEx).GetMethod(nameof(UnsafeUtilityEx.AsRef))); + var closedAsRefMethod = new GenericInstanceMethod(openAsRefMethod); + closedAsRefMethod.GenericArguments.Add(castToType); + ilProcessor.Emit(OpCodes.Ldarg, performLambdaParameterParameterIdx); + ilProcessor.Emit(OpCodes.Call, closedAsRefMethod); + } + + var runtimesFieldType = lambdaParameterValueInformations._runtimesField.FieldType.GetElementType(); + var runtimesVariable = new VariableDefinition(new ByReferenceType(runtimesFieldType)); + CastPerformLambdaParameterToTypeAndLeaveOnStack(runtimesFieldType, 1); // void* -> ref LambdaParameterValueProviders.Runtimes + performLambdaMethod.Body.Variables.Add(runtimesVariable); + ilProcessor.Emit(OpCodes.Stloc, runtimesVariable); + + // Pull out copies of parameters from ElementProviders (and early out of this loop iteration if entity == Entity.Null) + var parameterCopyVariables = new List(); + var parameterVariableAddresses = new Dictionary(); + for (var iParameter = 0; iParameter < ClonedLambdaBody.Parameters.Count; iParameter++) + { + var parameterDefinition = ClonedLambdaBody.Parameters[iParameter]; + + var (parameterVariable, addressVariable) = + lambdaParameterValueInformations.EmitILToCreateCopyForParameter_WithStructuralChanges(runtimesVariable, parameterDefinition, ilProcessor); + parameterCopyVariables.Add(parameterVariable); + if (addressVariable != null) + parameterVariableAddresses[parameterVariable] = addressVariable; + } + + // Call lambda body with copies of parameters + CastPerformLambdaParameterToTypeAndLeaveOnStack(TypeDefinition, 0); // void* -> ref OurJobStruct + int parameterIdx = 0; + foreach (var parameterVariable in parameterCopyVariables) + { + if (!parameterVariable.VariableType.IsByReference && ClonedLambdaBody.Parameters[parameterIdx].ParameterType.IsByReference) + ilProcessor.Emit(OpCodes.Ldloca, parameterVariable); + else + ilProcessor.Emit(OpCodes.Ldloc, parameterVariable); + parameterIdx++; + } + ilProcessor.Emit(OpCodes.Call, ClonedLambdaBody); + + // Write-back parameters to ElementProviders for IComponentData + for (var iParameter = 0; iParameter < ClonedLambdaBody.Parameters.Count; iParameter++) + { + var parameterDefinition = ClonedLambdaBody.Parameters[iParameter]; + + lambdaParameterValueInformations.EmitILToWriteBackParameter_WithStructuralChanges( + runtimesVariable, parameterDefinition, ilProcessor, parameterCopyVariables[iParameter], + parameterVariableAddresses.ContainsKey(parameterCopyVariables[iParameter]) ? parameterVariableAddresses[parameterCopyVariables[iParameter]] : null); + } + + ilProcessor.Emit(OpCodes.Ret); + return performLambdaMethod; + } + + private void ApplyBurstAttributeIfRequired() + { + if (!LambdaJobDescriptionConstruction.UsesBurst) + return; + + var module = TypeDefinition.Module; + var burstCompileAttributeConstructor = AttributeConstructorReferenceFor(typeof(BurstCompileAttribute), module); + + CustomAttributeNamedArgument CustomAttributeNamedArgumentFor(string name, Type type, object value) + { + return new CustomAttributeNamedArgument(name, + new CustomAttributeArgument(module.ImportReference(type), value)); + } + + var burstCompileAttribute = new CustomAttribute(burstCompileAttributeConstructor); + + var useBurstMethod = LambdaJobDescriptionConstruction.InvokedConstructionMethods.FirstOrDefault(m=>m.MethodName == nameof(LambdaJobDescriptionConstructionMethods.WithBurst)); + + if (useBurstMethod != null && useBurstMethod.Arguments.Length == 3) + { + burstCompileAttribute.Properties.Add(CustomAttributeNamedArgumentFor(nameof(BurstCompileAttribute.FloatMode),typeof(FloatMode), useBurstMethod.Arguments[0])); + burstCompileAttribute.Properties.Add(CustomAttributeNamedArgumentFor(nameof(BurstCompileAttribute.FloatPrecision),typeof(FloatPrecision), useBurstMethod.Arguments[1])); + burstCompileAttribute.Properties.Add(CustomAttributeNamedArgumentFor(nameof(BurstCompileAttribute.CompileSynchronously),typeof(bool), useBurstMethod.Arguments[2])); + } + + TypeDefinition.CustomAttributes.Add(burstCompileAttribute); + RunWithoutJobSystemMethod?.CustomAttributes.Add(burstCompileAttribute); + + // Need to make sure Burst knows the jobs struct doesn't alias with any pointer fields. + if (LambdaJobDescriptionConstruction.UsesNoAlias) + { + var burstNoAliasAttribute = new CustomAttribute(TypeDefinition.Module.ImportReference( + typeof(NoAliasAttribute).GetConstructors().Single(c=>!c.GetParameters().Any()))); + TypeDefinition.CustomAttributes.Add(burstNoAliasAttribute); + } + } + + + private MethodDefinition AddMethodToTransferFieldsWithDisplayClass(string methodName, TransferDirection direction) + { + var method =new MethodDefinition(methodName, MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.Final | MethodAttributes.NewSlot, TypeDefinition.Module.TypeSystem.Void); + + var displayClassTypeReference = LambdaJobDescriptionConstruction.DisplayClass; + var parameterType = displayClassTypeReference.IsValueType() + ? new ByReferenceType(displayClassTypeReference) + : (TypeReference)displayClassTypeReference; + method.Parameters.Add(new ParameterDefinition("displayClass", ParameterAttributes.None,parameterType)); + + var ilProcessor = method.Body.GetILProcessor(); + foreach (var capturedVariable in CapturedVariables.Values) + { + if (direction == TransferDirection.DisplayClassToJob) + { + ilProcessor.Emit(OpCodes.Ldarg_0); + ilProcessor.Emit(OpCodes.Ldarg_1); + foreach (var oldField in capturedVariable.ChainOfFieldsToOldField) + ilProcessor.Emit(OpCodes.Ldfld, oldField); //load field from displayClassVariable + ilProcessor.Emit(OpCodes.Stfld, capturedVariable.NewField); //store that value in corresponding field in newJobStruct + } + else + { + ilProcessor.Emit(OpCodes.Ldarg_1); + for (var iOldField = 0; iOldField < capturedVariable.ChainOfFieldsToOldField.Length - 1; ++iOldField) + { + ilProcessor.Emit(capturedVariable.ChainOfFieldsToOldField[iOldField].FieldType.IsValueType() ? OpCodes.Ldflda : OpCodes.Ldfld, + capturedVariable.ChainOfFieldsToOldField[iOldField]); //load field from displayClassVariable + } + ilProcessor.Emit(OpCodes.Ldarg_0); + ilProcessor.Emit(OpCodes.Ldfld, capturedVariable.NewField); //load field from job + ilProcessor.Emit(OpCodes.Stfld, capturedVariable.ChainOfFieldsToOldField.Last()); //store that value in corresponding field in displayclass + } + } + + ilProcessor.Emit(OpCodes.Ret); + AddMethod(method); + return method; + } + + static (Instruction, Instruction) FindClosureCreatingInstructions(MethodBody body, Instruction callInstruction) + { + body.EnsurePreviousAndNextAreSet(); + var cursor = callInstruction; + while (cursor != null) + { + if ((cursor.OpCode == OpCodes.Ldftn) && cursor.Next?.OpCode == OpCodes.Newobj) + { + return (cursor, cursor.Next); + } + + cursor = cursor.Previous; + } + + InternalCompilerError.DCICE002(body.Method, callInstruction).Throw(); + return (null,null); + } + + private enum TransferDirection + { + DisplayClassToJob, + JobToDisplayClass + } + + public static MethodReference AttributeConstructorReferenceFor(Type attributeType, ModuleDefinition module) + { + return module.ImportReference(attributeType.GetConstructors().Single(c=>!c.GetParameters().Any())); + } + + private static void VerifyClosureFunctionDoesNotWriteToCapturedVariable(IEnumerable methods) + { + foreach (var method in methods) + { + var typeDefinitionFullName = method.DeclaringType.FullName; + + var badInstructions = method.Body.Instructions.Where(i => + { + if (i.OpCode != OpCodes.Stfld) + return false; + return ((FieldReference) i.Operand).DeclaringType.FullName == typeDefinitionFullName; + }); + + var first = badInstructions.FirstOrDefault(); + if (first == null) + continue; + + UserError.DC0013(((FieldReference) first.Operand), method, first).Throw(); + } + } + + static (bool, MethodDefinition, Instruction) DoesClosureFunctionMakeStructuralChanges(IEnumerable methods) + { + foreach (var method in methods) + { + var badInstructions = method.Body.Instructions.Where(i => + { + if (i.OpCode == OpCodes.Call || i.OpCode == OpCodes.Callvirt) + { + var methodReference = ((MethodReference) i.Operand); + if (methodReference.DeclaringType.Name != nameof(EntityManager)) + return false; + + var methodDefinition = methodReference.Resolve(); + if (methodDefinition.HasCustomAttributes && + methodDefinition.CustomAttributes.Any(c => c.AttributeType.Name == "StructuralChangeMethodAttribute")) + return true; + } + + return false; + }); + + if (badInstructions.Any()) + return (true, method, badInstructions.FirstOrDefault()); + } + + return (false, default, default); + } + + static (bool, MethodDefinition, Instruction) DoesClosureFunctionHaveNestedLambdaJob(IEnumerable methods) + { + foreach (var method in methods) + { + var lambdaJobStatementStartingInstructions = CodeGen.LambdaJobDescriptionConstruction.FindLambdaJobStatementStartingInstructions(method.Body.Instructions); + + if (lambdaJobStatementStartingInstructions.Any()) + return (true, method, lambdaJobStatementStartingInstructions.FirstOrDefault()); + } + + return (false, default, default); + } + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachJobCreator.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachJobCreator.cs.meta new file mode 100644 index 000000000..dd300ee2f --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachJobCreator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93df786383673b740934c802a20287bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/InjectAndInitializeEntityQueryField.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/InjectAndInitializeEntityQueryField.cs new file mode 100644 index 000000000..4a4b6371a --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/InjectAndInitializeEntityQueryField.cs @@ -0,0 +1,317 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using Mono.Cecil; +using Mono.Cecil.Cil; +using Mono.Collections.Generic; +using FieldAttributes = Mono.Cecil.FieldAttributes; +using MethodAttributes = Mono.Cecil.MethodAttributes; +using ParameterAttributes = Mono.Cecil.ParameterAttributes; + +namespace Unity.Entities.CodeGen +{ + static class InjectAndInitializeEntityQueryField + { + public static FieldDefinition InjectAndInitialize(MethodDefinition methodToAnalyze, LambdaJobDescriptionConstruction descriptionConstruction, Collection closureParameters) + { + /* We're going to generate this code: + * + * protected void override OnCreate() + * { + * _entityQuery = GetEntityQuery_ForMyJob_From(this); + * } + * + * static void GetEntityQuery_ForMyJob_From(ComponentSystem componentSystem) + * { + * var result = componentSystem.GetEntityQuery(new[] { new EntityQueryDesc() { + * All = new[] { ComponentType.ReadWrite(), ComponentType.ReadOnly() }, + * None = new[] { ComponentType.ReadWrite() } + * }}); + * result.SetChangedFilter(new[] { ComponentType.ReadOnly() } ); + * } + */ + + var module = methodToAnalyze.Module; + + var entityQueryField = new FieldDefinition($"<>{descriptionConstruction.LambdaJobName}_entityQuery", + FieldAttributes.Private, module.ImportReference(typeof(EntityQuery))); + var userSystemType = methodToAnalyze.DeclaringType; + userSystemType.Fields.Add(entityQueryField); + + var getEntityQueryFromMethod = AddGetEntityQueryFromMethod(descriptionConstruction, closureParameters.ToArray(), methodToAnalyze.DeclaringType); + + List instructionsToInsert = new List(); + instructionsToInsert.Add( + new[] + { + Instruction.Create(OpCodes.Ldarg_0), + Instruction.Create(OpCodes.Ldarg_0), + Instruction.Create(OpCodes.Call, getEntityQueryFromMethod), + Instruction.Create(OpCodes.Stfld, entityQueryField)} + ); + + // Store our generated query in a user-specified field if one was given + if (descriptionConstruction.StoreQueryInField != null) + { + instructionsToInsert.Add( + new[] + { + Instruction.Create(OpCodes.Ldarg_0), + Instruction.Create(OpCodes.Ldflda, descriptionConstruction.StoreQueryInField), + Instruction.Create(OpCodes.Ldarg_0), + Instruction.Create(OpCodes.Ldfld, entityQueryField), + Instruction.Create(OpCodes.Stind_Ref) + }); + } + InsertIntoOnCreateForCompilerMethod(userSystemType, instructionsToInsert.ToArray()); + + return entityQueryField; + } + + public static void InsertIntoOnCreateForCompilerMethod(TypeDefinition userSystemType,Instruction[] instructions) + { + var methodBody = LambdaJobsPostProcessor.GetOrMakeOnCreateForCompilerMethod(userSystemType).Body.GetILProcessor().Body; + methodBody.GetILProcessor().InsertBefore(methodBody.Instructions.Last(), instructions); + } + + private static MethodDefinition AddGetEntityQueryFromMethod( + LambdaJobDescriptionConstruction descriptionConstruction, ParameterDefinition[] closureParameters, + TypeDefinition typeToInjectIn) + { + var moduleDefinition = typeToInjectIn.Module; + + var typeDefinition = typeToInjectIn; + var getEntityQueryFromMethod = + new MethodDefinition($"<>GetEntityQuery_For{descriptionConstruction.LambdaJobName}_From", + MethodAttributes.Public | MethodAttributes.Static, + moduleDefinition.ImportReference(typeof(EntityQuery))) + { + DeclaringType = typeDefinition, + HasThis = false, + Parameters = + { + new ParameterDefinition("componentSystem", ParameterAttributes.None, + moduleDefinition.ImportReference(typeof(ComponentSystemBase))) + } + }; + + typeDefinition.Methods.Add(getEntityQueryFromMethod); + + var body = getEntityQueryFromMethod.Body; + + var getEntityQueryMethod = moduleDefinition.ImportReference(typeof(ComponentSystemBase) + .GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public).Single(m => + m.Name == "GetEntityQuery" && m.GetParameters().Length == 1 && + m.GetParameters().Single().ParameterType == typeof(EntityQueryDesc[]))); + + var entityQueryDescConstructor = + moduleDefinition.ImportReference(typeof(EntityQueryDesc).GetConstructor(Array.Empty())); + var componentTypeReference = moduleDefinition.ImportReference(typeof(ComponentType)); + var componentTypeDefinition = componentTypeReference.Resolve(); + + MethodReference ComponentTypeMethod(string name) => + moduleDefinition.ImportReference( + componentTypeDefinition.Methods.Single(m => m.Name == name && m.Parameters.Count == 0)); + + var readOnlyMethod = ComponentTypeMethod(nameof(ComponentType.ReadOnly)); + var readWriteMethod = ComponentTypeMethod(nameof(ComponentType.ReadWrite)); + + IEnumerable InstructionsToCreateComponentTypeFor(TypeReference typeReference, bool isReadOnly, int arrayIndex) + { + yield return Instruction.Create(OpCodes.Dup); //put the array on the stack again + yield return Instruction.Create(OpCodes.Ldc_I4, arrayIndex); + + var method = isReadOnly ? readOnlyMethod : readWriteMethod; + yield return Instruction.Create(OpCodes.Call, + method.MakeGenericInstanceMethod(typeReference.GetElementType())); + yield return Instruction.Create(OpCodes.Stelem_Any, componentTypeReference); + } + + IEnumerable InstructionsToPutArrayOfComponentTypesOnStack((TypeReference typeReference, bool readOnly)[] typeReferences) + { + yield return Instruction.Create(OpCodes.Ldc_I4, typeReferences.Length); + yield return Instruction.Create(OpCodes.Newarr, componentTypeReference); + + for (int i = 0; i != typeReferences.Length; i++) + foreach (var instruction in InstructionsToCreateComponentTypeFor(typeReferences[i].typeReference, typeReferences[i].readOnly, i)) + yield return instruction; + } + + List AllTypeArgumentsOfMethod(string methodName) + { + var invokedConstructionMethods = descriptionConstruction.InvokedConstructionMethods.Where(m => m.MethodName == methodName); + var result = new List(); + + foreach (var m in invokedConstructionMethods) + { + foreach (var argumentType in m.TypeArguments) + { + if (argumentType.IsGenericParameter || argumentType.IsGenericInstance) + UserError.DC0025($"Type {argumentType.Name} cannot be used with {m.MethodName} as generic types and parameters are not allowed", descriptionConstruction.ContainingMethod, m.InstructionInvokingMethod).Throw(); + var argumentTypeDefinition = argumentType.Resolve(); + if (!LambdaParamaterValueProviderInformation.IsTypeValidForEntityQuery(argumentTypeDefinition)) + UserError.DC0025($"Type {argumentType.Name} cannot be used with {m.MethodName} as it is not a supported component type", descriptionConstruction.ContainingMethod, m.InstructionInvokingMethod).Throw(); + + result.Add(moduleDefinition.ImportReference(argumentType)); + } + } + + return result; + } + + var withNoneTypes = AllTypeArgumentsOfMethod(nameof(LambdaJobQueryConstructionMethods.WithNone)); + var withAllTypes = AllTypeArgumentsOfMethod(nameof(LambdaJobQueryConstructionMethods.WithAll)); + var withSharedComponentFilterTypes = AllTypeArgumentsOfMethod(nameof(LambdaJobQueryConstructionMethods.WithSharedComponentFilter)); + foreach (var allType in withAllTypes.Where(t => withSharedComponentFilterTypes.Contains(t))) + { + UserError.DC0026(allType.Name, descriptionConstruction.ContainingMethod, + descriptionConstruction.InvokedConstructionMethods.First().InstructionInvokingMethod).Throw(); + } + var withAllAndSharedComponentFilterTypes = withAllTypes.Concat(withSharedComponentFilterTypes); + + var withAnyTypes = AllTypeArgumentsOfMethod(nameof(LambdaJobQueryConstructionMethods.WithAny)); + var withChangeFilterTypes = AllTypeArgumentsOfMethod(nameof(LambdaJobQueryConstructionMethods.WithChangeFilter)); + + var arrayOfSingleEQDVariable = new VariableDefinition(moduleDefinition.ImportReference(typeof(EntityQueryDesc[]))); + var localVarOfEQD = new VariableDefinition(moduleDefinition.ImportReference(typeof(EntityQueryDesc))); + var localVarOfResult = new VariableDefinition(moduleDefinition.ImportReference(typeof(EntityQuery))); + + foreach (var closureParameter in closureParameters) + { + var parameterElementType = closureParameter.ParameterType.GetElementType(); + if (parameterElementType.IsGenericInstance || parameterElementType.IsGenericParameter || + (parameterElementType.HasGenericParameters && !parameterElementType.IsDynamicBufferOfT())) + { + UserError.DC0025($"Type {closureParameter.ParameterType.Name} cannot be used as an Entities.ForEach parameter as generic types and generic parameters are not supported in Entities.ForEach", + descriptionConstruction.ContainingMethod, descriptionConstruction.InvokedConstructionMethods.First().InstructionInvokingMethod).Throw(); + } + } + + body.Variables.Add(arrayOfSingleEQDVariable); + body.Variables.Add(localVarOfEQD); + body.Variables.Add(localVarOfResult); + + IEnumerable InstructionsToSetChangedVersionFilterFor(List typeReferences) + { + if (typeReferences.Count == 0) + yield break; + + yield return + Instruction.Create(OpCodes.Ldloc, localVarOfResult); //<- target of the SetChangedFilter call + + //create the array for the first argument: new[] { ComponentType.ReadOnly(), ComponentType>.ReadOnly() } + foreach (var instruction in InstructionsToPutArrayOfComponentTypesOnStack(typeReferences.Select(t=>(t,false)).ToArray())) + yield return instruction; + + EntityQuery eq; + var setChangedVersionFilter = moduleDefinition.ImportReference( + typeof(EntityQuery).GetMethod(nameof(eq.SetChangedVersionFilter), new[] {typeof(ComponentType[])})); + //and do the actual invocation + yield return Instruction.Create(OpCodes.Call, setChangedVersionFilter); + } + + IEnumerable InstructionsToSetEntityQueryDescriptionField(string fieldName, + (TypeReference typeReference, bool readOnly)[] typeReferences) + { + if (typeReferences.Length == 0) + yield break; + yield return Instruction.Create(OpCodes.Ldloc, localVarOfEQD); + foreach (var instruction in InstructionsToPutArrayOfComponentTypesOnStack(typeReferences)) + yield return instruction; + var fieldReference = new FieldReference(fieldName, moduleDefinition.ImportReference(typeof(ComponentType[])), + entityQueryDescConstructor.DeclaringType); + yield return Instruction.Create(OpCodes.Stfld,fieldReference); + } + + EntityQueryDesc eqd; + + IEnumerable InstructionsToSetEntityQueryDescriptionOptions() + { + var withOptionsInvocation = descriptionConstruction.InvokedConstructionMethods.FirstOrDefault(m => + m.MethodName == nameof(LambdaJobQueryConstructionMethods.WithEntityQueryOptions)); + if (withOptionsInvocation == null) + yield break; + + yield return Instruction.Create(OpCodes.Ldloc, localVarOfEQD); + yield return Instruction.Create(OpCodes.Ldc_I4, (int)withOptionsInvocation.Arguments.Single()); + var fieldReference = new FieldReference(nameof(eqd.Options),moduleDefinition.ImportReference(typeof(EntityQueryOptions)),entityQueryDescConstructor.DeclaringType); + yield return Instruction.Create(OpCodes.Stfld,fieldReference); + } + + var combinedWithAllTypes = withAllAndSharedComponentFilterTypes.Select(typeReference=>(typeReference,true)) + .Concat(closureParameters.Select(WithAllTypeArgumentForLambdaParameter).Where(t=>t.typeReference != null)) + .ToArray(); + + foreach (var noneType in withNoneTypes) + { + if (combinedWithAllTypes.Select(c=>c.typeReference).Any(allType => allType.TypeReferenceEquals(noneType))) + UserError.DC0015(noneType.Name, descriptionConstruction.ContainingMethod, descriptionConstruction.InvokedConstructionMethods.First().InstructionInvokingMethod).Throw(); + + if (withAnyTypes.Any(anyType => anyType.TypeReferenceEquals(noneType))) + UserError.DC0016(noneType.Name,descriptionConstruction.ContainingMethod,descriptionConstruction.InvokedConstructionMethods.First().InstructionInvokingMethod).Throw(); + } + + var instructions = new List() + { + //var arrayOfSingleEQDVariable = new EnityQueryDesc[1]; + Instruction.Create(OpCodes.Ldc_I4_1), + Instruction.Create(OpCodes.Newarr, moduleDefinition.ImportReference(typeof(EntityQueryDesc))), + Instruction.Create(OpCodes.Stloc, arrayOfSingleEQDVariable), + + //var localVarOfEQD = new EntityQuery(); + Instruction.Create(OpCodes.Newobj, entityQueryDescConstructor), + Instruction.Create(OpCodes.Stloc, localVarOfEQD), + + // arrayOfSingleEQDVariable[0] = localVarOfEQD; + Instruction.Create(OpCodes.Ldloc, arrayOfSingleEQDVariable), + Instruction.Create(OpCodes.Ldc_I4_0), + Instruction.Create(OpCodes.Ldloc, localVarOfEQD), + Instruction.Create(OpCodes.Stelem_Any, moduleDefinition.ImportReference(typeof(EntityQueryDesc))), + + InstructionsToSetEntityQueryDescriptionField(nameof(eqd.All), combinedWithAllTypes), + InstructionsToSetEntityQueryDescriptionField(nameof(eqd.None), withNoneTypes.Select(t=>(t,false)).ToArray()), + InstructionsToSetEntityQueryDescriptionField(nameof(eqd.Any), withAnyTypes.Select(t=>(t,false)).ToArray()), + + InstructionsToSetEntityQueryDescriptionOptions(), + + Instruction.Create(OpCodes.Ldarg_0), //the this for this.GetEntityQuery() + Instruction.Create(OpCodes.Ldloc, arrayOfSingleEQDVariable), + Instruction.Create(OpCodes.Call, getEntityQueryMethod), + + Instruction.Create(OpCodes.Stloc, localVarOfResult), + + InstructionsToSetChangedVersionFilterFor(withChangeFilterTypes), + + Instruction.Create(OpCodes.Ldloc, localVarOfResult), + Instruction.Create(OpCodes.Ret), + }; + + var ilProcessor = getEntityQueryFromMethod.Body.GetILProcessor(); + ilProcessor.Append(instructions); + + return getEntityQueryFromMethod; + } + + private static (TypeReference typeReference, bool readOnly) WithAllTypeArgumentForLambdaParameter(ParameterDefinition p) + { + var isMarkedReadOnly = p.HasCompilerServicesIsReadOnlyAttribute(); + var isMarkedAsRef = p.ParameterType.IsByReference && !isMarkedReadOnly; + + var type = p.ParameterType.Resolve(); + if (type.IsIComponentDataStruct() || type.IsISharedComponentData()) + return (p.ParameterType.GetElementType(), !isMarkedAsRef); + + if (type.IsIComponentDataClass() || type.IsUnityEngineObject()) + return (p.ParameterType.GetElementType(), isMarkedReadOnly); + + if (type.IsDynamicBufferOfT()) + { + var typeReference = ((GenericInstanceType) p.ParameterType.StripRef()).GenericArguments.Single(); + return (typeReference, isMarkedReadOnly); + } + + return (null,true); + } + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/InjectAndInitializeEntityQueryField.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/InjectAndInitializeEntityQueryField.cs.meta new file mode 100644 index 000000000..d2bab7b11 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/InjectAndInitializeEntityQueryField.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa4975e392bce704287330763d01cb86 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaJobDescriptionConstruction.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaJobDescriptionConstruction.cs new file mode 100644 index 000000000..6822a1144 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaJobDescriptionConstruction.cs @@ -0,0 +1,419 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Mono.Cecil; +using Mono.Cecil.Cil; +using Unity.CompilationPipeline.Common.Diagnostics; +using Unity.Entities.CodeGeneratedJobForEach; +using MethodDefinition = Mono.Cecil.MethodDefinition; +using TypeReference = Mono.Cecil.TypeReference; + +namespace Unity.Entities.CodeGen +{ + enum LambdaJobDescriptionKind + { + Entities, + Job, + Chunk + } + internal enum ExecutionMode + { + Schedule, + ScheduleParallel, + Run + } + + + class LambdaJobDescriptionConstruction + { + private const string EntitiesGetterName = "get_" + nameof(JobComponentSystem.Entities); + private const string JobGetterName = "get_" + nameof(JobComponentSystem.Job); + + public class InvokedConstructionMethod + { + public InvokedConstructionMethod(string methodName, TypeReference[] typeArguments, object[] arguments, Instruction instructionInvokingMethod) + { + MethodName = methodName; + TypeArguments = typeArguments; + Arguments = arguments; + InstructionInvokingMethod = instructionInvokingMethod; + } + + public string MethodName { get; } + public object[] Arguments { get; } + public Instruction InstructionInvokingMethod { get; } + + public TypeReference[] TypeArguments { get; } + } + + public MethodDefinition ContainingMethod { get; set; } + public Instruction WithCodeInvocationInstruction; + public List InvokedConstructionMethods = new List(); + public string LambdaJobName; + public Instruction ScheduleOrRunInvocationInstruction { get; set; } + public LambdaJobDescriptionKind Kind; + public bool WithStructuralChanges { get; set; } + public FieldDefinition StoreQueryInField { get; set; } + + public Instruction ChainInitiatingInstruction { get; set; } + public CecilHelpers.DelegateProducingSequence DelegateProducingSequence { get; set; } + public MethodDefinition MethodLambdaWasEmittedAs => DelegateProducingSequence.MethodLambdaWasEmittedAs; + + public bool LambdaWasEmittedAsInstanceMethodOnContainingType => MethodLambdaWasEmittedAs.DeclaringType.TypeReferenceEquals(ContainingMethod.DeclaringType); + + public static bool UsesNoAlias = true; + public bool UsesBurst + { + get + { + if (InvokedConstructionMethods.Any(m => m.MethodName == nameof(LambdaJobDescriptionConstructionMethods.WithoutBurst))) + return false; + if (WithStructuralChanges) + return false; + + var oldWithBurstMethod = InvokedConstructionMethods.FirstOrDefault(m =>m.MethodName == nameof(LambdaJobDescriptionConstructionMethods.WithBurst) && m.Arguments.Length == 1); + if (oldWithBurstMethod != null) + return (int)oldWithBurstMethod.Arguments[0] == 1; + + return true; + } + } + + public bool IsInSystemBase => ContainingMethod.DeclaringType.TypeReferenceEqualsOrInheritsFrom(ContainingMethod.Module.ImportReference(typeof(SystemBase))); + + public ExecutionMode ExecutionMode + { + get + { + if (IsInSystemBase) + { + switch (((MethodReference) ScheduleOrRunInvocationInstruction.Operand).Name) + { + case nameof(ExecutionMode.Run): return ExecutionMode.Run; + case nameof(ExecutionMode.Schedule): return ExecutionMode.Schedule; + case nameof(ExecutionMode.ScheduleParallel): return ExecutionMode.ScheduleParallel; + default: throw new ArgumentOutOfRangeException(); + } + } + else + { + switch (((MethodReference) ScheduleOrRunInvocationInstruction.Operand).Name) + { + case nameof(ExecutionMode.Run): return ExecutionMode.Run; + case nameof(ExecutionMode.Schedule): return ExecutionMode.Schedule; + default: throw new ArgumentOutOfRangeException(); + } + } + } + } + + + public bool UseImplicitSystemDependency => IsInSystemBase && + (ExecutionMode == CodeGen.ExecutionMode.Schedule || ExecutionMode == CodeGen.ExecutionMode.ScheduleParallel) && + ((MethodReference) ScheduleOrRunInvocationInstruction.Operand).ReturnType.IsVoid(); + + public bool AllowReferenceTypes => ExecutionMode == ExecutionMode.Run && !UsesBurst; + + // Suffix DisplayClass string to enable magic sauce that shows fields as locals in debugger + public string ClassName => $"<>c__DisplayClass_{LambdaJobName}"; + + public TypeDefinition DisplayClass + { + get + { + if (!DelegateProducingSequence.CapturesLocals) + throw new ArgumentException("Cannot ask for DisplayClass for a jobdescription that doesnt capture locals"); + return MethodLambdaWasEmittedAs.DeclaringType; + } + } + + public override string ToString() + { + var analysis = this; + var sb = new StringBuilder(); + foreach (var m in analysis.InvokedConstructionMethods) + { + sb.Append($"{m.MethodName} "); + + foreach (var tp in m.TypeArguments) + sb.Append($"<{tp.Name}> "); + + foreach (var i in m.Arguments) + sb.Append(i + " "); + sb.AppendLine(); + } + + return sb.ToString(); + } + + public static List FindLambdaJobStatementStartingInstructions(IEnumerable instructions) + { + return instructions.Where(i => + { + if (i.OpCode != OpCodes.Call && i.OpCode != OpCodes.Callvirt) + return false; + var mr = (MethodReference) i.Operand; + + if (mr.Name == EntitiesGetterName && (mr.ReturnType.Name == nameof(ForEachLambdaJobDescription) || mr.ReturnType.Name == nameof(ForEachLambdaJobDescriptionJCS))) + return true; + if (mr.Name == JobGetterName && (mr.DeclaringType.Name == nameof(JobComponentSystem) || mr.DeclaringType.Name == nameof(SystemBase))) + return true; +#if ENABLE_DOTS_COMPILER_CHUNKS + if (mr.Name == "get_" + nameof(JobComponentSystem.Chunks) && mr.DeclaringType.Name == nameof(JobComponentSystem)) + return true; +#endif + return false; + }).ToList(); + } + + public static IEnumerable FindIn(MethodDefinition method) + { + var body = method.Body; + + if (body == null) + yield break; + + var lambdaJobStatementStartingInstructions = FindLambdaJobStatementStartingInstructions(body.Instructions); + + int counter = 0; + + foreach (var lambdaJobStatementStartingInstruction in lambdaJobStatementStartingInstructions) + { + LambdaJobDescriptionConstruction result = default; + result = AnalyzeLambdaJobStatement(method, lambdaJobStatementStartingInstruction, counter++); + yield return result; + } + } + + static bool VerifyLambdaName(string jobName) + { + if (jobName.Length == 0) + return false; + if (char.IsDigit(jobName[0])) + return false; + for (int i = 0; i < jobName.Length; i++) + { + if (jobName[i] != '_' && !char.IsLetterOrDigit(jobName[i])) + return false; + } + // names with __ are reserved for the compiler by convention + return !jobName.Contains("__"); + } + + static LambdaJobDescriptionConstruction AnalyzeLambdaJobStatement(MethodDefinition method, Instruction getEntitiesOrJobInstruction, int lambdaNumber) + { + List modifiers = new List(); + + Instruction cursor = getEntitiesOrJobInstruction; + var expectedPreviousMethodPushingDescription = getEntitiesOrJobInstruction; + while (true) + { + cursor = FindNextConstructionMethod(method, cursor); + + var mr = cursor?.Operand as MethodReference; + + if (mr.Name == nameof(LambdaJobDescriptionExecutionMethods.Schedule) || + mr.Name == nameof(LambdaJobDescriptionExecutionMethods.ScheduleParallel) || + mr.Name == nameof(LambdaJobDescriptionExecutionMethods.Run)) + { + var withNameModifier = modifiers.FirstOrDefault(m => m.MethodName == nameof(LambdaJobDescriptionConstructionMethods.WithName)); + var givenName = withNameModifier?.Arguments.OfType().Single(); + var lambdaJobName = givenName ?? $"{method.Name}_LambdaJob{lambdaNumber}"; + if (givenName != null && !VerifyLambdaName(givenName)) + UserError.DC0039(method, givenName, getEntitiesOrJobInstruction).Throw(); + + var hasWithStructuralChangesModifier + = modifiers.Any(m => m.MethodName == nameof(LambdaJobDescriptionConstructionMethods.WithStructuralChanges)); + + if (hasWithStructuralChangesModifier && mr.Name != nameof(LambdaJobDescriptionExecutionMethods.Run)) + UserError.DC0028(method, getEntitiesOrJobInstruction).Throw(); + + FieldReference storeQueryInField = null; + foreach (var modifier in modifiers) + { + if (modifier.MethodName == nameof(LambdaJobQueryConstructionMethods.WithStoreEntityQueryInField)) + { + var instructionThatPushedField = CecilHelpers.FindInstructionThatPushedArg(method, 1, modifier.InstructionInvokingMethod); + storeQueryInField = instructionThatPushedField.Operand as FieldReference; + if (instructionThatPushedField.OpCode != OpCodes.Ldflda || storeQueryInField == null || + instructionThatPushedField.Previous.OpCode != OpCodes.Ldarg_0) + UserError.DC0031(method, getEntitiesOrJobInstruction).Throw(); + } + } + + LambdaJobDescriptionKind FindLambdaDescriptionKind() + { + switch (((MethodReference) getEntitiesOrJobInstruction.Operand).Name) + { + case EntitiesGetterName: + return LambdaJobDescriptionKind.Entities; + case JobGetterName: + return LambdaJobDescriptionKind.Job; +#if ENABLE_DOTS_COMPILER_CHUNKS + case "get_" + nameof(JobComponentSystem.Chunks): + return LambdaJobDescriptionKind.Chunk; +#endif + default: + throw new ArgumentOutOfRangeException(); + } + } + + if (modifiers.All(m => m.MethodName != nameof(LambdaForEachDescriptionConstructionMethods.ForEach) && + m.MethodName != nameof(LambdaSingleJobDescriptionConstructionMethods.WithCode))) + { + DiagnosticMessage MakeDiagnosticMessage() + { + switch (FindLambdaDescriptionKind()) + { + case LambdaJobDescriptionKind.Entities: + return UserError.DC0006(method, getEntitiesOrJobInstruction); + case LambdaJobDescriptionKind.Job: + return UserError.DC0017(method, getEntitiesOrJobInstruction); + case LambdaJobDescriptionKind.Chunk: + return UserError.DC0018(method, getEntitiesOrJobInstruction); + default: + throw new ArgumentOutOfRangeException(); + } + } + + MakeDiagnosticMessage().Throw(); + } + + if (method.DeclaringType.HasGenericParameters) + UserError.DC0025($"Entities.ForEach cannot be used in system {method.DeclaringType.Name} as Entities.ForEach in generic system types are not supported.", method, getEntitiesOrJobInstruction).Throw(); + + var withCodeInvocationInstruction = modifiers + .Single(m => m.MethodName == nameof(LambdaForEachDescriptionConstructionMethods.ForEach) || m.MethodName == nameof(LambdaSingleJobDescriptionConstructionMethods.WithCode)) + .InstructionInvokingMethod; + return new LambdaJobDescriptionConstruction() + { + Kind = FindLambdaDescriptionKind(), + InvokedConstructionMethods = modifiers, + WithCodeInvocationInstruction = withCodeInvocationInstruction, + ScheduleOrRunInvocationInstruction = cursor, + LambdaJobName = lambdaJobName, + ChainInitiatingInstruction = getEntitiesOrJobInstruction, + ContainingMethod = method, + DelegateProducingSequence = AnalyzeForEachInvocationInstruction(method, withCodeInvocationInstruction), + WithStructuralChanges = hasWithStructuralChangesModifier, + StoreQueryInField = (storeQueryInField != null) ? storeQueryInField.Resolve() : null + }; + } + + var instructions = mr.Parameters.Skip(1) + .Select(p => OperandObjectFor(CecilHelpers.FindInstructionThatPushedArg(method, p.Index, cursor))).ToArray(); + + var invokedConstructionMethod = new InvokedConstructionMethod(mr.Name, + (mr as GenericInstanceMethod)?.GenericArguments.ToArray() ?? Array.Empty(), + instructions, cursor); + + var allowDynamicValue = method.Module.ImportReference(typeof(AllowDynamicValueAttribute)); + for (int i = 0; i != invokedConstructionMethod.Arguments.Length; i++) + { + if (invokedConstructionMethod.Arguments[i] != null) + continue; + + var inbovokedForEachMethod = mr.Resolve(); + var methodDefinitionParameter = inbovokedForEachMethod.Parameters[i + 1]; + + if (!methodDefinitionParameter.CustomAttributes.Any(c =>c.AttributeType.TypeReferenceEquals(allowDynamicValue))) + UserError.DC0008(method, cursor, mr).Throw(); + } + + if (modifiers.Any(m => m.MethodName == mr.Name) && !HasAllowMultipleAttribute(mr.Resolve())) + UserError.DC0009(method, cursor, mr).Throw(); + + var findInstructionThatPushedArg = CecilHelpers.FindInstructionThatPushedArg(method, 0, cursor); + if (cursor == null || findInstructionThatPushedArg != expectedPreviousMethodPushingDescription) + UserError.DC0007(method, cursor).Throw(); + + expectedPreviousMethodPushingDescription = cursor; + modifiers.Add(invokedConstructionMethod); + } + } + + + private static Instruction FindNextConstructionMethod(MethodDefinition method, Instruction instruction) + { + var cursor = instruction; + //the description object should be on the stack, and nothing on top of it. + int stackDepth = 1; + while (cursor.Next != null) + { + cursor = cursor.Next; + + var result = CecilHelpers.MatchesDelegateProducingPattern(method, cursor,CecilHelpers.DelegateProducingPattern.MatchSide.Start); + if (result != null) + { + cursor = result.Instructions.Last(); + stackDepth += 1; + continue; + } + + if (CecilHelpers.IsUnsupportedBranch(cursor)) + UserError.DC0010(method, cursor).Throw(); + + if (cursor.OpCode == OpCodes.Call && cursor.Operand is MethodReference mr && IsLambdaJobDescriptionConstructionMethod(mr)) + return cursor; + + stackDepth -= cursor.GetPopDelta(); + if (stackDepth < 1) + UserError.DC0011(method, cursor).Throw(); + + stackDepth += cursor.GetPushDelta(); + } + + return null; + } + + + static bool HasAllowMultipleAttribute(MethodDefinition mr) => mr.HasCustomAttributes && mr.CustomAttributes.Any(c => c.AttributeType.Name == nameof(LambdaJobDescriptionConstructionMethods.AllowMultipleInvocationsAttribute)); + + private static object OperandObjectFor(Instruction argumentPushingInstruction) + { + var opCode = argumentPushingInstruction.OpCode; + + if (opCode == OpCodes.Ldstr) + return (string) argumentPushingInstruction.Operand; + if (opCode == OpCodes.Ldc_I4) + return (int) argumentPushingInstruction.Operand; + if (opCode == OpCodes.Ldc_I4_0) + return 0; + if (opCode == OpCodes.Ldc_I4_1) + return 1; + if (opCode == OpCodes.Ldc_I4_2) + return 2; + if (opCode == OpCodes.Ldc_I4_3) + return 3; + if (opCode == OpCodes.Ldc_I4_4) + return 4; + if (opCode == OpCodes.Ldc_I4_5) + return 5; + if (opCode == OpCodes.Ldc_I4_6) + return 6; + if (opCode == OpCodes.Ldc_I4_7) + return 7; + if (opCode == OpCodes.Ldc_I4_8) + return 8; + if (opCode == OpCodes.Ldfld) + return argumentPushingInstruction.Operand; + return null; + } + + static bool IsLambdaJobDescriptionConstructionMethod(MethodReference mr) => + (mr.DeclaringType.Name.EndsWith("ConstructionMethods") || mr.DeclaringType.Name.EndsWith("ExecutionMethods") || mr.DeclaringType.Name.EndsWith("ExecutionMethodsJCS")) + && (mr.DeclaringType.Namespace == "Unity.Entities" || mr.DeclaringType.Namespace == ""); + + public static CecilHelpers.DelegateProducingSequence AnalyzeForEachInvocationInstruction(MethodDefinition methodToAnalyze, Instruction withCodeInvocationInstruction) + { + var delegatePushingInstruction = CecilHelpers.FindInstructionThatPushedArg(methodToAnalyze, 1, withCodeInvocationInstruction); + + var result = CecilHelpers.MatchesDelegateProducingPattern(methodToAnalyze, delegatePushingInstruction, CecilHelpers.DelegateProducingPattern.MatchSide.Start); + if (result == null) + InternalCompilerError.DCICE002(methodToAnalyze, delegatePushingInstruction).Throw(); + + return result; + } + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaJobDescriptionConstruction.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaJobDescriptionConstruction.cs.meta new file mode 100644 index 000000000..d2d655db2 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaJobDescriptionConstruction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3e825f2d744e6954da358bceb2d952c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaJobsPostProcessor.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaJobsPostProcessor.cs new file mode 100644 index 000000000..865928d9b --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaJobsPostProcessor.cs @@ -0,0 +1,692 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using Mono.Cecil; +using Mono.Cecil.Cil; +using Mono.Cecil.Rocks; +using Unity.CompilationPipeline.Common.Diagnostics; +using Unity.Entities.CodeGeneratedJobForEach; +using Unity.Jobs; +using Unity.Jobs.LowLevel.Unsafe; +using FieldAttributes = Mono.Cecil.FieldAttributes; +using MethodAttributes = Mono.Cecil.MethodAttributes; +using MethodBody = Mono.Cecil.Cil.MethodBody; + + +/* + * Input C# code will be in the format of: + * + * void override OnUpdate(JobHandle jobHandle) + * { + * float dt = Time.deltaTime; + * return Entities + * .WithNone() + * .WithBurst(maybe) + * .ForEach((ref Position p, in Velocity v) => + * { + * p.Value += v.Value * dt; + * }) + * .Schedule(jobHandle); + * } + * + * This syntax is nice, but the way the C# compiler generates code for it is not great for us. The code the compiler creates looks like this: + * + * JobHandle override OnUpdate(JobHandle jobHandle) + * { + * var displayClass = new DisplayClass() + * displayClass.dt = Time.deltaTime; + * + * var tempValue = EntitiesForEach; + * tempValue = tempValue.WithNone(); + * tempValue = tempValue.WithBurst(true); + * var mydelegate = new delegate(displayClass.Invoke, displayClass); + * tempValue = tempValue.ForEach(mydelegate); + * return tempValue.Schedule(jobHandle); + * } + * + * class DisplayClass + * { + * public void dt; + * + * public void Invoke(ref Position p, in Velocity v) + * { + * p.Value += v.Value * dt; + * } + * } + * + * The first thing to note is that because the lambda expression captures (=uses) the local variable dt, _and_ the c# compiler does not try to convince + * itself that the delegate does not live longer than OnUpdate() method, the c# compiler decides "okay, we cannot store variable dt on the stack like we always + * do, because someone might hold on to the delegate, and invoke it 10 minutes from now, and they still need to be able to access variable dt". So what it + * does is it creates a separate class that it names DisplayClass. It instantiates a single instance of that at the beginning of the function, and any local variable + * that the compiler needs to ensure can stay around for longer than this stackframe is alive, gets stored in the displayclass instead. From that point on, any normal + * reads and writes to that local variable will read/write to the field of that single displayclass instance. + * + * Also note that the code of the lambda expression was turned into a method that lives on this DisplayClass, so that the code can easily access these captured variables. + * + * The good news is that the compiler does a lot of the heavy lifting for us. It already figured out all the variables the lambda expression wants to read from. But + * the bad news is that the code it generated causes a heap allocation of this DisplayClass. This is especially sad, because when we do "escape analysis" in our head + * for the mydelegate variable that holds our delegate, we can easily see that it "doesn't escape anywhere", so this worry of it being invoked 10 minutes from now is invalid. + * + * This re-writer will take the output of the c# compiler as described above, and make a series of changes to it: + * 1) We will change DisplayClass to be a struct instead of a class, to avoid the heap allocation that we can see is not required anyway. + * (this requires changing the DisplayClass type itself, but also the IL of the OnUpdate() method, as the IL that instantiates a heap object, and reads/writes to its field + * is different from the IL that you need to do the same to a struct that lives in a local IL variable. + + * 2) Note that the DisplayClass struct almost looks like a manually written job struct. Unfortunately we cannot simply change it a bit more to be like a job struct, as + * it's possible and very likely that the OnUpdate() method has another lambda expression somewhere, and that one will also be placed in the same DisplayClass, and our job + * system does not support using the same class for different jobs. + * So, too bad, we need to make a new custom struct for our job. We will do that, and copy all the relevant parts of DisplayStruct that we need: + * - we copy all the fields that DisplayClass.Invoke() uses, + * - we copy the Invoke method itself, and patch all the IL instructions to not refer to DisplayClass's fields, but to the new job structs' fields. + * - we make this new struct implement ICodeGeneratedJobForEach + * - we replace the IL in OnUpdate() that creates the delegate, with IL that initializes a value of this new jobstruct, and with IL that populates all of the fields + * in the custom job struct with the values that are in the display class. + * + * 3) Since scheduling an ECS job requires a EntityQuery, and we can easily statically see what the query should be, this is code-generated automatically. We inject + * a GetEntityQuery() call in the system's OnCreate method, and use it in the final Schedule call. + * + * 4) We try very hard to keep as much code as possible in handwritten form, and require as little as possible code-generated code. Take a look at ICodeGeneratedJobForEach and + * WrappedCodeGeneratedJobForEach implementations to get an idea of all the handwritten code that works hand-in-hand with this code-generated code. We cannot escape some IL + * code-generation though, and the ICodeGeneratedJobForEach interface that we make our job implement requires us to also implement ExecuteSingleEntity. + * We codegen that and have it invoke the user's original code which still lives in Invoke(). We also massage the arguments here a little bit. Notice how we pass position + * by ref, but velocity not by ref, as the users' code asked for velocity through "in". + * + * 5) Finally, we codegen a Schedule() call, directly on the generated struct itself (turns out this was easier than the traditional pattern of using an extension method). + * We use the handwritten WrappedCodeGeneratedJobForEach struct, which is an IJobChunk job itself. We initialize it by embedding our own job data inside of it, and setting + * the readonly values for each element. after that we "just schedule the wrapper as a normal IJobChunk". + * + * The final generated code looks roughly like this: + * + * void override OnCreate() + * { + * _newJobQuery = GetEntityQuery_ForNewJob_From(this); + * } + * + * static EntityQuery GetEntityQuery_ForNewJob_From(ComponentSystemBase componentSystem) + * { + * return componentSystem.GetEntityQuery(new EntityQueryDesc() { + * All = ComponentType.ReadWrite(), ComponentType.ReadOnly() } + * None = ComponentType.ReadOnly() + * }); + * } + * + * JobHandle override OnUpdate(JobHandle inputDependencies) + * { + * var displayClass = new DisplayClass() + * displayClass.dt = Time.deltaTime; + * + * var tempValue = EntitiesForEach; + * tempValue = tempValue.WithNone(); + * tempValue = tempValue.WithBurst(true); + * var newjob = new NewJob(); + * newjob.ScheduleTimeInitialize(this, ref displayClass); + * return newjob.Schedule(this, _newJobQuery, inputDependencies); + * } + * + * struct DisplayClass + * { + * public void dt; + * + * public void Invoke(ref Position p, in Velocity v) + * { + * p.Value += v.Value * dt; + * } + * } + * + * struct NewJob : ICodeGeneratedJobForEach.Runtime, ElementProvider_IComponentData.Runtime> + * { + * public void dt; + * + * public void Invoke(ref Position p, in Velocity v) + * { + * p.Value += v.Value * dt; + * } + * + * public void ExecuteSingleEntity(int indexInChunk, ElementProvider_IComponentData.Runtime runtime0, ElementProvider_IComponentData.Runtime runtime1) + * { + * Invoke(ref runtime0.For(indexInChunk), runtime1.For(indexInChunk); + * } + * + * public void Schedule(EntityManager entityManager, EntityQuery entityQuery) + * { + * WrappedCodeGeneratedJobForEach, ElementProvider_IComponentData.Runtime, + * ElementProvider_IComponentData, ElementProvider_IComponentData.Runtime> wrapper; + * wrapper.wrappedUserJob = this; + * wrapper.Initialize(entityManager, readonly0: false, readonly1: true); + * wrapper.Schedule(entityQuery); //<-- wrapper is an IJobChunk, and this is a regular IJobChunk schedule call + * } + * } + * + * + * + * + */ +[assembly: InternalsVisibleTo("Unity.Entities.CodeGen.Tests")] + +namespace Unity.Entities.CodeGen +{ + internal class LambdaJobsPostProcessor : EntitiesILPostProcessor + { + private const string OnCreateForCompilerName = nameof(ComponentSystemBase.OnCreateForCompiler); + + protected override bool PostProcessImpl() + { + var mainModuleTypes = AssemblyDefinition.MainModule.GetAllTypes().Where(TypeDefinitionExtensions.IsComponentSystem).ToArray(); + + bool madeChange = false; + + foreach (var systemType in mainModuleTypes) + { + InjectOnCreateForCompiler(systemType); + madeChange = true; + } + + foreach (var m in mainModuleTypes.SelectMany(m => m.Methods).ToList()) + { + LambdaJobDescriptionConstruction[] lambdaJobDescriptionConstructions; + try + { + lambdaJobDescriptionConstructions = LambdaJobDescriptionConstruction.FindIn(m).ToArray(); + foreach (var description in lambdaJobDescriptionConstructions) + { + madeChange = true; + var (jobStructForLambdaJob, rewriteDiagnosticMessages) = Rewrite(m, description); + _diagnosticMessages.AddRange(rewriteDiagnosticMessages); + } + } + catch (PostProcessException ppe) + { + AddDiagnostic(ppe.ToDiagnosticMessage(m)); + } + catch (FoundErrorInUserCodeException) + { + throw; + } + catch (Exception ex) + { + var seq = m.DebugInformation.SequencePoints.FirstOrDefault(); + AddDiagnostic(new DiagnosticMessage + { + MessageData = $"Unexpected error while post-processing {m.DeclaringType.FullName}:{m.Name}. Please report this error.{Environment.NewLine}{ex.Message}{Environment.NewLine}{ex.StackTrace}", + DiagnosticType = DiagnosticType.Error, + Line = seq?.StartLine ?? 0, + Column = seq?.StartColumn ?? 0, + }); + } + } + + return madeChange; + } + + private static MethodDefinition InjectOnCreateForCompiler(TypeDefinition typeDefinition) + { + // Turns out it's not trivial to inject some code that has to be run OnCreate of the system. + // We cannot just create an OnCreate() method, because there might be a deriving class that also implements it. + // That child method is probably not calling base.OnCreate(), but even when it is (!!) the c# compiler bakes base.OnCreate() + // into a direct reference to whatever is the first baseclass to have OnCreate() at the time of compilation. So if we go + // and inject an OnCreate() in this class later on, the child's base.OnCreate() call will actually bypass it. + // + // Instead what we do is add OnCreateForCompiler, hide it from intellisense, give you an error if wanna be that guy that goes + // and implement it anyway, and then we inject a OnCreateForCompiler method into each and every ComponentSystem. The reason we have to emit it in + // each and every system, and not just the ones where we have something to inject, is that when we emit these method, we need + // to also emit base.OnCreateForCompiler(). However, when we are processing an user system type, we do not know yet if its baseclass + // also needs an OnCreateForCompiler(). So we play it safe, and assume it does. So every OnCreateForCompiler() that we emit, + // will assume its basetype also has an implementation and invoke that. + + if (typeDefinition.Name == nameof(ComponentSystemBase) && typeDefinition.Namespace == "Unity.Entities") + return null; + + var preExistingMethod = typeDefinition.Methods.FirstOrDefault(m => m.Name == OnCreateForCompilerName); + if (preExistingMethod != null) + UserError.DC0026($"It's not allowed to implement {OnCreateForCompilerName}'", preExistingMethod).Throw(); + + var typeSystemVoid = typeDefinition.Module.TypeSystem.Void; + var newMethod = new MethodDefinition(OnCreateForCompilerName,MethodAttributes.FamORAssem | MethodAttributes.Virtual | MethodAttributes.HideBySig, typeSystemVoid); + typeDefinition.Methods.Add(newMethod); + + var ilProcessor = newMethod.Body.GetILProcessor(); + ilProcessor.Emit(OpCodes.Ldarg_0); + ilProcessor.Emit(OpCodes.Call, new MethodReference(OnCreateForCompilerName, typeSystemVoid, typeDefinition.BaseType) { HasThis = true}); + ilProcessor.Emit(OpCodes.Ret); + return newMethod; + } + + public static MethodDefinition GetOrMakeOnCreateForCompilerMethod(TypeDefinition userSystemType) + { + return userSystemType.Methods.SingleOrDefault(m => m.Name == OnCreateForCompilerName) ?? InjectOnCreateForCompiler(userSystemType); + } + + private static bool keepUnmodifiedVersionAroundForDebugging = false; + + public static (JobStructForLambdaJob, List) Rewrite(MethodDefinition methodContainingLambdaJob, LambdaJobDescriptionConstruction lambdaJobDescriptionConstruction) + { + var diagnosticMessages = new List(); + + if (methodContainingLambdaJob.DeclaringType.CustomAttributes.Any(c => (c.AttributeType.Name == "ExecuteAlways" && c.AttributeType.Namespace == "UnityEngine"))) + diagnosticMessages.Add(UserError.DC0032(methodContainingLambdaJob.DeclaringType, methodContainingLambdaJob, lambdaJobDescriptionConstruction.ScheduleOrRunInvocationInstruction)); + + if (keepUnmodifiedVersionAroundForDebugging) CecilHelpers.CloneMethodForDiagnosingProblems(methodContainingLambdaJob); + + //in order to make it easier and safer to operate on IL, we're going to "Simplify" it. This means transforming opcodes that have short variants, into the full one + //so that when you analyze, you can assume (ldarg, 0) opcode + operand pair, and don't have to go check for the shorthand version of ldarg_0, without an operand. + //more importantly, it also rewrites branch.s (branch to a instruction that is closeby enough that the offset fits within a byte), to a regular branch instructions. + //this is the only sane thing to do, because when we rewrite IL code, we add instructions, so it can happen that by adding instructions, what was possible to be a short + //branch instruction, now is no longer a valid short branch target, and cecil doesn't warn against that, it will just generate broken IL, and you'll spend a long time + //figuring out what is going on. + methodContainingLambdaJob.Body.SimplifyMacros(); + + var methodLambdaWasEmittedAs = lambdaJobDescriptionConstruction.MethodLambdaWasEmittedAs; + + if (methodLambdaWasEmittedAs.DeclaringType.TypeReferenceEquals(methodContainingLambdaJob.DeclaringType) && !lambdaJobDescriptionConstruction.AllowReferenceTypes) + { + // Sometimes roslyn emits the lambda as an instance method in the same type of the method that contains the lambda expression. + // it does this only in the situation where the lambda captures a field _and_ does not capture any locals. In this case + // there's no displayclass being created. We should figure out exactly what instruction caused this behaviour, and tell the user + // she can't read a field like that. + + // Here is an example: https://sharplab.io/#v2:D4AQTAjAsAUCDMACciDCiDetE8QMwBsB7AQwBd8BLAUwIBNEBeReAOgAY8BubXXnBMgAsiACoALSgGcA4tQB21AE7lqUgLLUAtgCNlIAKxlKReVIAUASiwwAkLYD0DsZKmICJXXRKIA7pQICRABzBWVVRB8tbT0lfABXeQBjY1NENLJxamQwNFYXbKVqEik06QAuWHsnHABaAvdPHW90+QIAT0QkkgAHMniitx88Gnp8gEkzMmKGIjwu3v6lSnlgxEzpRGoADx6CSiTKMg6AGirHZ1xfbO75ELCVacjEaMyiWbv0MiJEPS3t6hJeLTBgrKTTEh0fi4HAAESIIAgYHMViYAD4bDCsThUKZSgRqKwAOrLabmEa0OiWLiIaEwgC+1LpfBg2JwNQkmw8Xh8/kC90Uj2yURiygSyVSdwyWRyeQaRRKZSklVZbJqiHqEmy3OaPlMHUQRQAjvFKINEAByDZSC2ReQMHolKRqRBHdY/YaJFImeSsZlwhFIlGWdGYtm4eGc1YWa1M1XYxk8eOIelVaGCEAiTmyB6qKQAQVQHikFhDNmqzi1zvWvh+Ou8biyRQF4SePnA+S1huKpTumxK+CIgSIvmV53V9Uy2WdSVMDHrPm6fQGLp8xG6QRI9vW4nIg6USRdU66RC0PQCYu+Wy0R3Hlxw7dyV5IKXiJECnXEQ4Yx/BETmO7akQG53nUgFUEo4KNDyrQGkuSyrlQlJ2j+MqzmeF5xLW8T0Ig8RSG+H6IAAVvhZCgbg2huiKuhingXqSpEbgrOBIyQRQ3TOicvzAogUgrIegHNu+Cp0J00gUQ+sp4EQcQLkM8jtL4JDtNxbp8kE/FngaRT4dkmR7qYhLnPCiLIqijAYucti4mYQ6EiSRzUOSoxUjS/opnG4YeSsFDbEwiDsEm4amUGFlWXY9i2fiDmks5FL0NStKRTZeL2cScXmNsXlsom0Kpsm6YiKFyJmZEKRlgVMLphAABswiIJGkjRuY6BJJVsD0kAA= + + var illegalFieldRead = methodLambdaWasEmittedAs.Body.Instructions.FirstOrDefault(IsIllegalFieldRead); + if (illegalFieldRead != null) + UserError.DC0001(methodContainingLambdaJob, illegalFieldRead, (FieldReference) illegalFieldRead.Operand).Throw(); + + // Similarly, we could end up here because the lambda captured neither a field nor a local but simply + // uses the this-reference. This could be the case if the user calls a function that takes this as a + // parameter, either explicitly (static) or implicitly (extension or member method). + var illegalInvocation = methodLambdaWasEmittedAs.Body.Instructions.FirstOrDefault(IsIllegalInvocation); + if (illegalInvocation != null) + UserError.DC0002(methodContainingLambdaJob, illegalInvocation, (MethodReference)illegalInvocation.Operand, methodLambdaWasEmittedAs.DeclaringType).Throw(); + + // This should never hit, but is here to make sure that in case we have a bug in detecting + // why roslyn emitted it like this, we can at least report an error, instead of silently generating invalid code. + InternalCompilerError.DCICE001(methodContainingLambdaJob).Throw(); + + bool IsIllegalFieldRead(Instruction i) + { + if (i.Previous == null) + return false; + if (i.OpCode != OpCodes.Ldfld && i.OpCode != OpCodes.Ldflda) + return false; + return i.Previous.OpCode == OpCodes.Ldarg_0; + } + + bool IsIllegalInvocation(Instruction i) + { + if (!i.IsInvocation()) + return false; + var declaringType = methodContainingLambdaJob.DeclaringType; + var method = (MethodReference)i.Operand; + // is it an instance method? + var resolvedMethod = method.Resolve(); + if (declaringType.TypeReferenceEqualsOrInheritsFrom(method.DeclaringType) && !resolvedMethod.IsStatic) + return true; + + // is it a method that potentially takes this as a parameter? + foreach (var param in method.Parameters) + { + if (declaringType.TypeReferenceEqualsOrInheritsFrom(param.ParameterType) || declaringType.TypeImplements(param.ParameterType)) + return true; + } + return false; + } + } + + var moduleDefinition = methodContainingLambdaJob.Module; + + var body = methodContainingLambdaJob.Body; + var ilProcessor = body.GetILProcessor(); + + VariableDefinition displayClassVariable = null; + if (lambdaJobDescriptionConstruction.DelegateProducingSequence.CapturesLocals) + { + bool allDelegatesAreGuaranteedNotToOutliveMethod = lambdaJobDescriptionConstruction.DisplayClass.IsValueType() || CecilHelpers.AllDelegatesAreGuaranteedNotToOutliveMethodFor(methodContainingLambdaJob); + + displayClassVariable = body.Variables.Single(v => v.VariableType.TypeReferenceEquals(lambdaJobDescriptionConstruction.DisplayClass)); + + //in this step we want to get rid of the heap allocation for the delegate. In order to make the rest of the code easier to reason about and write, + //we'll make sure that while we do this, we don't change the total stackbehaviour. Because this used to push a delegate onto the evaluation stack, + //we also have to write something to the evaluation stack. Later in this method it will be popped, so it doesn't matter what it is really. I use Ldc_I4_0, + //as I found it introduced the most reasonable artifacts when the code is decompiled back into C#. + lambdaJobDescriptionConstruction.DelegateProducingSequence.RewriteToKeepDisplayClassOnEvaluationStack(); + + if (allDelegatesAreGuaranteedNotToOutliveMethod) + ChangeAllDisplayClassesToStructs(methodContainingLambdaJob); + } + else + { + //if the lambda is not capturing, roslyn will recycle the delegate in a static field. not so great for us. let's nop out all that code. + var instructionThatPushedDelegate = CecilHelpers.FindInstructionThatPushedArg(methodContainingLambdaJob, 1, lambdaJobDescriptionConstruction.WithCodeInvocationInstruction); + + var result = CecilHelpers.MatchesDelegateProducingPattern(methodContainingLambdaJob, instructionThatPushedDelegate, CecilHelpers.DelegateProducingPattern.MatchSide.Start); + result?.RewriteToProduceSingleNullValue(); + } + + FieldDefinition entityQueryField = null; + if (lambdaJobDescriptionConstruction.Kind != LambdaJobDescriptionKind.Job) + entityQueryField = InjectAndInitializeEntityQueryField.InjectAndInitialize(methodContainingLambdaJob, lambdaJobDescriptionConstruction, methodLambdaWasEmittedAs.Parameters); + + var generatedJobStruct = JobStructForLambdaJob.CreateNewJobStruct(lambdaJobDescriptionConstruction); + + if (generatedJobStruct.RunWithoutJobSystemDelegateFieldNoBurst != null) + { + var constructorInfo = generatedJobStruct.ExecuteDelegateType.GetConstructors().First(c=>c.GetParameters().Length==2); + + var instructions = new List() + { + Instruction.Create(OpCodes.Ldnull), + Instruction.Create(OpCodes.Ldftn, generatedJobStruct.RunWithoutJobSystemMethod), + Instruction.Create(OpCodes.Newobj, moduleDefinition.ImportReference(constructorInfo)), + Instruction.Create(OpCodes.Stsfld, generatedJobStruct.RunWithoutJobSystemDelegateFieldNoBurst) + }; + if (generatedJobStruct.RunWithoutJobSystemDelegateFieldBurst != null) + { + instructions.Add(Instruction.Create(OpCodes.Ldsfld, generatedJobStruct.RunWithoutJobSystemDelegateFieldNoBurst)); + + var methodInfo = typeof(InternalCompilerInterface) + .GetMethods(BindingFlags.Static | BindingFlags.Public) + .Where(m=>m.Name==nameof(InternalCompilerInterface.BurstCompile)) + .Single(m=>m.GetParameters().First().ParameterType == generatedJobStruct.ExecuteDelegateType); + + instructions.Add(Instruction.Create(OpCodes.Call, moduleDefinition.ImportReference(methodInfo))); + instructions.Add(Instruction.Create(OpCodes.Stsfld, generatedJobStruct.RunWithoutJobSystemDelegateFieldBurst)); + } + InjectAndInitializeEntityQueryField.InsertIntoOnCreateForCompilerMethod(methodContainingLambdaJob.DeclaringType, instructions.ToArray()); + } + + IEnumerable InstructionsToReplaceScheduleInvocationWith() + { + var newJobStructVariable = new VariableDefinition(generatedJobStruct.TypeDefinition); + body.Variables.Add(newJobStructVariable); + + bool storeJobHandleInVariable = (lambdaJobDescriptionConstruction.ExecutionMode == ExecutionMode.Schedule || + lambdaJobDescriptionConstruction.ExecutionMode == ExecutionMode.ScheduleParallel); + VariableDefinition tempStorageForJobHandle = null; + + if (storeJobHandleInVariable) + { + tempStorageForJobHandle = new VariableDefinition(moduleDefinition.ImportReference(typeof(JobHandle))); + body.Variables.Add(tempStorageForJobHandle); + + // If we aren't using an implicit system dependency and we're replacing the .Schedule() function on the description, + // the lambdajobdescription and the jobhandle argument to that function will be on the stack. + // we're going to need the jobhandle later when we call JobChunkExtensions.Schedule(), so lets stuff it in a variable. + + // If we are using implicit system dependency, lets put that in our temp instead. + if (lambdaJobDescriptionConstruction.UseImplicitSystemDependency) + { + yield return Instruction.Create(OpCodes.Ldarg_0); + yield return Instruction.Create(OpCodes.Call, moduleDefinition.ImportReference(typeof(SystemBase).GetMethod("get_Dependency", BindingFlags.Instance | BindingFlags.NonPublic))); + } + yield return Instruction.Create(OpCodes.Stloc, tempStorageForJobHandle); + } + + //pop the Description struct off the stack, its services are no longer required + yield return Instruction.Create(OpCodes.Pop); + + yield return Instruction.Create(OpCodes.Ldloca, newJobStructVariable); + yield return Instruction.Create(OpCodes.Initobj, generatedJobStruct.TypeDefinition); + + // Call ScheduleTimeInitializeMethod + yield return Instruction.Create(OpCodes.Ldloca, newJobStructVariable); + yield return Instruction.Create(OpCodes.Ldarg_0); + if (lambdaJobDescriptionConstruction.DelegateProducingSequence.CapturesLocals) + { + //only when the lambda is capturing, did we emit the ScheduleTimeInitialize method to take a displayclass argument + var opcode = methodLambdaWasEmittedAs.DeclaringType.IsValueType() ? OpCodes.Ldloca : OpCodes.Ldloc; + yield return Instruction.Create(opcode, displayClassVariable); + } + + yield return Instruction.Create(OpCodes.Call, generatedJobStruct.ScheduleTimeInitializeMethod); + + MethodInfo FindRunOrScheduleMethod() + { + switch (lambdaJobDescriptionConstruction.Kind) + { + case LambdaJobDescriptionKind.Entities: + case LambdaJobDescriptionKind.Chunk: + if (lambdaJobDescriptionConstruction.IsInSystemBase) + { + switch (lambdaJobDescriptionConstruction.ExecutionMode) + { + case ExecutionMode.Run: + return typeof(InternalCompilerInterface).GetMethod(nameof(InternalCompilerInterface.RunJobChunk)); + case ExecutionMode.Schedule: + return typeof(JobChunkExtensions).GetMethod(nameof(JobChunkExtensions.ScheduleSingle)); + case ExecutionMode.ScheduleParallel: + return typeof(JobChunkExtensions).GetMethod(nameof(JobChunkExtensions.ScheduleParallel)); + default: + throw new ArgumentOutOfRangeException(); + } + } + else + { + // Keep legacy behaviour in JobComponentSystems intact (aka "Schedule" equals "ScheduleParallel") + if (lambdaJobDescriptionConstruction.ExecutionMode == ExecutionMode.Schedule) + return typeof(JobChunkExtensions).GetMethod(nameof(JobChunkExtensions.ScheduleParallel)); + return typeof(InternalCompilerInterface).GetMethod(nameof(InternalCompilerInterface.RunJobChunk)); + } + case LambdaJobDescriptionKind.Job: + if (lambdaJobDescriptionConstruction.IsInSystemBase) + { + switch (lambdaJobDescriptionConstruction.ExecutionMode) + { + case ExecutionMode.Run: + return typeof(InternalCompilerInterface).GetMethod(nameof(InternalCompilerInterface.RunIJob)); + case ExecutionMode.Schedule: + return typeof(IJobExtensions).GetMethod(nameof(IJobExtensions.Schedule)); + default: + throw new ArgumentOutOfRangeException(); + } + } + else + { + if (lambdaJobDescriptionConstruction.ExecutionMode == ExecutionMode.Schedule) + return typeof(IJobExtensions).GetMethod(nameof(IJobExtensions.Schedule)); + return typeof(InternalCompilerInterface).GetMethod(nameof(InternalCompilerInterface.RunIJob)); + } + default: + throw new ArgumentOutOfRangeException(); + } + } + + // Call CompleteDependency method to complete previous dependencies if we are running in SystemBase + if (lambdaJobDescriptionConstruction.IsInSystemBase && lambdaJobDescriptionConstruction.ExecutionMode == ExecutionMode.Run) + { + yield return Instruction.Create(OpCodes.Ldarg_0); + yield return Instruction.Create(OpCodes.Call, + moduleDefinition.ImportReference(typeof(SystemBase).GetMethod("CompleteDependency", BindingFlags.Instance | BindingFlags.NonPublic))); + } + + MethodReference runOrScheduleMethod; + if (lambdaJobDescriptionConstruction.WithStructuralChanges) + { + runOrScheduleMethod = generatedJobStruct.TypeDefinition.Methods.First(definition => definition.Name == "Execute"); + } + else + { + runOrScheduleMethod = moduleDefinition.ImportReference(FindRunOrScheduleMethod()) + .MakeGenericInstanceMethod(generatedJobStruct.TypeDefinition); + } + + if (lambdaJobDescriptionConstruction.WithStructuralChanges) + yield return Instruction.Create(OpCodes.Ldloca, newJobStructVariable); + else + yield return Instruction.Create(runOrScheduleMethod.Parameters.First().ParameterType.IsByReference ? OpCodes.Ldloca : OpCodes.Ldloc, newJobStructVariable); + + switch (lambdaJobDescriptionConstruction.Kind) + { + case LambdaJobDescriptionKind.Entities: + case LambdaJobDescriptionKind.Chunk: + if (lambdaJobDescriptionConstruction.WithStructuralChanges) + { + yield return Instruction.Create(OpCodes.Ldarg_0); + yield return Instruction.Create(OpCodes.Ldarg_0); + yield return Instruction.Create(OpCodes.Ldfld, entityQueryField); + } + else + { + yield return Instruction.Create(OpCodes.Ldarg_0); + yield return Instruction.Create(OpCodes.Ldfld, entityQueryField); + } + break; + case LambdaJobDescriptionKind.Job: + //job.Schedule() takes no entityQuery... + break; + } + + // Store returned JobHandle in temp varaible or back in SystemBase.depenedency + if (storeJobHandleInVariable) + yield return Instruction.Create(OpCodes.Ldloc, tempStorageForJobHandle); + else if (lambdaJobDescriptionConstruction.UseImplicitSystemDependency) + { + yield return Instruction.Create(OpCodes.Ldarg_0); + yield return Instruction.Create(OpCodes.Call, + moduleDefinition.ImportReference(typeof(SystemBase).GetMethod("get_Dependency", BindingFlags.Instance | BindingFlags.NonPublic))); + } + + if (lambdaJobDescriptionConstruction.ExecutionMode == ExecutionMode.Run && + !lambdaJobDescriptionConstruction.WithStructuralChanges) + { + if (!lambdaJobDescriptionConstruction.UsesBurst) + yield return Instruction.Create(OpCodes.Ldsfld, generatedJobStruct.RunWithoutJobSystemDelegateFieldNoBurst); + else + { + yield return Instruction.Create(OpCodes.Call, moduleDefinition.ImportReference(typeof(JobsUtility).GetMethod("get_"+nameof(JobsUtility.JobCompilerEnabled)))); + + var targetInstruction = Instruction.Create(OpCodes.Ldsfld, generatedJobStruct.RunWithoutJobSystemDelegateFieldBurst); + yield return Instruction.Create(OpCodes.Brtrue, targetInstruction); + yield return Instruction.Create(OpCodes.Ldsfld, generatedJobStruct.RunWithoutJobSystemDelegateFieldNoBurst); + var finalBranchDestination = Instruction.Create(OpCodes.Nop); + yield return Instruction.Create(OpCodes.Br, finalBranchDestination); + yield return targetInstruction; + yield return finalBranchDestination; + } + } + + yield return Instruction.Create(OpCodes.Call, runOrScheduleMethod); + + if (lambdaJobDescriptionConstruction.UseImplicitSystemDependency) + { + yield return Instruction.Create(OpCodes.Stloc, tempStorageForJobHandle); + yield return Instruction.Create(OpCodes.Ldarg_0); + yield return Instruction.Create(OpCodes.Ldloc, tempStorageForJobHandle); + yield return Instruction.Create(OpCodes.Call, + moduleDefinition.ImportReference(typeof(SystemBase).GetMethod("set_Dependency", BindingFlags.Instance | BindingFlags.NonPublic))); + } + + if (lambdaJobDescriptionConstruction.ExecutionMode == ExecutionMode.Run && + generatedJobStruct.WriteToDisplayClassMethod != null && lambdaJobDescriptionConstruction.DelegateProducingSequence.CapturesLocals) + { + yield return Instruction.Create(OpCodes.Ldloca, newJobStructVariable); + + var opcode = methodLambdaWasEmittedAs.DeclaringType.IsValueType() ? OpCodes.Ldloca : OpCodes.Ldloc; + yield return Instruction.Create(opcode, displayClassVariable); + yield return Instruction.Create(OpCodes.Call, generatedJobStruct.WriteToDisplayClassMethod); + } + } + + foreach (var invokedMethod in lambdaJobDescriptionConstruction.InvokedConstructionMethods) + { + bool invokedMethodServesNoPurposeAtRuntime = + invokedMethod.MethodName != nameof(LambdaJobQueryConstructionMethods.WithSharedComponentFilter); + + if (invokedMethodServesNoPurposeAtRuntime) + { + CecilHelpers.EraseMethodInvocationFromInstructions(ilProcessor, invokedMethod.InstructionInvokingMethod); + } + else + { + // Rewrite WithSharedComponentFilter calls as they need to modify EntityQuery dynamically + if (invokedMethod.MethodName == + nameof(LambdaJobQueryConstructionMethods.WithSharedComponentFilter)) + { + var setSharedComponentFilterOnQueryMethod + = moduleDefinition.ImportReference( + (lambdaJobDescriptionConstruction.Kind == LambdaJobDescriptionKind.Entities ? typeof(ForEachLambdaJobDescription_SetSharedComponent) : typeof(LambdaJobChunkDescription_SetSharedComponent)).GetMethod( + nameof(LambdaJobChunkDescription_SetSharedComponent.SetSharedComponentFilterOnQuery))); + var callingTypeReference = lambdaJobDescriptionConstruction.IsInSystemBase + ? moduleDefinition.ImportReference(typeof(ForEachLambdaJobDescription)) + : moduleDefinition.ImportReference(typeof(ForEachLambdaJobDescriptionJCS)); + MethodReference genericSetSharedComponentFilterOnQueryMethod + = setSharedComponentFilterOnQueryMethod.MakeGenericInstanceMethod( + new TypeReference[] { callingTypeReference }.Concat(invokedMethod.TypeArguments).ToArray()); + + // Change invocation to invocation of helper method and add EntityQuery parameter to be modified + var setSharedComponentFilterOnQueryInstructions = new List + { + Instruction.Create(OpCodes.Ldarg_0), + Instruction.Create(OpCodes.Ldfld, entityQueryField), + Instruction.Create(OpCodes.Call, genericSetSharedComponentFilterOnQueryMethod) + }; + + ilProcessor.Replace(invokedMethod.InstructionInvokingMethod, setSharedComponentFilterOnQueryInstructions); + } + } + } + + var scheduleInstructions = InstructionsToReplaceScheduleInvocationWith().ToList(); + ilProcessor.InsertAfter(lambdaJobDescriptionConstruction.ScheduleOrRunInvocationInstruction, scheduleInstructions); + lambdaJobDescriptionConstruction.ScheduleOrRunInvocationInstruction.MakeNOP(); + + var codegenInitializeMethod = GetOrMakeOnCreateForCompilerMethod(lambdaJobDescriptionConstruction.ContainingMethod.DeclaringType); + + return (generatedJobStruct, diagnosticMessages); + } + + static void ChangeAllDisplayClassesToStructs(MethodDefinition methodContainingLambdaJob) + { + var result = FindDisplayClassesIn(methodContainingLambdaJob).ToList(); + + foreach (var (typeDefinition, variableDefinition) in result) + { + if (!typeDefinition.IsValueType()) + { + CecilHelpers.PatchMethodThatUsedDisplayClassToTreatItAsAStruct(methodContainingLambdaJob.Body, variableDefinition); + CecilHelpers.PatchDisplayClassToBeAStruct(typeDefinition); + } + } + } + + static IEnumerable<(TypeDefinition typeDefinition, VariableDefinition variableDefinition)> FindDisplayClassesIn(MethodDefinition method) + { + var displayClassConstructingInstructions = method.Body.Instructions.Where(IsDisplayClassConstructingInstruction).ToList(); + + foreach (var displayClassConstructingInstruction in displayClassConstructingInstructions) + { + if (!displayClassConstructingInstruction.Next.IsStoreLocal(out var displayClassVariableIndex)) + { + InternalCompilerError.DCICE006(method).Throw(); + } + + var displayClassVariable = method.Body.Variables[displayClassVariableIndex]; + var displayClassTypeDefinition = displayClassVariable.VariableType.Resolve(); + if (!displayClassTypeDefinition.IsClass) + continue; + yield return (displayClassTypeDefinition, displayClassVariable); + } + } + + + static bool IsDisplayClassConstructingInstruction(Instruction i) + { + if (i.OpCode != OpCodes.Newobj) + return false; + + var methodRef = (MethodReference) i.Operand; + if (methodRef.Parameters.Any()) + return false; + + var declaringType = methodRef.DeclaringType; + if (!declaringType.IsDisplayClass()) + return false; + + if (declaringType.Resolve().CustomAttributes.Any(a => a.Constructor.DeclaringType.Name != typeof(CompilerGeneratedAttribute).Name)) + return false; + + return true; + } + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaJobsPostProcessor.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaJobsPostProcessor.cs.meta new file mode 100644 index 000000000..5f882621b --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaJobsPostProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b63240b03839a0408be19f508fa5d5b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaParamaterValueProviderInformation.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaParamaterValueProviderInformation.cs new file mode 100644 index 000000000..bced2caab --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaParamaterValueProviderInformation.cs @@ -0,0 +1,257 @@ +using System; +using System.Linq; +using System.Text; +using Mono.Cecil; +using Mono.Cecil.Cil; +using Mono.Cecil.Rocks; +using Unity.Entities.CodeGeneratedJobForEach; + +namespace Unity.Entities.CodeGen +{ + class LambdaParamaterValueProviderInformation + { + public readonly TypeReference Provider; + public readonly MethodReference ProviderScheduleTimeInitializeMethod; + public readonly MethodReference ProviderPrepareToExecuteOnEntitiesIn; + public readonly MethodReference PrepareToExecuteWithStructuralChanges; + public readonly TypeReference ProviderRuntime; + public readonly MethodReference RuntimeForMethod; + public readonly TypeReference RuntimeForMethodReturnType; + public readonly MethodReference RuntimeWriteBackMethod; + public readonly MethodReference ProviderFinishExecuteOnEntities; + public readonly bool IsReadOnly; + public readonly bool WithStructuralChanges; + public readonly string Name; + + LambdaParamaterValueProviderInformation(TypeReference provider, TypeReference providerRuntime, bool readOnly, + string name, TypeReference runtimeForMethodReturnType = null, bool withStructuralChanges = false) + { + Provider = provider; + Name = name; + + ProviderRuntime = providerRuntime; + (RuntimeForMethod, RuntimeForMethodReturnType) = MethodReferenceFor("For", ProviderRuntime); + if (runtimeForMethodReturnType != null) + RuntimeForMethodReturnType = runtimeForMethodReturnType; + + if (providerRuntime.DeclaringType.Name == typeof(LambdaParameterValueProvider_IComponentData<>).Name && withStructuralChanges) + (RuntimeWriteBackMethod, _) = MethodReferenceFor("WriteBack", ProviderRuntime); + (PrepareToExecuteWithStructuralChanges, _) = MethodReferenceFor(nameof(LambdaParameterValueProvider_Entity.PrepareToExecuteWithStructuralChanges), Provider); + (ProviderScheduleTimeInitializeMethod, _) = MethodReferenceFor(nameof(LambdaParameterValueProvider_Entity.ScheduleTimeInitialize), Provider); + (ProviderPrepareToExecuteOnEntitiesIn, _) = MethodReferenceFor(nameof(LambdaParameterValueProvider_Entity.PrepareToExecuteOnEntitiesIn), Provider); + + IsReadOnly = readOnly; + WithStructuralChanges = withStructuralChanges; + } + + + static (MethodReference methodReference, TypeReference specializedReturnType) MethodReferenceFor(string methodName, TypeReference typeReference) + { + var resolvedMethod = typeReference.Module.ImportReference(typeReference.Resolve().Methods.Single(m => m.Name == methodName)); + + var resolvedMethod2 = typeReference.Module.ImportReference(typeReference.Resolve().Methods.Single(m => m.Name == methodName)); + var specializedReturnType = resolvedMethod2.ReturnType; + //I tried coding this up in a totally generic way where we can correctly figure out the "specialized" type of the returntype, but our case + //with ElementProvider_DynamicBuffer.Runtime takes a better person than me apparently. No worries! this code only needs to deal + //with this one generic weirdo case correctly, so let's just make a specialized codepath for it, and do the thing that we know is correct + //just for that once case. + if (methodName == "For" && typeReference.DeclaringType.Name == typeof(LambdaParameterValueProvider_DynamicBuffer<>).Name) + { + ((GenericInstanceType)specializedReturnType).GenericArguments[0] = ((GenericInstanceType) typeReference).GenericArguments.Single(); + } + else if (methodName == "For" && + (typeReference.DeclaringType.Name == typeof(LambdaParameterValueProvider_IComponentData<>).Name || + typeReference.DeclaringType.Name == typeof(LambdaParameterValueProvider_IComponentData_Tag<>).Name)) + { + specializedReturnType = ((GenericInstanceType) typeReference).GenericArguments.Single(); + } + + var result = new MethodReference(resolvedMethod.Name, resolvedMethod.ReturnType, typeReference) + { + HasThis = resolvedMethod.HasThis, + }; + foreach (var pd in resolvedMethod.Parameters) + result.Parameters.Add(pd); + return (result, specializedReturnType); + } + + public bool PrepareToExecuteOnEntitiesTakesJustAChunkParameter => ProviderPrepareToExecuteOnEntitiesIn.Parameters.Count() == 1; + + + static public bool IsTypeValidForEntityQuery(TypeDefinition t) + { + if (t.IsIComponentDataStruct()) + return true; + if (t.IsIComponentDataClass() || t.IsUnityEngineObject()) + return true; + if (t.IsIBufferElementData()) + return true; + if (t.IsISharedComponentData()) + return true; + return false; + } + + public static LambdaParamaterValueProviderInformation ElementProviderInformationFor( + LambdaJobDescriptionConstruction lambdaJobDescriptionConstruction, ParameterDefinition parameter, bool withStructuralChanges) + { + var moduleDefinition = lambdaJobDescriptionConstruction.ContainingMethod.Module; + + (TypeReference provider, TypeReference providerRuntime) ImportReferencesFor(Type providerType, Type runtimeType, TypeReference typeOfT) + { + var provider = moduleDefinition + .ImportReference(providerType) + .MakeGenericInstanceType(typeOfT); + var providerRuntime = moduleDefinition.ImportReference(runtimeType).MakeGenericInstanceType(typeOfT); + + return (provider, providerRuntime); + } + + var parameterType = parameter.ParameterType; + var resolvedParameterType = parameterType.Resolve(); + + // IComponentData + if (resolvedParameterType.IsIComponentDataStruct()) + { + var readOnly = !parameter.ParameterType.IsByReference || HasCompilerServicesIsReadOnlyAttribute(parameter); + + if (resolvedParameterType.IsTagComponentDataStruct()) + { + var (provider, providerRuntime) = + ImportReferencesFor( + typeof(LambdaParameterValueProvider_IComponentData_Tag<>), + typeof(LambdaParameterValueProvider_IComponentData_Tag<>.Runtime), parameter.ParameterType.GetElementType()); + return new LambdaParamaterValueProviderInformation(provider, providerRuntime, readOnly, parameter.Name, null, false); + } + else + { + + var (provider, providerRuntime) = + ImportReferencesFor( + typeof(LambdaParameterValueProvider_IComponentData<>), + withStructuralChanges + ? typeof(LambdaParameterValueProvider_IComponentData<>.StructuralChangeRuntime) + : typeof(LambdaParameterValueProvider_IComponentData<>.Runtime), parameter.ParameterType.GetElementType()); + return new LambdaParamaterValueProviderInformation(provider, providerRuntime, readOnly, parameter.Name, null, withStructuralChanges); + } + } + + // class IComponentData / UnityEngine.Object + if (resolvedParameterType.IsIComponentDataClass() || resolvedParameterType.IsUnityEngineObject()) + { + if (lambdaJobDescriptionConstruction.UsesBurst || + lambdaJobDescriptionConstruction.ExecutionMode == ExecutionMode.Schedule || + lambdaJobDescriptionConstruction.ExecutionMode == ExecutionMode.ScheduleParallel) + UserError.DC0023(lambdaJobDescriptionConstruction.ContainingMethod, parameterType, lambdaJobDescriptionConstruction.WithCodeInvocationInstruction).Throw(); + + bool readOnly = false; + if (parameter.ParameterType.IsByReference) + { + if (HasCompilerServicesIsReadOnlyAttribute(parameter)) + readOnly = true; + else + UserError.DC0024(lambdaJobDescriptionConstruction.ContainingMethod, parameterType, lambdaJobDescriptionConstruction.WithCodeInvocationInstruction).Throw(); + } + + var (provider, providerRuntime) = ImportReferencesFor(typeof(LambdaParameterValueProvider_ManagedComponentData<>), + withStructuralChanges + ? typeof(LambdaParameterValueProvider_ManagedComponentData<>.StructuralChangeRuntime) + : typeof(LambdaParameterValueProvider_ManagedComponentData<>.Runtime), parameter.ParameterType.GetElementType()); + return new LambdaParamaterValueProviderInformation(provider, providerRuntime, readOnly, parameter.Name, parameter.ParameterType.GetElementType()); + } + + // DynamicBuffer + if (resolvedParameterType.IsDynamicBufferOfT()) + { + TypeReference typeRef = parameterType; + if (parameterType is ByReferenceType referenceType) + typeRef = referenceType.ElementType; + + var readOnly = HasCompilerServicesIsReadOnlyAttribute(parameter); + GenericInstanceType bufferOfT = (GenericInstanceType)typeRef; + TypeReference bufferElementType = bufferOfT.GenericArguments[0]; + var (provider, providerRuntime) = ImportReferencesFor(typeof(LambdaParameterValueProvider_DynamicBuffer<>), + withStructuralChanges + ? typeof(LambdaParameterValueProvider_DynamicBuffer<>.StructuralChangeRuntime) + : typeof(LambdaParameterValueProvider_DynamicBuffer<>.Runtime), bufferElementType); + return new LambdaParamaterValueProviderInformation(provider, providerRuntime, readOnly, parameter.Name); + } + + // ISharedComponent + if (resolvedParameterType.IsISharedComponentData()) + { + if (lambdaJobDescriptionConstruction.ExecutionMode != ExecutionMode.Run || lambdaJobDescriptionConstruction.UsesBurst) + UserError.DC0019(lambdaJobDescriptionConstruction.ContainingMethod, parameter.ParameterType.GetElementType(), lambdaJobDescriptionConstruction.WithCodeInvocationInstruction).Throw(); + + if (!parameter.HasCompilerServicesIsReadOnlyAttribute() && parameter.ParameterType.IsByReference) + { + UserError.DC0020(lambdaJobDescriptionConstruction.ContainingMethod, parameter.ParameterType.GetElementType(),lambdaJobDescriptionConstruction.WithCodeInvocationInstruction).Throw(); + } + + var (provider, providerRuntime) = ImportReferencesFor(typeof(LambdaParameterValueProvider_ISharedComponentData<>), + withStructuralChanges + ? typeof(LambdaParameterValueProvider_ISharedComponentData<>.StructuralChangeRuntime) + : typeof(LambdaParameterValueProvider_ISharedComponentData<>.Runtime), parameter.ParameterType.GetElementType()); + var newProvider = new LambdaParamaterValueProviderInformation(provider, providerRuntime, false, parameter.Name, parameter.ParameterType.GetElementType(), withStructuralChanges); + + return newProvider; + } + + if (resolvedParameterType.TypeReferenceEquals(moduleDefinition.ImportReference(typeof(Entity)))) + { + var provider = moduleDefinition.ImportReference(typeof(LambdaParameterValueProvider_Entity)); + var runtime = withStructuralChanges + ? moduleDefinition.ImportReference(typeof(LambdaParameterValueProvider_Entity.StructuralChangeRuntime)) + : moduleDefinition.ImportReference(typeof(LambdaParameterValueProvider_Entity.Runtime)); + + return new LambdaParamaterValueProviderInformation(provider, runtime, true, parameter.Name, null, withStructuralChanges); + } + + if (resolvedParameterType.FullName == moduleDefinition.TypeSystem.Int32.FullName) + { + var allNames = new[] {"entityInQueryIndex", "nativeThreadIndex"}; + string entityInQueryIndexName = allNames[0]; + string nativeThreadIndexName = allNames[1]; + + if (parameter.Name == entityInQueryIndexName) + { + var provider = moduleDefinition.ImportReference(typeof(LambdaParameterValueProvider_EntityInQueryIndex)); + var runtime = withStructuralChanges + ? moduleDefinition.ImportReference(typeof(LambdaParameterValueProvider_EntityInQueryIndex.StructuralChangeRuntime)) + : moduleDefinition.ImportReference(typeof(LambdaParameterValueProvider_EntityInQueryIndex.Runtime)); + return new LambdaParamaterValueProviderInformation(provider, runtime, true, parameter.Name); + } + + if (parameter.Name == nativeThreadIndexName) + { + var provider = moduleDefinition.ImportReference(typeof(LambdaParameterValueProvider_NativeThreadIndex)); + var runtime = moduleDefinition.ImportReference(typeof(LambdaParameterValueProvider_NativeThreadIndex.Runtime)); +#if !UNITY_DOTSPLAYER + var isReadonly = true; +#else + // Tiny's Job System currently will set the NativeThreadIndex at the beginning of the function to be Bursted. + // This will make Burst Compilation fail due to the NativeThreadIndex being marked as Readonly here. So for now + // until we workaround this issue in the Tiny Job System, we disable marking NativeThreadIndex as Readonly. + var isReadonly = false; +#endif + return new LambdaParamaterValueProviderInformation(provider, runtime, isReadonly, parameter.Name); + } + + UserError.DC0014(lambdaJobDescriptionConstruction.ContainingMethod, lambdaJobDescriptionConstruction.WithCodeInvocationInstruction, parameter, allNames).Throw(); + } + + if (resolvedParameterType.IsIBufferElementData()) + UserError.DC0033(lambdaJobDescriptionConstruction.ContainingMethod, parameter.Name, parameter.ParameterType.GetElementType(), lambdaJobDescriptionConstruction.WithCodeInvocationInstruction).Throw(); + + if (!resolvedParameterType.GetElementType().IsPrimitive && resolvedParameterType.GetElementType().IsValueType()) + UserError.DC0021(lambdaJobDescriptionConstruction.ContainingMethod, parameter.Name, parameter.ParameterType.GetElementType(), lambdaJobDescriptionConstruction.WithCodeInvocationInstruction).Throw(); + + UserError.DC0005(lambdaJobDescriptionConstruction.ContainingMethod, lambdaJobDescriptionConstruction.WithCodeInvocationInstruction, parameter).Throw(); + return null; + } + + static bool HasCompilerServicesIsReadOnlyAttribute(ParameterDefinition p) + { + return p.HasCustomAttributes && p.CustomAttributes.Any(c =>c.AttributeType.FullName == "System.Runtime.CompilerServices.IsReadOnlyAttribute"); + } + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaParamaterValueProviderInformation.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaParamaterValueProviderInformation.cs.meta new file mode 100644 index 000000000..1382d1e04 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaParamaterValueProviderInformation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a9a038dfd0e89c4685be18a6fa41965 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaParameterValueInformations.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaParameterValueInformations.cs new file mode 100644 index 000000000..009b74df4 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaParameterValueInformations.cs @@ -0,0 +1,394 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using Mono.Cecil; +using Mono.Cecil.Cil; +using Unity.Burst; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Entities.CodeGeneratedJobForEach; +using FieldAttributes = Mono.Cecil.FieldAttributes; +using MethodAttributes = Mono.Cecil.MethodAttributes; +using ParameterAttributes = Mono.Cecil.ParameterAttributes; +using TypeAttributes = Mono.Cecil.TypeAttributes; + +namespace Unity.Entities.CodeGen +{ + internal class LambdaParameterValueInformations + { + private LambdaParamaterValueProviderInformation[] _providers; + + Dictionary _parameterTypeNameToProvider; + readonly Dictionary _elementProviderToFields = new Dictionary(); + TypeDefinition _jobChunkType; + MethodDefinition _scheduleTimeInitializeMethod; + TypeDefinition _lambdaParameterValueProvidersType; + public TypeDefinition RuntimesType { get; private set; } + MethodDefinition _prepareToExecute; + FieldDefinition _elementsField; + public FieldDefinition _runtimesField; + public FieldDefinition _entityProviderField; + public LambdaJobDescriptionConstruction _lambdaJobDescriptionConstruction; + public bool _withStructuralChanges; + + private LambdaParameterValueInformations() + { + } + + void InjectIntoJobChunkType() + { + _lambdaParameterValueProvidersType = new TypeDefinition("", "LambdaParameterValueProviders", TypeAttributes.NestedPrivate | TypeAttributes.SequentialLayout, _jobChunkType.Module.ImportReference(typeof(ValueType))) {DeclaringType = _jobChunkType}; + _jobChunkType.NestedTypes.Add(_lambdaParameterValueProvidersType); + + _elementsField = new FieldDefinition("_lambdaParameterValueProviders", FieldAttributes.Private, _lambdaParameterValueProvidersType); + _jobChunkType.Fields.Add(_elementsField); + + var burstNoAliasAttributeConstructor = _jobChunkType.Module.ImportReference(typeof(NoAliasAttribute).GetConstructors().Single(c=>!c.GetParameters().Any())); + RuntimesType = new TypeDefinition("", "Runtimes", TypeAttributes.NestedPublic | TypeAttributes.SequentialLayout, _jobChunkType.Module.ImportReference(typeof(ValueType))) { DeclaringType = _lambdaParameterValueProvidersType}; + if (_lambdaJobDescriptionConstruction.UsesBurst && LambdaJobDescriptionConstruction.UsesNoAlias) + RuntimesType.CustomAttributes.Add(new CustomAttribute(burstNoAliasAttributeConstructor)); + _lambdaParameterValueProvidersType.NestedTypes.Add(RuntimesType); + + _runtimesField = new FieldDefinition("_runtimes", FieldAttributes.Private, + new PointerType(RuntimesType)) + { + CustomAttributes = + { + new CustomAttribute(JobStructForLambdaJob.AttributeConstructorReferenceFor(typeof(NativeDisableUnsafePtrRestrictionAttribute), ModuleDefinition)) + } + }; + _jobChunkType.Fields.Add(_runtimesField); + + if (_withStructuralChanges) + { + // We need an entity provider to handle iterating through entities during structural changes + _entityProviderField = new FieldDefinition("_entityProvider", FieldAttributes.Public, _jobChunkType.Module.ImportReference(typeof(StructuralChangeEntityProvider))); + RuntimesType.Fields.Add(_entityProviderField); + } + + int counter = 0; + foreach (var provider in _providers) + { + var parameterFieldDefinition = new FieldDefinition($"forParameter_{provider.Name}", FieldAttributes.Private, provider.Provider); + if (provider.IsReadOnly) + { + var readOnlyAttributeConstructor = JobStructForLambdaJob.AttributeConstructorReferenceFor(typeof(ReadOnlyAttribute), _jobChunkType.Module); + parameterFieldDefinition.CustomAttributes.Add(new CustomAttribute(readOnlyAttributeConstructor)); + } + + bool applyBurstAliasAttribute = _lambdaJobDescriptionConstruction.UsesBurst && LambdaJobDescriptionConstruction.UsesNoAlias; + if (applyBurstAliasAttribute) + parameterFieldDefinition.CustomAttributes.Add(new CustomAttribute(burstNoAliasAttributeConstructor)); + _lambdaParameterValueProvidersType.Fields.Add(parameterFieldDefinition); + + var runtimeFieldDefinition = new FieldDefinition($"runtime_{provider.Name}", FieldAttributes.Public, provider.ProviderRuntime); + if (_lambdaJobDescriptionConstruction.UsesBurst && LambdaJobDescriptionConstruction.UsesNoAlias) + runtimeFieldDefinition.CustomAttributes.Add(new CustomAttribute(burstNoAliasAttributeConstructor)); + RuntimesType.Fields.Add(runtimeFieldDefinition); + + _elementProviderToFields.Add(provider, (parameterFieldDefinition, runtimeFieldDefinition)); + + counter++; + } + + MakeScheduleTimeInitializeMethod(); + + if (_withStructuralChanges) + MakePrepareForStructuralChangesMethod(); + else + MakePrepareToExecuteOnEntitiesInMethod(); + } + + void MakePrepareForStructuralChangesMethod() + { + MethodReference mimickParametersFrom = ModuleDefinition.ImportReference( + typeof(StructuralChangeEntityProvider).GetMethod(nameof(StructuralChangeEntityProvider.PrepareToExecuteWithStructuralChanges), + BindingFlags.Public | BindingFlags.Instance)); + + _prepareToExecute = new MethodDefinition("PrepareToExecuteWithStructuralChanges", MethodAttributes.Public,RuntimesType) + { + HasThis = true, + }; + int counter = 0; + foreach (var parameter in mimickParametersFrom.Parameters) + _prepareToExecute.Parameters.Add(new ParameterDefinition($"p{counter++}", parameter.Attributes, parameter.ParameterType)); + + _lambdaParameterValueProvidersType.Methods.Add(_prepareToExecute); + + var il = _prepareToExecute.Body.GetILProcessor(); + var resultVariable = new VariableDefinition(RuntimesType); + _prepareToExecute.Body.Variables.Add(resultVariable); + + // Initialize the result object. + il.Emit(OpCodes.Ldloca, resultVariable); + il.Emit(OpCodes.Initobj, RuntimesType); + + // Prepare our StructuralChangeEntityProvider instance + il.Emit(OpCodes.Ldloca, resultVariable); + il.Emit(OpCodes.Ldflda, _entityProviderField); + il.Emit(OpCodes.Ldarg_1); + il.Emit(OpCodes.Ldarg_2); + il.Emit(OpCodes.Call, + ModuleDefinition.ImportReference(typeof(StructuralChangeEntityProvider).GetMethod(nameof(StructuralChangeEntityProvider.PrepareToExecuteWithStructuralChanges)))); + + // Prepare all parameter providers + foreach (var providerInformation in _providers) + { + il.Emit(OpCodes.Ldloca, resultVariable); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldflda, _elementProviderToFields[providerInformation].elementField); + il.Emit(OpCodes.Ldarg_1); + il.Emit(OpCodes.Ldarg_2); + + il.Emit(OpCodes.Call, providerInformation.PrepareToExecuteWithStructuralChanges); + + // Store in the runtime struct that was already on the stack + il.Emit(OpCodes.Stfld, _elementProviderToFields[providerInformation].runtimeField); + } + + il.Emit(OpCodes.Ldloc, resultVariable); + il.Emit(OpCodes.Ret); + } + + void MakePrepareToExecuteOnEntitiesInMethod() + { + MethodReference mimickParametersFrom = ModuleDefinition.ImportReference( + typeof(LambdaParameterValueProvider_EntityInQueryIndex).GetMethod( + nameof(LambdaParameterValueProvider_EntityInQueryIndex.PrepareToExecuteOnEntitiesIn), + BindingFlags.Public | BindingFlags.Instance)); + + _prepareToExecute = new MethodDefinition("PrepareToExecuteOnEntitiesInMethod", MethodAttributes.Public,RuntimesType) + { + HasThis = true, + }; + int counter = 0; + foreach (var parameter in mimickParametersFrom.Parameters) + _prepareToExecute.Parameters.Add(new ParameterDefinition($"p{counter++}", parameter.Attributes, parameter.ParameterType)); + + _lambdaParameterValueProvidersType.Methods.Add(_prepareToExecute); + + var il = _prepareToExecute.Body.GetILProcessor(); + var resultVariable = new VariableDefinition(RuntimesType); + _prepareToExecute.Body.Variables.Add(resultVariable); + + //initialize the result object. + il.Emit(OpCodes.Ldloca, resultVariable); + il.Emit(OpCodes.Initobj, RuntimesType); + + foreach (var providerInformation in _providers) + { + il.Emit(OpCodes.Ldloca, resultVariable); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldflda, _elementProviderToFields[providerInformation].elementField); + il.Emit(OpCodes.Ldarg_1); + + //most PrepareToExecuteOnEntitiesIn take just the chunk, but some take the chunkIndex and firstEntityIndex as well. + if (!providerInformation.PrepareToExecuteOnEntitiesTakesJustAChunkParameter) + { + il.Emit(OpCodes.Ldarg_2); + il.Emit(OpCodes.Ldarg_3); + } + + il.Emit(OpCodes.Call, providerInformation.ProviderPrepareToExecuteOnEntitiesIn); + + //store in the runtime struct that was already on the stack + il.Emit(OpCodes.Stfld, _elementProviderToFields[providerInformation].runtimeField); + } + + il.Emit(OpCodes.Ldloc, resultVariable); + il.Emit(OpCodes.Ret); + } + + private void MakeScheduleTimeInitializeMethod() + { + _scheduleTimeInitializeMethod = new MethodDefinition("ScheduleTimeInitialize", MethodAttributes.Public, ModuleDefinition.TypeSystem.Void) + { + HasThis = true, + Parameters = + { + new ParameterDefinition("componentSystem", ParameterAttributes.None,_lambdaJobDescriptionConstruction.ContainingMethod.DeclaringType), + } + }; + _lambdaParameterValueProvidersType.Methods.Add(_scheduleTimeInitializeMethod); + + var il = _scheduleTimeInitializeMethod.Body.GetILProcessor(); + foreach (var providerInformation in _providers) + { + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldflda, _elementProviderToFields[providerInformation].elementField); + il.Emit(OpCodes.Ldarg_1); + il.Emit(providerInformation.IsReadOnly ? OpCodes.Ldc_I4_1 : OpCodes.Ldc_I4_0); + il.Emit(OpCodes.Call, providerInformation.ProviderScheduleTimeInitializeMethod); + } + + il.Emit(OpCodes.Ret); + } + + private ModuleDefinition ModuleDefinition => _jobChunkType.Module; + + + public static LambdaParameterValueInformations For(JobStructForLambdaJob generatedJobStruct, bool withStructuralChanges) + { + var lambdaJobDescriptionConstruction = generatedJobStruct.LambdaJobDescriptionConstruction; + + var parameterDefinitions = lambdaJobDescriptionConstruction.MethodLambdaWasEmittedAs.Parameters.ToArray(); + + var providerInformations = parameterDefinitions.Select(p => + LambdaParamaterValueProviderInformation.ElementProviderInformationFor(lambdaJobDescriptionConstruction, p, withStructuralChanges)).ToList(); + + var parameterTypeNameToProvider = new Dictionary(); + for (int left = 0; left != providerInformations.Count; left++) + { + for (int right = left + 1; right != providerInformations.Count; right++) + { + var leftObject = providerInformations[left]; + var rightObject = providerInformations[right]; + + if (leftObject == rightObject) + continue; + + if (leftObject.Provider.FullName != rightObject.Provider.FullName) + continue; + + if (!rightObject.IsReadOnly) + providerInformations[left] = rightObject; + else + providerInformations[right] = leftObject; + } + parameterTypeNameToProvider[parameterDefinitions[left].ParameterType.FullName] = providerInformations[left]; + } + + var result = new LambdaParameterValueInformations() + { + _providers = providerInformations.Distinct().ToArray(), + _parameterTypeNameToProvider = parameterTypeNameToProvider, + _jobChunkType = generatedJobStruct.TypeDefinition, + _lambdaJobDescriptionConstruction = lambdaJobDescriptionConstruction, + _withStructuralChanges = withStructuralChanges + }; + result.InjectIntoJobChunkType(); + return result; + } + + public VariableDefinition EmitInvocationToPrepareToRunOnEntitiesInIntoJobChunkExecute(MethodDefinition executeMethod) + { + if (executeMethod.DeclaringType != _jobChunkType) + throw new ArgumentException(); + var il = executeMethod.Body.GetILProcessor(); + il.Emit(OpCodes.Ldarg_0); //<-- for the stdfld at the end + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldflda, _elementsField); + + if (_withStructuralChanges) + { + il.Emit(OpCodes.Ldarg,1); // ComponentSystem + il.Emit(OpCodes.Ldarg,2); // EntityQuery + } + else + { + il.Emit(OpCodes.Ldarga,1); // <- the chunk goes by ref + il.Emit(OpCodes.Ldarg,2); + il.Emit(OpCodes.Ldarg,3); + } + + il.Emit(OpCodes.Call, _prepareToExecute); + + var runtimesVariable = new VariableDefinition(RuntimesType); + il.Body.Variables.Add(runtimesVariable); + il.Emit(OpCodes.Stloc, runtimesVariable); + il.Emit(OpCodes.Ldloca, runtimesVariable); + il.Emit(OpCodes.Conv_U); + il.Emit(OpCodes.Stfld, _runtimesField); + + return runtimesVariable; + } + + public void EmitInvocationToScheduleTimeInitializeIntoJobChunkScheduleTimeInitialize(MethodDefinition jobChunkScheduleTimeInitialize) + { + var il = jobChunkScheduleTimeInitialize.Body.GetILProcessor(); + + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldflda, _elementsField); + + il.Emit(OpCodes.Ldarg,1); + il.Emit(OpCodes.Call, _scheduleTimeInitializeMethod); + } + + public void EmitILToLoadValueForParameterOnStack(ParameterDefinition parameterDefinition,ILProcessor ilProcessor, VariableDefinition loopCounter) + { + var provider = _parameterTypeNameToProvider[parameterDefinition.ParameterType.FullName]; + + ilProcessor.Emit(OpCodes.Ldarg_2); + + ilProcessor.Emit(OpCodes.Ldflda, _elementProviderToFields[provider].runtimeField); + + ilProcessor.Emit(OpCodes.Ldloc, loopCounter); + ilProcessor.Emit(OpCodes.Call, provider.RuntimeForMethod); + + if (provider.RuntimeForMethod.ReturnType.IsByReference && + !parameterDefinition.ParameterType.IsByReference) + ilProcessor.Emit(OpCodes.Ldobj, parameterDefinition.ParameterType); + + if (!provider.RuntimeForMethod.ReturnType.IsByReference && parameterDefinition.ParameterType.IsByReference) + { + var tempVariable = new VariableDefinition(provider.RuntimeForMethodReturnType); + ilProcessor.Body.Variables.Add(tempVariable); + ilProcessor.Emit(OpCodes.Stloc, tempVariable); + ilProcessor.Emit(OpCodes.Ldloca, tempVariable); + } + } + + public (VariableDefinition, VariableDefinition) EmitILToCreateCopyForParameter_WithStructuralChanges(VariableDefinition runtimesVariable, + ParameterDefinition parameterDefinition, ILProcessor ilProcessor) + { + VariableDefinition addressVariable = null; + + var provider = _parameterTypeNameToProvider[parameterDefinition.ParameterType.FullName]; + + ilProcessor.Emit(OpCodes.Ldloc, runtimesVariable); + ilProcessor.Emit(OpCodes.Ldflda, _elementProviderToFields[provider].runtimeField); + + ilProcessor.Emit(OpCodes.Ldarg_2); + + // In the case where we are getting an IComponentData, we also need to store a copy of the address (to check for changes) + if (provider.RuntimeForMethod.Parameters.Count == 2) + { + addressVariable = new VariableDefinition(provider.RuntimeForMethodReturnType); + ilProcessor.Body.Variables.Add(addressVariable); + ilProcessor.Emit(OpCodes.Ldloca, addressVariable); + } + + ilProcessor.Emit(OpCodes.Call, provider.RuntimeForMethod); + + var tempVariable = new VariableDefinition(provider.RuntimeForMethodReturnType); + ilProcessor.Body.Variables.Add(tempVariable); + ilProcessor.Emit(OpCodes.Stloc, tempVariable); + + return (tempVariable, addressVariable); + } + + public void EmitILToWriteBackParameter_WithStructuralChanges(VariableDefinition runtimesVariable, ParameterDefinition parameterDefinition, ILProcessor ilProcessor, + VariableDefinition parameterCopyVariableDefinition, VariableDefinition parameterAddressVariableDefinition) + { + var provider = _parameterTypeNameToProvider[parameterDefinition.ParameterType.FullName]; + + // Only write-back providers that are setup for structural changes + // and are not ReadOnly + if (!provider.WithStructuralChanges || provider.RuntimeWriteBackMethod == null || provider.IsReadOnly) + return; + + ilProcessor.Emit(OpCodes.Ldloc, runtimesVariable); + ilProcessor.Emit(OpCodes.Ldflda, _elementProviderToFields[provider].runtimeField); + + ilProcessor.Emit(OpCodes.Ldarg_2); + + ilProcessor.Emit(OpCodes.Ldloca, parameterCopyVariableDefinition); + + if (parameterAddressVariableDefinition != null) + ilProcessor.Emit(OpCodes.Ldloca, parameterAddressVariableDefinition); + + ilProcessor.Emit(OpCodes.Call, provider.RuntimeWriteBackMethod); + } + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaParameterValueInformations.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaParameterValueInformations.cs.meta new file mode 100644 index 000000000..e03a80c30 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/LambdaParameterValueInformations.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f54d66761e75b40488609c62a8de68ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/UserError.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/UserError.cs new file mode 100644 index 000000000..2d5b989d3 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/UserError.cs @@ -0,0 +1,339 @@ +using System.Runtime.CompilerServices; +using Mono.Cecil; +using Mono.Cecil.Cil; +using Unity.Collections.LowLevel.Unsafe; +using Unity.CompilationPipeline.Common.Diagnostics; + +namespace Unity.Entities.CodeGen +{ + static class InternalCompilerError + { + public static DiagnosticMessage DCICE001(MethodDefinition method) + { + return UserError.MakeError(nameof(DCICE001), "Entities.ForEach Lambda expression uses something from its outer class. This is not supported.", method, null); + } + + public static DiagnosticMessage DCICE002(MethodDefinition method, Instruction instruction) + { + return UserError.MakeError(nameof(DCICE002), $"Unable to find LdFtn & NewObj pair preceding call instruction in {method.Name}", method, instruction); + } + + public static DiagnosticMessage DCICE003(MethodDefinition method, Instruction instruction) + { + return UserError.MakeError(nameof(DCICE003), $"Discovered multiple assignments of DisplayClass in {method.Name}. This indicates unexpected IL from Roslyn.", method, instruction); + } + + public static DiagnosticMessage DCICE004(MethodDefinition method, Instruction instruction) + { + return UserError.MakeError(nameof(DCICE004), $"Next instruction in initialization of DisplayClass needs to be stloc in {method.Name}", method, instruction); + } + + public static DiagnosticMessage DCICE005(MethodDefinition method, Instruction instruction) + { + return UserError.MakeError(nameof(DCICE005), $"Previous instruction needs to be Ldfld or Ldflda while parsing IL to generate lambda for method {method.Name}.", method, instruction); + } + + public static DiagnosticMessage DCICE006(MethodDefinition method) + { + return UserError.MakeError(nameof(DCICE006), $"Next instruction used in constructing the DisplayClass needs to be a store local instruction in {method.Name}", method, null); + } + + public static DiagnosticMessage DCICE007(MethodDefinition methodToAnalyze, LambdaJobDescriptionConstruction.InvokedConstructionMethod constructionMethod) + { + return UserError.MakeError(nameof(DCICE007),$"Could not find field for local captured variable for argument of {constructionMethod.MethodName}.", methodToAnalyze, constructionMethod.InstructionInvokingMethod); + } + } + + static class UserError + { + public static DiagnosticMessage DC0001(MethodDefinition method, Instruction instruction, FieldReference fr) + { + return MakeError(nameof(DC0001),$"Entities.ForEach Lambda expression uses field '{fr.Name}'. Either assign the field to a local outside of the lambda expression and use that instead, or use .WithoutBurst() and .Run()", method, instruction); + } + + public static DiagnosticMessage DC0002(MethodDefinition method, Instruction instruction, MethodReference mr, TypeReference argument) + { + return MakeError(nameof(DC0002),$"Entities.ForEach Lambda expression invokes '{mr.Name}' on a {argument.Name} which is a reference type. This is only allowed with .WithoutBurst() and .Run().", method, instruction); + } + + public static DiagnosticMessage DC0003(string name, MethodDefinition method, Instruction instruction) + { + return MakeError(nameof(DC0003),$"The name '{name}' is already used in this system.", method, instruction); + } + + public static DiagnosticMessage DC0004(MethodDefinition methodToAnalyze, Instruction illegalInvocation, FieldDefinition field) + { + return MakeError(nameof(DC0004),$"Entities.ForEach Lambda expression captures a non-value type '{field.Name}'. This is only allowed with .WithoutBurst() and .Run()", methodToAnalyze, illegalInvocation); + } + + public static DiagnosticMessage DC0005(MethodDefinition method, Instruction instruction, ParameterDefinition parameter) + { + return MakeError(nameof(DC0005),$"Entities.ForEach Lambda expression parameter '{parameter.Name}' with type {parameter.ParameterType.FullName} is not supported", method, instruction); + } + + public static DiagnosticMessage DC0006(MethodDefinition method, Instruction instruction) + { + return MakeError(nameof(DC0006),$"Scheduling an Entities query requires a .{nameof(LambdaForEachDescriptionConstructionMethods.ForEach)} invocation", method, instruction); + } + + public static DiagnosticMessage DC0017(MethodDefinition method, Instruction instruction) + { + return MakeError(nameof(DC0006),$"Scheduling an Lambda job requires a .{nameof(LambdaSingleJobDescriptionConstructionMethods.WithCode)} invocation", method, instruction); + } + + public static DiagnosticMessage DC0018(MethodDefinition method, Instruction instruction) + { + return MakeError(nameof(DC0006),$"Scheduling an Chunk job requires a .{nameof(LambdaJobChunkDescriptionConstructionMethods.ForEach)} invocation", method, instruction); + } + + public static DiagnosticMessage DC0007(MethodDefinition method, Instruction instruction) + { + return MakeError(nameof(DC0007),$"Unexpected code structure in Entities/Job query. Make sure to immediately end each ForEach query with a .Schedule(), .ScheduleParallel() or .Run() call.", method, instruction); + } + + public static DiagnosticMessage DC0008(MethodDefinition method, Instruction instruction, MethodReference mr) + { + return MakeError(nameof(DC0008),$"The argument to {mr.Name} needs to be a literal value.", method, instruction); + } + + public static DiagnosticMessage DC0009(MethodDefinition method, Instruction instruction, MethodReference mr) + { + return MakeError(nameof(DC0009),$"{mr.Name} is only allowed to be called once.", method, instruction); + } + + public static DiagnosticMessage DC0010(MethodDefinition method, Instruction instruction) + { + return MakeError(nameof(DC0010),$"The Entities.ForEach statement contains dynamic code that cannot be statically analyzed.", method, instruction); + } + + public static DiagnosticMessage DC0011(MethodDefinition method, Instruction instruction) + { + return MakeError(nameof(DC0011),$"Every Entities.ForEach statement needs to end with a .Schedule(), .ScheduleParallel() or .Run() invocation.", method, instruction); + } + + public static DiagnosticMessage DC0012(MethodDefinition methodToAnalyze, LambdaJobDescriptionConstruction.InvokedConstructionMethod constructionMethod) + { + return MakeError(nameof(DC0012),$"{constructionMethod.MethodName} requires its argument to be a local variable that is captured by the lambda expression.", methodToAnalyze, constructionMethod.InstructionInvokingMethod); + } + + public static DiagnosticMessage DC0013(FieldReference fieldReference, MethodDefinition method, Instruction instruction) + { + return MakeError(nameof(DC0013), $"Entities.ForEach Lambda expression writes to captured variable '{fieldReference.Name}'. This is only supported when you use .Run().", method, instruction); + } + + public static DiagnosticMessage DC0014(MethodDefinition method, Instruction instruction, ParameterDefinition parameter, string[] supportedParameters) + { + return MakeError(nameof(DC0014),$"Entities.ForEach Lambda expression parameter '{parameter.Name}' is not a supported parameter. Supported parameter names are {supportedParameters.SeparateByComma()}", method, instruction); + } + + public static DiagnosticMessage DC0015(string noneTypeName, MethodDefinition method, Instruction instruction) + { + return MakeError(nameof(DC0015),$"Entities.ForEach will never run because it both requires and excludes {noneTypeName}", method, instruction); + } + + public static DiagnosticMessage DC0016(string noneTypeName, MethodDefinition method, Instruction instruction) + { + return MakeError(nameof(DC0016),$"Entities.ForEach lists both WithAny<{noneTypeName}() and WithNone<{noneTypeName}().", method, instruction); + } + + public static DiagnosticMessage DC0019(MethodDefinition containingMethod, TypeReference sharedComponentType, Instruction instruction) + { + return MakeError(nameof(DC0019),$"Entities.ForEach uses ISharedComponentType {sharedComponentType.Name}. This is only supported when using .WithoutBurst() and .Run()",containingMethod, instruction); + } + + public static DiagnosticMessage DC0020(MethodDefinition containingMethod, TypeReference sharedComponentType,Instruction instruction) + { + return MakeError(nameof(DC0020),$"ISharedComponentType {sharedComponentType.Name} can not be received by ref. Use by value or in.",containingMethod, instruction); + } + + public static DiagnosticMessage DC0021(MethodDefinition containingMethod, string parameterName, TypeReference unsupportedType,Instruction instruction) + { + return MakeError(nameof(DC0021),$"parameter '{parameterName}' has type {unsupportedType.Name}. This type is not a IComponentData / ISharedComponentData and is therefore not a supported parameter type for Entities.ForEach.",containingMethod, instruction); + } + + /* This message is no longer valid. We now support capturing from multiple scopes. + public static DiagnosticMessage DC0022(MethodDefinition containingMethod, Instruction instruction) + { + return MakeError(nameof(DC0022),$"It looks like you're capturing local variables from two different scopes in the method. This is not supported yet.",containingMethod, instruction); + } + */ + + public static DiagnosticMessage DC0023(MethodDefinition containingMethod, TypeReference componentType, Instruction instruction) + { + return MakeError(nameof(DC0023),$"Entities.ForEach uses managed IComponentData {componentType.Name}. This is only supported when using .WithoutBurst() and .Run().",containingMethod, instruction); + } + + public static DiagnosticMessage DC0024(MethodDefinition containingMethod, TypeReference componentType, Instruction instruction) + { + return MakeError(nameof(DC0024),$"Entities.ForEach uses managed IComponentData {componentType.Name} by ref. To get write access, receive it without the ref modifier." ,containingMethod, instruction); + } + + // Invalid type used as LambdaJob parameter or in With method invocation. + public static DiagnosticMessage DC0025(string message, MethodDefinition containingMethod, Instruction instruction) + { + return MakeError(nameof(DC0025), message, containingMethod, instruction); + } + + public static DiagnosticMessage DC0026(string allTypeName, MethodDefinition method, Instruction instruction) + { + return MakeError(nameof(DC0026), $"Entities.ForEach lists has WithAll<{allTypeName}>() and a {nameof(LambdaJobQueryConstructionMethods.WithSharedComponentFilter)} method with a parameter of that type. Remove the redundant WithAll method.", method, instruction); + } + + //not allowed to implement OnCreateForCompiler + public static DiagnosticMessage DC0026(string message, MethodDefinition containingMethod) + { + return MakeError(nameof(DC0026),message ,containingMethod,null); + } + + public static DiagnosticMessage DC0027(MethodDefinition method, Instruction instruction) + { + return MakeError(nameof(DC0027), $"Entities.ForEach Lambda expression makes a structural change. Use an {nameof(EntityCommandBuffer)} to make structural changes or add a .{nameof(LambdaJobDescriptionConstructionMethods.WithStructuralChanges)} invocation to the Entities.ForEach to allow for structural changes. Note: {nameof(LambdaJobDescriptionConstruction)} is only allowed with .WithoutBurst() and .Run().", method, instruction); + } + + public static DiagnosticMessage DC0028(MethodDefinition method, Instruction instruction) + { + return MakeError(nameof(DC0028), $"Entities.ForEach Lambda expression makes a structural change with a Schedule call. Structural changes are only supported with .Run().", method, instruction); + } + + public static DiagnosticMessage DC0029(MethodDefinition method, Instruction instruction) + { + return MakeError(nameof(DC0029), $"Entities.ForEach Lambda expression has a nested Entities.ForEach Lambda expression. Only a single Entities.ForEach Lambda expression is currently supported.", method, instruction); + } + + public static DiagnosticMessage DC0030(TypeReference componentType) + { + return MakeError(nameof(DC0030), $"{nameof(GenerateAuthoringComponentAttribute)} is used on managed IComponentData {componentType.Name} without a default constructor. This is not supported.", null, null); + } + + public static DiagnosticMessage DC0031(MethodDefinition method, Instruction instruction) + { + return MakeError(nameof(DC0031), $"Entities.ForEach Lambda expression stores the EntityQuery with a .{nameof(LambdaJobQueryConstructionMethods.WithStoreEntityQueryInField)} invocation but does not store it in a valid field. Entity Queries can only be stored in fields of the containing JobComponentSystem.", method, instruction); + } + + public static DiagnosticMessage DC0032(TypeReference jobComponentSystemType, MethodDefinition method, Instruction instruction) + { + return MakeWarning(nameof(DC0032), $"Entities.ForEach Lambda expression exists in JobComponentSystem {jobComponentSystemType.Name} marked with ExecuteAlways. This will result in a temporary exception being thrown during compilation, using it is not supported yet. Please move this code out to a non-jobified ComponentSystem. This will be fixed in upcoming 19.3 releases.", method, instruction); + } + + public static DiagnosticMessage DC0033(MethodDefinition containingMethod, string parameterName, TypeReference unsupportedType,Instruction instruction) + { + return MakeError(nameof(DC0033),$"{unsupportedType.Name} implements {nameof(IBufferElementData)} and must be used as DynamicBuffer<{unsupportedType.Name}>. Parameter '{parameterName}' is not a {nameof(IComponentData)} / {nameof(ISharedComponentData)} and is therefore not a supported parameter type for Entities.ForEach.", containingMethod, instruction); + } + + public static DiagnosticMessage DC0034(MethodDefinition containingMethod, string argumentName, TypeReference unsupportedType, Instruction instruction) + { + return MakeError(nameof(DC0034),$"Entities.{nameof(LambdaJobDescriptionConstructionMethods.WithReadOnly)} is called with an argument {argumentName} of unsupported type {unsupportedType}. It can only be called with an argument that is marked with [{nameof(NativeContainerAttribute)}].", containingMethod, instruction); + } + + public static DiagnosticMessage DC0035(MethodDefinition containingMethod, string argumentName, TypeReference unsupportedType, Instruction instruction) + { + return MakeError(nameof(DC0035),$"Entities.{nameof(LambdaJobDescriptionConstructionMethods.WithDeallocateOnJobCompletion)} is called with an invalid argument {argumentName} of unsupported type {unsupportedType}. It can only be called with an argument that is marked with [{nameof(NativeContainerSupportsDeallocateOnJobCompletionAttribute)}].", containingMethod, instruction); + } + + public static DiagnosticMessage DC0036(MethodDefinition containingMethod, string argumentName, TypeReference unsupportedType, Instruction instruction) + { + return MakeError(nameof(DC0036),$"Entities.{nameof(LambdaJobDescriptionConstructionMethods.WithNativeDisableContainerSafetyRestriction)} is called with an invalid argument {argumentName} of unsupported type {unsupportedType}. It can only be called with an argument that is marked with [{nameof(NativeContainerAttribute)}].", containingMethod, instruction); + } + + public static DiagnosticMessage DC0037(MethodDefinition containingMethod, string argumentName, TypeReference unsupportedType, Instruction instruction) + { + return MakeError(nameof(DC0037),$"Entities.{nameof(LambdaJobDescriptionConstructionMethods.WithNativeDisableParallelForRestriction)} is called with an invalid argument {argumentName} of unsupported type {unsupportedType}. It can only be called with an argument that is marked with [{nameof(NativeContainerAttribute)}].", containingMethod, instruction); + } + + public static DiagnosticMessage DC0038(MethodDefinition containingMethod, FieldDefinition field, LambdaJobDescriptionConstruction.InvokedConstructionMethod constructionMethod) + { + return MakeError(nameof(DC0038),$"Entities.{constructionMethod.MethodName} is called with an invalid argument {field.DeclaringType.Name}.{field.Name}. You cannot use Entities.{constructionMethod.MethodName} with fields of user-defined types as the argument. Please assign the field to a local variable and use that instead.", containingMethod, constructionMethod.InstructionInvokingMethod); + } + + public static DiagnosticMessage DC0039(TypeReference bufferElementDataType, int numFieldsFound) + { + return MakeError( + nameof(DC0039), + messageData: $"Structs implementing IBufferElementData and marked with a {nameof(GenerateAuthoringComponentAttribute)} attribute should have exactly" + + $" one field specifying its element type. However, '{bufferElementDataType.Name}' contains {numFieldsFound} fields." + + "Please implement your own authoring component.", + method: null, + instruction: null); + } + + public static DiagnosticMessage DC0040(TypeReference bufferElementDataType) + { + return MakeError( + nameof(DC0040), + messageData: "Structs implementing IBufferElementData may only contain fields of either primitive or blittable types. However," + + $" '{bufferElementDataType.Name}' has an element type which is NOT a primitive or blittable type.", + method: null, + instruction: null); + } + + public static DiagnosticMessage DC0041(TypeDefinition bufferElementDataType) + { + return MakeError( + nameof(DC0041), + messageData: $"IBufferElementData can only be implemented by structs. '{bufferElementDataType.Name}' is a class." + + $"Please change {bufferElementDataType} to a struct.", + method: null, + instruction: null); + } + + public static DiagnosticMessage DC0042(TypeDefinition bufferElementDataType) + { + return MakeError( + nameof(DC0042), + messageData: $"Structs implementing IBufferElementData and marked with a {nameof(GenerateAuthoringComponentAttribute)} attribute cannot have an explicit layout." + + $"{bufferElementDataType} has an explicit layout. Please implement your own authoring component.", + method: null, + instruction: null); + } + + public static DiagnosticMessage DC0039(MethodDefinition containingMethod, string name, Instruction instruction) + { + return MakeError(nameof(DC0039),$"Entities.{nameof(LambdaJobDescriptionConstructionMethods.WithName)} cannot be used with name '{name}'. The given name must consist of letters, digits, and underscores only, and may not contain two consecutive underscores.", containingMethod, instruction); + } + + static DiagnosticMessage MakeInternal(DiagnosticType type, string errorCode, string messageData, MethodDefinition method, Instruction instruction) + { + var result = new DiagnosticMessage {Column = 0, Line = 0, DiagnosticType = type, File = ""}; + + var seq = instruction != null ? CecilHelpers.FindBestSequencePointFor(method, instruction) : null; + + if (errorCode.Contains("ICE")) + { + messageData = messageData + " Seeing this error indicates a bug in the dots compiler. We'd appreciate a bug report (About->Report a Bug...). Thnx! <3"; + } + + messageData = $"error {errorCode}: {messageData}"; + if (seq != null) + { + result.File = seq.Document.Url; + result.Column = seq.StartColumn; + result.Line = seq.StartLine; +#if !UNITY_DOTSPLAYER + result.MessageData = $"{seq.Document.Url}({seq.StartLine},{seq.StartColumn}): {messageData}"; +#else + result.MessageData = messageData; +#endif + } + else + { + result.MessageData = messageData; + } + + return result; + } + + public static DiagnosticMessage MakeError(string errorCode, string messageData, MethodDefinition method, Instruction instruction) + { + return MakeInternal(DiagnosticType.Error, errorCode, messageData, method, instruction); + } + + public static DiagnosticMessage MakeWarning(string errorCode, string messageData, MethodDefinition method, Instruction instruction) + { + return MakeInternal(DiagnosticType.Warning, errorCode, messageData, method, instruction); + } + public static void Throw(this DiagnosticMessage dm) + { + throw new FoundErrorInUserCodeException(new[] { dm}); + } + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/UserError.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/UserError.cs.meta new file mode 100644 index 000000000..b8f05a15d --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/LambdaJobs/UserError.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 037c1ec03ff22ab44b93e1aa343d50a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/ListExtensions.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/ListExtensions.cs new file mode 100644 index 000000000..bf8019027 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/ListExtensions.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using System.Text; + +namespace Unity.Entities.CodeGen +{ + internal static class ListExtensions + { + public static void Add(this List list, IEnumerable elementsToAdd) => list.AddRange(elementsToAdd); + } + + internal static class StringExtensions + { + public static string SeparateBy(this IEnumerable elements, string delimiter) + { + bool first = true; + var sb = new StringBuilder(); + foreach (var e in elements) + { + if (!first) + sb.Append(delimiter); + sb.Append(e); + first = false; + } + + return sb.ToString(); + } + + public static string SeparateBySpace(this IEnumerable elements) => elements.SeparateBy(" "); + public static string SeparateByComma(this IEnumerable elements) => elements.SeparateBy(","); + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/ListExtensions.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/ListExtensions.cs.meta new file mode 100644 index 000000000..cce9ab389 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/ListExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0cfccda28850fa648adb6b83139d8116 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PostProcessException.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PostProcessException.cs new file mode 100644 index 000000000..13a6777c0 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PostProcessException.cs @@ -0,0 +1,66 @@ +using System; +using System.Linq; +using Mono.Cecil; +using Mono.Cecil.Cil; +using Unity.CompilationPipeline.Common.Diagnostics; + +namespace Unity.Entities.CodeGen +{ + class FoundErrorInUserCodeException : Exception + { + public DiagnosticMessage[] DiagnosticMessages { get; } + + public FoundErrorInUserCodeException(DiagnosticMessage[] diagnosticMessages) + { + DiagnosticMessages = diagnosticMessages; + } + + public override string ToString() => DiagnosticMessages.Select(dm=>dm.MessageData).SeparateByComma(); + } + + class PostProcessException : Exception + { + public string MessageWithoutLocation { get; } + public MethodDefinition Method { get; } + public Instruction Instruction { get; } + + public PostProcessException(string messageWithoutLocation, MethodDefinition method = null, Instruction instruction = null) + { + MessageWithoutLocation = messageWithoutLocation; + Method = method; + Instruction = instruction; + } + + public override string Message => MessageWithoutLocation; + + public SequencePoint SequencePointFor(MethodDefinition context = null) + { + SequencePoint seq = null; + + if (Instruction != null) + seq = CecilHelpers.FindBestSequencePointFor(Method ?? context, Instruction); + + if (seq == null && Method != null) + seq = Method.DebugInformation.SequencePoints.FirstOrDefault(); + + return seq; + } + + public DiagnosticMessage ToDiagnosticMessage(MethodDefinition context) + { + var result = new DiagnosticMessage() + { + DiagnosticType = DiagnosticType.Error, + MessageData = MessageWithoutLocation, + }; + + var seq = SequencePointFor(context); + if (seq != null) + { + result.Column = seq.StartColumn; + result.Line = seq.StartLine; + } + return result; + } + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PostProcessException.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PostProcessException.cs.meta new file mode 100644 index 000000000..5a975c8ae --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PostProcessException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f466635f50f57b449a59e0d2e96965c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PropertyBags.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PropertyBags.meta new file mode 100644 index 000000000..d0911282b --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PropertyBags.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f18500c1e72fa1b4983b283a98f17b56 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PropertyBags/PropertyBagsPostProcessor.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PropertyBags/PropertyBagsPostProcessor.cs new file mode 100644 index 000000000..e5285bfdf --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PropertyBags/PropertyBagsPostProcessor.cs @@ -0,0 +1,1045 @@ +#if !UNITY_DOTSPLAYER +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Text; +using Mono.Cecil; +using Mono.Cecil.Cil; +using Mono.Cecil.Rocks; +using Unity.Properties; +using UnityEngine; +using FieldAttributes = Mono.Cecil.FieldAttributes; +using MethodAttributes = Mono.Cecil.MethodAttributes; +using ParameterAttributes = Mono.Cecil.ParameterAttributes; +using TypeAttributes = Mono.Cecil.TypeAttributes; + +[assembly: InternalsVisibleTo("Unity.Entities.CodeGen.Tests")] +namespace Unity.Entities.CodeGen +{ + /// + /// The PropertyBag post-processor's role is to generate Unity.Properties.PropertyBag classes for all component + /// types which "Unity.Entities may visit". Additionally, the post-processor must ensure the generated PropertyBags + /// will be registered in the static Unity.PropertyBagResolver before any runtime/editor code may try visiting + /// those component types. + /// + /// For example for the type: + /// + /// namespace Some.Namespace + /// { + /// public class MyComponent : IComponentData + /// { + /// public int MyInt; + /// public List MyList; + /// public SomeClass[] MyArray; + /// } + /// } + /// + /// We will generate the following + /// namespace Unity.Properties.CodeGeneratedPropertyBags + /// { + /// public class Some_Namespace_MyComponentPropertyBag : PropertyBag + /// { + /// public static readonly Property MyInt = new Property("MyInt", MyIntGetter, MyIntSetter); + /// public static readonly ListProperty MyList = new ListProperty("MyList", MyListGetter, MyListSetter); + /// public static readonly ArrayProperty MyArray = new ListProperty("MyArray", MyArrayGetter, MyArraySetter); + /// + /// public static int MyIntGetter(ref Some.Namespace.MyComponent container) { return container.MyInt; } + /// public static void MyIntSetter(ref Some.Namespace.MyComponent container, int val) { container.MyInt = val; } + /// + /// public static IList MyListGetter(ref Some.Namespace.MyComponent container) { return container.MyInt; } + /// public static void MyListSetter(ref Some.Namespace.MyComponent container, IList val) { container.MyList = (List) val; } + /// + /// public static SomeClass[] MyArrayGetter(ref Some.Namespace.MyComponent container) { return container.MyArray; } + /// public static void MyArraySetter(ref Some.Namespace.MyComponent container, SomeClass[] val) { container.MyInt = val; } + /// + /// public override void Accept(ref Some.Namespace.MyComponent container, ref TVisitor visitor, ref ChangeTracker changeTracker) + /// { + /// visitor.VisitProperty, Some.Namespace.MyComponent, int>(MyInt, ref container, ref changeTracker); + /// visitor.VisitCollectionProperty, Some.Namespace.MyComponent, IList>(MyList, ref container, ref changeTracker); + /// visitor.VisitCollectionProperty, Some.Namespace.MyComponent, SomeClass>(MyArray, ref container, ref changeTracker); + /// } + /// + /// public override bool FindProperty(string name, ref Some.Namespace.MyComponent container, ref ChangeTracker changeTracker, ref TAction action) + /// { + /// if (string.Equals(name, "MyInt")) + /// { + /// action.VisitProperty, int>(MyInt, ref container, ref changeTracker); + /// return true; + /// } + /// if (string.Equals(name, "MyList")) + /// { + /// action.VisitCollectionProperty, IList>(MyList, ref container, ref changeTracker); + /// return true; + /// } + /// if (string.Equals(name, "MyArray")) + /// { + /// action.VisitCollectionProperty, SomeClass>(MyArray, ref container, ref changeTracker); + /// return true; + /// } + /// return false; + /// } + /// } + /// } + /// + /// ## What are the types "Unity.Entities may visit", you ask? ## + /// We currently use Unity.Properties to generically inspect fields for all managed IComponentData types as well as + /// ISharedComponentData (managed or not). Importantly, we may attempt to visit these types close to boot, since + /// we use Unity.Properties for deserializing ISharedComponentData and managed IComponentData, thus we must ensure + /// that Unity.Properties is ready to handle these types as soon as possible once we boot. + /// + /// ## Why code-gen? ## + /// Unity.Properties provides a ReflectionPropertyBag which allows for visiting type fields without codegen, however + /// there are a few reasons why this won't work for all use-cases and leaves us to resort to code-gen: + /// - Reflection may not be available + /// -- For DOTS Runtime, the System.Reflection API is simply not available -- codegen is the only route + /// - Reflection is slower + /// -- Less of a concern since the reflection codepaths are only hit the first time a type is seen, but it is a + /// potential risk for a performance spike + /// - IL2CPP stripping + /// -- When an IL2CPP player build is made, the linker may strip out symbols not used explicitly by the runtime + /// which can mean it will inadvertently strip out the type information / codepaths the ReflectionPropertyBag + /// requires for building the appropriate PropertyBag types, and visit them. + /// + /// ## What is the cost of this code-gen approach? ## + /// TLDR; Any assembly with a type "Unity.Entities may visit" will generate new classes, making assemblies fatter + /// than they would be otherwise. Compared to normal code footprint size this should be relatively small however. + /// ILPostProcessors operate per assembly and are forbidden from modifying other assemblies than the + /// ICompiledAssembly passed to the Process() method. So for a given assembly we need to generate a PropertyBag + /// for all types _and all fields_ in said types which may be visited per assembly. While we are confident all + /// PropertyBag's will be only generated once across _all_ assemblies, since we need to generate + /// PropertyBags for 'MySpecialComponent's fields, we are likely to see PropertyBags for field types duplicated + /// across all assemblies. For example, if MySpecialComponent is defined in AssemblyA and contains an Entity field, + /// AssemblyA will contains a generated PropertyBag and PropertyBag. If AssemblyB + /// contains defines a MyOtherSpecialComponent which also has an Entity field, AssemblyB will then contain a + /// PropertyBag _as well as_ a PropertyBag which is identical to the one defined in + /// AssemblyA. + /// + /// ## How are we ensuring types are registered early? ## + /// The postprocessor will generate a PropertyBagRegistry for each assembly which contains a static function + /// 'RegisterAllPropertyBags()' which registers all generated property bag types. In order to make sure this + /// this function is called very early we do a few things: + /// - For Hybrid player builds, we put the + /// [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded))] attribute on the method to + /// have the UnityLinker inject our method into Unity generated setup code just after assemblies have been loaded. + /// - For Hybrid editor builds, we put the [InitializeOnLoadMethod] attribute on the method to allow our function + /// to be invoked after a domain reload. NOTE: since we currently don't have the ability to see script defines + /// in an ILPostProcessor, editor builds actually uses Reflection in the TypeManager.Initialize() to find all + /// PropertyBagRegistry types and then manually invokes RegisterAllPropertyBags(). This can be removed in 2019.3.0b9 + /// - Theoretically for DOTS Runtime (once there is DOTSRuntime support for Unity.Properties and Module Initializer + /// support in IL2CPP, we inject the RegisterAllPropertyBags method into the module intializer of the assembly we + /// postprocess. IL2CPP will ensure all module initializers are invoked at boot for all assemblies. + /// + /// ## What are all of these "AOT" codepaths? ## + /// Properties today relies on quite a few generic virtual functions throughout its implementation. This is + /// unfortunately bad news for our "Ahead Of Time" compiler as it won't be able to deduce what types will be needed + /// for each for the generic functions. As a result you can build and run an IL2CPP build and be greeted with a + /// crash due to a missing implementation for a particular SomeFunction(). To help prevent this situation, we + /// explicitly call Properties (and select implementers of select Properties APIs) generic functions with all + /// possible generic function specializations. This code will never execute, but it will give a hint to the AOT + /// compiler on what code it needs to generate. + /// + internal class PropertyBagPostProcessor : EntitiesILPostProcessor + { + public static readonly string CodeGenNamespace = "Unity.Properties.CodeGeneratedPropertyBagRegistry"; + public bool IsEditorBuild; + + protected override bool PostProcessImpl() + { + IsEditorBuild = EntitiesILPostProcessors.Defines.Contains("UNITY_EDITOR"); + if (IsEditorBuild) + { + // TODO: Enable PropertyBag generation for editor builds once attribute support is added as most editor + // propertybags require this support for proper function + // https://unity3d.atlassian.net/browse/DOTSE-339 + return false; + } + + var propertyBags = GeneratePropertyBags(); + if (propertyBags.Count == 0) + return false; + + var registry = GeneratePropertyBagRegistry(propertyBags); + GenerateAOTFunctions(registry, propertyBags); + return true; + } + + TypeDefinition GeneratePropertyBagRegistry(List propertyBags) + { + var propertBagRegistryDef = new TypeDefinition(CodeGenNamespace, + "PropertyBagRegistry", TypeAttributes.Class | TypeAttributes.NotPublic, + AssemblyDefinition.MainModule.ImportReference(typeof(object))); + AssemblyDefinition.MainModule.Types.Add(propertBagRegistryDef); + + // Declares: "static public RegisterAllPropertyBags() { }" + var registerPropertyBagsFn = new MethodDefinition("RegisterAllPropertyBags", + MethodAttributes.Static | MethodAttributes.Public, + AssemblyDefinition.MainModule.ImportReference(typeof(void))); + + // We need our registration to be triggered as soon as the assemblies are loaded so we do so with the following + // custom attributes in hybrid. DOTS Player will solve this elsewhere (in TypeRegGen) +#if !UNITY_DOTSPLAYER + var initializeOnLoadAttribute = GetAttributeToForceEarlyMethodInvocation(); + registerPropertyBagsFn.CustomAttributes.Add(initializeOnLoadAttribute); + CecilHelpers.MarkAsPreserve(registerPropertyBagsFn, AssemblyDefinition.MainModule); +#endif + + propertBagRegistryDef.Methods.Add(registerPropertyBagsFn); + propertBagRegistryDef.IsBeforeFieldInit = true; + registerPropertyBagsFn.Body.InitLocals = true; + var il = registerPropertyBagsFn.Body.GetILProcessor(); + + var propertyBagResolverMethods = typeof(PropertyBagResolver).GetMethods(); + var registerFnRefl = propertyBagResolverMethods.First(m => m.GetParameters().Length == 1 && m.Name == "Register"); + var openRegisterFn = AssemblyDefinition.MainModule.ImportReference(registerFnRefl); + foreach (var propertyBag in propertyBags) + { + var closedRegisterFn = AssemblyDefinition.MainModule.ImportReference(openRegisterFn.MakeGenericInstanceMethod(propertyBag.ReferenceType)); + + AssemblyDefinition.MainModule.Types.Add(propertyBag.GeneratedType); + var propertyBagCtor = AssemblyDefinition.MainModule.ImportReference(propertyBag.GeneratedType.GetConstructors().First()); + + // Load the runtime handle for our type so we can convert it to a `Type` in the getTypeFromHandle call + il.Emit(OpCodes.Newobj, propertyBagCtor); + il.Emit(OpCodes.Call, closedRegisterFn); + } + + il.Emit(OpCodes.Ret); + + return propertBagRegistryDef; + } + + CustomAttribute GetAttributeToForceEarlyMethodInvocation() + { + CustomAttribute initializeOnLoadAttribute = null; + + if (IsEditorBuild) + { + var attributeCtor = + AssemblyDefinition.MainModule.ImportReference( + typeof(UnityEditor.InitializeOnLoadMethodAttribute).GetConstructor(Type.EmptyTypes)); + initializeOnLoadAttribute = new CustomAttribute(attributeCtor); + } + else + { + var attributeCtor = + AssemblyDefinition.MainModule.ImportReference( + typeof(UnityEngine.RuntimeInitializeOnLoadMethodAttribute).GetConstructor(new Type[] + { typeof(UnityEngine.RuntimeInitializeLoadType) })); + initializeOnLoadAttribute = new CustomAttribute(attributeCtor); + initializeOnLoadAttribute.ConstructorArguments.Add(new CustomAttributeArgument( + AssemblyDefinition.MainModule.ImportReference(typeof(UnityEngine.RuntimeInitializeLoadType)), + UnityEngine.RuntimeInitializeLoadType.AfterAssembliesLoaded)); + } + + return initializeOnLoadAttribute; + } + + void GatherTypes(TypeReference type, HashSet typeSet) + { + if (type.IsPrimitive || type.IsPointer) + return; + + var resolvedType = type.Resolve(); + if (resolvedType == null || resolvedType.IsEnum) + return; + + if (type.IsGenericInstance || type.IsGenericParameter || type.HasGenericParameters) + { + // This is a workaround for how Unity.Entities handles properties until Unity.Properties supports + // Dictionaries. In Entities we split Dictionaries into two lists, List+List so in + // order to traverse these types we need to ensure we generate the PropertyBag for these list types + if (resolvedType.Interfaces.Any(i => + i.InterfaceType.FullName.Contains("System.Collections.Generic.IDictionary`2"))) + { + var genericInstance = type as GenericInstanceType; + var keyType = genericInstance.GenericArguments[0]; + var valueType = genericInstance.GenericArguments[1]; + var openDictionaryContainer = AssemblyDefinition.MainModule.ImportReference(typeof(Serialization.DictionaryContainer<,>)); + var closedDictionaryContainer = openDictionaryContainer.MakeGenericInstanceType(keyType, valueType); + typeSet.Add(closedDictionaryContainer); + return; + } + + if(resolvedType.Interfaces.All(i => !i.InterfaceType.FullName.Contains("System.Collections.Generic.IList`1"))) + return; + } + + if (type.IsArray) + type = type.GetElementType(); + + if (!typeSet.Add(type)) + return; + + foreach(var field in resolvedType.Fields) + { + if (field.IsStatic) + continue; + + GatherTypes(field.FieldType, typeSet); + } + } + + // We will be gathering types from all over, so we want to collapse TypeReferences that refer to the same types + // which a TypeDefinition does, however TypeReferences keep the generic specifications which we care about. As + // such we provide name based comparer to allow us to have a unique set of TypeReferences + class TypeReferenceComparer : IEqualityComparer + { + public bool Equals(TypeReference lhs, TypeReference rhs) + { + return lhs.FullName.Equals(rhs.FullName); + } + + public int GetHashCode(TypeReference obj) + { + return obj.FullName.GetHashCode(); + } + } + + List GeneratePropertyBags() + { + var propertyBags = new List(); + var propertyBagTypes = new HashSet(new TypeReferenceComparer()); + + var types = AssemblyDefinition.MainModule.GetAllTypes().Where(t => + !t.IsInterface && ((t.IsValueType() && t.TypeImplements(typeof(ISharedComponentData))) || (!t.IsValueType() && t.TypeImplements(typeof(IComponentData))))); + foreach (var type in types) + GatherTypes(type, propertyBagTypes); + + foreach (var type in propertyBagTypes) + propertyBags.Add(GeneratePropertyBag(type)); + + return propertyBags; + } + + internal static GeneratedPropertyBag GeneratePropertyBag(ModuleDefinition module, TypeReference typeRef) + { + var propertyBag = new GeneratedPropertyBag(typeRef, module); + propertyBag.GenerateType(); + return propertyBag; + } + + GeneratedPropertyBag GeneratePropertyBag(TypeReference typeRef) + { + return GeneratePropertyBag(AssemblyDefinition.MainModule, typeRef); + } + + static string SanitizeName(string name) + { + StringBuilder stringBuilder = new StringBuilder(); + foreach (var c in name) + { + switch (c) + { + case '.': + case '+': + case '/': + case ',': + case '`': + case '<': + case '>': + case '[': + case ']': + stringBuilder.Append('_'); + break; + default: + stringBuilder.Append(c); + break; + } + } + return stringBuilder.ToString(); + } + + public static string GeneratePropertyBagNameForType(string typeFullName) + { + return SanitizeName(typeFullName) + "PropertyBag"; + } + + public static string GeneratePropertyBagNameForType(TypeReference typeRef) + { + return GeneratePropertyBagNameForType(typeRef.FullName); + } + + internal class GeneratedPropertyBag + { + public TypeDefinition GeneratedType; + public TypeReference ReferenceType; + private ModuleDefinition Module; + + public GeneratedPropertyBag(TypeReference referenceType, ModuleDefinition module) + { + ReferenceType = module.ImportReference(referenceType); + Module = module; + + var basePropertyBagOpenDef = module.ImportReference(typeof(PropertyBag<>)); + var basePropertyBagClosedDef = basePropertyBagOpenDef.MakeGenericInstanceType(ReferenceType); + + // TypeReference Full names have all kinds of characters in them that are not ok to be translated + // into names that will need to be consumed by IL2CPP, so we sanitize the names here. + var propertyBagName = GeneratePropertyBagNameForType(ReferenceType); + GeneratedType = new TypeDefinition(CodeGenNamespace, + propertyBagName, + TypeAttributes.Class | TypeAttributes.Public | TypeAttributes.BeforeFieldInit, + module.ImportReference(basePropertyBagClosedDef)) + { + Scope = ReferenceType.Scope + }; + + CecilHelpers.MarkAsPreserve(GeneratedType, Module); + } + + public void GenerateType() + { + GenerateCtor(); + GenerateStaticFields(); + GenerateAccept(); + GenerateFindProperty(); + GeneratePropertyAOTFunctionSpecializations(); + } + + void GenerateCtor() + { + var propertyBag = Module.ImportReference(typeof(PropertyBag<>)); + var closedPropertyBag = Module.ImportReference(propertyBag.MakeGenericInstanceType(ReferenceType)); + // NOTE: We create our own method reference since this assembly may not reference Unity.Properties on it's own. Thus any attempt + // to Resolve() a TypeReference from Properties will return null. So instead we create MethodReferences for methods we + // know will exist ourselves and let the new assembly, which will now include a reference to Properties, resolve at runtime + var closedPropertyBagCtor = new MethodReference(".ctor", Module.ImportReference(typeof(void)), closedPropertyBag) + { + HasThis = true, + ExplicitThis = false, + CallingConvention = MethodCallingConvention.Default + }; + + var ctor = new MethodDefinition(".ctor", + MethodAttributes.Public | MethodAttributes.HideBySig | + MethodAttributes.SpecialName | MethodAttributes.RTSpecialName, + Module.ImportReference((typeof(void)))); + GeneratedType.Methods.Add(ctor); + + var il = ctor.Body.GetILProcessor(); + + // We are implementing from an abstract class so we need to ensure our ctor invokes the parent ctor + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Call, Module.ImportReference(closedPropertyBagCtor)); + il.Emit((OpCodes.Ret)); + } + + void GenerateStaticFields() + { + var cctor = new MethodDefinition(".cctor", + MethodAttributes.Static | MethodAttributes.Public | MethodAttributes.HideBySig | + MethodAttributes.SpecialName | MethodAttributes.RTSpecialName, + Module.ImportReference((typeof(void)))); + GeneratedType.Methods.Add(cctor); + + var il = cctor.Body.GetILProcessor(); + + var openPropertyDef = Module.ImportReference(typeof(Property<,>)); + var openPropertyCtor = Module.ImportReference(typeof(Property<,>).GetConstructors()[0]); + var openPropertyGetter = Module.ImportReference(typeof(Property<,>.Getter)); + var openPropertySetter = Module.ImportReference(typeof(Property<,>.Setter)); + var openPropertyGetterCtor = Module.ImportReference(typeof(Property<,>.Getter).GetConstructor(new Type[]{typeof(object), typeof(IntPtr)})); + var openPropertySetterCtor = Module.ImportReference(typeof(Property<,>.Setter).GetConstructor(new Type[]{typeof(object), typeof(IntPtr)})); + + var openArrayPropertyDef = Module.ImportReference(typeof(ArrayProperty<,>)); + var openArrayPropertyCtor = Module.ImportReference(typeof(ArrayProperty<,>).GetConstructors()[0]); + var openArrayPropertyGetter = Module.ImportReference(typeof(ArrayProperty<,>.Getter)); + var openArrayPropertySetter = Module.ImportReference(typeof(ArrayProperty<,>.Setter)); + var openArrayPropertyGetterCtor = Module.ImportReference(typeof(ArrayProperty<,>.Getter).GetConstructor(new Type[]{typeof(object), typeof(IntPtr)})); + var openArrayPropertySetterCtor = Module.ImportReference(typeof(ArrayProperty<,>.Setter).GetConstructor(new Type[]{typeof(object), typeof(IntPtr)})); + + var openIList = Module.ImportReference(typeof(IList<>)); + var openListPropertyDef = Module.ImportReference(typeof(ListProperty<,>)); + var openListPropertyCtor = Module.ImportReference(typeof(ListProperty<,>).GetConstructors()[0]); + var openListPropertyGetter = Module.ImportReference(typeof(ListProperty<,>.Getter)); + var openListPropertySetter = Module.ImportReference(typeof(ListProperty<,>.Setter)); + var openListPropertyGetterCtor = Module.ImportReference(typeof(ListProperty<,>.Getter).GetConstructor(new Type[]{typeof(object), typeof(IntPtr)})); + var openListPropertySetterCtor = Module.ImportReference(typeof(ListProperty<,>.Setter).GetConstructor(new Type[]{typeof(object), typeof(IntPtr)})); + + var referenceTypeByReferenceRef = Module.ImportReference(ReferenceType.MakeByReferenceType()); + var resolvedType = ReferenceType.Resolve(); + + // We need to generate a static readonly Property for each field + // So we define the fields and generate the initialization code at the same time + foreach (var fieldDef in resolvedType.Fields) + { + // For now only support public fields + // Skips statics as those aren't serialized and skip pointers as Properties + // can't handle them currently + if (!fieldDef.IsPublic || fieldDef.IsStatic || fieldDef.FieldType.IsPointer) + continue; + + var resolvedFieldType = fieldDef.FieldType.Resolve(); + + MethodDefinition getter = null; + MethodDefinition setter = null; + TypeReference propertyFieldType = null; + MethodReference propertyGetterCtor = null; + MethodReference propertySetterCtor = null; + MethodReference propertyCtor = null; + FieldDefinition propertyField = null; + + // We must generate different Property types based on the field type in order to visit types correctly + // as well as for performance (in the case of UnmanagedProperties) + if (fieldDef.FieldType.IsArray) + { + TypeReference fieldType = Module.ImportReference(fieldDef.FieldType); + var fieldElementTypeRef = Module.ImportReference(fieldDef.FieldType.GetElementType()); + + // Define the static readonly ArrayProperty field; + propertyFieldType = Module.ImportReference(openArrayPropertyDef.MakeGenericInstanceType(ReferenceType, fieldElementTypeRef)); + // Important, we name the field the same as the actual field so we can use this name later in FindProperty using fieldDef.Name + propertyField = new FieldDefinition(fieldDef.Name,FieldAttributes.Public | FieldAttributes.Static | FieldAttributes.InitOnly, propertyFieldType); + GeneratedType.Fields.Add(propertyField); + (getter, setter) = GenerateGetterSetters(referenceTypeByReferenceRef, fieldDef, fieldType); + + // Property and its nested delegate types are all open types so we must close them before we invoke ctors + propertyCtor = Module.ImportReference(openArrayPropertyCtor.MakeGenericHostMethod(propertyFieldType)); + var closedPropertyGetter = Module.ImportReference(openArrayPropertyGetter.MakeGenericInstanceType(ReferenceType, fieldElementTypeRef)); + propertyGetterCtor = Module.ImportReference(openArrayPropertyGetterCtor.MakeGenericHostMethod(closedPropertyGetter)); + var closedPropertySetter = Module.ImportReference(openArrayPropertySetter.MakeGenericInstanceType(ReferenceType, fieldElementTypeRef)); + propertySetterCtor = Module.ImportReference(openArrayPropertySetterCtor.MakeGenericHostMethod(closedPropertySetter)); + } + else if(resolvedFieldType != null && resolvedFieldType.Interfaces.Any(i => i.InterfaceType.FullName == "System.Collections.Generic.IList`1")) + { + TypeReference fieldType = fieldDef.FieldType; + if (fieldDef.FieldType.ContainsGenericParameter) + { + var genericFieldType = fieldDef.FieldType as GenericInstanceType; + var genericDeclaringType = ReferenceType as GenericInstanceType; + if(genericDeclaringType == null) + throw new ArgumentException($"The declaring type for field " + + $"'{ReferenceType.FullName}' does not specify the generic " + + $"arguments for field '{fieldDef.FullName}'. We don't yet " + + $"support nested generic fields parameterized by ancestors.'"); + + // Here we have the case where we are dealing with a generic field that has been specialized + // by its declaring type (e.g. struct Foo { List mList; }). In this case our TypeRef + // contains a GenericParameter ('T') rather than the GenericArguement ('int') that we really + // care about. So we search through our fields GenericParameters and match up the indicies of + // the generic parameters in the 'TypeDefinition' of our declaring type (note it's the + // TypeDefinition as that is the only type that will also contain GenericParameters). + // Once we find a match we can use that index to lookup the correct GenericArgument from the + // DeclaringType's TypeReference and use that list to create a new GenericInstance type for + // our generic field. Phew. + var genericArgs = new List(); + foreach (var gp in genericFieldType.GenericArguments) + { + for (int i = 0; i < resolvedType.GenericParameters.Count; ++i) + { + var dgp = resolvedType.GenericParameters[i]; + if (gp == dgp) + { + genericArgs.Add(genericDeclaringType.GenericArguments[i]); + } + } + } + + fieldType = Module.ImportReference(fieldDef.FieldType.Resolve().MakeGenericInstanceType(genericArgs.ToArray())); + } + + var genericField = fieldType as GenericInstanceType; + var listElement = Module.ImportReference(genericField.GenericArguments[0]); + + // Define the static readonly ListProperty field; + propertyFieldType = Module.ImportReference(openListPropertyDef.MakeGenericInstanceType(ReferenceType, listElement)); + // Important, we name the field the same as the actual field so we can use this name later in FindProperty using fieldDef.Name + propertyField = new FieldDefinition(fieldDef.Name,FieldAttributes.Public | FieldAttributes.Static | FieldAttributes.InitOnly, propertyFieldType); + GeneratedType.Fields.Add(propertyField); + + // Generate getter and setter functions + var closedIList = Module.ImportReference(openIList.MakeGenericInstanceType(listElement)); + (getter, setter) = GenerateGetterSetters(referenceTypeByReferenceRef, fieldDef, closedIList, fieldType); + + // Property and its nested delegate types are all open types so we must close them before we invoke ctors + propertyCtor = Module.ImportReference(openListPropertyCtor.MakeGenericHostMethod(propertyFieldType)); + var closedPropertyGetter = Module.ImportReference(openListPropertyGetter.MakeGenericInstanceType(ReferenceType, listElement)); + propertyGetterCtor = Module.ImportReference(openListPropertyGetterCtor.MakeGenericHostMethod(closedPropertyGetter)); + var closedPropertySetter = Module.ImportReference(openListPropertySetter.MakeGenericInstanceType(ReferenceType, listElement)); + propertySetterCtor = Module.ImportReference(openListPropertySetterCtor.MakeGenericHostMethod(closedPropertySetter)); + } + else // Just use a generic Property type + { + var fieldTypeRef = Module.ImportReference(fieldDef.FieldType); + // Define the static readonly Property field; + propertyFieldType = Module.ImportReference(openPropertyDef.MakeGenericInstanceType(ReferenceType, fieldTypeRef)); + // Important, we name the field the same as the actual field so we can use this name later in FindProperty using fieldDef.Name + propertyField = new FieldDefinition(fieldDef.Name,FieldAttributes.Public | FieldAttributes.Static | FieldAttributes.InitOnly, propertyFieldType); + GeneratedType.Fields.Add(propertyField); + (getter, setter) = GenerateGetterSetters(referenceTypeByReferenceRef, fieldDef, fieldTypeRef); + + // Property and its nested delegate types are all open types so we must close them before we invoke ctors + propertyCtor = Module.ImportReference(openPropertyCtor.MakeGenericHostMethod(propertyFieldType)); + var closedPropertyGetter = Module.ImportReference(openPropertyGetter.MakeGenericInstanceType(ReferenceType, fieldTypeRef)); + propertyGetterCtor = Module.ImportReference(openPropertyGetterCtor.MakeGenericHostMethod(closedPropertyGetter)); + var closedPropertySetter = Module.ImportReference(openPropertySetter.MakeGenericInstanceType(ReferenceType, fieldTypeRef)); + propertySetterCtor = Module.ImportReference(openPropertySetterCtor.MakeGenericHostMethod(closedPropertySetter)); + } + + // Initialize the static field in the cctor. Construct a Property and store it to our static field + // e.g. + // public static readonly Property = + // new Property("FieldName", + // GeneratedGetter, // <== This implicitly constructs a delegate, e.g. new Property.Getter(null, &GeneratedGetter) + // GeneratedSetter, // <== This implicitly constructs a delegate, e.g. new Property.Setter(null, &GeneratedSetter) + // null); + il.Emit(OpCodes.Ldstr, fieldDef.Name); // arg0, the Field Name + // Construct arg0, our delegate for the getter + il.Emit(OpCodes.Ldnull); // null context (it's a static func) + il.Emit(OpCodes.Ldftn, getter); + il.Emit(OpCodes.Newobj, propertyGetterCtor); + // Construct arg1, our delegate for the setter + il.Emit(OpCodes.Ldnull); // null context (it's a static func) + il.Emit(OpCodes.Ldftn, setter); + il.Emit(OpCodes.Newobj, propertySetterCtor); + // Push null for arg2, the IPropertiesAttributeCollection as we don't need it at the moment + il.Emit(OpCodes.Ldnull); + // Construct the Property and store it to our field + il.Emit(OpCodes.Newobj, propertyCtor); + il.Emit(OpCodes.Stsfld, propertyField); + } + + il.Emit(OpCodes.Ret); + } + + (MethodDefinition, MethodDefinition) GenerateGetterSetters(TypeReference containerTypeByReference, FieldDefinition fieldDef, TypeReference getSetType, TypeReference collectionFieldType = null) + { + var fieldRef = Module.ImportReference(fieldDef); + var voidRef = Module.ImportReference(typeof(void)); + + // Generate getter and setter functions + var getter = new MethodDefinition(fieldDef.Name + "Getter",MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.HideBySig, getSetType); + { + getter.Parameters.Add(new ParameterDefinition("container", Mono.Cecil.ParameterAttributes.None, containerTypeByReference)); + GeneratedType.Methods.Add((getter)); + + // Generates a simple getter + // e.g. + // public static ElementType Getter(ref ContainerType passedInContainer) + // { + // return passedInContainer.containerField; + // } + var getterIL = getter.Body.GetILProcessor(); + getterIL.Emit(OpCodes.Ldarg_0); + if (!ReferenceType.IsValueType()) + getterIL.Emit(OpCodes.Ldind_Ref); + getterIL.Emit(OpCodes.Ldfld, fieldRef); + getterIL.Emit(OpCodes.Ret); + } + + var setter = new MethodDefinition(fieldDef.Name + "Setter",MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.HideBySig, voidRef); + { + setter.Parameters.Add(new ParameterDefinition("container", Mono.Cecil.ParameterAttributes.None, containerTypeByReference)); + setter.Parameters.Add(new ParameterDefinition("val", Mono.Cecil.ParameterAttributes.None, getSetType)); + GeneratedType.Methods.Add((setter)); + + // Generates a simple setter + // e.g. + // public static void Getter(ref ContainerType passedInContainer, ElementType passedInVal) + // { + // passedInContainer.containerField = passedInVal; + // } + // In the case of ListProperties, the Unity.Properties API only deals with IList + // so we need to explicitly down-cast that back to our field type before assigning + // e.g. + // public static void Setter(ref ContainerType passedInContainer, IList passedInVal) + // { + // passedInContainer.containerField = (ActualListType) passedInIListVal; + // } + var setterIL = setter.Body.GetILProcessor(); + setterIL.Emit(OpCodes.Ldarg_0); + if (!ReferenceType.IsValueType()) + setterIL.Emit(OpCodes.Ldind_Ref); + setterIL.Emit(OpCodes.Ldarg_1); + if(collectionFieldType != null) + setterIL.Emit(OpCodes.Castclass, Module.ImportReference(collectionFieldType)); + setterIL.Emit(OpCodes.Stfld, fieldRef); + setterIL.Emit(OpCodes.Ret); + } + + return (getter, setter); + } + + void GenerateAccept() + { + // Generates public override void Accept(ref TContainer container, ref TVisitor visitor, ref ChangeTracker changeTracker) + var referenceTypeByReferenceRef = Module.ImportReference(ReferenceType.MakeByReferenceType()); + var acceptFn = new MethodDefinition("Accept", MethodAttributes.Virtual | MethodAttributes.Public | MethodAttributes.HideBySig, Module.ImportReference(typeof(void))); + var genericParam = new GenericParameter("TVisitor", acceptFn); + genericParam.Constraints.Add(Module.ImportReference(typeof(IPropertyVisitor))); + acceptFn.GenericParameters.Add(genericParam); + acceptFn.Parameters.Add(new ParameterDefinition("container", ParameterAttributes.None, referenceTypeByReferenceRef)); + acceptFn.Parameters.Add(new ParameterDefinition("visitor", ParameterAttributes.None, genericParam.MakeByReferenceType())); + /////////////// + // Remove these lines when Properties removes ChangeTracker from the API + var changeTrackerRef = Module.ImportReference(typeof(ChangeTracker)); + acceptFn.Parameters.Add(new ParameterDefinition("changeTracker", ParameterAttributes.None, Module.ImportReference(changeTrackerRef.MakeByReferenceType()))); + /////////////// + GeneratedType.Methods.Add(acceptFn); + + var openVisitProperty = Module.ImportReference(typeof(IPropertyVisitor).GetMethod("VisitProperty")); + var openVisitCollectionProperty = Module.ImportReference(typeof(IPropertyVisitor).GetMethod("VisitCollectionProperty")); + var il = acceptFn.Body.GetILProcessor(); + foreach (var field in GeneratedType.Fields) + { + // We know we will always have these two generic args + var genericfield = field.FieldType as GenericInstanceType; + var containerType = genericfield.GenericArguments[0]; + var fieldType = genericfield.GenericArguments[1]; + + MethodReference visitProperty = null; + if (field.FieldType.Name.Contains("ArrayProperty")) + { + visitProperty = Module.ImportReference(openVisitCollectionProperty.MakeGenericInstanceMethod(field.FieldType, containerType, Module.ImportReference(fieldType.MakeArrayType()))); + + } + else if (field.FieldType.Name.Contains("ListProperty")) + { + var ilist = Module.ImportReference(typeof(IList<>)); + var closedIList = Module.ImportReference(ilist.MakeGenericInstanceType(fieldType)); + visitProperty = Module.ImportReference(openVisitCollectionProperty.MakeGenericInstanceMethod(field.FieldType, containerType, closedIList)); + } + else + { + visitProperty = Module.ImportReference(openVisitProperty.MakeGenericInstanceMethod(field.FieldType, containerType, fieldType)); + } + + // Load our visitor and invoke VisitProperty() + // e.g. + // public override void Accept(ref SceneTag container, ref TVisitor visitor, ref ChangeTracker changeTracker) + // { + // visitor.VisitProperty, ContainerType, FieldType1>(GeneratedPropertyForField1, ref container, ref changeTracker); + // visitor.VisitProperty, ContainerType, FieldType2>(GeneratedPropertyForField2, ref container, ref changeTracker); + // ... + // visitor.VisitProperty, ContainerType, FieldTypeN>(GeneratedPropertyForFieldN, ref container, ref changeTracker); + // } + il.Emit(OpCodes.Ldarg_2); + il.Emit(OpCodes.Ldsfld, field); + il.Emit(OpCodes.Ldarg_1); + ////////////////////////////////// + // Remove this line when Properties removes ChangeTracker from the API + il.Emit(OpCodes.Ldarg_3); + ////////////////////////////////// + il.Emit(OpCodes.Constrained, genericParam); + il.Emit(OpCodes.Callvirt, visitProperty); + il.Emit(OpCodes.Pop); // ditch the return value + } + + il.Emit(OpCodes.Ret); + } + + void GenerateFindProperty() + { + // Generates public override bool FindProperty(string name, ref TContainer container, ref ChangeTracker changeTracker, ref TAction action) + var referenceTypeByReferenceRef = Module.ImportReference(ReferenceType.MakeByReferenceType()); + var openIPropertyGetter = Module.ImportReference(typeof(IPropertyGetter<>)); + var closedIPropertyGetter = Module.ImportReference(openIPropertyGetter.MakeGenericInstanceType(Module.ImportReference(ReferenceType))); + + var findPropertyFn = new MethodDefinition("FindProperty", MethodAttributes.Virtual | MethodAttributes.Public | MethodAttributes.HideBySig, Module.ImportReference(typeof(bool))); + var genericParam = new GenericParameter("TAction", findPropertyFn); + genericParam.Constraints.Add(closedIPropertyGetter); + findPropertyFn.GenericParameters.Add(genericParam); + findPropertyFn.Parameters.Add(new ParameterDefinition("name", ParameterAttributes.None, Module.ImportReference(typeof(string)))); + findPropertyFn.Parameters.Add(new ParameterDefinition("container", ParameterAttributes.None, referenceTypeByReferenceRef)); + /////////////// + // Remove these lines when Properties removes ChangeTracker from the API + var changeTrackerRef = Module.ImportReference(typeof(ChangeTracker)); + findPropertyFn.Parameters.Add(new ParameterDefinition("changeTracker", ParameterAttributes.None, Module.ImportReference(changeTrackerRef.MakeByReferenceType()))); + /////////////// + var actionParam = new ParameterDefinition("action", ParameterAttributes.None, + genericParam.MakeByReferenceType()); + findPropertyFn.Parameters.Add(actionParam); + GeneratedType.Methods.Add(findPropertyFn); + + var stringEquals = Module.ImportReference(typeof(string).GetMethod("Equals", new Type[]{typeof(string), typeof(string)})); + var openVisitProperty = Module.ImportReference(typeof(IPropertyGetter<>).GetMethod("VisitProperty")); + var openVisitCollectionProperty = Module.ImportReference(typeof(IPropertyGetter<>).GetMethod("VisitCollectionProperty")); + var closedIPropertyGetterOpenVisitProperty = Module.ImportReference(openVisitProperty.MakeGenericHostMethod(closedIPropertyGetter)); + var closedIPropertyGetterOpenVisitCollectionProperty = Module.ImportReference(openVisitCollectionProperty.MakeGenericHostMethod(closedIPropertyGetter)); + + var il = findPropertyFn.Body.GetILProcessor(); + Instruction label = null; + foreach (var field in GeneratedType.Fields) + { + // We know we will always have these two generic args + var genericfield = field.FieldType as GenericInstanceType; + var containerType = genericfield.GenericArguments[0]; + var fieldType = genericfield.GenericArguments[1]; + + + MethodReference visitProperty = null; + if (field.FieldType.Name.Contains("ArrayProperty")) + { + visitProperty = Module.ImportReference(closedIPropertyGetterOpenVisitCollectionProperty.MakeGenericInstanceMethod(field.FieldType, Module.ImportReference(fieldType.MakeArrayType()))); + + } + else if (field.FieldType.Name.Contains("ListProperty")) + { + var ilist = Module.ImportReference(typeof(IList<>)); + var closedIList = Module.ImportReference(ilist.MakeGenericInstanceType(fieldType)); + visitProperty = Module.ImportReference(closedIPropertyGetterOpenVisitCollectionProperty.MakeGenericInstanceMethod(field.FieldType, closedIList)); + } + else + { + visitProperty = Module.ImportReference(closedIPropertyGetterOpenVisitProperty.MakeGenericInstanceMethod(field.FieldType, fieldType)); + } + + // We generate a simple name based lookup (we may want to swap to a switch table later) + // and then invoke the VisitProperty func for the found property + // e.g + // public override bool FindProperty(string name, ref ContainerType container, ref ChangeTracker changeTracker, ref TAction action) + // { + // if (string.Equals(name, GeneratedPropertyField1.GetName())) + // { + // action.VisitProperty, FieldType1>(GeneratedPropertyField1, ref container, ref changeTracker); + // return true; + // } + // if (string.Equals(name, GeneratedPropertyField2.GetName())) + // { + // action.VisitProperty, FieldType2>(GeneratedPropertyField2, ref container, ref changeTracker); + // return true; + // } + // return false; + // } + label = il.Create(OpCodes.Nop); + il.Emit(OpCodes.Ldarg_1); + il.Emit(OpCodes.Ldstr, field.Name); + il.Emit(OpCodes.Call, stringEquals); + il.Emit(OpCodes.Brfalse, label); + + il.Emit(OpCodes.Ldarg, actionParam); + il.Emit(OpCodes.Ldsfld, field); + il.Emit(OpCodes.Ldarg_2); + //////////////////////////////////// + // Remove this line when Properties removes ChangeTracker from the API + il.Emit(OpCodes.Ldarg_3); + //////////////////////////////////// + il.Emit(OpCodes.Constrained, genericParam); + il.Emit(OpCodes.Callvirt, visitProperty); + il.Emit(OpCodes.Ldc_I4_1); + il.Emit(OpCodes.Ret); + il.Append(label); + } + + il.Emit(OpCodes.Ldc_I4_0); + il.Emit(OpCodes.Ret); + } + + void GeneratePropertyAOTFunctionSpecializations() + { + ////////////////////////////////// + // Remove this line and all references to it when Properties removes ChangeTracker from the API + var changeTrackerType = Module.ImportReference(typeof(ChangeTracker)); + ////////////////////////////////// + var openVisitCollectionElementCallback = Module.ImportReference(typeof(VisitCollectionElementCallback<>)); + var openArrayPropertyGetPropertyAtIndexFn = Module.ImportReference(typeof(ArrayProperty<,>).GetMethod("GetPropertyAtIndex")); + var openListPropertyGetPropertyAtIndexFn = Module.ImportReference(typeof(ListProperty<,>).GetMethod("GetPropertyAtIndex")); + + var aotSpecializationsFn = new MethodDefinition("PropertyAOTFunctionSpecializations", MethodAttributes.Virtual | MethodAttributes.Public | MethodAttributes.HideBySig, Module.ImportReference(typeof(void))); + GeneratedType.Methods.Add(aotSpecializationsFn); + + var il = aotSpecializationsFn.Body.GetILProcessor(); + foreach (var field in GeneratedType.Fields) + { + // We know we will always have these two generic args + var genericfield = field.FieldType as GenericInstanceType; + var containerType = genericfield.GenericArguments[0]; + + if (field.FieldType.Name.Contains("ArrayProperty")) + { + var closedGetterType = Module.ImportReference(openVisitCollectionElementCallback.MakeGenericInstanceType(containerType)); + var containerLocal = new VariableDefinition(containerType); + var changeTrackerLocal = new VariableDefinition(changeTrackerType); + var getterLocal = new VariableDefinition(closedGetterType); + aotSpecializationsFn.Body.Variables.Add(containerLocal); + aotSpecializationsFn.Body.Variables.Add(changeTrackerLocal); + aotSpecializationsFn.Body.Variables.Add(getterLocal); + + var closedArrayPropertyOpenGetPropertyAtIndexFn = Module.ImportReference(openArrayPropertyGetPropertyAtIndexFn.MakeGenericHostMethod(field.FieldType)); + var closedArrayPropertyClosedGetPropertyAtIndexFn = Module.ImportReference(closedArrayPropertyOpenGetPropertyAtIndexFn.MakeGenericInstanceMethod(closedGetterType)); + + // s_ArrayProperty.GetPropertyAtIndex(ref container, 0, ref tracker, ref getter); + il.Emit(OpCodes.Ldsflda, field); + il.Emit(OpCodes.Ldloca, containerLocal); + il.Emit(OpCodes.Ldc_I4_0); // random index, not important what the value is + il.Emit(OpCodes.Ldloca, changeTrackerLocal); + il.Emit(OpCodes.Ldloca, getterLocal); + il.Emit(OpCodes.Call, closedArrayPropertyClosedGetPropertyAtIndexFn); + } + else if (field.FieldType.Name.Contains("ListProperty")) + { + var closedGetterType = Module.ImportReference(openVisitCollectionElementCallback.MakeGenericInstanceType(containerType)); + var containerLocal = new VariableDefinition(containerType); + var changeTrackerLocal = new VariableDefinition(changeTrackerType); + var getterLocal = new VariableDefinition(closedGetterType); + aotSpecializationsFn.Body.Variables.Add(containerLocal); + aotSpecializationsFn.Body.Variables.Add(changeTrackerLocal); + aotSpecializationsFn.Body.Variables.Add(getterLocal); + + var closedListPropertyOpenGetPropertyAtIndexFn = Module.ImportReference(openListPropertyGetPropertyAtIndexFn.MakeGenericHostMethod(field.FieldType)); + var closedListPropertyClosedGetPropertyAtIndexFn = Module.ImportReference(closedListPropertyOpenGetPropertyAtIndexFn.MakeGenericInstanceMethod(closedGetterType)); + + // s_ListProperty.GetPropertyAtIndex(ref container, 0, ref tracker, ref getter); + il.Emit(OpCodes.Ldsflda, field); + il.Emit(OpCodes.Ldloca, containerLocal); + il.Emit(OpCodes.Ldc_I4_0); // random index, not important what the value is + il.Emit(OpCodes.Ldloca, changeTrackerLocal); + il.Emit(OpCodes.Ldloca, getterLocal); + il.Emit(OpCodes.Call, closedListPropertyClosedGetPropertyAtIndexFn); + } + } + + il.Emit(OpCodes.Ret); + } + } + + enum AOTFunction + { + Invoke = 0, + GenerateAOTFunctions + } + + void GenerateAOTFunctions(TypeDefinition registry, List propertyBags) + { + var aotFunctionTypePairs = new[] + { + (AOTFunction.Invoke, AssemblyDefinition.MainModule.ImportReference(typeof(Serialization.BoxedProperties.ReadBoxedClassForwarder))), + (AOTFunction.Invoke, AssemblyDefinition.MainModule.ImportReference(typeof(Serialization.BoxedProperties.ReadBoxedStructForwarder))), + (AOTFunction.GenerateAOTFunctions, AssemblyDefinition.MainModule.ImportReference(typeof(AOTFunctionGenerator))) + }; + + var registerAOTFunctionsFn = new MethodDefinition("RegisterAOTFunctions", + MethodAttributes.Static | MethodAttributes.Public, + AssemblyDefinition.MainModule.ImportReference(typeof(void))); + + CecilHelpers.MarkAsPreserve(registerAOTFunctionsFn, AssemblyDefinition.MainModule); + registry.Methods.Add((registerAOTFunctionsFn)); + + var il = registerAOTFunctionsFn.Body.GetILProcessor(); + foreach (var fnAndTypePair in aotFunctionTypePairs) + { + if(fnAndTypePair.Item1 == AOTFunction.Invoke) + GenerateInvokeAOTFunction(registerAOTFunctionsFn, fnAndTypePair.Item2, propertyBags); + else if(fnAndTypePair.Item1 == AOTFunction.GenerateAOTFunctions) + GeneratePropertiesAOTFunctions(registerAOTFunctionsFn, propertyBags); + } + + il.Emit(OpCodes.Ret); + } + + void GeneratePropertiesAOTFunctions(MethodDefinition registerAOTFunctionsFn, List propertyBags) + { + var openPropertiesGenerateAOTContainerFunctionsFn = AssemblyDefinition.MainModule.ImportReference(typeof(Properties.AOTFunctionGenerator).GetMethod("GenerateAOTContainerFunctions")); + var openPropertiesGenerateAOTFunctionsFn = AssemblyDefinition.MainModule.ImportReference(typeof(Properties.AOTFunctionGenerator).GetMethod("GenerateAOTFunctions")); + var openPropertiesGenerateAOTCollectionFunctionsFn = AssemblyDefinition.MainModule.ImportReference(typeof(Properties.AOTFunctionGenerator).GetMethod("GenerateAOTCollectionFunctions")); + var openEntitiesGenerateAOTFunctionsFn = AssemblyDefinition.MainModule.ImportReference(typeof(Serialization.AOTFunctionGenerator).GetMethod("GenerateAOTFunctions")); + var openEntitiesGenerateAOTCollectionFunctionsFn = AssemblyDefinition.MainModule.ImportReference(typeof(Serialization.AOTFunctionGenerator).GetMethod("GenerateAOTCollectionFunctions")); + + var il = registerAOTFunctionsFn.Body.GetILProcessor(); + foreach (var propertyBag in propertyBags) + { + foreach (var propertyField in propertyBag.GeneratedType.Fields) + { + // We know we will always have these two generic args + MethodReference propertiesGenerateFn = null; + MethodReference propertiesGenerateCollectionFn = null; + MethodReference entitiesGenerateFn = null; + MethodReference entitiesGenerateCollectionFn = null; + var propertyType = propertyField.FieldType as GenericInstanceType; + var containerType = propertyType.GenericArguments[0]; + var valueType = propertyType.GenericArguments[1]; + + if (propertyField.FieldType.Name.Contains("ArrayProperty")) + { + var arrayType = AssemblyDefinition.MainModule.ImportReference(valueType.MakeArrayType()); + propertiesGenerateFn = AssemblyDefinition.MainModule.ImportReference(openPropertiesGenerateAOTCollectionFunctionsFn.MakeGenericInstanceMethod(propertyType, containerType, valueType)); + propertiesGenerateCollectionFn = AssemblyDefinition.MainModule.ImportReference(openPropertiesGenerateAOTCollectionFunctionsFn.MakeGenericInstanceMethod(propertyType, containerType, arrayType)); + entitiesGenerateFn = AssemblyDefinition.MainModule.ImportReference(openEntitiesGenerateAOTCollectionFunctionsFn.MakeGenericInstanceMethod(propertyType, containerType, valueType)); + entitiesGenerateCollectionFn = AssemblyDefinition.MainModule.ImportReference(openEntitiesGenerateAOTCollectionFunctionsFn.MakeGenericInstanceMethod(propertyType, containerType, arrayType)); + } + else if (propertyField.FieldType.Name.Contains("ListProperty")) + { + var ilist = AssemblyDefinition.MainModule.ImportReference(typeof(IList<>)); + var closedIList = AssemblyDefinition.MainModule.ImportReference(ilist.MakeGenericInstanceType(valueType)); + propertiesGenerateFn = AssemblyDefinition.MainModule.ImportReference(openPropertiesGenerateAOTCollectionFunctionsFn.MakeGenericInstanceMethod(propertyType, containerType, valueType)); + propertiesGenerateCollectionFn = AssemblyDefinition.MainModule.ImportReference(openPropertiesGenerateAOTCollectionFunctionsFn.MakeGenericInstanceMethod(propertyType, containerType, closedIList)); + entitiesGenerateFn = AssemblyDefinition.MainModule.ImportReference(openEntitiesGenerateAOTCollectionFunctionsFn.MakeGenericInstanceMethod(propertyType, containerType, valueType)); + entitiesGenerateCollectionFn = AssemblyDefinition.MainModule.ImportReference(openEntitiesGenerateAOTCollectionFunctionsFn.MakeGenericInstanceMethod(propertyType, containerType, closedIList)); + } + else + { + propertiesGenerateFn = AssemblyDefinition.MainModule.ImportReference(openPropertiesGenerateAOTFunctionsFn.MakeGenericInstanceMethod(propertyType, containerType, valueType)); + entitiesGenerateFn = AssemblyDefinition.MainModule.ImportReference(openEntitiesGenerateAOTFunctionsFn.MakeGenericInstanceMethod(propertyType, containerType, valueType)); + } + + il.Emit(OpCodes.Call, propertiesGenerateFn); + il.Emit(OpCodes.Call, entitiesGenerateFn); + if(entitiesGenerateCollectionFn != null) + il.Emit(OpCodes.Call, entitiesGenerateCollectionFn); + if(propertiesGenerateCollectionFn != null) + il.Emit(OpCodes.Call, propertiesGenerateCollectionFn); + } + + var closedPropertiesGenerateAOTContainerFunctionsFn = AssemblyDefinition.MainModule.ImportReference(openPropertiesGenerateAOTContainerFunctionsFn.MakeGenericInstanceMethod(propertyBag.ReferenceType)); + il.Emit(OpCodes.Call, closedPropertiesGenerateAOTContainerFunctionsFn); + } + } + + void GenerateInvokeAOTFunction(MethodDefinition registerAOTFunctionsFn, TypeReference callbackImplType, List propertyBags) + { + var il = registerAOTFunctionsFn.Body.GetILProcessor(); + var local = new VariableDefinition(callbackImplType); + registerAOTFunctionsFn.Body.Variables.Add(local); + + // get the Invoke method from the callbackImplType + var resolvedCallbackImplType = callbackImplType.Resolve(); + if (resolvedCallbackImplType == null) + throw new ArgumentException($"We cannot resolve type '{callbackImplType.FullName}' implementing IContainerTypeCallback"); + + // For each PropertyBag container type we know about, specialize Invoke to that type and call it + var openInvokeFn = resolvedCallbackImplType.GetMethods().First(m => m.HasGenericParameters && m.Name == "Invoke"); + + // Initialize our callback implementing type + if (callbackImplType.IsValueType()) + { + il.Emit(OpCodes.Ldloca, local); + il.Emit(OpCodes.Initobj, callbackImplType); + + foreach (var propertyBag in propertyBags) + { + var closedInvokeFn = AssemblyDefinition.MainModule.ImportReference(openInvokeFn.MakeGenericInstanceMethod(propertyBag.ReferenceType)); + + // Call our closed Invoke() function + il.Emit(OpCodes.Ldloca, local); + il.Emit(OpCodes.Call, closedInvokeFn); + } + } + else + { + var callbackImplTypeDefaultCtor = resolvedCallbackImplType.GetConstructors().FirstOrDefault(m => m.Parameters.Count == 0); + if (callbackImplTypeDefaultCtor == null) + throw new ArgumentException($"All class types inheriting from IContainerTypeCallback must be default constructable: '{callbackImplType.FullName}' is not."); + + // Construct our local class type + var callbackImplTypeCtor = AssemblyDefinition.MainModule.ImportReference(callbackImplTypeDefaultCtor); + il.Emit(OpCodes.Newobj, callbackImplTypeCtor); + + foreach (var propertyBag in propertyBags) + { + var closedInvokeFn = AssemblyDefinition.MainModule.ImportReference(openInvokeFn.MakeGenericInstanceMethod(propertyBag.ReferenceType)); + + // Push the local we newobj'd above on the stack as we will consume it in the callvirt call below + il.Emit(OpCodes.Dup); + il.Emit(OpCodes.Callvirt, closedInvokeFn); + } + + // Whether we entered the loop or not, we now have one element (our local) on the stack, so pop it + il.Emit(OpCodes.Pop); + } + } + } +} +#endif \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PropertyBags/PropertyBagsPostProcessor.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PropertyBags/PropertyBagsPostProcessor.cs.meta new file mode 100644 index 000000000..dd431133a --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/PropertyBags/PropertyBagsPostProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c39c5fefba627946b1b3616fbb483cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/Unity.Entities.CodeGen.asmdef b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/Unity.Entities.CodeGen.asmdef new file mode 100644 index 000000000..cc2281ac9 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/Unity.Entities.CodeGen.asmdef @@ -0,0 +1,22 @@ +{ + "name": "Unity.Entities.CodeGen", + "references": [ + "Unity.Entities", + "Unity.Burst", + "Unity.Collections", + "Unity.Properties" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "Mono.Cecil.dll", + "Mono.Cecil.Rocks.dll", + "Mono.Cecil.Pdb.dll" + ], + "autoReferenced": false, + "versionDefines": [] +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/Unity.Entities.CodeGen.asmdef.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/Unity.Entities.CodeGen.asmdef.meta new file mode 100644 index 000000000..d8e778f2e --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.CodeGen/Unity.Entities.CodeGen.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3d9288551f5f1b14b9fcbd11fd97a391 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests.meta new file mode 100644 index 000000000..3c2c22130 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2da84dd03325e49b99e575e89a0cb61d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/AssemblyInfo.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/AssemblyInfo.cs new file mode 100644 index 000000000..419cf0416 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using Unity.Entities; + +[assembly: DisableAutoCreation] diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/AssemblyInfo.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/AssemblyInfo.cs.meta new file mode 100644 index 000000000..52a49156c --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08b02505960398a47ad3a042cdbe762a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/ComponentTypeFilterUITests.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/ComponentTypeFilterUITests.cs new file mode 100644 index 000000000..1b2a0fdb2 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/ComponentTypeFilterUITests.cs @@ -0,0 +1,47 @@ +using NUnit.Framework; +using Unity.Entities.Tests; + +namespace Unity.Entities.Editor.Tests +{ + class ComponentTypeFilterUITests : ECSTestsFixture + { + + public void SetFilterDummy(EntityListQuery query) + { + + } + + private World WorldSelectionGetter() + { + return World.DefaultGameObjectInjectionWorld; + } + + [Test] + public void ComponentTypeFilterUI_GetTypesIgnoresNullWorld() + { + var filterUI = new ComponentTypeFilterUI(SetFilterDummy, () => null); + Assert.DoesNotThrow(filterUI.GetTypes); + } + + [Test] + public void ComponentTypeFilterUI_ComparisonToTypeManagerCorrect() + { + TypeManager.GetTypeIndex(typeof(EcsTestData)); + var filterUI = new ComponentTypeFilterUI(SetFilterDummy, WorldSelectionGetter); + Assert.IsFalse(filterUI.TypeListValid()); + filterUI.GetTypes(); + Assert.IsTrue(filterUI.TypeListValid()); + } + + [Test] + public void ComponentTypeFilterUI_ComponentGroupCaches() + { + var filterUI = new ComponentTypeFilterUI(SetFilterDummy, WorldSelectionGetter); + var types = new ComponentType[] + {ComponentType.ReadWrite(), ComponentType.ReadOnly()}; + Assert.IsNull(filterUI.GetExistingQuery(types)); + var group = filterUI.GetEntityQuery(types); + Assert.AreEqual(group, filterUI.GetExistingQuery(types)); + } + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/ComponentTypeFilterUITests.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/ComponentTypeFilterUITests.cs.meta new file mode 100644 index 000000000..7b44bae65 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/ComponentTypeFilterUITests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d1802275260543cb944ae36805bf086 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityArrayListAdapterTests.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityArrayListAdapterTests.cs new file mode 100644 index 000000000..bd5fb09bb --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityArrayListAdapterTests.cs @@ -0,0 +1,79 @@ +using NUnit.Framework; +using Unity.Collections; +using Unity.Entities.Tests; + +namespace Unity.Entities.Editor.Tests +{ + class EntityArrayListAdapterTests : ECSTestsFixture + { + private NativeArray m_ChunkArray; + + public override void Setup() + { + base.Setup(); + + var archetype = m_Manager.CreateArchetype(new ComponentType[] {typeof(EcsTestData), typeof(EcsTestData2), typeof(EcsTestData3), + typeof(EcsTestData4)}); + using (var entities = new NativeArray(100000, Allocator.Temp)) + { + m_Manager.CreateEntity(archetype, entities); + } + + var query = new EntityQueryDesc() + { + Any = new ComponentType[0], + All = new ComponentType[0], + None = new ComponentType[0] + }; + + var group = m_Manager.CreateEntityQuery(query); + m_ChunkArray = group.CreateArchetypeChunkArray(Allocator.TempJob); + } + + public override void TearDown() + { + m_ChunkArray.Dispose(); + base.TearDown(); + } + + [Test] + public void EntityArrayListAdapter_SequentialAccessConsistent() + { + var adapter = new EntityArrayListAdapter(); + adapter.SetSource(m_ChunkArray, m_Manager, null); + var e1 = adapter[50001].id; + var e2 = adapter[50002].id; + var e3 = adapter[50003].id; + var e2Again = adapter[50002].id; + var e1Again = adapter[50001].id; + Assert.AreNotEqual(e1, e2); + Assert.AreNotEqual(e1, e2Again); + Assert.AreNotEqual(e2, e1Again); + Assert.AreEqual(e1, e1Again); + Assert.AreEqual(e2, e2Again); + + } + + [Test] + public void EntityArrayListAdapter_Enumerator_Resets() + { + var adapter = new EntityArrayListAdapter(); + adapter.SetSource(m_ChunkArray, m_Manager, null); + using (var iterator = adapter.GetEnumerator()) + { + var ids = new int[5]; + for (var i = 0; i < ids.Length; ++i) + { + Assert.IsTrue(iterator.MoveNext()); + ids[i] = iterator.Current.id; + } + iterator.Reset(); + for (var i = 0; i < ids.Length; ++i) + { + Assert.IsTrue(iterator.MoveNext()); + Assert.AreEqual(ids[i], iterator.Current.id); + } + } + } + } +} \ No newline at end of file diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityArrayListAdapterTests.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityArrayListAdapterTests.cs.meta new file mode 100644 index 000000000..681e26a3b --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityArrayListAdapterTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 717022106a6e64e77b5099033dc20522 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityDebuggerTests.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityDebuggerTests.cs new file mode 100644 index 000000000..1a83be4b6 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityDebuggerTests.cs @@ -0,0 +1,192 @@ +using System; +using NUnit.Framework; +using Unity.Entities.Tests; +using UnityEditor; +using UnityEngine; + +namespace Unity.Entities.Editor.Tests +{ + class EntityDebuggerTests : ECSTestsFixture + { + + private EntityDebugger m_Window; + private ComponentSystem m_System; + private EntityQuery entityQuery; + private Entity m_Entity; + + class SingleGroupSystem : ComponentSystem + { + protected override void OnUpdate() + { + throw new NotImplementedException(); + } + + protected override void OnCreate() + { + GetEntityQuery(typeof(EcsTestData)); + } + } + + private static void CloseAllDebuggers() + { + var windows = Resources.FindObjectsOfTypeAll(); + foreach (var window in windows) + if (window != null) + window.Close(); + } + + private const string World2Name = "Test World 2"; + private World World2; + + public override void Setup() + { + base.Setup(); + + CloseAllDebuggers(); + + m_Window = EditorWindow.GetWindow(); + + m_System = World.GetOrCreateSystem(); + World.GetOrCreateSystem().AddSystemToUpdateList(m_System); + + ScriptBehaviourUpdateOrder.UpdatePlayerLoop(World); + + World2 = new World(World2Name); + var emptySys = World2.GetOrCreateSystem(); + World.GetOrCreateSystem().AddSystemToUpdateList(emptySys); + World.GetOrCreateSystem().SortSystemUpdateList(); + + entityQuery = m_System.EntityQueries[0]; + + m_Entity = m_Manager.CreateEntity(typeof(EcsTestData)); + } + + public override void TearDown() + { + CloseAllDebuggers(); + + if (World2 != null) + { + World2.Dispose(); + World2 = null; + } + + base.TearDown(); + + ScriptBehaviourUpdateOrder.UpdatePlayerLoop(World.DefaultGameObjectInjectionWorld); + } + + [Test] + public void WorldPopup_RestorePreviousSelection() + { + World world = null; + var popup = new WorldPopup(() => null, x => world = x, () => true, () => {}); + popup.TryRestorePreviousSelection(false, WorldPopup.kNoWorldName); + Assert.AreEqual(World.AllWorlds[0], world); + popup.TryRestorePreviousSelection(false, World2Name); + Assert.AreEqual(World2, world); + } + + [Test] + public void EntityDebugger_SetSystemSelection() + { + // TODO EntityManager is no longer a system + /* + m_Window.SetSystemSelection(m_Manager, World.Active, true, true); + + Assert.AreEqual(World.Active, m_Window.SystemSelectionWorld); + + Assert.Throws(() => m_Window.SetSystemSelection(m_Manager, null, true, true)); + */ + } + + [Test] + public void EntityDebugger_DestroyWorld() + { + m_Window.SetWorldSelection(World2, true); + Assert.IsFalse(m_Window.systemListView.NeedsReload); + World2.Dispose(); + World2 = null; + Assert.IsTrue(m_Window.systemListView.NeedsReload); + } + + [Test] + public void EntityDebugger_DestroySystem() + { + m_Window.SetWorldSelection(World2, true); + Assert.IsFalse(m_Window.systemListView.NeedsReload); + var emptySystem = World2.GetExistingSystem(); + World2.DestroySystem(emptySystem); + Assert.IsTrue(m_Window.systemListView.NeedsReload); + } + + [Test] + public void EntityDebugger_SetAllSelections() + { + var entityListQuery = new EntityListQuery(entityQuery); + EntityDebugger.SetAllSelections(World, m_System, entityListQuery, m_Entity); + + Assert.AreEqual(World, m_Window.WorldSelection); + Assert.AreEqual(m_System, m_Window.SystemSelection); + Assert.AreEqual(entityQuery, m_Window.EntityListQuerySelection.Group); + Assert.AreEqual(m_Entity, m_Window.EntitySelection); + } + + [Test] + public void EntityDebugger_RememberSelections() + { + var entityListQuery = new EntityListQuery(entityQuery); + EntityDebugger.SetAllSelections(World, m_System, entityListQuery, m_Entity); + + m_Window.SetWorldSelection(null, true); + + m_Window.SetWorldSelection(World, true); + + Assert.AreEqual(World, m_Window.WorldSelection); + Assert.AreEqual(m_System, m_Window.SystemSelection); + Assert.AreEqual(entityQuery, m_Window.EntityListQuerySelection.Group); + Assert.AreEqual(m_Entity, m_Window.EntitySelection); + } + + [Test] + public void EntityDebugger_SetAllEntitiesFilter() + { + var query = new EntityQueryDesc() + { + All = new ComponentType[] {ComponentType.ReadWrite() }, + Any = new ComponentType[0], + None = new ComponentType[0] + }; + var listQuery = new EntityListQuery(query); + + m_Window.SetWorldSelection(World, true); + m_Window.SetSystemSelection(null, null, true, true); + m_Window.SetAllEntitiesFilter(listQuery); + Assert.AreEqual(query, m_Window.EntityListQuerySelection.QueryDesc); + + m_Window.SetEntityListSelection(null, true, true); + m_Window.SetSystemSelection(null, World, true, true); + m_Window.SetAllEntitiesFilter(listQuery); + Assert.AreEqual(query, m_Window.EntityListQuerySelection.QueryDesc); + + m_Window.SetSystemSelection(m_System, World, true, true); + m_Window.SetAllEntitiesFilter(listQuery); + Assert.AreNotEqual(listQuery, m_Window.EntityListQuerySelection); + } + + [Test] + public void EntityDebugger_StylesIntact() + { + Assert.IsNotNull(EntityDebuggerStyles.ComponentRequired); + Assert.IsNotNull(EntityDebuggerStyles.ComponentExclude); + Assert.IsNotNull(EntityDebuggerStyles.ComponentReadOnly); + Assert.IsNotNull(EntityDebuggerStyles.ComponentReadWrite); + + Assert.IsNotNull(EntityDebuggerStyles.ComponentRequired.normal.background); + Assert.IsNotNull(EntityDebuggerStyles.ComponentExclude.normal.background); + Assert.IsNotNull(EntityDebuggerStyles.ComponentReadOnly.normal.background); + Assert.IsNotNull(EntityDebuggerStyles.ComponentReadWrite.normal.background); + } + + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityDebuggerTests.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityDebuggerTests.cs.meta new file mode 100644 index 000000000..7f3b7e0c2 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityDebuggerTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5db40a1516f304b528d9d84f0bcb29b7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityQueryGUITests.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityQueryGUITests.cs new file mode 100644 index 000000000..e2a7a69f4 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityQueryGUITests.cs @@ -0,0 +1,76 @@ +using System.Collections.Generic; +using NUnit.Framework; + +namespace Unity.Entities.Editor.Tests +{ + + public struct JustComponentNonExclude: IComponentData {} + public struct ZeroSizedComponent: IComponentData {} + public struct NonZeroSizedComponent : IComponentData + { + public float Value; + } + + public class ExclusionGroupSampleSystem : ComponentSystem + { + public EntityQuery Group1; + public EntityQuery Group2; + + protected override void OnCreate() + { + Group1 = GetEntityQuery(typeof(JustComponentNonExclude), ComponentType.Exclude()); + Group2 = GetEntityQuery(typeof(JustComponentNonExclude), ComponentType.Exclude()); + } + + protected override void OnUpdate() + { + throw new System.NotImplementedException(); + } + } + + class GenericClassTest + { + public class InternalClass {} + public class InternalGenericClass {} + } + + public class EntityQueryGUITests + { + + [Test] + public void EntityQueryGUI_SpecifiedTypeName_NestedTypeInGeneric() + { + var typeName = EntityQueryGUI.SpecifiedTypeName(typeof(GenericClassTest.InternalClass)); + Assert.AreEqual("GenericClassTest.InternalClass", typeName); + } + + [Test] + public void EntityQueryGUI_SpecifiedTypeName_NestedGenericTypeInGeneric() + { + var typeName = EntityQueryGUI.SpecifiedTypeName(typeof(GenericClassTest.InternalGenericClass)); + Assert.AreEqual("GenericClassTest.InternalGenericClass", typeName); + } + + [Test] + public void EntityQueryGUI_ExcludedTypesUnaffectedByLength() + { + using (var world = new World("Test")) + { + var system = world.CreateSystem(); + var ui1 = new EntityQueryGUIControl(system.Group1.GetQueryTypes(), system.Group1.GetReadAndWriteTypes(), false); + Assert.AreEqual(EntityDebuggerStyles.ComponentExclude, ui1.styles[1]); + var ui2 = new EntityQueryGUIControl(system.Group2.GetQueryTypes(), system.Group2.GetReadAndWriteTypes(), false); + Assert.AreEqual(EntityDebuggerStyles.ComponentExclude, ui2.styles[1]); + } + + } + + [Test] + public void EntityQueryGUI_ZeroComponentsHasZeroHeight() + { + var ui = new EntityQueryGUIControl(new List(), true); + ui.UpdateSize(100f); + Assert.AreEqual(0, ui.Height); + } + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityQueryGUITests.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityQueryGUITests.cs.meta new file mode 100644 index 000000000..3d386d311 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/EntityQueryGUITests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08b88c50facd4417c85a486d7a929800 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/ListViewTests.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/ListViewTests.cs new file mode 100644 index 000000000..e30525072 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/ListViewTests.cs @@ -0,0 +1,193 @@ +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using Unity.Entities.Tests; +using UnityEditor.IMGUI.Controls; + +namespace Unity.Entities.Editor.Tests +{ + class ListViewTests : ECSTestsFixture + { + private static void SetEntitySelection(Entity s) + { + } + + private World GetWorldSelection() + { + return World; + } + + private static void SetComponentGroupSelection(EntityListQuery query) + { + } + + private static void SetSystemSelection(ComponentSystemBase system, World world) + { + } + + private EntityListQuery AllQuery => new EntityListQuery(new EntityQueryDesc(){All = new ComponentType[0], Any = new ComponentType[0], None = new ComponentType[0]}); + + private World World2; + + public override void Setup() + { + base.Setup(); + + ScriptBehaviourUpdateOrder.UpdatePlayerLoop(World.DefaultGameObjectInjectionWorld); + + World2 = new World("Test World 2"); + var emptySys = World2.GetOrCreateSystem(); + World.GetOrCreateSystem().AddSystemToUpdateList(emptySys); + World.GetOrCreateSystem().SortSystemUpdateList(); + } + + public override void TearDown() + { + World2.Dispose(); + World2 = null; + + base.TearDown(); + + ScriptBehaviourUpdateOrder.UpdatePlayerLoop(null); + } + + [Test] + public void EntityListView_ShowNothingWithoutWorld() + { + m_Manager.CreateEntity(); + var emptySystem = World.GetOrCreateSystem(); + ComponentSystemBase currentSystem = null; + + using (var listView = new EntityListView(new TreeViewState(), null, SetEntitySelection, () => null, + () => currentSystem, x => {})) + { + currentSystem = emptySystem; + listView.SelectedEntityQuery = null; + Assert.IsFalse(listView.ShowingSomething); + + currentSystem = null; + listView.SelectedEntityQuery = null; + Assert.IsFalse(listView.ShowingSomething); + + currentSystem = null; + listView.SelectedEntityQuery = AllQuery; + Assert.IsFalse(listView.ShowingSomething); + } + } + + [Test] + public void EntityListView_ShowEntitiesFromWorld() + { + m_Manager.CreateEntity(); + var emptySystem = World.GetOrCreateSystem(); + var selectedWorld = World; + ComponentSystemBase currentSystem = null; + + using (var listView = new EntityListView(new TreeViewState(), null, SetEntitySelection, () => selectedWorld, + () => currentSystem, x => {})) + { + // TODO EntityManager is no longer a system + /* + currentSystem = World.Active.EntityManager; + listView.SelectedEntityQuery = AllQuery; + Assert.IsTrue(listView.ShowingSomething); + Assert.AreEqual(1, listView.GetRows().Count); + + currentSystem = World.Active.EntityManager; + listView.SelectedEntityQuery = null; + Assert.IsTrue(listView.ShowingSomething); + Assert.AreEqual(1, listView.GetRows().Count); + */ + + currentSystem = emptySystem; + listView.SelectedEntityQuery = null; + Assert.IsFalse(listView.ShowingSomething); + } + } + + [Test] + public void EntityListView_ShowNothingWithNoEntityManager() + { + using (var incompleteWorld = new World("test 2")) + { + using (var listView = new EntityListView(new TreeViewState(), null, SetEntitySelection, () => incompleteWorld, + () => null, x => {})) + { + listView.SelectedEntityQuery = null; + Assert.AreEqual(0, listView.GetRows().Count); + } + } + } + + [Test] + public void ComponentGroupListView_CanSetNullSystem() + { + var listView = new EntityQueryListView(new TreeViewState(), EmptySystem, SetComponentGroupSelection, GetWorldSelection); + + Assert.DoesNotThrow(() => listView.SelectedSystem = null); + } + + [Test] + public void ComponentGroupListView_SortOrderExpected() + { + var typeList = new List(); + var subtractive = ComponentType.Exclude(); + var readWrite = ComponentType.ReadWrite(); + var readOnly = ComponentType.ReadOnly(); + + typeList.Add(subtractive); + typeList.Add(readOnly); + typeList.Add(readWrite); + typeList.Sort(EntityQueryGUI.CompareTypes); + + Assert.AreEqual(readOnly, typeList[0]); + Assert.AreEqual(readWrite, typeList[1]); + Assert.AreEqual(subtractive, typeList[2]); + } + + [Test] + public void SystemListView_CanCreateWithNullWorld() + { + SystemListView listView; + var states = new List(); + var stateNames = new List(); + Assert.DoesNotThrow(() => + { + listView = SystemListView.CreateList(states, stateNames, SetSystemSelection, () => null, () => true); + listView.Reload(); + }); + } + + [Test] + public void SystemListView_ShowExactlyWorldSystems() + { + var listView = new SystemListView( + new TreeViewState(), + new MultiColumnHeader(SystemListView.GetHeaderState()), + (system, world) => { }, + () => World2, + () => true); + var systemItems = listView.GetRows().Where(x => listView.systemsById.ContainsKey(x.id)).Select(x => listView.systemsById[x.id]); + var systemList = systemItems.ToList(); + Assert.AreEqual(World2.Systems.Count(), systemList.Intersect(World2.Systems).Count()); + } + + [Test] + public void SystemListView_NullWorldShowsAllSystems() + { + var listView = new SystemListView( + new TreeViewState(), + new MultiColumnHeader(SystemListView.GetHeaderState()), + (system, world) => { }, + () => null, + () => true); + var systemItems = listView.GetRows().Where(x => listView.systemsById.ContainsKey(x.id)).Select(x => listView.systemsById[x.id]); + var allSystems = new List(); + allSystems.AddRange(World.Systems); + allSystems.AddRange(World2.Systems); + var systemList = systemItems.ToList(); + Assert.AreEqual(allSystems.Count(x => !(x is ComponentSystemGroup) ), allSystems.Intersect(systemList).Count()); + } + + } +} diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/ListViewTests.cs.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/ListViewTests.cs.meta new file mode 100644 index 000000000..8690d8121 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/ListViewTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c052179a9eeb4183a37a99d1ecaa056 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/LiveLink.meta b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/LiveLink.meta new file mode 100644 index 000000000..5c8838f97 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/LiveLink.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3c0d02f31c323d54889ffa52b0c98a88 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/LiveLink/LiveLinkDropdownTests.cs b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/LiveLink/LiveLinkDropdownTests.cs new file mode 100644 index 000000000..c4f346241 --- /dev/null +++ b/ECSSamples/Packages/com.unity.entities@0.6.0-preview.24/Unity.Entities.Editor.Tests/LiveLink/LiveLinkDropdownTests.cs @@ -0,0 +1,212 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using NUnit.Framework; +using UnityEngine.UIElements; + +namespace Unity.Entities.Editor.Tests +{ + [TestFixture] + class LiveLinkDropdownTests + { + [Test] + public void LiveLinkConnection_PublishEvents() + { + var nameChanges = new List(); + var statusChanges = new List<(LiveLinkConnectionsDropdown.LiveLinkConnection, LiveLinkConnectionsDropdown.LiveLinkConnectionStatus)>(); + var buildConfigurationChanges = new List(); + var c = new LiveLinkConnectionsDropdown.LiveLinkConnection(1, "name", LiveLinkConnectionsDropdown.LiveLinkConnectionStatus.Connected, new Hash128(Guid.NewGuid().ToString("N"))); + c.NameChanged += sender => nameChanges.Add(sender); + c.StatusChanged += (sender, previousStatus) => statusChanges.Add((sender, previousStatus)); + c.BuildConfigurationGuidChanged += sender => buildConfigurationChanges.Add(sender); + + c.Name = "another name"; + Assert.That(nameChanges, Is.EquivalentTo(new[] { c })); + Assert.That(c.Name, Is.EqualTo("another name")); + Assert.That(statusChanges, Is.Empty); + Assert.That(buildConfigurationChanges, Is.Empty); + nameChanges.Clear(); + + c.Status = LiveLinkConnectionsDropdown.LiveLinkConnectionStatus.Disabled; + Assert.That(statusChanges, Is.EquivalentTo(new[] { (c, LiveLinkConnectionsDropdown.LiveLinkConnectionStatus.Connected) })); + Assert.That(c.Status, Is.EqualTo(LiveLinkConnectionsDropdown.LiveLinkConnectionStatus.Disabled)); + Assert.That(nameChanges, Is.Empty); + Assert.That(buildConfigurationChanges, Is.Empty); + statusChanges.Clear(); + + var otherBuildConfigurationGuid = new Hash128(Guid.NewGuid().ToString("N")); + c.BuildConfigurationGuid = otherBuildConfigurationGuid; + Assert.That(buildConfigurationChanges, Is.EquivalentTo(new[] { c })); + Assert.That(c.BuildConfigurationGuid, Is.EqualTo(otherBuildConfigurationGuid)); + Assert.That(statusChanges, Is.Empty); + Assert.That(nameChanges, Is.Empty); + buildConfigurationChanges.Clear(); + } + + [Test] + public void LiveLinkConnection_DontPublishEventsWhenNothingChanges() + { + var c = new LiveLinkConnectionsDropdown.LiveLinkConnection(1, "name", LiveLinkConnectionsDropdown.LiveLinkConnectionStatus.Connected, new Hash128(Guid.NewGuid().ToString("N"))); + c.NameChanged += delegate { Assert.Fail($"{nameof(c.NameChanged)} event shouldn't be fired"); }; + c.StatusChanged += delegate { Assert.Fail($"{nameof(c.StatusChanged)} event shouldn't be fired"); }; + c.BuildConfigurationGuidChanged += delegate { Assert.Fail($"{nameof(c.BuildConfigurationGuidChanged)} event shouldn't be fired"); }; + + c.Name = c.Name; + c.Status = c.Status; + c.BuildConfigurationGuid = c.BuildConfigurationGuid; + } + + [Test] + public void LiveLinkConnectionsView_GenerateValidUI() + { + var configurationGuid1 = new Hash128(Guid.NewGuid().ToString("N")); + var configurationGuid2 = new Hash128(Guid.NewGuid().ToString("N")); + var connections = new ObservableCollection + { + new LiveLinkConnectionsDropdown.LiveLinkConnection(1, "player 1", LiveLinkConnectionsDropdown.LiveLinkConnectionStatus.Connected, configurationGuid1), + new LiveLinkConnectionsDropdown.LiveLinkConnection(2, "player 2", LiveLinkConnectionsDropdown.LiveLinkConnectionStatus.Connected, configurationGuid1), + new LiveLinkConnectionsDropdown.LiveLinkConnection(3, "player 3", LiveLinkConnectionsDropdown.LiveLinkConnectionStatus.Connected, configurationGuid2), + }; + + var view = new LiveLinkConnectionsDropdown.LiveLinkConnectionsView(connections, hash128 => hash128.ToString()); + var root = new VisualElement(); + view.BuildFullUI(root); + + // Ensure groups are visible and empty message hidden + var groupsContainer = root.GetItem("live-link-connections-dropdown__Groups"); + Assert.That(groupsContainer.style.display.value, Is.EqualTo(DisplayStyle.Flex)); + Assert.That(root.GetItem("live-link-connections-dropdown__EmptyMessage").style.display.value, Is.EqualTo(DisplayStyle.None)); + + // Ensure there are 2 groups and they have the correct names + var groups = groupsContainer.GetItems(className: "live-link-connections-dropdown__groups__item"); + Assert.That(groups.Count, Is.EqualTo(2)); + var groupsNames = groupsContainer.Query(className: "live-link-connections-dropdown__groups__item__title").Children