diff --git a/[AIOLOS]/.vs/[AIOLOS]/v16/.suo b/[AIOLOS]/.vs/[AIOLOS]/v16/.suo index 9aaf7533a629f7d55483de7fe161e7833a5bb875..aef87c2b165b5854f86b1eedd3118f47cd640f05 100644 Binary files a/[AIOLOS]/.vs/[AIOLOS]/v16/.suo and b/[AIOLOS]/.vs/[AIOLOS]/v16/.suo differ diff --git a/[AIOLOS]/.vs/[AIOLOS]/v16/Server/sqlite3/storage.ide b/[AIOLOS]/.vs/[AIOLOS]/v16/Server/sqlite3/storage.ide index 1426cef30e1de74d19898a7eb454f2bbb0bd6980..3733332797afb34154f327bbfe8c82fcd8afe05d 100644 Binary files a/[AIOLOS]/.vs/[AIOLOS]/v16/Server/sqlite3/storage.ide and b/[AIOLOS]/.vs/[AIOLOS]/v16/Server/sqlite3/storage.ide differ diff --git a/[AIOLOS]/Assembly-CSharp-Editor.csproj b/[AIOLOS]/Assembly-CSharp-Editor.csproj index e270477ceace68ce3057581b72620724253f6f1c..5178fc7a815f2c14fc37d5eb3982d228f2e76baa 100644 --- a/[AIOLOS]/Assembly-CSharp-Editor.csproj +++ b/[AIOLOS]/Assembly-CSharp-Editor.csproj @@ -22,7 +22,7 @@ <DebugType>full</DebugType> <Optimize>false</Optimize> <OutputPath>Temp\Bin\Debug\</OutputPath> - <DefineConstants>DEBUG;TRACE;UNITY_2020_3_4;UNITY_2020_3;UNITY_2020;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_INCLUDE_TESTS;USE_SEARCH_ENGINE_API;SCENE_TEMPLATE_MODULE;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_VIRTUALTEXTURING;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;INCLUDE_DYNAMIC_GI;ENABLE_MONO_BDWGC;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;PLATFORM_STANDALONE;PLATFORM_STANDALONE_WIN;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;GFXDEVICE_WAITFOREVENT_MESSAGEPUMP;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_INPUT_SYSTEM;STARTER_ASSETS_PACKAGES_CHECKED;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER;NET_STANDARD_2_0</DefineConstants> + <DefineConstants>DEBUG;TRACE;UNITY_2020_3_4;UNITY_2020_3;UNITY_2020;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_INCLUDE_TESTS;USE_SEARCH_ENGINE_API;SCENE_TEMPLATE_MODULE;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_VIRTUALTEXTURING;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;INCLUDE_DYNAMIC_GI;ENABLE_MONO_BDWGC;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;PLATFORM_STANDALONE;PLATFORM_STANDALONE_WIN;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;GFXDEVICE_WAITFOREVENT_MESSAGEPUMP;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_INPUT_SYSTEM;ENABLE_LEGACY_INPUT_MANAGER;STARTER_ASSETS_PACKAGES_CHECKED;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER;NET_STANDARD_2_0</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> <NoWarn>0169</NoWarn> @@ -53,11 +53,11 @@ <UnityVersion>2020.3.4f1</UnityVersion> </PropertyGroup> <ItemGroup> - <Compile Include="Assets\StarterAssets\TutorialInfo\Scripts\Editor\ReadmeEditor.cs" /> <Compile Include="Assets\StarterAssets\Editor\ScriptingDefineUtils.cs" /> <Compile Include="Assets\StarterAssets\Editor\ThirdPersonStarterAssetsDeployMenu.cs" /> - <Compile Include="Assets\StarterAssets\Editor\PackageChecker\PackageChecker.cs" /> <Compile Include="Assets\StarterAssets\Editor\StarterAssetsDeployMenu.cs" /> + <Compile Include="Assets\StarterAssets\TutorialInfo\Scripts\Editor\ReadmeEditor.cs" /> + <Compile Include="Assets\StarterAssets\Editor\PackageChecker\PackageChecker.cs" /> </ItemGroup> <ItemGroup> <None Include="Assets\StarterAssets\Editor\PackageChecker\PackageImportList.txt" /> @@ -652,9 +652,15 @@ <Reference Include="UnityEditor.TestRunner"> <HintPath>Library\ScriptAssemblies\UnityEditor.TestRunner.dll</HintPath> </Reference> + <Reference Include="Cinemachine"> + <HintPath>Library\ScriptAssemblies\Cinemachine.dll</HintPath> + </Reference> <Reference Include="Unity.VSCode.Editor"> <HintPath>Library\ScriptAssemblies\Unity.VSCode.Editor.dll</HintPath> </Reference> + <Reference Include="com.unity.cinemachine.editor"> + <HintPath>Library\ScriptAssemblies\com.unity.cinemachine.editor.dll</HintPath> + </Reference> <Reference Include="Unity.TextMeshPro.Editor"> <HintPath>Library\ScriptAssemblies\Unity.TextMeshPro.Editor.dll</HintPath> </Reference> @@ -673,20 +679,26 @@ <Reference Include="UnityEditor.UI"> <HintPath>Library\ScriptAssemblies\UnityEditor.UI.dll</HintPath> </Reference> + <Reference Include="Unity.InputSystem"> + <HintPath>Library\ScriptAssemblies\Unity.InputSystem.dll</HintPath> + </Reference> <Reference Include="Unity.Rider.Editor"> <HintPath>Library\ScriptAssemblies\Unity.Rider.Editor.dll</HintPath> </Reference> <Reference Include="UnityEngine.UI"> <HintPath>Library\ScriptAssemblies\UnityEngine.UI.dll</HintPath> </Reference> - <Reference Include="Unity.InputSystem"> - <HintPath>Library\ScriptAssemblies\Unity.InputSystem.dll</HintPath> + <Reference Include="Unity.ProBuilder"> + <HintPath>Library\ScriptAssemblies\Unity.ProBuilder.dll</HintPath> </Reference> - <Reference Include="Cinemachine"> - <HintPath>Library\ScriptAssemblies\Cinemachine.dll</HintPath> + <Reference Include="Unity.ProBuilder.AddOns.Editor"> + <HintPath>Library\ScriptAssemblies\Unity.ProBuilder.AddOns.Editor.dll</HintPath> </Reference> - <Reference Include="com.unity.cinemachine.editor"> - <HintPath>Library\ScriptAssemblies\com.unity.cinemachine.editor.dll</HintPath> + <Reference Include="Unity.ProBuilder.Editor"> + <HintPath>Library\ScriptAssemblies\Unity.ProBuilder.Editor.dll</HintPath> + </Reference> + <Reference Include="Unity.ProBuilder.AssetIdRemapUtility"> + <HintPath>Library\ScriptAssemblies\Unity.ProBuilder.AssetIdRemapUtility.dll</HintPath> </Reference> </ItemGroup> <ItemGroup> diff --git a/[AIOLOS]/Assembly-CSharp.csproj b/[AIOLOS]/Assembly-CSharp.csproj index a863034900960d9ad0190e308a625256e2a69af9..4a86bb89db8dc5c8da40ba82da380becabd1669c 100644 --- a/[AIOLOS]/Assembly-CSharp.csproj +++ b/[AIOLOS]/Assembly-CSharp.csproj @@ -22,7 +22,7 @@ <DebugType>full</DebugType> <Optimize>false</Optimize> <OutputPath>Temp\Bin\Debug\</OutputPath> - <DefineConstants>DEBUG;TRACE;UNITY_2020_3_4;UNITY_2020_3;UNITY_2020;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_INCLUDE_TESTS;USE_SEARCH_ENGINE_API;SCENE_TEMPLATE_MODULE;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_VIRTUALTEXTURING;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;INCLUDE_DYNAMIC_GI;ENABLE_MONO_BDWGC;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;PLATFORM_STANDALONE;PLATFORM_STANDALONE_WIN;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;GFXDEVICE_WAITFOREVENT_MESSAGEPUMP;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_STANDARD_2_0;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_INPUT_SYSTEM;STARTER_ASSETS_PACKAGES_CHECKED;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER</DefineConstants> + <DefineConstants>DEBUG;TRACE;UNITY_2020_3_4;UNITY_2020_3;UNITY_2020;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_INCLUDE_TESTS;USE_SEARCH_ENGINE_API;SCENE_TEMPLATE_MODULE;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_VIRTUALTEXTURING;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;INCLUDE_DYNAMIC_GI;ENABLE_MONO_BDWGC;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;PLATFORM_STANDALONE;PLATFORM_STANDALONE_WIN;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;GFXDEVICE_WAITFOREVENT_MESSAGEPUMP;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_STANDARD_2_0;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_INPUT_SYSTEM;ENABLE_LEGACY_INPUT_MANAGER;STARTER_ASSETS_PACKAGES_CHECKED;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> <NoWarn>0169</NoWarn> @@ -53,15 +53,15 @@ <UnityVersion>2020.3.4f1</UnityVersion> </PropertyGroup> <ItemGroup> - <Compile Include="Assets\StarterAssets\ThirdPersonController\Scripts\ThirdPersonController.cs" /> - <Compile Include="Assets\StarterAssets\TutorialInfo\Scripts\Readme.cs" /> - <Compile Include="Assets\StarterAssets\Mobile\Scripts\CanvasInputs\UICanvasControllerInput.cs" /> <Compile Include="Assets\StarterAssets\Mobile\Scripts\VirtualInputs\UIVirtualJoystick.cs" /> <Compile Include="Assets\StarterAssets\Mobile\Scripts\VirtualInputs\UIVirtualTouchZone.cs" /> <Compile Include="Assets\StarterAssets\Mobile\Scripts\VirtualInputs\UIVirtualButton.cs" /> - <Compile Include="Assets\StarterAssets\Mobile\Scripts\Utilities\MobileDisableAutoSwitchControls.cs" /> <Compile Include="Assets\StarterAssets\InputSystem\StarterAssetsInputs.cs" /> <Compile Include="Assets\StarterAssets\ThirdPersonController\Scripts\BasicRigidBodyPush.cs" /> + <Compile Include="Assets\StarterAssets\TutorialInfo\Scripts\Readme.cs" /> + <Compile Include="Assets\StarterAssets\Mobile\Scripts\CanvasInputs\UICanvasControllerInput.cs" /> + <Compile Include="Assets\StarterAssets\Mobile\Scripts\Utilities\MobileDisableAutoSwitchControls.cs" /> + <Compile Include="Assets\StarterAssets\ThirdPersonController\Scripts\ThirdPersonController.cs" /> </ItemGroup> <ItemGroup> <None Include="Assets\StarterAssets\Environment\Shaders\Built-in_RP\Triplanar.shader" /> @@ -634,9 +634,15 @@ <Reference Include="System.Xml.Serialization"> <HintPath>C:\Program Files\Unity\Hub\Editor\2020.3.4f1\Editor\Data\NetStandard\compat\2.0.0\shims\netfx\System.Xml.Serialization.dll</HintPath> </Reference> + <Reference Include="Cinemachine"> + <HintPath>Library\ScriptAssemblies\Cinemachine.dll</HintPath> + </Reference> <Reference Include="Unity.VSCode.Editor"> <HintPath>Library\ScriptAssemblies\Unity.VSCode.Editor.dll</HintPath> </Reference> + <Reference Include="com.unity.cinemachine.editor"> + <HintPath>Library\ScriptAssemblies\com.unity.cinemachine.editor.dll</HintPath> + </Reference> <Reference Include="Unity.TextMeshPro.Editor"> <HintPath>Library\ScriptAssemblies\Unity.TextMeshPro.Editor.dll</HintPath> </Reference> @@ -655,20 +661,26 @@ <Reference Include="UnityEditor.UI"> <HintPath>Library\ScriptAssemblies\UnityEditor.UI.dll</HintPath> </Reference> + <Reference Include="Unity.InputSystem"> + <HintPath>Library\ScriptAssemblies\Unity.InputSystem.dll</HintPath> + </Reference> <Reference Include="Unity.Rider.Editor"> <HintPath>Library\ScriptAssemblies\Unity.Rider.Editor.dll</HintPath> </Reference> <Reference Include="UnityEngine.UI"> <HintPath>Library\ScriptAssemblies\UnityEngine.UI.dll</HintPath> </Reference> - <Reference Include="Unity.InputSystem"> - <HintPath>Library\ScriptAssemblies\Unity.InputSystem.dll</HintPath> + <Reference Include="Unity.ProBuilder"> + <HintPath>Library\ScriptAssemblies\Unity.ProBuilder.dll</HintPath> </Reference> - <Reference Include="Cinemachine"> - <HintPath>Library\ScriptAssemblies\Cinemachine.dll</HintPath> + <Reference Include="Unity.ProBuilder.AddOns.Editor"> + <HintPath>Library\ScriptAssemblies\Unity.ProBuilder.AddOns.Editor.dll</HintPath> </Reference> - <Reference Include="com.unity.cinemachine.editor"> - <HintPath>Library\ScriptAssemblies\com.unity.cinemachine.editor.dll</HintPath> + <Reference Include="Unity.ProBuilder.Editor"> + <HintPath>Library\ScriptAssemblies\Unity.ProBuilder.Editor.dll</HintPath> + </Reference> + <Reference Include="Unity.ProBuilder.AssetIdRemapUtility"> + <HintPath>Library\ScriptAssemblies\Unity.ProBuilder.AssetIdRemapUtility.dll</HintPath> </Reference> </ItemGroup> <ItemGroup> diff --git a/[AIOLOS]/Assets/Material/New Material.mat b/[AIOLOS]/Assets/Material/New Material.mat new file mode 100644 index 0000000000000000000000000000000000000000..970c29a06b37cc988b9c91f8f621e2a2d71bda6d --- /dev/null +++ b/[AIOLOS]/Assets/Material/New Material.mat @@ -0,0 +1,78 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: New Material + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 6344bf96fbda94141a525046d088fb23, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.509434, g: 0.509434, b: 0.509434, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/[AIOLOS]/Assets/Material/New Material.mat.meta b/[AIOLOS]/Assets/Material/New Material.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..3769cadb93dbed7e9367b9bafab061434f27c872 --- /dev/null +++ b/[AIOLOS]/Assets/Material/New Material.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ed7f443b803d7fb4bbb3f4390dcff316 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Assets/Scenes/SampleScene.unity b/[AIOLOS]/Assets/Scenes/SampleScene.unity index df83bec6a39682b3800a9ac674ab81fbdbcd33fe..1605277c75a4ffb06a8f7a52acc60705be82efa4 100644 --- a/[AIOLOS]/Assets/Scenes/SampleScene.unity +++ b/[AIOLOS]/Assets/Scenes/SampleScene.unity @@ -123,102 +123,6 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &52411631 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 52411635} - - component: {fileID: 52411634} - - component: {fileID: 52411633} - - component: {fileID: 52411632} - m_Layer: 0 - m_Name: Floor - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!64 &52411632 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 52411631} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &52411633 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 52411631} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: eb4ac0372fbf73a438228e1fffe3bff7, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &52411634 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 52411631} - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &52411635 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 52411631} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 20, y: 1, z: 20} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &87203642 stripped GameObject: m_CorrespondingSourceObject: {fileID: 2070925441746177671, guid: a1a802ecaf6775746bb2a929fb554ad8, type: 3} @@ -305,11 +209,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -6452266432751415832, guid: e478e8cff085760498deb72189146ac1, type: 3} propertyPath: m_Layer - value: 2 + value: 0 objectReference: {fileID: 0} - target: {fileID: 635547659545568360, guid: e478e8cff085760498deb72189146ac1, type: 3} propertyPath: m_Layer - value: 2 + value: 0 objectReference: {fileID: 0} - target: {fileID: 919132149155446097, guid: e478e8cff085760498deb72189146ac1, type: 3} propertyPath: m_Name @@ -317,11 +221,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 919132149155446097, guid: e478e8cff085760498deb72189146ac1, type: 3} propertyPath: m_Layer - value: 2 + value: 0 objectReference: {fileID: 0} - target: {fileID: 6657560127643677590, guid: e478e8cff085760498deb72189146ac1, type: 3} propertyPath: m_Layer - value: 2 + value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e478e8cff085760498deb72189146ac1, type: 3} @@ -486,7 +390,7 @@ Transform: - {fileID: 935058640} - {fileID: 297463493} m_Father: {fileID: 0} - m_RootOrder: 5 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &304283193 MonoBehaviour: @@ -513,12 +417,16 @@ MonoBehaviour: groundedRadius: 0.3 groundLayers: serializedVersion: 2 - m_Bits: 1 + m_Bits: 8 cinemachineCameraTarget: {fileID: 589542990} topClamp: 70 bottomClamp: -30 cameraAngleOverride: 0 lockCameraPosition: 0 + dodgeDistance: 0.4 + dodgeTime: 0.08 + dodgeSpeed: 0 + dodgeCooldown: 0.5 _maxZoom: 60 _minZoom: 10 _zoomSpeed: 0.05 @@ -627,6 +535,22 @@ MonoBehaviour: m_CallState: 2 m_ActionId: b1084bc0-2a09-4862-b064-db6b852d5ada m_ActionName: Player/Zoom[/Mouse/scroll] + - m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 304283195} + m_TargetAssemblyTypeName: StarterAssets.StarterAssetsInputs, Assembly-CSharp + m_MethodName: OnDodge + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_ActionId: dc0ca802-73eb-4f55-9efd-d0ee3d70d3eb + m_ActionName: Player/Dodge[/Keyboard/leftShift] m_NeverAutoSwitchControlSchemes: 0 m_DefaultControlScheme: m_DefaultActionMap: Player @@ -649,6 +573,7 @@ MonoBehaviour: jump: 0 sprint: 0 zoom: {x: 0, y: 0} + dodge: 0 analogMovement: 0 cursorLocked: 1 cursorInputForLook: 1 @@ -697,7 +622,7 @@ GameObject: m_Component: - component: {fileID: 584650212} - component: {fileID: 584650211} - m_Layer: 0 + m_Layer: 2 m_Name: CM FreeLook1 m_TagString: CinemachineCamera m_Icon: {fileID: 0} @@ -820,7 +745,7 @@ Transform: - {fileID: 1931772137} - {fileID: 1813819120} m_Father: {fileID: 0} - m_RootOrder: 6 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &589542990 GameObject: @@ -864,7 +789,7 @@ GameObject: - component: {fileID: 647710575} - component: {fileID: 647710574} - component: {fileID: 647710573} - m_Layer: 0 + m_Layer: 2 m_Name: cm m_TagString: Untagged m_Icon: {fileID: 0} @@ -1071,6 +996,790 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &738414483 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 738414488} + - component: {fileID: 738414487} + - component: {fileID: 738414486} + - component: {fileID: 738414485} + - component: {fileID: 738414484} + m_Layer: 3 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!64 &738414484 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738414483} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 883230979} +--- !u!33 &738414485 +MeshFilter: + m_ObjectHideFlags: 10 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738414483} + m_Mesh: {fileID: 883230979} +--- !u!23 &738414486 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738414483} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: ed7f443b803d7fb4bbb3f4390dcff316, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 2 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &738414487 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738414483} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8233d90336aea43098adf6dbabd606a2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MeshFormatVersion: 1 + m_Faces: + - m_Indexes: 000000000100000002000000010000000300000002000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: 0 + m_TextureGroup: -1 + - m_Indexes: 040000000500000006000000050000000700000006000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: 0 + m_TextureGroup: -1 + - m_Indexes: 08000000090000000a000000090000000b0000000a000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: 0 + m_TextureGroup: -1 + - m_Indexes: 0c0000000d0000000e0000000d0000000f0000000e000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: 0 + m_TextureGroup: -1 + - m_Indexes: 100000001100000012000000110000001300000012000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: 0 + m_TextureGroup: -1 + - m_Indexes: 140000001500000016000000150000001700000016000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: 0 + m_TextureGroup: -1 + - m_Indexes: 18000000190000001a000000190000001b0000001a000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: 0 + m_TextureGroup: -1 + - m_Indexes: 1c0000001d0000001e0000001d0000001f0000001e000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: 0 + m_TextureGroup: -1 + - m_Indexes: 200000002100000022000000210000002300000022000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: 0 + m_TextureGroup: -1 + - m_Indexes: 240000002500000026000000250000002700000026000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: 0 + m_TextureGroup: -1 + - m_Indexes: 28000000290000002a000000290000002b0000002a000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: 0 + m_TextureGroup: -1 + - m_Indexes: 2c0000002d0000002e0000002d0000002f0000002e000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: 0 + m_TextureGroup: -1 + - m_Indexes: 300000003100000032000000310000003300000032000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: 0 + m_TextureGroup: -1 + - m_Indexes: 340000003500000036000000350000003700000036000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: 0 + m_TextureGroup: -1 + - m_Indexes: 38000000390000003a000000390000003b0000003a000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: 0 + m_TextureGroup: -1 + - m_Indexes: 3c0000003d0000003e0000003d0000003f0000003e000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: 0 + m_TextureGroup: -1 + m_SharedVertices: + - m_Vertices: 00000000 + - m_Vertices: 0100000004000000 + - m_Vertices: 0200000010000000 + - m_Vertices: 03000000060000001100000014000000 + - m_Vertices: 0500000008000000 + - m_Vertices: 070000000a0000001500000018000000 + - m_Vertices: 090000000c000000 + - m_Vertices: 0b0000000e000000190000001c000000 + - m_Vertices: 0d000000 + - m_Vertices: 0f0000001d000000 + - m_Vertices: 1200000020000000 + - m_Vertices: 13000000160000002100000024000000 + - m_Vertices: 170000001a0000002500000028000000 + - m_Vertices: 1b0000001e000000290000002c000000 + - m_Vertices: 1f0000002d000000 + - m_Vertices: 2200000030000000 + - m_Vertices: 23000000260000003100000034000000 + - m_Vertices: 270000002a0000003500000038000000 + - m_Vertices: 2b0000002e000000390000003c000000 + - m_Vertices: 2f0000003d000000 + - m_Vertices: 32000000 + - m_Vertices: 3300000036000000 + - m_Vertices: 370000003a000000 + - m_Vertices: 3b0000003e000000 + - m_Vertices: 3f000000 + m_SharedTextures: [] + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 2.5} + - {x: 2.5, y: 0, z: 0} + - {x: 2.5, y: 0, z: 2.5} + - {x: 0, y: 0, z: 2.5} + - {x: 0, y: 0, z: 5} + - {x: 2.5, y: 0, z: 2.5} + - {x: 2.5, y: 0, z: 5} + - {x: 0, y: 0, z: 5} + - {x: 0, y: 0, z: 7.5} + - {x: 2.5, y: 0, z: 5} + - {x: 2.5, y: 0, z: 7.5} + - {x: 0, y: 0, z: 7.5} + - {x: 0, y: 0, z: 10} + - {x: 2.5, y: 0, z: 7.5} + - {x: 2.5, y: 0, z: 10} + - {x: 2.5, y: 0, z: 0} + - {x: 2.5, y: 0, z: 2.5} + - {x: 5, y: 0, z: 0} + - {x: 5, y: 0, z: 2.5} + - {x: 2.5, y: 0, z: 2.5} + - {x: 2.5, y: 0, z: 5} + - {x: 5, y: 0, z: 2.5} + - {x: 5, y: 0, z: 5} + - {x: 2.5, y: 0, z: 5} + - {x: 2.5, y: 0, z: 7.5} + - {x: 5, y: 0, z: 5} + - {x: 5, y: 0, z: 7.5} + - {x: 2.5, y: 0, z: 7.5} + - {x: 2.5, y: 0, z: 10} + - {x: 5, y: 0, z: 7.5} + - {x: 5, y: 0, z: 10} + - {x: 5, y: 0, z: 0} + - {x: 5, y: 0, z: 2.5} + - {x: 7.5, y: 0, z: 0} + - {x: 7.5, y: 0, z: 2.5} + - {x: 5, y: 0, z: 2.5} + - {x: 5, y: 0, z: 5} + - {x: 7.5, y: 0, z: 2.5} + - {x: 7.5, y: 0, z: 5} + - {x: 5, y: 0, z: 5} + - {x: 5, y: 0, z: 7.5} + - {x: 7.5, y: 0, z: 5} + - {x: 7.5, y: 0, z: 7.5} + - {x: 5, y: 0, z: 7.5} + - {x: 5, y: 0, z: 10} + - {x: 7.5, y: 0, z: 7.5} + - {x: 7.5, y: 0, z: 10} + - {x: 7.5, y: 0, z: 0} + - {x: 7.5, y: 0, z: 2.5} + - {x: 10, y: 0, z: 0} + - {x: 10, y: 0, z: 2.5} + - {x: 7.5, y: 0, z: 2.5} + - {x: 7.5, y: 0, z: 5} + - {x: 10, y: 0, z: 2.5} + - {x: 10, y: 0, z: 5} + - {x: 7.5, y: 0, z: 5} + - {x: 7.5, y: 0, z: 7.5} + - {x: 10, y: 0, z: 5} + - {x: 10, y: 0, z: 7.5} + - {x: 7.5, y: 0, z: 7.5} + - {x: 7.5, y: 0, z: 10} + - {x: 10, y: 0, z: 7.5} + - {x: 10, y: 0, z: 10} + m_Textures0: + - {x: 0, y: 0} + - {x: 0, y: 2.5} + - {x: 2.5, y: 0} + - {x: 2.5, y: 2.5} + - {x: 0, y: 2.5} + - {x: 0, y: 5} + - {x: 2.5, y: 2.5} + - {x: 2.5, y: 5} + - {x: 0, y: 5} + - {x: 0, y: 7.5} + - {x: 2.5, y: 5} + - {x: 2.5, y: 7.5} + - {x: 0, y: 7.5} + - {x: 0, y: 10} + - {x: 2.5, y: 7.5} + - {x: 2.5, y: 10} + - {x: 2.5, y: 0} + - {x: 2.5, y: 2.5} + - {x: 5, y: 0} + - {x: 5, y: 2.5} + - {x: 2.5, y: 2.5} + - {x: 2.5, y: 5} + - {x: 5, y: 2.5} + - {x: 5, y: 5} + - {x: 2.5, y: 5} + - {x: 2.5, y: 7.5} + - {x: 5, y: 5} + - {x: 5, y: 7.5} + - {x: 2.5, y: 7.5} + - {x: 2.5, y: 10} + - {x: 5, y: 7.5} + - {x: 5, y: 10} + - {x: 5, y: 0} + - {x: 5, y: 2.5} + - {x: 7.5, y: 0} + - {x: 7.5, y: 2.5} + - {x: 5, y: 2.5} + - {x: 5, y: 5} + - {x: 7.5, y: 2.5} + - {x: 7.5, y: 5} + - {x: 5, y: 5} + - {x: 5, y: 7.5} + - {x: 7.5, y: 5} + - {x: 7.5, y: 7.5} + - {x: 5, y: 7.5} + - {x: 5, y: 10} + - {x: 7.5, y: 7.5} + - {x: 7.5, y: 10} + - {x: 7.5, y: 0} + - {x: 7.5, y: 2.5} + - {x: 10, y: 0} + - {x: 10, y: 2.5} + - {x: 7.5, y: 2.5} + - {x: 7.5, y: 5} + - {x: 10, y: 2.5} + - {x: 10, y: 5} + - {x: 7.5, y: 5} + - {x: 7.5, y: 7.5} + - {x: 10, y: 5} + - {x: 10, y: 7.5} + - {x: 7.5, y: 7.5} + - {x: 7.5, y: 10} + - {x: 10, y: 7.5} + - {x: 10, y: 10} + m_Textures2: [] + m_Textures3: [] + m_Tangents: + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + m_Colors: [] + m_UnwrapParameters: + m_HardAngle: 88 + m_PackMargin: 20 + m_AngleError: 8 + m_AreaError: 15 + m_PreserveMeshAssetOnDestroy: 0 + assetGuid: + m_Mesh: {fileID: 883230979} + m_IsSelectable: 1 + m_SelectedFaces: + m_SelectedEdges: [] + m_SelectedVertices: +--- !u!4 &738414488 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738414483} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -102.3, y: 0, z: -85.5} + m_LocalScale: {x: 20, y: 1, z: 20} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!43 &883230979 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: pb_Mesh17702 + serializedVersion: 10 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 96 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 25 + localAABB: + m_Center: {x: 5, y: 0, z: 5} + m_Extent: {x: 5, y: 0, z: 5} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 1 + m_KeepIndices: 1 + m_IndexFormat: 0 + m_IndexBuffer: 000001000200010003000200010004000300040005000300040006000500060007000500060008000700080009000700020003000a0003000b000a00030005000b0005000c000b00050007000c0007000d000c00070009000d0009000e000d000a000b000f000b0010000f000b000c0010000c00110010000c000d0011000d00120011000d000e0012000e00130012000f0010001400100015001400100011001500110016001500110012001600120017001600120013001700130018001700 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 25 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 24 + format: 0 + dimension: 4 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 40 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 1200 + _typelessdata: 000000000000000000000000000000000000803f000000000000803f0000000000000000000080bf0000000000000000000000000000000000002040000000000000803f000000000000803f0000000000000000000080bf0000000000002040000020400000000000000000000000000000803f000000000000803f0000000000000000000080bf0000204000000000000020400000000000002040000000000000803f000000000000803f0000000000000000000080bf000020400000204000000000000000000000a040000000000000803f000000000000803f0000000000000000000080bf000000000000a04000002040000000000000a040000000000000803f000000000000803f0000000000000000000080bf000020400000a04000000000000000000000f040000000000000803f000000000000803f0000000000000000000080bf000000000000f04000002040000000000000f040000000000000803f000000000000803f0000000000000000000080bf000020400000f040000000000000000000002041000000000000803f000000000000803f0000000000000000000080bf0000000000002041000020400000000000002041000000000000803f000000000000803f0000000000000000000080bf00002040000020410000a0400000000000000000000000000000803f000000000000803f0000000000000000000080bf0000a040000000000000a0400000000000002040000000000000803f000000000000803f0000000000000000000080bf0000a040000020400000a040000000000000a040000000000000803f000000000000803f0000000000000000000080bf0000a0400000a0400000a040000000000000f040000000000000803f000000000000803f0000000000000000000080bf0000a0400000f0400000a0400000000000002041000000000000803f000000000000803f0000000000000000000080bf0000a040000020410000f0400000000000000000000000000000803f000000000000803f0000000000000000000080bf0000f040000000000000f0400000000000002040000000000000803f000000000000803f0000000000000000000080bf0000f040000020400000f040000000000000a040000000000000803f000000000000803f0000000000000000000080bf0000f0400000a0400000f040000000000000f040000000000000803f000000000000803f0000000000000000000080bf0000f0400000f0400000f0400000000000002041000000000000803f000000000000803f0000000000000000000080bf0000f04000002041000020410000000000000000000000000000803f000000000000803f0000000000000000000080bf0000204100000000000020410000000000002040000000000000803f000000000000803f0000000000000000000080bf000020410000204000002041000000000000a040000000000000803f000000000000803f0000000000000000000080bf000020410000a04000002041000000000000f040000000000000803f000000000000803f0000000000000000000080bf000020410000f040000020410000000000002041000000000000803f000000000000803f0000000000000000000080bf0000204100002041 + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 5, y: 0, z: 5} + m_Extent: {x: 5, y: 0, z: 5} + m_MeshUsageFlags: 0 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + m_MeshMetrics[0]: 1 + m_MeshMetrics[1]: 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: --- !u!4 &935058640 stripped Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: e478e8cff085760498deb72189146ac1, type: 3} @@ -1086,7 +1795,7 @@ GameObject: m_Component: - component: {fileID: 976651668} - component: {fileID: 976651667} - m_Layer: 0 + m_Layer: 2 m_Name: TopRig m_TagString: Untagged m_Icon: {fileID: 0} @@ -1142,7 +1851,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 976651666} - m_LocalRotation: {x: 0.11972159, y: -0.00000003049858, z: 0.000000003677791, w: 0.9928075} + m_LocalRotation: {x: 0.119721614, y: 4.0577367e-16, z: -8.2673394e-17, w: 0.9928075} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: @@ -1266,7 +1975,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1144550581 GameObject: @@ -1280,7 +1989,7 @@ GameObject: - component: {fileID: 1144550585} - component: {fileID: 1144550584} - component: {fileID: 1144550583} - m_Layer: 0 + m_Layer: 2 m_Name: cm m_TagString: Untagged m_Icon: {fileID: 0} @@ -1414,7 +2123,7 @@ GameObject: m_Component: - component: {fileID: 1813819120} - component: {fileID: 1813819119} - m_Layer: 0 + m_Layer: 2 m_Name: BottomRig m_TagString: Untagged m_Icon: {fileID: 0} @@ -1499,7 +2208,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8, type: 3} propertyPath: m_RootOrder - value: 3 + value: 2 objectReference: {fileID: 0} - target: {fileID: 2070925441746177912, guid: a1a802ecaf6775746bb2a929fb554ad8, type: 3} propertyPath: m_LocalPosition.x @@ -1589,7 +2298,7 @@ GameObject: m_Component: - component: {fileID: 1931772137} - component: {fileID: 1931772136} - m_Layer: 0 + m_Layer: 2 m_Name: MiddleRig m_TagString: Untagged m_Icon: {fileID: 0} @@ -1665,7 +2374,7 @@ GameObject: - component: {fileID: 2083427986} - component: {fileID: 2083427985} - component: {fileID: 2083427984} - m_Layer: 0 + m_Layer: 2 m_Name: cm m_TagString: Untagged m_Icon: {fileID: 0} @@ -1788,7 +2497,7 @@ PrefabInstance: m_Modifications: - target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472, type: 3} propertyPath: m_RootOrder - value: 4 + value: 3 objectReference: {fileID: 0} - target: {fileID: 1293029876712600392, guid: 2553cec8fdb3eb643bbe9f2ec880c472, type: 3} propertyPath: m_LocalPosition.x diff --git a/[AIOLOS]/Assets/StarterAssets/InputSystem/StarterAssets.inputactions b/[AIOLOS]/Assets/StarterAssets/InputSystem/StarterAssets.inputactions index ffc9949a50d4255e9f1c2d58d1c04e808608f3f4..f874d36353497530eb78744cc9b3a285af803000 100644 --- a/[AIOLOS]/Assets/StarterAssets/InputSystem/StarterAssets.inputactions +++ b/[AIOLOS]/Assets/StarterAssets/InputSystem/StarterAssets.inputactions @@ -212,7 +212,7 @@ { "name": "", "id": "dc65b89f-9bd3-43fb-92af-d0d87ba5faa4", - "path": "<Keyboard>/leftShift", + "path": "<Keyboard>/ctrl", "interactions": "", "processors": "", "groups": "KeyboardMouse", @@ -248,7 +248,7 @@ "path": "<Keyboard>/leftShift", "interactions": "", "processors": "", - "groups": "", + "groups": "KeyboardMouse", "action": "Dodge", "isComposite": false, "isPartOfComposite": false diff --git a/[AIOLOS]/Assets/StarterAssets/ThirdPersonController/Scripts/ThirdPersonController.cs b/[AIOLOS]/Assets/StarterAssets/ThirdPersonController/Scripts/ThirdPersonController.cs index 08959de81e3a0fd6e0139ecb6ed7b32e80fcc002..1ef83dda2b15c11dac1b10237b815764cbfd2c8f 100644 --- a/[AIOLOS]/Assets/StarterAssets/ThirdPersonController/Scripts/ThirdPersonController.cs +++ b/[AIOLOS]/Assets/StarterAssets/ThirdPersonController/Scripts/ThirdPersonController.cs @@ -2,6 +2,7 @@ #if ENABLE_INPUT_SYSTEM && STARTER_ASSETS_PACKAGES_CHECKED using UnityEngine.InputSystem; using Cinemachine; +using System.Collections; #endif /* Note: animations are called via the controller for both the character and capsule using animator null checks @@ -59,12 +60,21 @@ namespace StarterAssets public float cameraAngleOverride = 0.0f; [Tooltip("For locking the camera position on all axis")] public bool lockCameraPosition = false; + [SerializeField] + private float dodgeDistance = 1f; + [SerializeField] + private float dodgeTime=1f; + [SerializeField] + private float dodgeSpeed=1f; + [SerializeField] + private float dodgeCooldown = 1f; // cinemachine private float _cinemachineTargetYaw; private float _cinemachineTargetPitch; private CinemachineInputProvider _inputProvider; - private CinemachineVirtualCamera _vCamera; + //private CinemachineVirtualCamera _vCamera; + private CinemachineFreeLook _vCamera; [SerializeField] private float _maxZoom, _minZoom, _zoomSpeed; @@ -95,6 +105,7 @@ namespace StarterAssets private const float _threshold = 0.01f; private bool _hasAnimator; + private bool _dodgeAvailable; private void Awake() { @@ -103,9 +114,10 @@ namespace StarterAssets _mainCamera = Camera.main.transform; _inputProvider = GameObject.FindGameObjectWithTag("CinemachineCamera").GetComponent<CinemachineInputProvider>(); - _vCamera= GameObject.FindGameObjectWithTag("CinemachineCamera").GetComponent<CinemachineVirtualCamera>(); - - + //_vCamera= GameObject.FindGameObjectWithTag("CinemachineCamera").GetComponent<CinemachineVirtualCamera>(); + _vCamera = GameObject.FindGameObjectWithTag("CinemachineCamera").GetComponent<CinemachineFreeLook>(); + + } private void Start() @@ -119,7 +131,9 @@ namespace StarterAssets // reset our timeouts on start _jumpTimeoutDelta = jumpTimeout; _fallTimeoutDelta = fallTimeout; - } + _dodgeAvailable = true; + dodgeSpeed = dodgeDistance / dodgeTime; + } private void Update() { @@ -127,7 +141,12 @@ namespace StarterAssets GroundedCheck(); JumpAndGravity(); Move(); - + if(_dodgeAvailable && _input.IsDodging()) + { + + StartCoroutine(Dodge()); + //StartCoroutine(ActionCooldown(_dodgeAvailable, 2f)); + } } private void LateUpdate() @@ -138,9 +157,7 @@ namespace StarterAssets if (zoom.y!=0) { CameraZoom(zoom.y); - //Debug.Log("Im zooming"); } - } private void AssignAnimationIDs() @@ -189,8 +206,9 @@ namespace StarterAssets float target = Mathf.Clamp(_fov + (increment*0.1f), _minZoom, _maxZoom); target = Mathf.Round(target * 100f) / 100f; _vCamera.m_Lens.FieldOfView = Mathf.Lerp(_fov, target, _zoomSpeed); - Debug.Log("current fov is " + _vCamera.m_Lens.FieldOfView.ToString()); + //Debug.Log("current fov is " + _vCamera.m_Lens.FieldOfView.ToString()); } + private void Move() { @@ -254,10 +272,6 @@ namespace StarterAssets _animator.SetFloat(_animIDMotionSpeed, inputMagnitude); } } - private void Dodge() - { - - } private void JumpAndGravity() { @@ -348,5 +362,39 @@ namespace StarterAssets // when selected, draw a gizmo in the position of, and matching radius of, the grounded collider Gizmos.DrawSphere(new Vector3(transform.position.x, transform.position.y - groundedOffset, transform.position.z), groundedRadius); } - } + private IEnumerator DodgeCooldown(float cooldownTimer) + { + _dodgeAvailable = false; + yield return new WaitForSeconds(cooldownTimer); + _dodgeAvailable = true; + } + + private IEnumerator Dodge() + { + // Debug.Log("Beginning dodge function"); + float _startTime = Time.time; + bool _dodge = _input.IsDodging(); + if(_dodgeAvailable==false) + { + Debug.Log("Dodge can't be performed"); + yield return null; + } + //StartCoroutine(ActionCooldown(_dodgeAvailable, 2f)); + //Vector2 _move = _input.GetMove(); + //Vector3 _moveInputCorrections = new Vector3(_move.x, 0f, _move.y); + while (Time.time< _startTime +dodgeTime) + { + _controller.Move(gameObject.transform.forward * dodgeSpeed * Time.deltaTime); + Debug.Log("I have dodged"); + yield return null; + } + StartCoroutine(DodgeCooldown(dodgeCooldown)); + + + + + } + + + } } \ No newline at end of file diff --git a/[AIOLOS]/Library/AnnotationManager b/[AIOLOS]/Library/AnnotationManager index 1349e7de2b822a47fc2256df90cea577e1215901..78fafbbe67cac71d2a567ad7e05e175e090c7407 100644 Binary files a/[AIOLOS]/Library/AnnotationManager and b/[AIOLOS]/Library/AnnotationManager differ diff --git a/[AIOLOS]/Library/ArtifactDB b/[AIOLOS]/Library/ArtifactDB index d82318f467fbae04bb9bfdf494a28c97c00767fa..8dee26fdfc70eed77f465a8eb22da15ea3228b06 100644 Binary files a/[AIOLOS]/Library/ArtifactDB and b/[AIOLOS]/Library/ArtifactDB differ diff --git a/[AIOLOS]/Library/Artifacts/00/00328fbc8dd8faec0be6703fe33e169c b/[AIOLOS]/Library/Artifacts/00/00328fbc8dd8faec0be6703fe33e169c new file mode 100644 index 0000000000000000000000000000000000000000..05c6cfcea942069cecb1ca5a8a9cd8f043e41ab4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/00/00328fbc8dd8faec0be6703fe33e169c differ diff --git a/[AIOLOS]/Library/Artifacts/00/00e8c70779c67862c7d84d12c2dbf6ef b/[AIOLOS]/Library/Artifacts/00/00e8c70779c67862c7d84d12c2dbf6ef new file mode 100644 index 0000000000000000000000000000000000000000..1f5f6005647b783a5fa0be94f49d47bd0eb5b527 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/00/00e8c70779c67862c7d84d12c2dbf6ef differ diff --git a/[AIOLOS]/Library/Artifacts/00/00eec6c17d5c3f455e884831fd8ed0e2 b/[AIOLOS]/Library/Artifacts/00/00eec6c17d5c3f455e884831fd8ed0e2 new file mode 100644 index 0000000000000000000000000000000000000000..f99e4a082d9090c00d6fe59339be91822eb2d1b3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/00/00eec6c17d5c3f455e884831fd8ed0e2 differ diff --git a/[AIOLOS]/Library/Artifacts/01/010a04c9d7421ad0c75bbf57b91d50dc b/[AIOLOS]/Library/Artifacts/01/010a04c9d7421ad0c75bbf57b91d50dc new file mode 100644 index 0000000000000000000000000000000000000000..d4b6c49ea05d72af05f917d5758babbef1d3ab94 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/01/010a04c9d7421ad0c75bbf57b91d50dc differ diff --git a/[AIOLOS]/Library/Artifacts/01/0117f9f7cf9d69f86e8e73333c37739a b/[AIOLOS]/Library/Artifacts/01/0117f9f7cf9d69f86e8e73333c37739a new file mode 100644 index 0000000000000000000000000000000000000000..12e6bef1725d1eab68c6c951853e7f37db36784e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/01/0117f9f7cf9d69f86e8e73333c37739a differ diff --git a/[AIOLOS]/Library/Artifacts/02/02361041fc60e1d91ba010ac199f4085 b/[AIOLOS]/Library/Artifacts/02/02361041fc60e1d91ba010ac199f4085 new file mode 100644 index 0000000000000000000000000000000000000000..a88ca044c6bdb3548270f5427600e6a98d941924 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/02/02361041fc60e1d91ba010ac199f4085 differ diff --git a/[AIOLOS]/Library/Artifacts/02/024ad45f03c00b5015a1053b7d3044a5 b/[AIOLOS]/Library/Artifacts/02/024ad45f03c00b5015a1053b7d3044a5 new file mode 100644 index 0000000000000000000000000000000000000000..91a62c216795bc28decd9f8946c1fe7acc5ee9b9 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/02/024ad45f03c00b5015a1053b7d3044a5 differ diff --git a/[AIOLOS]/Library/Artifacts/02/02bd23cf75573ac4a57dbaf31246b2a0 b/[AIOLOS]/Library/Artifacts/02/02bd23cf75573ac4a57dbaf31246b2a0 new file mode 100644 index 0000000000000000000000000000000000000000..e72bf79591554b51aaea19ea6bd916965d5eeff6 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/02/02bd23cf75573ac4a57dbaf31246b2a0 differ diff --git a/[AIOLOS]/Library/Artifacts/03/0364df9e459945b9f5817df7d139836d b/[AIOLOS]/Library/Artifacts/03/0364df9e459945b9f5817df7d139836d new file mode 100644 index 0000000000000000000000000000000000000000..8a36e2eca189496770bfe8993ff07b063c961cba Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/03/0364df9e459945b9f5817df7d139836d differ diff --git a/[AIOLOS]/Library/Artifacts/03/038e122f88abec69bc6a5a5d8e0234b6 b/[AIOLOS]/Library/Artifacts/03/038e122f88abec69bc6a5a5d8e0234b6 new file mode 100644 index 0000000000000000000000000000000000000000..f4c6082f88e1764a525edc02ac42b9a7ad9a4d9e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/03/038e122f88abec69bc6a5a5d8e0234b6 differ diff --git a/[AIOLOS]/Library/Artifacts/03/03aa15c8abbb4684f92799a2fa5b9366 b/[AIOLOS]/Library/Artifacts/03/03aa15c8abbb4684f92799a2fa5b9366 new file mode 100644 index 0000000000000000000000000000000000000000..c782ed9b0f84e47af1aa9978a43bef4ef35f342a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/03/03aa15c8abbb4684f92799a2fa5b9366 differ diff --git a/[AIOLOS]/Library/Artifacts/04/04628f6b105400ba9910cf93747ea526 b/[AIOLOS]/Library/Artifacts/04/042784a4264c1c6a25fe85742523471f similarity index 98% rename from [AIOLOS]/Library/Artifacts/04/04628f6b105400ba9910cf93747ea526 rename to [AIOLOS]/Library/Artifacts/04/042784a4264c1c6a25fe85742523471f index 0d2850bc7d405f3a0d15664baf025147e758cce8..364a43e89a59d3ab600290bc4d8a92dbd3c6d427 100644 Binary files a/[AIOLOS]/Library/Artifacts/04/04628f6b105400ba9910cf93747ea526 and b/[AIOLOS]/Library/Artifacts/04/042784a4264c1c6a25fe85742523471f differ diff --git a/[AIOLOS]/Library/Artifacts/04/042f575d6610c14d07520a16efc51fa9 b/[AIOLOS]/Library/Artifacts/04/042f575d6610c14d07520a16efc51fa9 new file mode 100644 index 0000000000000000000000000000000000000000..c2a219f9aa40812347c6c8be946c74fcdd124196 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/04/042f575d6610c14d07520a16efc51fa9 differ diff --git a/[AIOLOS]/Library/Artifacts/04/044f0ff25cf3cbf2f7e75cb2f663a868 b/[AIOLOS]/Library/Artifacts/04/044f0ff25cf3cbf2f7e75cb2f663a868 new file mode 100644 index 0000000000000000000000000000000000000000..4d0e9fff946b800227cfa25bd31afed11fe714db Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/04/044f0ff25cf3cbf2f7e75cb2f663a868 differ diff --git a/[AIOLOS]/Library/Artifacts/05/052e3e27351b447c8a0fbaab25bd2c11 b/[AIOLOS]/Library/Artifacts/05/052e3e27351b447c8a0fbaab25bd2c11 new file mode 100644 index 0000000000000000000000000000000000000000..484f05ad304c92f28e6c5565aff20bf8a8456f3c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/05/052e3e27351b447c8a0fbaab25bd2c11 differ diff --git a/[AIOLOS]/Library/Artifacts/06/0617dc22dca6b387ded3c90115bce4f4 b/[AIOLOS]/Library/Artifacts/06/0617dc22dca6b387ded3c90115bce4f4 new file mode 100644 index 0000000000000000000000000000000000000000..4d893eded49d8c6b43568b44517ba4b776e2bf89 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/06/0617dc22dca6b387ded3c90115bce4f4 differ diff --git a/[AIOLOS]/Library/Artifacts/06/06bb41bd44d00bd3d5a34b1f2a399cc2 b/[AIOLOS]/Library/Artifacts/06/06bb41bd44d00bd3d5a34b1f2a399cc2 new file mode 100644 index 0000000000000000000000000000000000000000..cd34c7d027169190be14dc594157112d3ed5eb86 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/06/06bb41bd44d00bd3d5a34b1f2a399cc2 differ diff --git a/[AIOLOS]/Library/Artifacts/06/06c2cdaf37b5daf07c0c54ef17222f87 b/[AIOLOS]/Library/Artifacts/06/06c2cdaf37b5daf07c0c54ef17222f87 new file mode 100644 index 0000000000000000000000000000000000000000..f1ef861e61a482ccd45c1b3804a3897f9e849a54 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/06/06c2cdaf37b5daf07c0c54ef17222f87 differ diff --git a/[AIOLOS]/Library/Artifacts/06/06dc1764f38c3bf6896cf320f0c877c8 b/[AIOLOS]/Library/Artifacts/06/06dc1764f38c3bf6896cf320f0c877c8 new file mode 100644 index 0000000000000000000000000000000000000000..898fa825409f71c86ece15666a4761bd351ff943 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/06/06dc1764f38c3bf6896cf320f0c877c8 differ diff --git a/[AIOLOS]/Library/Artifacts/07/071698e1d86224512a2e2a9c8d3596bd b/[AIOLOS]/Library/Artifacts/07/071698e1d86224512a2e2a9c8d3596bd new file mode 100644 index 0000000000000000000000000000000000000000..cb0d70ac5170cc2373173a3059d54c0fed2b924b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/07/071698e1d86224512a2e2a9c8d3596bd differ diff --git a/[AIOLOS]/Library/Artifacts/07/07f0491a7ab7745a4053e6a79ecc7f35 b/[AIOLOS]/Library/Artifacts/07/07f0491a7ab7745a4053e6a79ecc7f35 new file mode 100644 index 0000000000000000000000000000000000000000..8c92d041058e50ffe869ba73b581aab4c9355e06 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/07/07f0491a7ab7745a4053e6a79ecc7f35 differ diff --git a/[AIOLOS]/Library/Artifacts/07/07f7751b8a3455b8cfa57f03700e5600 b/[AIOLOS]/Library/Artifacts/07/07f7751b8a3455b8cfa57f03700e5600 new file mode 100644 index 0000000000000000000000000000000000000000..0108854b8a58eca87f8b2cab30611bdc90715c5c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/07/07f7751b8a3455b8cfa57f03700e5600 differ diff --git a/[AIOLOS]/Library/Artifacts/08/08c8796a3b05b3fac0d77f12c097460b b/[AIOLOS]/Library/Artifacts/08/08c8796a3b05b3fac0d77f12c097460b new file mode 100644 index 0000000000000000000000000000000000000000..10f179533656a7c48704358a6a256d4023c015bf Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/08/08c8796a3b05b3fac0d77f12c097460b differ diff --git a/[AIOLOS]/Library/Artifacts/09/09185c8c99c27f9594fcff6943903f85 b/[AIOLOS]/Library/Artifacts/09/09185c8c99c27f9594fcff6943903f85 new file mode 100644 index 0000000000000000000000000000000000000000..3a521ea686b907cf656cc95195e855969c2cd595 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/09/09185c8c99c27f9594fcff6943903f85 differ diff --git a/[AIOLOS]/Library/Artifacts/09/09cb046a7be1c620bcdd854cb6a5eceb b/[AIOLOS]/Library/Artifacts/09/09cb046a7be1c620bcdd854cb6a5eceb new file mode 100644 index 0000000000000000000000000000000000000000..8fa46c31f75bbdcf3b3e438fef5401694433917e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/09/09cb046a7be1c620bcdd854cb6a5eceb differ diff --git a/[AIOLOS]/Library/Artifacts/0a/0a1f3b6b4689e8f962b93ac1ad93e351 b/[AIOLOS]/Library/Artifacts/0a/0a1f3b6b4689e8f962b93ac1ad93e351 new file mode 100644 index 0000000000000000000000000000000000000000..e71c5bc892d43f2680f5ce5272e50237d1dd9dc5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/0a/0a1f3b6b4689e8f962b93ac1ad93e351 differ diff --git a/[AIOLOS]/Library/Artifacts/0a/0a63372162c748205ddb85dc559b8c7d b/[AIOLOS]/Library/Artifacts/0a/0a63372162c748205ddb85dc559b8c7d new file mode 100644 index 0000000000000000000000000000000000000000..6ed4b9ed2a092d08acb4953df4179a8e39d4ba82 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/0a/0a63372162c748205ddb85dc559b8c7d differ diff --git a/[AIOLOS]/Library/Artifacts/0b/0b240ef10babe2ac59829063b03eb9f6 b/[AIOLOS]/Library/Artifacts/0b/0b240ef10babe2ac59829063b03eb9f6 new file mode 100644 index 0000000000000000000000000000000000000000..e198c98fada19ae7b63784e3c9aced9a0cf9a7b2 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/0b/0b240ef10babe2ac59829063b03eb9f6 differ diff --git a/[AIOLOS]/Library/Artifacts/0b/0b3162f6791854076bf1dbef39f0820e b/[AIOLOS]/Library/Artifacts/0b/0b3162f6791854076bf1dbef39f0820e new file mode 100644 index 0000000000000000000000000000000000000000..149d5fdd301b1cf259ccca027932ef35c7a10250 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/0b/0b3162f6791854076bf1dbef39f0820e differ diff --git a/[AIOLOS]/Library/Artifacts/0c/0c2ca6327ebc6d4887b5207a9c975a1e b/[AIOLOS]/Library/Artifacts/0c/0c2ca6327ebc6d4887b5207a9c975a1e new file mode 100644 index 0000000000000000000000000000000000000000..e318c11740bd8d7835f7b27c3188bde575352235 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/0c/0c2ca6327ebc6d4887b5207a9c975a1e differ diff --git a/[AIOLOS]/Library/Artifacts/0c/0c98992ef33c7a2759fccd3aa35b4b70 b/[AIOLOS]/Library/Artifacts/0c/0c98992ef33c7a2759fccd3aa35b4b70 new file mode 100644 index 0000000000000000000000000000000000000000..f0d9767930f4100961edc086d61011e33fd8fae3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/0c/0c98992ef33c7a2759fccd3aa35b4b70 differ diff --git a/[AIOLOS]/Library/Artifacts/0c/0c9ea501609d9d788fc1367f6a550a7f b/[AIOLOS]/Library/Artifacts/0c/0c9ea501609d9d788fc1367f6a550a7f new file mode 100644 index 0000000000000000000000000000000000000000..0fe2fdd5befd8d4e53522a40a45fc0fd3b6c5bee Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/0c/0c9ea501609d9d788fc1367f6a550a7f differ diff --git a/[AIOLOS]/Library/Artifacts/0c/0cc6736bc767e1d1aa50d60ce236e7c9 b/[AIOLOS]/Library/Artifacts/0c/0cc6736bc767e1d1aa50d60ce236e7c9 new file mode 100644 index 0000000000000000000000000000000000000000..a2b7632788824cdd98fb3d4ee428b1d867e5e08c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/0c/0cc6736bc767e1d1aa50d60ce236e7c9 differ diff --git a/[AIOLOS]/Library/Artifacts/0d/0d46771a96918139bfc00223b3f9aeac b/[AIOLOS]/Library/Artifacts/0d/0d46771a96918139bfc00223b3f9aeac new file mode 100644 index 0000000000000000000000000000000000000000..a90d340fc6d9525164e5e24146300002663c1bbe Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/0d/0d46771a96918139bfc00223b3f9aeac differ diff --git a/[AIOLOS]/Library/Artifacts/0d/0de63183c619b2ae060e9bcab0be564e b/[AIOLOS]/Library/Artifacts/0d/0de63183c619b2ae060e9bcab0be564e new file mode 100644 index 0000000000000000000000000000000000000000..27a7a5b05ee8f6bfd34e20d8e5fe4b9f9c04eba4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/0d/0de63183c619b2ae060e9bcab0be564e differ diff --git a/[AIOLOS]/Library/Artifacts/0e/0e85b9b4636646405fc7e285cfc2b6a2 b/[AIOLOS]/Library/Artifacts/0e/0e85b9b4636646405fc7e285cfc2b6a2 new file mode 100644 index 0000000000000000000000000000000000000000..6a437e430f30f7f90039f4bf5f100d14991ad6bf Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/0e/0e85b9b4636646405fc7e285cfc2b6a2 differ diff --git a/[AIOLOS]/Library/Artifacts/0e/0ee1a5806e70e54c9b2cbb59a8b11346 b/[AIOLOS]/Library/Artifacts/0e/0ee1a5806e70e54c9b2cbb59a8b11346 new file mode 100644 index 0000000000000000000000000000000000000000..068a39abfb04bee2f4b018dd69423177ad5075c1 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/0e/0ee1a5806e70e54c9b2cbb59a8b11346 differ diff --git a/[AIOLOS]/Library/Artifacts/0e/0ee33a665c07b1ed138d92ee78e61e09 b/[AIOLOS]/Library/Artifacts/0e/0ee33a665c07b1ed138d92ee78e61e09 new file mode 100644 index 0000000000000000000000000000000000000000..36b72f8768f11d216348e4e547e848aa93a5a028 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/0e/0ee33a665c07b1ed138d92ee78e61e09 differ diff --git a/[AIOLOS]/Library/Artifacts/0f/0f9dae64ca62e910520a038b606aafb5 b/[AIOLOS]/Library/Artifacts/0f/0f9dae64ca62e910520a038b606aafb5 new file mode 100644 index 0000000000000000000000000000000000000000..6aa44eff53c03cd9f8e1c38630c0f3890c979605 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/0f/0f9dae64ca62e910520a038b606aafb5 differ diff --git a/[AIOLOS]/Library/Artifacts/10/10ef58455a42b259affe8ed66d29059c b/[AIOLOS]/Library/Artifacts/10/10ef58455a42b259affe8ed66d29059c new file mode 100644 index 0000000000000000000000000000000000000000..4cb7debe71f30c02057da1a56f9a3dfa512c593f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/10/10ef58455a42b259affe8ed66d29059c differ diff --git a/[AIOLOS]/Library/Artifacts/11/115c9e5a469c807db51d4140a308f3b6 b/[AIOLOS]/Library/Artifacts/11/115c9e5a469c807db51d4140a308f3b6 new file mode 100644 index 0000000000000000000000000000000000000000..8b1d8bc7e1568bac8d79807407e574d6613887ba Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/11/115c9e5a469c807db51d4140a308f3b6 differ diff --git a/[AIOLOS]/Library/Artifacts/11/11ac94b5d49498af447f7fdea86ae0ca b/[AIOLOS]/Library/Artifacts/11/11ac94b5d49498af447f7fdea86ae0ca new file mode 100644 index 0000000000000000000000000000000000000000..39ff76aab92ddcbff86849055c160eb16bef8e2d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/11/11ac94b5d49498af447f7fdea86ae0ca differ diff --git a/[AIOLOS]/Library/Artifacts/11/11f56864eb5fe0f582ab2edfd8022c5a b/[AIOLOS]/Library/Artifacts/11/11f56864eb5fe0f582ab2edfd8022c5a new file mode 100644 index 0000000000000000000000000000000000000000..18c95876afc5acdaaf9b7ae211153518954d1eae Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/11/11f56864eb5fe0f582ab2edfd8022c5a differ diff --git a/[AIOLOS]/Library/Artifacts/12/1207b8bac70103f089d1ec08d2effec9 b/[AIOLOS]/Library/Artifacts/12/1207b8bac70103f089d1ec08d2effec9 new file mode 100644 index 0000000000000000000000000000000000000000..212b73767881570fd42ed3b9b851b530f18c1202 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/12/1207b8bac70103f089d1ec08d2effec9 differ diff --git a/[AIOLOS]/Library/Artifacts/12/12385616035e982f7252bd95daaf3f4a b/[AIOLOS]/Library/Artifacts/12/12385616035e982f7252bd95daaf3f4a new file mode 100644 index 0000000000000000000000000000000000000000..8d1511f79f57a2f329de39a36670f3b1aae8ca54 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/12/12385616035e982f7252bd95daaf3f4a differ diff --git a/[AIOLOS]/Library/Artifacts/12/127165c8441eea3ec8f17e25dd1f506f b/[AIOLOS]/Library/Artifacts/12/127165c8441eea3ec8f17e25dd1f506f new file mode 100644 index 0000000000000000000000000000000000000000..5822e06862905881fafb5a1846c7b85a970d3e91 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/12/127165c8441eea3ec8f17e25dd1f506f differ diff --git a/[AIOLOS]/Library/Artifacts/12/12bd3129c0664a1456715ff590038c89 b/[AIOLOS]/Library/Artifacts/12/12bd3129c0664a1456715ff590038c89 new file mode 100644 index 0000000000000000000000000000000000000000..f85fd91853ae6f6b180f0cea78142be0ec29a69f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/12/12bd3129c0664a1456715ff590038c89 differ diff --git a/[AIOLOS]/Library/Artifacts/12/12e7b05ce515efbd639a998bc9115608 b/[AIOLOS]/Library/Artifacts/12/12e7b05ce515efbd639a998bc9115608 new file mode 100644 index 0000000000000000000000000000000000000000..a797616201cea3386dd1d15b9c0c26cb57ac71df Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/12/12e7b05ce515efbd639a998bc9115608 differ diff --git a/[AIOLOS]/Library/Artifacts/13/134d23ac634cd59fae7049d0399b72c1 b/[AIOLOS]/Library/Artifacts/13/134d23ac634cd59fae7049d0399b72c1 new file mode 100644 index 0000000000000000000000000000000000000000..69f7adcb2dee9252a32b4f610148e4dd635e3dc4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/13/134d23ac634cd59fae7049d0399b72c1 differ diff --git a/[AIOLOS]/Library/Artifacts/13/135583c90c0960eb046f27a3815120ed b/[AIOLOS]/Library/Artifacts/13/135583c90c0960eb046f27a3815120ed new file mode 100644 index 0000000000000000000000000000000000000000..570040cf0195dfb760a2eea83e76db3bd38ac503 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/13/135583c90c0960eb046f27a3815120ed differ diff --git a/[AIOLOS]/Library/Artifacts/13/135cb2ab108e042cec88e9922f3f0656 b/[AIOLOS]/Library/Artifacts/13/135cb2ab108e042cec88e9922f3f0656 new file mode 100644 index 0000000000000000000000000000000000000000..ea54e3f0f0d52905d646e56132bbc484728a250f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/13/135cb2ab108e042cec88e9922f3f0656 differ diff --git a/[AIOLOS]/Library/Artifacts/13/13aedb2c53a57243fd512eed5050be0e b/[AIOLOS]/Library/Artifacts/13/13aedb2c53a57243fd512eed5050be0e new file mode 100644 index 0000000000000000000000000000000000000000..41cbb49f4b91de98b83d47e58eace5470c9bd342 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/13/13aedb2c53a57243fd512eed5050be0e differ diff --git a/[AIOLOS]/Library/Artifacts/14/1415671b611e08abf1ee8cd413bef2e8 b/[AIOLOS]/Library/Artifacts/14/1415671b611e08abf1ee8cd413bef2e8 new file mode 100644 index 0000000000000000000000000000000000000000..9f97409200df2e2e8ffcacc9ec4c6e972b4f77d0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/14/1415671b611e08abf1ee8cd413bef2e8 differ diff --git a/[AIOLOS]/Library/Artifacts/14/144765a55a93ed82646ead808f39642b b/[AIOLOS]/Library/Artifacts/14/144765a55a93ed82646ead808f39642b new file mode 100644 index 0000000000000000000000000000000000000000..5b85e6378bf0a6dd6f8f2be77ac60ef2c1fab3da Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/14/144765a55a93ed82646ead808f39642b differ diff --git a/[AIOLOS]/Library/Artifacts/14/14bdc718a732baa2235258676260a2e4 b/[AIOLOS]/Library/Artifacts/14/14bdc718a732baa2235258676260a2e4 new file mode 100644 index 0000000000000000000000000000000000000000..c6d85d58c74373efecbb894b93afabdd61b1d503 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/14/14bdc718a732baa2235258676260a2e4 differ diff --git a/[AIOLOS]/Library/Artifacts/14/14e6a85cb0197057adae1e24191d1167 b/[AIOLOS]/Library/Artifacts/14/14e6a85cb0197057adae1e24191d1167 new file mode 100644 index 0000000000000000000000000000000000000000..79281d34795b7600679085fa0fef51e549fa89eb Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/14/14e6a85cb0197057adae1e24191d1167 differ diff --git a/[AIOLOS]/Library/Artifacts/15/15aad4e97c5f160732387a88dfb024b0 b/[AIOLOS]/Library/Artifacts/15/15aad4e97c5f160732387a88dfb024b0 new file mode 100644 index 0000000000000000000000000000000000000000..f60b3ef8eb17cf14eeec734ecdc947fb9bdea211 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/15/15aad4e97c5f160732387a88dfb024b0 differ diff --git a/[AIOLOS]/Library/Artifacts/16/1635e2d44bb1e6f4a94f658c38767cb7 b/[AIOLOS]/Library/Artifacts/16/1635e2d44bb1e6f4a94f658c38767cb7 new file mode 100644 index 0000000000000000000000000000000000000000..a00cb6caf1dbf4c147f12440150ec49c57bd2490 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/16/1635e2d44bb1e6f4a94f658c38767cb7 differ diff --git a/[AIOLOS]/Library/Artifacts/16/165a63db1175604e0cce276b6b9930df b/[AIOLOS]/Library/Artifacts/16/165a63db1175604e0cce276b6b9930df new file mode 100644 index 0000000000000000000000000000000000000000..5e19e28ac63b0f473e5e6a4ce58d9381013d1689 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/16/165a63db1175604e0cce276b6b9930df differ diff --git a/[AIOLOS]/Library/Artifacts/17/1759c824b5d25106bfc115c91339346f b/[AIOLOS]/Library/Artifacts/17/1759c824b5d25106bfc115c91339346f new file mode 100644 index 0000000000000000000000000000000000000000..c252a66081589b1d47628f9307fad9390c2d939c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/17/1759c824b5d25106bfc115c91339346f differ diff --git a/[AIOLOS]/Library/Artifacts/17/178adcb312e374e6622c9edad6a7ec0b b/[AIOLOS]/Library/Artifacts/17/178adcb312e374e6622c9edad6a7ec0b new file mode 100644 index 0000000000000000000000000000000000000000..fde4af57b7486004d05819537a8e55b610d54e7d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/17/178adcb312e374e6622c9edad6a7ec0b differ diff --git a/[AIOLOS]/Library/Artifacts/17/17c645e28d8a64aae8ab7c04e6ff01a3 b/[AIOLOS]/Library/Artifacts/17/17c645e28d8a64aae8ab7c04e6ff01a3 new file mode 100644 index 0000000000000000000000000000000000000000..7fa7fc3614315f2c2968024152882b74b032059d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/17/17c645e28d8a64aae8ab7c04e6ff01a3 differ diff --git a/[AIOLOS]/Library/Artifacts/18/18387fc55bd2412f4705e71d4459dd87 b/[AIOLOS]/Library/Artifacts/18/18387fc55bd2412f4705e71d4459dd87 new file mode 100644 index 0000000000000000000000000000000000000000..b10c52c3c722aa3d56cd7800d6b425027a212b04 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/18/18387fc55bd2412f4705e71d4459dd87 differ diff --git a/[AIOLOS]/Library/Artifacts/18/186b4909102381bf03d186ae3c0d4691 b/[AIOLOS]/Library/Artifacts/18/186b4909102381bf03d186ae3c0d4691 new file mode 100644 index 0000000000000000000000000000000000000000..10b0e81f6cde839ac3c0fcb9f7d7b8d46b44e73b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/18/186b4909102381bf03d186ae3c0d4691 differ diff --git a/[AIOLOS]/Library/Artifacts/18/18f24bc109e3ebdeae8ca2e215b537c4 b/[AIOLOS]/Library/Artifacts/18/18f24bc109e3ebdeae8ca2e215b537c4 new file mode 100644 index 0000000000000000000000000000000000000000..db43911b82d57e8ab9fd969639c334e38e1cb0a5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/18/18f24bc109e3ebdeae8ca2e215b537c4 differ diff --git a/[AIOLOS]/Library/Artifacts/1a/1a32eed825c543345adb4b4329d73261 b/[AIOLOS]/Library/Artifacts/1a/1a32eed825c543345adb4b4329d73261 new file mode 100644 index 0000000000000000000000000000000000000000..91f0aa3681f7b77c5cc69b9399b46b22db2c2533 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1a/1a32eed825c543345adb4b4329d73261 differ diff --git a/[AIOLOS]/Library/Artifacts/1a/1a938b5e41de4140fd984d2665f72c08 b/[AIOLOS]/Library/Artifacts/1a/1a938b5e41de4140fd984d2665f72c08 new file mode 100644 index 0000000000000000000000000000000000000000..4d1e72bcfe4f0cee50284d5047ab6a6d6fd47e6d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1a/1a938b5e41de4140fd984d2665f72c08 differ diff --git a/[AIOLOS]/Library/Artifacts/1a/1ad0a4f3c5d8153920481f5de78c90e1 b/[AIOLOS]/Library/Artifacts/1a/1ad0a4f3c5d8153920481f5de78c90e1 new file mode 100644 index 0000000000000000000000000000000000000000..7dfcc2da79cd53256110e39de5c6febdd953d3fc Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1a/1ad0a4f3c5d8153920481f5de78c90e1 differ diff --git a/[AIOLOS]/Library/Artifacts/1a/1adb0dfa22f47c4123b41de1dc9d711b b/[AIOLOS]/Library/Artifacts/1a/1adb0dfa22f47c4123b41de1dc9d711b new file mode 100644 index 0000000000000000000000000000000000000000..73cf11b4366e7669babee7de880435345daed589 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1a/1adb0dfa22f47c4123b41de1dc9d711b differ diff --git a/[AIOLOS]/Library/Artifacts/1b/1b2e9870133c1a6a8d53fdbb13b5c3b0 b/[AIOLOS]/Library/Artifacts/1b/1b2e9870133c1a6a8d53fdbb13b5c3b0 new file mode 100644 index 0000000000000000000000000000000000000000..2639b615489c59ec2e2ee7d1f9e8166849259d13 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1b/1b2e9870133c1a6a8d53fdbb13b5c3b0 differ diff --git a/[AIOLOS]/Library/Artifacts/1b/1bee403ab16fe8db9eadc6442c9ed05b b/[AIOLOS]/Library/Artifacts/1b/1bee403ab16fe8db9eadc6442c9ed05b new file mode 100644 index 0000000000000000000000000000000000000000..8aca98f4b39bfc6948af665fe76b90dc27b44e30 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1b/1bee403ab16fe8db9eadc6442c9ed05b differ diff --git a/[AIOLOS]/Library/Artifacts/b0/b097cd31e8b42bb2777c5e91b508f49b b/[AIOLOS]/Library/Artifacts/1c/1c59b6d5366d0c4d35f498c295db97d6 similarity index 87% rename from [AIOLOS]/Library/Artifacts/b0/b097cd31e8b42bb2777c5e91b508f49b rename to [AIOLOS]/Library/Artifacts/1c/1c59b6d5366d0c4d35f498c295db97d6 index 4df9e1b01322460f1752ecc58d7e8e160a56ee23..a772ef6ce703b7c082b1b1ac73f10d0ad0ed4c24 100644 Binary files a/[AIOLOS]/Library/Artifacts/b0/b097cd31e8b42bb2777c5e91b508f49b and b/[AIOLOS]/Library/Artifacts/1c/1c59b6d5366d0c4d35f498c295db97d6 differ diff --git a/[AIOLOS]/Library/Artifacts/1c/1c653686f8646c3d2f6e648b31188053 b/[AIOLOS]/Library/Artifacts/1c/1c653686f8646c3d2f6e648b31188053 new file mode 100644 index 0000000000000000000000000000000000000000..17f9c9f544d14fdb8db8237256bc3c6e102507d3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1c/1c653686f8646c3d2f6e648b31188053 differ diff --git a/[AIOLOS]/Library/Artifacts/1c/1c929cbd3fe40649e62c0620b05c5610 b/[AIOLOS]/Library/Artifacts/1c/1c929cbd3fe40649e62c0620b05c5610 new file mode 100644 index 0000000000000000000000000000000000000000..b54105341315b9e8cba5cc57b1f9ff2d321fd7f8 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1c/1c929cbd3fe40649e62c0620b05c5610 differ diff --git a/[AIOLOS]/Library/Artifacts/1d/1d33b92cab31110fbf1a35d830e02b58 b/[AIOLOS]/Library/Artifacts/1d/1d33b92cab31110fbf1a35d830e02b58 new file mode 100644 index 0000000000000000000000000000000000000000..44ef85808498bfb952bf6287d2ee20033bb59071 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1d/1d33b92cab31110fbf1a35d830e02b58 differ diff --git a/[AIOLOS]/Library/Artifacts/1d/1d58d8c75a8c41adbbd30fdaf80e3c3d b/[AIOLOS]/Library/Artifacts/1d/1d58d8c75a8c41adbbd30fdaf80e3c3d new file mode 100644 index 0000000000000000000000000000000000000000..682597a920e362e051446585d442535dfa43176f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1d/1d58d8c75a8c41adbbd30fdaf80e3c3d differ diff --git a/[AIOLOS]/Library/Artifacts/1d/1d68c608c5837753d497d64c47345ff9 b/[AIOLOS]/Library/Artifacts/1d/1d68c608c5837753d497d64c47345ff9 new file mode 100644 index 0000000000000000000000000000000000000000..6b32573fcabcd856ca44cd7edea715af6a3780e1 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1d/1d68c608c5837753d497d64c47345ff9 differ diff --git a/[AIOLOS]/Library/Artifacts/1d/1dc9244b394023d3d3ebcad306b629c9 b/[AIOLOS]/Library/Artifacts/1d/1dc9244b394023d3d3ebcad306b629c9 new file mode 100644 index 0000000000000000000000000000000000000000..405b152f834e626b0eb2647d3a9471e1efdb876c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1d/1dc9244b394023d3d3ebcad306b629c9 differ diff --git a/[AIOLOS]/Library/Artifacts/1e/1e0e2c124d67c63f9074d5f6987f9257 b/[AIOLOS]/Library/Artifacts/1e/1e0e2c124d67c63f9074d5f6987f9257 new file mode 100644 index 0000000000000000000000000000000000000000..07519d68a5e2ed0f199d0d8455af354177ca4492 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1e/1e0e2c124d67c63f9074d5f6987f9257 differ diff --git a/[AIOLOS]/Library/Artifacts/1e/1ec5a24201b6c8139ca8893c08938f6c b/[AIOLOS]/Library/Artifacts/1e/1ec5a24201b6c8139ca8893c08938f6c new file mode 100644 index 0000000000000000000000000000000000000000..853c79efec463dbc7f164033898b74a7bf55817a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1e/1ec5a24201b6c8139ca8893c08938f6c differ diff --git a/[AIOLOS]/Library/Artifacts/1f/1f84f5259f292b54741a59203acbe951 b/[AIOLOS]/Library/Artifacts/1f/1f84f5259f292b54741a59203acbe951 new file mode 100644 index 0000000000000000000000000000000000000000..b6a8a1747fc2ff66b7d5ae42f1456792edbcfe3a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1f/1f84f5259f292b54741a59203acbe951 differ diff --git a/[AIOLOS]/Library/Artifacts/1f/1fa36e00880ea5a2076433ad96b381d1 b/[AIOLOS]/Library/Artifacts/1f/1fa36e00880ea5a2076433ad96b381d1 new file mode 100644 index 0000000000000000000000000000000000000000..61f2ec8314285fc073da90522c49212388e1c0de Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1f/1fa36e00880ea5a2076433ad96b381d1 differ diff --git a/[AIOLOS]/Library/Artifacts/1f/1fc8fb15ba2645be46f3c0cd65a7720c b/[AIOLOS]/Library/Artifacts/1f/1fc8fb15ba2645be46f3c0cd65a7720c new file mode 100644 index 0000000000000000000000000000000000000000..b362444479f744c67cb9117101da5436bb0d9527 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1f/1fc8fb15ba2645be46f3c0cd65a7720c differ diff --git a/[AIOLOS]/Library/Artifacts/1f/1ffef8c38a06bcaafa3d4c4a6dbd88cd b/[AIOLOS]/Library/Artifacts/1f/1ffef8c38a06bcaafa3d4c4a6dbd88cd new file mode 100644 index 0000000000000000000000000000000000000000..d5683c68fa44ffe904bc1fef9ac705c6982465e4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/1f/1ffef8c38a06bcaafa3d4c4a6dbd88cd differ diff --git a/[AIOLOS]/Library/Artifacts/20/200a4840e4bfa458c6b3d92ba797f37b b/[AIOLOS]/Library/Artifacts/20/200a4840e4bfa458c6b3d92ba797f37b new file mode 100644 index 0000000000000000000000000000000000000000..a01b13955fada448ef2694f6d53670c1a11e487d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/20/200a4840e4bfa458c6b3d92ba797f37b differ diff --git a/[AIOLOS]/Library/Artifacts/20/200aee3f4bf04a62ae8c93d828db0427 b/[AIOLOS]/Library/Artifacts/20/200aee3f4bf04a62ae8c93d828db0427 new file mode 100644 index 0000000000000000000000000000000000000000..85ce369495a3485735c178ad0d83c430d8f1432e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/20/200aee3f4bf04a62ae8c93d828db0427 differ diff --git a/[AIOLOS]/Library/Artifacts/20/205d9449adb46d163b25a0a89e6985e9 b/[AIOLOS]/Library/Artifacts/20/205d9449adb46d163b25a0a89e6985e9 new file mode 100644 index 0000000000000000000000000000000000000000..b0e03e2f33524a450a08eef3a5ba1fcdeb7c273c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/20/205d9449adb46d163b25a0a89e6985e9 differ diff --git a/[AIOLOS]/Library/Artifacts/20/20b79a9d8fd11a92c68e1e0569996974 b/[AIOLOS]/Library/Artifacts/20/20b79a9d8fd11a92c68e1e0569996974 new file mode 100644 index 0000000000000000000000000000000000000000..6cbd359a9112c45ec9cc988badae5a37edc765cb Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/20/20b79a9d8fd11a92c68e1e0569996974 differ diff --git a/[AIOLOS]/Library/Artifacts/21/213c5f8947d6d47aabecb84fbc5773f1 b/[AIOLOS]/Library/Artifacts/21/213c5f8947d6d47aabecb84fbc5773f1 new file mode 100644 index 0000000000000000000000000000000000000000..4822ec120f200b7c720c46cfb386244809c75d03 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/21/213c5f8947d6d47aabecb84fbc5773f1 differ diff --git a/[AIOLOS]/Library/Artifacts/21/21d9464ed598d1002ba3973b40e306c4 b/[AIOLOS]/Library/Artifacts/21/21d9464ed598d1002ba3973b40e306c4 new file mode 100644 index 0000000000000000000000000000000000000000..38da116e62ae284492afc1a24ba4b7e3ea2cd706 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/21/21d9464ed598d1002ba3973b40e306c4 differ diff --git a/[AIOLOS]/Library/Artifacts/22/2217131c6b7c8f5758972675cf22baa8 b/[AIOLOS]/Library/Artifacts/22/2217131c6b7c8f5758972675cf22baa8 new file mode 100644 index 0000000000000000000000000000000000000000..58405a11dd8cb965f9add2798e3a3b54a474caef Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/22/2217131c6b7c8f5758972675cf22baa8 differ diff --git a/[AIOLOS]/Library/Artifacts/22/2224461e34c43e8a4539b9dcaa89da31 b/[AIOLOS]/Library/Artifacts/22/2224461e34c43e8a4539b9dcaa89da31 new file mode 100644 index 0000000000000000000000000000000000000000..f0fe4e5196bfe6c434e289e0cd7d068a14b38fa6 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/22/2224461e34c43e8a4539b9dcaa89da31 differ diff --git a/[AIOLOS]/Library/Artifacts/23/2303dc6222294b008a4e38f4578d814b b/[AIOLOS]/Library/Artifacts/23/2303dc6222294b008a4e38f4578d814b new file mode 100644 index 0000000000000000000000000000000000000000..4e4125f1ebf48032f8b4d483f0965b24a3346b40 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/23/2303dc6222294b008a4e38f4578d814b differ diff --git a/[AIOLOS]/Library/Artifacts/23/2371a513ddefb703e50d0a6894ceabc1 b/[AIOLOS]/Library/Artifacts/23/2371a513ddefb703e50d0a6894ceabc1 new file mode 100644 index 0000000000000000000000000000000000000000..b70c24cac42716cc5a881c7a5f6cb47a3227fcd7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/23/2371a513ddefb703e50d0a6894ceabc1 differ diff --git a/[AIOLOS]/Library/Artifacts/24/24f2dc8c455964c280b5132c24f79ed4 b/[AIOLOS]/Library/Artifacts/24/24f2dc8c455964c280b5132c24f79ed4 new file mode 100644 index 0000000000000000000000000000000000000000..3a424b6918299a7d4388c01843b539ecd1599a1e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/24/24f2dc8c455964c280b5132c24f79ed4 differ diff --git a/[AIOLOS]/Library/Artifacts/24/24f7957e5ecf58afa153d5d493411a3b b/[AIOLOS]/Library/Artifacts/24/24f7957e5ecf58afa153d5d493411a3b new file mode 100644 index 0000000000000000000000000000000000000000..2004eb96d33fb41fd6e8caf45232df2ee38baf52 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/24/24f7957e5ecf58afa153d5d493411a3b differ diff --git a/[AIOLOS]/Library/Artifacts/25/2577e58680d2a6dcd15f87da0ec1c3cd b/[AIOLOS]/Library/Artifacts/25/2577e58680d2a6dcd15f87da0ec1c3cd new file mode 100644 index 0000000000000000000000000000000000000000..5cf6c95da1a3f818d8a0a5f5008514b50bd20917 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/25/2577e58680d2a6dcd15f87da0ec1c3cd differ diff --git a/[AIOLOS]/Library/Artifacts/25/25d6700c3465ce52f2bd10deddab2ed6 b/[AIOLOS]/Library/Artifacts/25/25d6700c3465ce52f2bd10deddab2ed6 new file mode 100644 index 0000000000000000000000000000000000000000..038ea003a1b6317046bb1a1f5673648251caf117 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/25/25d6700c3465ce52f2bd10deddab2ed6 differ diff --git a/[AIOLOS]/Library/Artifacts/26/26053b74c7eb92267d34e867ea5c44a9 b/[AIOLOS]/Library/Artifacts/26/26053b74c7eb92267d34e867ea5c44a9 new file mode 100644 index 0000000000000000000000000000000000000000..c927a35766a869e67b0e1e88ec88a30bd124b1c5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/26/26053b74c7eb92267d34e867ea5c44a9 differ diff --git a/[AIOLOS]/Library/Artifacts/26/26140eeb7814890fdc61c0cabbdb7c32 b/[AIOLOS]/Library/Artifacts/26/26140eeb7814890fdc61c0cabbdb7c32 new file mode 100644 index 0000000000000000000000000000000000000000..d59baa64308e7e68ef592e8d050e78047f45533d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/26/26140eeb7814890fdc61c0cabbdb7c32 differ diff --git a/[AIOLOS]/Library/Artifacts/26/265076793652e25cd40eee7644de30c5 b/[AIOLOS]/Library/Artifacts/26/265076793652e25cd40eee7644de30c5 new file mode 100644 index 0000000000000000000000000000000000000000..bbc31536c9111433f3cc736842dde1e17c641aa0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/26/265076793652e25cd40eee7644de30c5 differ diff --git a/[AIOLOS]/Library/Artifacts/26/265dbc6647c39f7b9bd35dc21335cda7 b/[AIOLOS]/Library/Artifacts/26/265dbc6647c39f7b9bd35dc21335cda7 new file mode 100644 index 0000000000000000000000000000000000000000..ed588649ff0f6802939eec4e3629fefd4eb6ee86 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/26/265dbc6647c39f7b9bd35dc21335cda7 differ diff --git a/[AIOLOS]/Library/Artifacts/26/26de1a945b41a9f9431bda9afffae0b1 b/[AIOLOS]/Library/Artifacts/26/26de1a945b41a9f9431bda9afffae0b1 new file mode 100644 index 0000000000000000000000000000000000000000..a5e25cf2627fdca9b13a04d7388472e9228deda6 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/26/26de1a945b41a9f9431bda9afffae0b1 differ diff --git a/[AIOLOS]/Library/Artifacts/27/27282e0b9924d1daca6997746b18be9a b/[AIOLOS]/Library/Artifacts/27/27282e0b9924d1daca6997746b18be9a new file mode 100644 index 0000000000000000000000000000000000000000..1c4fe8c7748d2a3b95d7c7b72613fc9f24ab5458 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/27/27282e0b9924d1daca6997746b18be9a differ diff --git a/[AIOLOS]/Library/Artifacts/27/272b92be148b0f22c5840760945702bf b/[AIOLOS]/Library/Artifacts/27/272b92be148b0f22c5840760945702bf new file mode 100644 index 0000000000000000000000000000000000000000..378f52d63bf497e0b1bbbbc8aad656993f1318a7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/27/272b92be148b0f22c5840760945702bf differ diff --git a/[AIOLOS]/Library/Artifacts/27/278169aebb8f9b5a02f7caaadc6e2ffd b/[AIOLOS]/Library/Artifacts/27/278169aebb8f9b5a02f7caaadc6e2ffd new file mode 100644 index 0000000000000000000000000000000000000000..452f4a3fbe9101951312caa1746db7afe0030b2d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/27/278169aebb8f9b5a02f7caaadc6e2ffd differ diff --git a/[AIOLOS]/Library/Artifacts/27/27a18a527dfed3962528c55dffbede7e b/[AIOLOS]/Library/Artifacts/27/27a18a527dfed3962528c55dffbede7e new file mode 100644 index 0000000000000000000000000000000000000000..7e4fd37052479e1a20e2206c386a8fb65bbeb818 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/27/27a18a527dfed3962528c55dffbede7e differ diff --git a/[AIOLOS]/Library/Artifacts/27/27c2a7a4cba34e0e649edce6d812a960 b/[AIOLOS]/Library/Artifacts/27/27c2a7a4cba34e0e649edce6d812a960 new file mode 100644 index 0000000000000000000000000000000000000000..549d3a6d2007fc71705012c1ac2cc10fc2a9c136 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/27/27c2a7a4cba34e0e649edce6d812a960 differ diff --git a/[AIOLOS]/Library/Artifacts/28/284110b24fa2d5e8c8616668ac4e1429 b/[AIOLOS]/Library/Artifacts/28/284110b24fa2d5e8c8616668ac4e1429 new file mode 100644 index 0000000000000000000000000000000000000000..949adb4d80e333c0b97044a90f33145a1e666fb4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/28/284110b24fa2d5e8c8616668ac4e1429 differ diff --git a/[AIOLOS]/Library/Artifacts/28/286c2f8b6a15f9395840f952845ffb51 b/[AIOLOS]/Library/Artifacts/28/286c2f8b6a15f9395840f952845ffb51 new file mode 100644 index 0000000000000000000000000000000000000000..b755076731a007a2df96f658289ef9f245d187b8 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/28/286c2f8b6a15f9395840f952845ffb51 differ diff --git a/[AIOLOS]/Library/Artifacts/28/289a515383b7cccb273758fc10090ef4 b/[AIOLOS]/Library/Artifacts/28/289a515383b7cccb273758fc10090ef4 new file mode 100644 index 0000000000000000000000000000000000000000..560913ec32ccff8fc1923d8e42eb76bc7c71b012 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/28/289a515383b7cccb273758fc10090ef4 differ diff --git a/[AIOLOS]/Library/Artifacts/29/292e2af4b591a5a891f38b3bb3a31f2f b/[AIOLOS]/Library/Artifacts/29/292e2af4b591a5a891f38b3bb3a31f2f new file mode 100644 index 0000000000000000000000000000000000000000..9cb591a892002a101dce770550192d22fe43c862 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/29/292e2af4b591a5a891f38b3bb3a31f2f differ diff --git a/[AIOLOS]/Library/Artifacts/29/29406ff0f34970bdaa8a0ac5ecdebd59 b/[AIOLOS]/Library/Artifacts/29/29406ff0f34970bdaa8a0ac5ecdebd59 new file mode 100644 index 0000000000000000000000000000000000000000..c0a7cb8e88f1c9bdcb5c497ec845d08d88e551e5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/29/29406ff0f34970bdaa8a0ac5ecdebd59 differ diff --git a/[AIOLOS]/Library/Artifacts/2a/2a3b4c94d11a96c1d12a8cce48d240be b/[AIOLOS]/Library/Artifacts/2a/2a3b4c94d11a96c1d12a8cce48d240be new file mode 100644 index 0000000000000000000000000000000000000000..38228220c95afa38b643e1c94ade27eb52a3083e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/2a/2a3b4c94d11a96c1d12a8cce48d240be differ diff --git a/[AIOLOS]/Library/Artifacts/2b/2b4c7d6087e8672b5e8aae6717941721 b/[AIOLOS]/Library/Artifacts/2b/2b4c7d6087e8672b5e8aae6717941721 new file mode 100644 index 0000000000000000000000000000000000000000..ce26cb2a943c4198c5468a505c09696baf7047fa Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/2b/2b4c7d6087e8672b5e8aae6717941721 differ diff --git a/[AIOLOS]/Library/Artifacts/2b/2b58c19562019a2c1100fc87cd235636 b/[AIOLOS]/Library/Artifacts/2b/2b58c19562019a2c1100fc87cd235636 new file mode 100644 index 0000000000000000000000000000000000000000..7ddb75564df61148c45b34af6c0d14620208d81c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/2b/2b58c19562019a2c1100fc87cd235636 differ diff --git a/[AIOLOS]/Library/Artifacts/2b/2b5f43e6c71fb391fbc193bc05c82bfe b/[AIOLOS]/Library/Artifacts/2b/2b5f43e6c71fb391fbc193bc05c82bfe new file mode 100644 index 0000000000000000000000000000000000000000..6f4db95f3539acf7ca39e4162dae3066b88661d4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/2b/2b5f43e6c71fb391fbc193bc05c82bfe differ diff --git a/[AIOLOS]/Library/Artifacts/2b/2b863ed11d1e397008f75a4d185e30ed b/[AIOLOS]/Library/Artifacts/2b/2b863ed11d1e397008f75a4d185e30ed new file mode 100644 index 0000000000000000000000000000000000000000..7c8a0289be07b4e04254c157a29949a0b58b3884 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/2b/2b863ed11d1e397008f75a4d185e30ed differ diff --git a/[AIOLOS]/Library/Artifacts/2b/2b8ef9af2c60ff5534e7433c021692dd b/[AIOLOS]/Library/Artifacts/2b/2b8ef9af2c60ff5534e7433c021692dd new file mode 100644 index 0000000000000000000000000000000000000000..86742545746aa622b97f425bd0fe73ef7e51528a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/2b/2b8ef9af2c60ff5534e7433c021692dd differ diff --git a/[AIOLOS]/Library/Artifacts/2c/2c15774b7effa64498a05680b8c131c7 b/[AIOLOS]/Library/Artifacts/2c/2c15774b7effa64498a05680b8c131c7 new file mode 100644 index 0000000000000000000000000000000000000000..69c1f3f8b2816739c6c4a2ced9f079bf86ef4da2 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/2c/2c15774b7effa64498a05680b8c131c7 differ diff --git a/[AIOLOS]/Library/Artifacts/2c/2c74db7d8e4b76459c378afb474f8b8b b/[AIOLOS]/Library/Artifacts/2c/2c74db7d8e4b76459c378afb474f8b8b new file mode 100644 index 0000000000000000000000000000000000000000..02e6dd070bc9a8de4022a36f3cd3d6dc9f9cba0c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/2c/2c74db7d8e4b76459c378afb474f8b8b differ diff --git a/[AIOLOS]/Library/Artifacts/2d/2d6ab20a16f919b9765dad016233b56c b/[AIOLOS]/Library/Artifacts/2d/2d6ab20a16f919b9765dad016233b56c new file mode 100644 index 0000000000000000000000000000000000000000..f1537d2a5b3d7867ec462cc6305857fcd3616bf0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/2d/2d6ab20a16f919b9765dad016233b56c differ diff --git a/[AIOLOS]/Library/Artifacts/2e/2e2995a4ea2621ed5afe55a05496a1d8 b/[AIOLOS]/Library/Artifacts/2e/2e2995a4ea2621ed5afe55a05496a1d8 new file mode 100644 index 0000000000000000000000000000000000000000..34b71c1c3435f8bf79667747aafd2be5f85dd7f3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/2e/2e2995a4ea2621ed5afe55a05496a1d8 differ diff --git a/[AIOLOS]/Library/Artifacts/2e/2e5de9210dcf205782e412f4dbe0f035 b/[AIOLOS]/Library/Artifacts/2e/2e5de9210dcf205782e412f4dbe0f035 new file mode 100644 index 0000000000000000000000000000000000000000..03e073bdb23b3ae73dbe41156148327651c8991d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/2e/2e5de9210dcf205782e412f4dbe0f035 differ diff --git a/[AIOLOS]/Library/Artifacts/2f/2f1d611660816815826aa5810260ff41 b/[AIOLOS]/Library/Artifacts/2f/2f1d611660816815826aa5810260ff41 new file mode 100644 index 0000000000000000000000000000000000000000..82f4125f85633f14d9af4a5b29aa0f2cff9ceda0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/2f/2f1d611660816815826aa5810260ff41 differ diff --git a/[AIOLOS]/Library/Artifacts/2f/2f94709bbc636cce3db31094257ffe2d b/[AIOLOS]/Library/Artifacts/2f/2f94709bbc636cce3db31094257ffe2d new file mode 100644 index 0000000000000000000000000000000000000000..0646ddc22ddc0f632c92b6c6cf6ba7dd0801e964 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/2f/2f94709bbc636cce3db31094257ffe2d differ diff --git a/[AIOLOS]/Library/Artifacts/2f/2fe2030b600842683cceea0f03a9b1a9 b/[AIOLOS]/Library/Artifacts/2f/2fe2030b600842683cceea0f03a9b1a9 new file mode 100644 index 0000000000000000000000000000000000000000..99a5feba0a117c709da57e1c38fd8714b665bfbc Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/2f/2fe2030b600842683cceea0f03a9b1a9 differ diff --git a/[AIOLOS]/Library/Artifacts/30/30713a5325951763572778657fb7086c b/[AIOLOS]/Library/Artifacts/30/30713a5325951763572778657fb7086c new file mode 100644 index 0000000000000000000000000000000000000000..50850df716b1415aa6fbcdb77d6b63420af7a760 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/30/30713a5325951763572778657fb7086c differ diff --git a/[AIOLOS]/Library/Artifacts/30/3093ec98c19dbb4e21ede0811df7ac5d b/[AIOLOS]/Library/Artifacts/30/3093ec98c19dbb4e21ede0811df7ac5d new file mode 100644 index 0000000000000000000000000000000000000000..0cf83409aac932f301dc7d1e51ddfdf502f3ee6a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/30/3093ec98c19dbb4e21ede0811df7ac5d differ diff --git a/[AIOLOS]/Library/Artifacts/30/30c24931ae84e3c9ebadb4d71b424614 b/[AIOLOS]/Library/Artifacts/30/30c24931ae84e3c9ebadb4d71b424614 new file mode 100644 index 0000000000000000000000000000000000000000..a9c7243b39626c4a1b5e1a14c50b3649125f27e7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/30/30c24931ae84e3c9ebadb4d71b424614 differ diff --git a/[AIOLOS]/Library/Artifacts/32/3204c8f57b45ff1e9013fe8916203a95 b/[AIOLOS]/Library/Artifacts/32/3204c8f57b45ff1e9013fe8916203a95 new file mode 100644 index 0000000000000000000000000000000000000000..59d4b5523894456ac7ece8c5bc0fe03f70d93f5a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/32/3204c8f57b45ff1e9013fe8916203a95 differ diff --git a/[AIOLOS]/Library/Artifacts/32/32a6cda50ddca2888601e2cda5af0bff b/[AIOLOS]/Library/Artifacts/32/32a6cda50ddca2888601e2cda5af0bff new file mode 100644 index 0000000000000000000000000000000000000000..f4f464c6769ba6014192ae9f79a3fefc3a1fff16 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/32/32a6cda50ddca2888601e2cda5af0bff differ diff --git a/[AIOLOS]/Library/Artifacts/33/33185c6f13a9421b8b2745d6f244fef5 b/[AIOLOS]/Library/Artifacts/33/33185c6f13a9421b8b2745d6f244fef5 new file mode 100644 index 0000000000000000000000000000000000000000..05b879c3496d8df787cca9310884f2b8c1cdaf8e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/33/33185c6f13a9421b8b2745d6f244fef5 differ diff --git a/[AIOLOS]/Library/Artifacts/33/3325c9d5001311b637f362d73bb39ca2 b/[AIOLOS]/Library/Artifacts/33/3325c9d5001311b637f362d73bb39ca2 new file mode 100644 index 0000000000000000000000000000000000000000..3e2f38933c0592822bdb3fe882ed0ab37a4c54d5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/33/3325c9d5001311b637f362d73bb39ca2 differ diff --git a/[AIOLOS]/Library/Artifacts/33/334bacb5e4ff5a7f49e8390700df6dd5 b/[AIOLOS]/Library/Artifacts/33/334bacb5e4ff5a7f49e8390700df6dd5 new file mode 100644 index 0000000000000000000000000000000000000000..27e12c7929852bc6959d56bbebf8ecd2e948c1cd Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/33/334bacb5e4ff5a7f49e8390700df6dd5 differ diff --git a/[AIOLOS]/Library/Artifacts/33/338a1f87b5073bb3ac855fb10ea21965 b/[AIOLOS]/Library/Artifacts/33/338a1f87b5073bb3ac855fb10ea21965 new file mode 100644 index 0000000000000000000000000000000000000000..2c4cb5bc9dd4ee73f8db982bb869356fc25a92d2 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/33/338a1f87b5073bb3ac855fb10ea21965 differ diff --git a/[AIOLOS]/Library/Artifacts/34/340946a9162df067cd44bef98f6e762d b/[AIOLOS]/Library/Artifacts/34/340946a9162df067cd44bef98f6e762d new file mode 100644 index 0000000000000000000000000000000000000000..f30f9643f780aba6173744e0475f8c881e0da5d2 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/34/340946a9162df067cd44bef98f6e762d differ diff --git a/[AIOLOS]/Library/Artifacts/35/3563602a14e11bdd52f7898779fd20c8 b/[AIOLOS]/Library/Artifacts/35/3563602a14e11bdd52f7898779fd20c8 new file mode 100644 index 0000000000000000000000000000000000000000..20fc495a83163d77d601718d61d535108c7b2088 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/35/3563602a14e11bdd52f7898779fd20c8 differ diff --git a/[AIOLOS]/Library/Artifacts/36/3685111ecb576a47a5f090e4d88eed28 b/[AIOLOS]/Library/Artifacts/36/3685111ecb576a47a5f090e4d88eed28 new file mode 100644 index 0000000000000000000000000000000000000000..4c7dc743d8d1faa83f0700f769e80671e4ca136c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/36/3685111ecb576a47a5f090e4d88eed28 differ diff --git a/[AIOLOS]/Library/Artifacts/37/371e22fa18bc8552a2fc9c839c966881 b/[AIOLOS]/Library/Artifacts/37/371e22fa18bc8552a2fc9c839c966881 new file mode 100644 index 0000000000000000000000000000000000000000..b89eb15afbf2e58fddd903a1a2d0d84f9e15d7af Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/37/371e22fa18bc8552a2fc9c839c966881 differ diff --git a/[AIOLOS]/Library/Artifacts/37/37403912a0010b92d18fb603d8a2edde b/[AIOLOS]/Library/Artifacts/37/37403912a0010b92d18fb603d8a2edde new file mode 100644 index 0000000000000000000000000000000000000000..b671380574254dda651397c06be389db0a111379 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/37/37403912a0010b92d18fb603d8a2edde differ diff --git a/[AIOLOS]/Library/Artifacts/38/386f1011dd2274ee4984970d2ba39263 b/[AIOLOS]/Library/Artifacts/38/386f1011dd2274ee4984970d2ba39263 new file mode 100644 index 0000000000000000000000000000000000000000..f0e3fc1bce99fd87f2eb2729d4a095f9d5c8ce98 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/38/386f1011dd2274ee4984970d2ba39263 differ diff --git a/[AIOLOS]/Library/Artifacts/38/38778388b7792a3ffdf6b38a4ded32ca b/[AIOLOS]/Library/Artifacts/38/38778388b7792a3ffdf6b38a4ded32ca new file mode 100644 index 0000000000000000000000000000000000000000..a04a691b761a67522f63640fe85ad53096f6672a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/38/38778388b7792a3ffdf6b38a4ded32ca differ diff --git a/[AIOLOS]/Library/Artifacts/38/38c9f49dd669ad990b3caf02d67237c6 b/[AIOLOS]/Library/Artifacts/38/38c9f49dd669ad990b3caf02d67237c6 new file mode 100644 index 0000000000000000000000000000000000000000..d74ee0781421051d48a90819fa82ed788d9888aa Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/38/38c9f49dd669ad990b3caf02d67237c6 differ diff --git a/[AIOLOS]/Library/Artifacts/39/3950cc17e59084d9965492675b6a7627 b/[AIOLOS]/Library/Artifacts/39/3950cc17e59084d9965492675b6a7627 new file mode 100644 index 0000000000000000000000000000000000000000..dfc64d29c823b36f82982a4945f88f2c5cfae970 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/39/3950cc17e59084d9965492675b6a7627 differ diff --git a/[AIOLOS]/Library/Artifacts/39/397db0cb7c80a49faae4a26d8a53ec37 b/[AIOLOS]/Library/Artifacts/39/397db0cb7c80a49faae4a26d8a53ec37 new file mode 100644 index 0000000000000000000000000000000000000000..21c3bdf3703a9cbf1ffb20976de6d5f16590646b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/39/397db0cb7c80a49faae4a26d8a53ec37 differ diff --git a/[AIOLOS]/Library/Artifacts/39/39a9a8d2e50d6534e56efa51b53ca3f8 b/[AIOLOS]/Library/Artifacts/39/39a9a8d2e50d6534e56efa51b53ca3f8 new file mode 100644 index 0000000000000000000000000000000000000000..2070a014d289af641e66781c765ac92b67bb5df0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/39/39a9a8d2e50d6534e56efa51b53ca3f8 differ diff --git a/[AIOLOS]/Library/Artifacts/39/39aca1791aa3724b2d9bf3eeff8dcc59 b/[AIOLOS]/Library/Artifacts/39/39aca1791aa3724b2d9bf3eeff8dcc59 new file mode 100644 index 0000000000000000000000000000000000000000..afa92e68382f41c52903f90006382fd544a49bd0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/39/39aca1791aa3724b2d9bf3eeff8dcc59 differ diff --git a/[AIOLOS]/Library/Artifacts/39/39fb72c6829731f210543a08dca0f602 b/[AIOLOS]/Library/Artifacts/39/39fb72c6829731f210543a08dca0f602 new file mode 100644 index 0000000000000000000000000000000000000000..03f608efc3a425e2ca537527adbf83efbbe7702d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/39/39fb72c6829731f210543a08dca0f602 differ diff --git a/[AIOLOS]/Library/Artifacts/3a/3a085c17b3ecc0db4379d1706400303d b/[AIOLOS]/Library/Artifacts/3a/3a085c17b3ecc0db4379d1706400303d new file mode 100644 index 0000000000000000000000000000000000000000..aa2ed931a1b47a89691403c9fd8759e921071423 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3a/3a085c17b3ecc0db4379d1706400303d differ diff --git a/[AIOLOS]/Library/Artifacts/3a/3a336599b34ff0fd097591c1f4b1c760 b/[AIOLOS]/Library/Artifacts/3a/3a336599b34ff0fd097591c1f4b1c760 new file mode 100644 index 0000000000000000000000000000000000000000..8e0972428c23f42fb2c2a0ecbeb1563b161f5a0e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3a/3a336599b34ff0fd097591c1f4b1c760 differ diff --git a/[AIOLOS]/Library/Artifacts/3a/3a377028f9752992123a68d49c6d9a89 b/[AIOLOS]/Library/Artifacts/3a/3a377028f9752992123a68d49c6d9a89 new file mode 100644 index 0000000000000000000000000000000000000000..3fbdaf05fe1b9649bff983379016989228f0e7c0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3a/3a377028f9752992123a68d49c6d9a89 differ diff --git a/[AIOLOS]/Library/Artifacts/3a/3ade9223522198b1d28680e46db985e7 b/[AIOLOS]/Library/Artifacts/3a/3ade9223522198b1d28680e46db985e7 new file mode 100644 index 0000000000000000000000000000000000000000..389c1cd4e29d67d7ddb0f3f85324e2d60acbddf6 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3a/3ade9223522198b1d28680e46db985e7 differ diff --git a/[AIOLOS]/Library/Artifacts/3b/3b18da8d5f5670b9536ab79a9410b7fa b/[AIOLOS]/Library/Artifacts/3b/3b18da8d5f5670b9536ab79a9410b7fa new file mode 100644 index 0000000000000000000000000000000000000000..a52cd0dac4d3fa81aadbfec86092a824f0c41c17 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3b/3b18da8d5f5670b9536ab79a9410b7fa differ diff --git a/[AIOLOS]/Library/Artifacts/3b/3b19f96b9a565ff2946cb164dc2d857c b/[AIOLOS]/Library/Artifacts/3b/3b19f96b9a565ff2946cb164dc2d857c new file mode 100644 index 0000000000000000000000000000000000000000..d4e9ded53179feaa0b2edf094217f051b343fd31 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3b/3b19f96b9a565ff2946cb164dc2d857c differ diff --git a/[AIOLOS]/Library/Artifacts/3b/3b2641a5c47526a3543209f8b3980753 b/[AIOLOS]/Library/Artifacts/3b/3b2641a5c47526a3543209f8b3980753 new file mode 100644 index 0000000000000000000000000000000000000000..e1dfd7db65cd780ca84edaf47ef4dc22a315ce3b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3b/3b2641a5c47526a3543209f8b3980753 differ diff --git a/[AIOLOS]/Library/Artifacts/3b/3b3255dc1acfdf8425759b403ace517c b/[AIOLOS]/Library/Artifacts/3b/3b3255dc1acfdf8425759b403ace517c new file mode 100644 index 0000000000000000000000000000000000000000..fa453232405c02a060f527b1b77788a250251586 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3b/3b3255dc1acfdf8425759b403ace517c differ diff --git a/[AIOLOS]/Library/Artifacts/3b/3b9ad98de6b56b1dd68354d757155a5d b/[AIOLOS]/Library/Artifacts/3b/3b9ad98de6b56b1dd68354d757155a5d new file mode 100644 index 0000000000000000000000000000000000000000..468720d04bbcce1b1b0a5aeed49d34e92f1bd4d6 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3b/3b9ad98de6b56b1dd68354d757155a5d differ diff --git a/[AIOLOS]/Library/Artifacts/3c/3ce8b38d5bc6abcd82fa50af634f8da9 b/[AIOLOS]/Library/Artifacts/3c/3ce8b38d5bc6abcd82fa50af634f8da9 new file mode 100644 index 0000000000000000000000000000000000000000..00ea0b8b02ebe85d8107096f39f8a0732f453e5c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3c/3ce8b38d5bc6abcd82fa50af634f8da9 differ diff --git a/[AIOLOS]/Library/Artifacts/3d/3d3d30fd02f88b1b83fe13ef9d72a815 b/[AIOLOS]/Library/Artifacts/3d/3d3d30fd02f88b1b83fe13ef9d72a815 new file mode 100644 index 0000000000000000000000000000000000000000..56d8991a089e29221662dfb84b5efc603f224fcf Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3d/3d3d30fd02f88b1b83fe13ef9d72a815 differ diff --git a/[AIOLOS]/Library/Artifacts/3d/3d444b83a4960198097fa3d6e7d0fd83 b/[AIOLOS]/Library/Artifacts/3d/3d444b83a4960198097fa3d6e7d0fd83 new file mode 100644 index 0000000000000000000000000000000000000000..d0012bf621a0766113223396eb26272e0b056d30 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3d/3d444b83a4960198097fa3d6e7d0fd83 differ diff --git a/[AIOLOS]/Library/Artifacts/3d/3dbf77a0c47297f360d97ad2a693678b b/[AIOLOS]/Library/Artifacts/3d/3dbf77a0c47297f360d97ad2a693678b new file mode 100644 index 0000000000000000000000000000000000000000..232550d58c4717600c3a62e9cf629ec6b5e93c40 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3d/3dbf77a0c47297f360d97ad2a693678b differ diff --git a/[AIOLOS]/Library/Artifacts/3e/3e0b44dfdbb4a51e81f6c4a0bfad5a94 b/[AIOLOS]/Library/Artifacts/3e/3e0b44dfdbb4a51e81f6c4a0bfad5a94 new file mode 100644 index 0000000000000000000000000000000000000000..c7e523466cf1561a92abce2f1a98c92e2c04ef29 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3e/3e0b44dfdbb4a51e81f6c4a0bfad5a94 differ diff --git a/[AIOLOS]/Library/Artifacts/3e/3e16e5829720fdef3b2ff3ae6989790f b/[AIOLOS]/Library/Artifacts/3e/3e16e5829720fdef3b2ff3ae6989790f new file mode 100644 index 0000000000000000000000000000000000000000..797225c9b5b6a82275ff31b97270d37869edc86f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3e/3e16e5829720fdef3b2ff3ae6989790f differ diff --git a/[AIOLOS]/Library/Artifacts/3e/3e18dab0059a47c953458cd2a5407962 b/[AIOLOS]/Library/Artifacts/3e/3e18dab0059a47c953458cd2a5407962 new file mode 100644 index 0000000000000000000000000000000000000000..a24b49382d181b3e149554933a6dd8f7ff57cad3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3e/3e18dab0059a47c953458cd2a5407962 differ diff --git a/[AIOLOS]/Library/Artifacts/3e/3e415d536b37d17f41dfe5e1d6959032 b/[AIOLOS]/Library/Artifacts/3e/3e415d536b37d17f41dfe5e1d6959032 new file mode 100644 index 0000000000000000000000000000000000000000..99ca32111862ed40ac13db44caeb7f277a81720d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3e/3e415d536b37d17f41dfe5e1d6959032 differ diff --git a/[AIOLOS]/Library/Artifacts/3e/3e5f448820d28420f1cb71a4c42f6858 b/[AIOLOS]/Library/Artifacts/3e/3e5f448820d28420f1cb71a4c42f6858 new file mode 100644 index 0000000000000000000000000000000000000000..ef76718211d8a32cb2136f66f3d4c0735e81bebf Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3e/3e5f448820d28420f1cb71a4c42f6858 differ diff --git a/[AIOLOS]/Library/Artifacts/3e/3e7b5293a08bca37610407f77c51aaa8 b/[AIOLOS]/Library/Artifacts/3e/3e7b5293a08bca37610407f77c51aaa8 new file mode 100644 index 0000000000000000000000000000000000000000..02231f2eb0800090b5e75240863e0884cf5adebf Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3e/3e7b5293a08bca37610407f77c51aaa8 differ diff --git a/[AIOLOS]/Library/Artifacts/3f/3f26e4191d2664e641cdb05dc837bd25 b/[AIOLOS]/Library/Artifacts/3f/3f26e4191d2664e641cdb05dc837bd25 new file mode 100644 index 0000000000000000000000000000000000000000..de3e6c0605266b53b5e75ca39114e7bb617d36eb Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3f/3f26e4191d2664e641cdb05dc837bd25 differ diff --git a/[AIOLOS]/Library/Artifacts/3f/3fc1ba5da42c0f592621d4d3903ca9df b/[AIOLOS]/Library/Artifacts/3f/3fc1ba5da42c0f592621d4d3903ca9df new file mode 100644 index 0000000000000000000000000000000000000000..42897e8f16f9a4c4b27748b98d6c74cb88945379 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/3f/3fc1ba5da42c0f592621d4d3903ca9df differ diff --git a/[AIOLOS]/Library/Artifacts/40/401df5830aa5210612de7e1a60b0403b b/[AIOLOS]/Library/Artifacts/40/401df5830aa5210612de7e1a60b0403b new file mode 100644 index 0000000000000000000000000000000000000000..70cbda6dc338e5610055a46bfc33288ff1903b72 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/40/401df5830aa5210612de7e1a60b0403b differ diff --git a/[AIOLOS]/Library/Artifacts/40/4034f6c3e2058d80315ad9aa15f5811a b/[AIOLOS]/Library/Artifacts/40/4034f6c3e2058d80315ad9aa15f5811a new file mode 100644 index 0000000000000000000000000000000000000000..4ff6cbaea8d6dc2a8cddbdd4e1e5bfc5aeefced3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/40/4034f6c3e2058d80315ad9aa15f5811a differ diff --git a/[AIOLOS]/Library/Artifacts/40/404f8612cd5aa6e60f53f2afc0fceab2 b/[AIOLOS]/Library/Artifacts/40/404f8612cd5aa6e60f53f2afc0fceab2 new file mode 100644 index 0000000000000000000000000000000000000000..07810e1d8e0c0d2e5f876b4b79eac2c41532d93b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/40/404f8612cd5aa6e60f53f2afc0fceab2 differ diff --git a/[AIOLOS]/Library/Artifacts/40/40d23426ce7a18a4cf9f874576994317 b/[AIOLOS]/Library/Artifacts/40/40d23426ce7a18a4cf9f874576994317 new file mode 100644 index 0000000000000000000000000000000000000000..588f5a7f9ab0f50c4fb8b075d80d0694a697c50d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/40/40d23426ce7a18a4cf9f874576994317 differ diff --git a/[AIOLOS]/Library/Artifacts/41/41329285906615561942600e8ea218e8 b/[AIOLOS]/Library/Artifacts/41/41329285906615561942600e8ea218e8 new file mode 100644 index 0000000000000000000000000000000000000000..ff93c13a5636b7d083e158f4de3ee8ebfbbcc491 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/41/41329285906615561942600e8ea218e8 differ diff --git a/[AIOLOS]/Library/Artifacts/41/41411b80e19ecc8e33d7eae64558347c b/[AIOLOS]/Library/Artifacts/41/41411b80e19ecc8e33d7eae64558347c new file mode 100644 index 0000000000000000000000000000000000000000..7a9392095f3a139fd55bdbff60f71850a8faf29d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/41/41411b80e19ecc8e33d7eae64558347c differ diff --git a/[AIOLOS]/Library/Artifacts/42/4257e56dc9c110af0ded445a101657a4 b/[AIOLOS]/Library/Artifacts/42/4257e56dc9c110af0ded445a101657a4 new file mode 100644 index 0000000000000000000000000000000000000000..dda44eddface91c1a3e10d314bb32a0b7174e92c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/42/4257e56dc9c110af0ded445a101657a4 differ diff --git a/[AIOLOS]/Library/Artifacts/42/426b401374167cd5f958a55a2af36ae6 b/[AIOLOS]/Library/Artifacts/42/426b401374167cd5f958a55a2af36ae6 new file mode 100644 index 0000000000000000000000000000000000000000..d90f476d17839468423fd53d36679d4eda95653f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/42/426b401374167cd5f958a55a2af36ae6 differ diff --git a/[AIOLOS]/Library/Artifacts/42/42b84123894e31c96f2580ca8f4fd5c6 b/[AIOLOS]/Library/Artifacts/42/42b84123894e31c96f2580ca8f4fd5c6 new file mode 100644 index 0000000000000000000000000000000000000000..c1e921939a4802824e1cb938c7abd20bcff6edab Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/42/42b84123894e31c96f2580ca8f4fd5c6 differ diff --git a/[AIOLOS]/Library/Artifacts/43/4330c9f9c210eae0c96fb29b616125f9 b/[AIOLOS]/Library/Artifacts/43/4330c9f9c210eae0c96fb29b616125f9 new file mode 100644 index 0000000000000000000000000000000000000000..45a512ad2449463c4219531209c63b90fa033343 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/43/4330c9f9c210eae0c96fb29b616125f9 differ diff --git a/[AIOLOS]/Library/Artifacts/43/4382c24b7ab1ccf466d264b0cf7856ef b/[AIOLOS]/Library/Artifacts/43/4382c24b7ab1ccf466d264b0cf7856ef new file mode 100644 index 0000000000000000000000000000000000000000..c87bdc60e36e4661356498c0df1caee8b15fd0bc Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/43/4382c24b7ab1ccf466d264b0cf7856ef differ diff --git a/[AIOLOS]/Library/Artifacts/44/440a0e5f4d6df45e0bc906c459a771c1 b/[AIOLOS]/Library/Artifacts/44/440a0e5f4d6df45e0bc906c459a771c1 new file mode 100644 index 0000000000000000000000000000000000000000..e9fb3d04b4d5df106dcd3de44122b26765adc6fe Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/44/440a0e5f4d6df45e0bc906c459a771c1 differ diff --git a/[AIOLOS]/Library/Artifacts/44/4446aa9f7b1b20947fbed6bf1048cb4a b/[AIOLOS]/Library/Artifacts/44/4446aa9f7b1b20947fbed6bf1048cb4a new file mode 100644 index 0000000000000000000000000000000000000000..a5746e51dba00d3c65b5109433da425cf1f3c8ea Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/44/4446aa9f7b1b20947fbed6bf1048cb4a differ diff --git a/[AIOLOS]/Library/Artifacts/44/4452dbee335e7ee62146cdc541f9a343 b/[AIOLOS]/Library/Artifacts/44/4452dbee335e7ee62146cdc541f9a343 new file mode 100644 index 0000000000000000000000000000000000000000..87c796f4f6481de18d2a80dbe4daf6a1a1235bf3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/44/4452dbee335e7ee62146cdc541f9a343 differ diff --git a/[AIOLOS]/Library/Artifacts/44/44c059452303df1308c29d4b78e14d4a b/[AIOLOS]/Library/Artifacts/44/44c059452303df1308c29d4b78e14d4a new file mode 100644 index 0000000000000000000000000000000000000000..baf4fbf1d72fa119754c6311198c74363da11712 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/44/44c059452303df1308c29d4b78e14d4a differ diff --git a/[AIOLOS]/Library/Artifacts/45/45d0f879c3f9b865f2b293cc4321ee59 b/[AIOLOS]/Library/Artifacts/45/45d0f879c3f9b865f2b293cc4321ee59 new file mode 100644 index 0000000000000000000000000000000000000000..c6825f4f459a5093731e2dd106c367569e731b8a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/45/45d0f879c3f9b865f2b293cc4321ee59 differ diff --git a/[AIOLOS]/Library/Artifacts/45/45d56ce6b39cbbbfb1feb2d4f0625406 b/[AIOLOS]/Library/Artifacts/45/45d56ce6b39cbbbfb1feb2d4f0625406 new file mode 100644 index 0000000000000000000000000000000000000000..b88cf9cfe2cee60b428e226861ea515076145eda Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/45/45d56ce6b39cbbbfb1feb2d4f0625406 differ diff --git a/[AIOLOS]/Library/Artifacts/46/46410b46ca06bff0bf4725f14893b4a6 b/[AIOLOS]/Library/Artifacts/46/46410b46ca06bff0bf4725f14893b4a6 new file mode 100644 index 0000000000000000000000000000000000000000..a6057d712eb0c963890dfa50f3bc9daf1d710a7d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/46/46410b46ca06bff0bf4725f14893b4a6 differ diff --git a/[AIOLOS]/Library/Artifacts/46/46492615d8d27618bce4e4ed23ae343e b/[AIOLOS]/Library/Artifacts/46/46492615d8d27618bce4e4ed23ae343e new file mode 100644 index 0000000000000000000000000000000000000000..e09a14ebcdafae8aa84197cabcaee8f36e9adc7a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/46/46492615d8d27618bce4e4ed23ae343e differ diff --git a/[AIOLOS]/Library/Artifacts/46/466ed0f5e2f783b688821dcbf18e99dd b/[AIOLOS]/Library/Artifacts/46/466ed0f5e2f783b688821dcbf18e99dd new file mode 100644 index 0000000000000000000000000000000000000000..71bf4cad16e2e2bf93cb117e937ddb87496ed317 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/46/466ed0f5e2f783b688821dcbf18e99dd differ diff --git a/[AIOLOS]/Library/Artifacts/46/468bb5811ab1b43bc4331692d0f19f4f b/[AIOLOS]/Library/Artifacts/46/468bb5811ab1b43bc4331692d0f19f4f new file mode 100644 index 0000000000000000000000000000000000000000..83b7d407d2095415ba0f46ed857c2de33311448e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/46/468bb5811ab1b43bc4331692d0f19f4f differ diff --git a/[AIOLOS]/Library/Artifacts/46/46aacfa9636a62afd5e9cade840532e3 b/[AIOLOS]/Library/Artifacts/46/46aacfa9636a62afd5e9cade840532e3 new file mode 100644 index 0000000000000000000000000000000000000000..9c9cb025213670aef7e62a0d49ec9acb1e31b863 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/46/46aacfa9636a62afd5e9cade840532e3 differ diff --git a/[AIOLOS]/Library/Artifacts/46/46bbaea43df3243ce5af26ac20bc23db b/[AIOLOS]/Library/Artifacts/46/46bbaea43df3243ce5af26ac20bc23db new file mode 100644 index 0000000000000000000000000000000000000000..de96907f0eb10868f2924720bbf3081ba563d711 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/46/46bbaea43df3243ce5af26ac20bc23db differ diff --git a/[AIOLOS]/Library/Artifacts/47/477068b74e5a76e62df2c3688b537de3 b/[AIOLOS]/Library/Artifacts/47/477068b74e5a76e62df2c3688b537de3 new file mode 100644 index 0000000000000000000000000000000000000000..e7d558da90ecacf85d780767f4562b4ee02b95e3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/47/477068b74e5a76e62df2c3688b537de3 differ diff --git a/[AIOLOS]/Library/Artifacts/47/477b671b34d340187c83d1a2fab0e587 b/[AIOLOS]/Library/Artifacts/47/477b671b34d340187c83d1a2fab0e587 new file mode 100644 index 0000000000000000000000000000000000000000..f56941a17bb38441fdb639a1304e4dbbabc97ab9 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/47/477b671b34d340187c83d1a2fab0e587 differ diff --git a/[AIOLOS]/Library/Artifacts/47/47c33f7f9ca0ded401d7901c2cd25ffb b/[AIOLOS]/Library/Artifacts/47/47c33f7f9ca0ded401d7901c2cd25ffb new file mode 100644 index 0000000000000000000000000000000000000000..b0991179bd2a9be880a94099224a886f80a785c4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/47/47c33f7f9ca0ded401d7901c2cd25ffb differ diff --git a/[AIOLOS]/Library/Artifacts/4a/4a0cd4180d7aeda369caf8d8f14b373b b/[AIOLOS]/Library/Artifacts/4a/4a0cd4180d7aeda369caf8d8f14b373b new file mode 100644 index 0000000000000000000000000000000000000000..ad10b8675cae587a742b23c8d37de76add916e1d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/4a/4a0cd4180d7aeda369caf8d8f14b373b differ diff --git a/[AIOLOS]/Library/Artifacts/4a/4a9848fa7537d73598bbb86be4f9d2ab b/[AIOLOS]/Library/Artifacts/4a/4a9848fa7537d73598bbb86be4f9d2ab new file mode 100644 index 0000000000000000000000000000000000000000..f014356e5c7d96b29dd86b13e01bfc1c5d70b575 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/4a/4a9848fa7537d73598bbb86be4f9d2ab differ diff --git a/[AIOLOS]/Library/Artifacts/4b/4b0ac57c29981c22ecf3e72fbe78eb4f b/[AIOLOS]/Library/Artifacts/4b/4b0ac57c29981c22ecf3e72fbe78eb4f new file mode 100644 index 0000000000000000000000000000000000000000..56cc07622e7b3de3e8c1243ffb6e91c2fed0e736 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/4b/4b0ac57c29981c22ecf3e72fbe78eb4f differ diff --git a/[AIOLOS]/Library/Artifacts/4b/4b626c58df47e132746e7703f82117f7 b/[AIOLOS]/Library/Artifacts/4b/4b626c58df47e132746e7703f82117f7 new file mode 100644 index 0000000000000000000000000000000000000000..ee581766058ce3eb475c7d168cf78f29dcc771a8 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/4b/4b626c58df47e132746e7703f82117f7 differ diff --git a/[AIOLOS]/Library/Artifacts/4b/4bea21ce625cc6fe88f356f00d2b858c b/[AIOLOS]/Library/Artifacts/4b/4bea21ce625cc6fe88f356f00d2b858c new file mode 100644 index 0000000000000000000000000000000000000000..a34bb321c4f2975c8ac67354100ca0ee79bd6024 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/4b/4bea21ce625cc6fe88f356f00d2b858c differ diff --git a/[AIOLOS]/Library/Artifacts/4c/4c63fb624747309a6de5d551bb7dd460 b/[AIOLOS]/Library/Artifacts/4c/4c63fb624747309a6de5d551bb7dd460 new file mode 100644 index 0000000000000000000000000000000000000000..80aac2104d640ade76861b484fd3ded3e35602e1 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/4c/4c63fb624747309a6de5d551bb7dd460 differ diff --git a/[AIOLOS]/Library/Artifacts/4c/4c92b36371380ffacf85d6c6c5f2ac2e b/[AIOLOS]/Library/Artifacts/4c/4c92b36371380ffacf85d6c6c5f2ac2e new file mode 100644 index 0000000000000000000000000000000000000000..7e815fb289f066ce2fa59011e81b966c6b648103 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/4c/4c92b36371380ffacf85d6c6c5f2ac2e differ diff --git a/[AIOLOS]/Library/Artifacts/4c/4c9e35a42bc6f28265594bb0ff714325 b/[AIOLOS]/Library/Artifacts/4c/4c9e35a42bc6f28265594bb0ff714325 new file mode 100644 index 0000000000000000000000000000000000000000..8cc5ac418819a8831309957763c08b6f42414854 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/4c/4c9e35a42bc6f28265594bb0ff714325 differ diff --git a/[AIOLOS]/Library/Artifacts/4c/4ccf6382064decf3d43858cd1a28fd02 b/[AIOLOS]/Library/Artifacts/4c/4ccf6382064decf3d43858cd1a28fd02 new file mode 100644 index 0000000000000000000000000000000000000000..2fe5f3470d8d2831002b3b0140133658fb5c4131 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/4c/4ccf6382064decf3d43858cd1a28fd02 differ diff --git a/[AIOLOS]/Library/Artifacts/4d/4d15a3ffb37a229b64f8de1234a43967 b/[AIOLOS]/Library/Artifacts/4d/4d15a3ffb37a229b64f8de1234a43967 new file mode 100644 index 0000000000000000000000000000000000000000..6a070158ae9b644b31c761836cdb28bc1f7ad6dd Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/4d/4d15a3ffb37a229b64f8de1234a43967 differ diff --git a/[AIOLOS]/Library/Artifacts/4d/4d73fd5f548bf11fb64e986315db6029 b/[AIOLOS]/Library/Artifacts/4d/4d73fd5f548bf11fb64e986315db6029 new file mode 100644 index 0000000000000000000000000000000000000000..1ffcf0b8bfc2ece77f4e125842e674256efd2764 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/4d/4d73fd5f548bf11fb64e986315db6029 differ diff --git a/[AIOLOS]/Library/Artifacts/4d/4da260b45ad450f033d5abb0f20def90 b/[AIOLOS]/Library/Artifacts/4d/4da260b45ad450f033d5abb0f20def90 new file mode 100644 index 0000000000000000000000000000000000000000..d46b02e807e10f72cd55f113c48a86e5aaea8474 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/4d/4da260b45ad450f033d5abb0f20def90 differ diff --git a/[AIOLOS]/Library/Artifacts/4e/4e0e271bbf84ccfb18da94cb57e4fa2a b/[AIOLOS]/Library/Artifacts/4e/4e0e271bbf84ccfb18da94cb57e4fa2a new file mode 100644 index 0000000000000000000000000000000000000000..e9512508b4044ae79a4cb201994f474397139c2b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/4e/4e0e271bbf84ccfb18da94cb57e4fa2a differ diff --git a/[AIOLOS]/Library/Artifacts/4e/4e1e93753305017de162e4e1b3c6f3bb b/[AIOLOS]/Library/Artifacts/4e/4e1e93753305017de162e4e1b3c6f3bb new file mode 100644 index 0000000000000000000000000000000000000000..a1cade793c2c0f02fc0932f7fa30ea295d70e867 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/4e/4e1e93753305017de162e4e1b3c6f3bb differ diff --git a/[AIOLOS]/Library/Artifacts/4f/4f2e3967a0c39e41eb32bbb42fe5bba7 b/[AIOLOS]/Library/Artifacts/4f/4f2e3967a0c39e41eb32bbb42fe5bba7 new file mode 100644 index 0000000000000000000000000000000000000000..60a7f7b67bb7c2ef5404256a88290173c78ab62f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/4f/4f2e3967a0c39e41eb32bbb42fe5bba7 differ diff --git a/[AIOLOS]/Library/Artifacts/50/502b3eb7658ee8fe69de6c2ae402e8c4 b/[AIOLOS]/Library/Artifacts/50/502b3eb7658ee8fe69de6c2ae402e8c4 new file mode 100644 index 0000000000000000000000000000000000000000..41089bac44cdf55ed98061545b7bcc165ac3f82a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/50/502b3eb7658ee8fe69de6c2ae402e8c4 differ diff --git a/[AIOLOS]/Library/Artifacts/50/50f2ce8107e26c03878e46705c760568 b/[AIOLOS]/Library/Artifacts/50/50f2ce8107e26c03878e46705c760568 new file mode 100644 index 0000000000000000000000000000000000000000..413610a2d56c07836430bcf5dd96f041c5bae5db Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/50/50f2ce8107e26c03878e46705c760568 differ diff --git a/[AIOLOS]/Library/Artifacts/51/510205ec73e552f71f5a8b4a79f62488 b/[AIOLOS]/Library/Artifacts/51/510205ec73e552f71f5a8b4a79f62488 new file mode 100644 index 0000000000000000000000000000000000000000..f4b4fde18f76821a0d32058d71438488e3e4c3e2 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/51/510205ec73e552f71f5a8b4a79f62488 differ diff --git a/[AIOLOS]/Library/Artifacts/51/512f83bc811e5814714ebdb0ba85b07f b/[AIOLOS]/Library/Artifacts/51/512f83bc811e5814714ebdb0ba85b07f new file mode 100644 index 0000000000000000000000000000000000000000..606ca7869619042ce00e56da74c071466ddd760b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/51/512f83bc811e5814714ebdb0ba85b07f differ diff --git a/[AIOLOS]/Library/Artifacts/52/527ba44e6d343da7f3e3d6efe906edda b/[AIOLOS]/Library/Artifacts/52/527ba44e6d343da7f3e3d6efe906edda new file mode 100644 index 0000000000000000000000000000000000000000..2eea7808ddbe58a145e90961cc966467936f4274 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/52/527ba44e6d343da7f3e3d6efe906edda differ diff --git a/[AIOLOS]/Library/Artifacts/52/52a55d1597b6f67802b437dd722194cc b/[AIOLOS]/Library/Artifacts/52/52a55d1597b6f67802b437dd722194cc new file mode 100644 index 0000000000000000000000000000000000000000..17728ed6f10e1469c64ed7eeb423deec1c369a75 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/52/52a55d1597b6f67802b437dd722194cc differ diff --git a/[AIOLOS]/Library/Artifacts/52/52c8e2d53b6a322225c23dca6153576c b/[AIOLOS]/Library/Artifacts/52/52c8e2d53b6a322225c23dca6153576c new file mode 100644 index 0000000000000000000000000000000000000000..4a468a279145602e2f7513c7d3f3c1726190613b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/52/52c8e2d53b6a322225c23dca6153576c differ diff --git a/[AIOLOS]/Library/Artifacts/53/533e840290b7ed7db1310ec329295308 b/[AIOLOS]/Library/Artifacts/53/533e840290b7ed7db1310ec329295308 new file mode 100644 index 0000000000000000000000000000000000000000..ca95e68a99ede56ea921ee138aa916b2d5979b7c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/53/533e840290b7ed7db1310ec329295308 differ diff --git a/[AIOLOS]/Library/Artifacts/53/5365e3d96d94aec45595224a8478855a b/[AIOLOS]/Library/Artifacts/53/5365e3d96d94aec45595224a8478855a new file mode 100644 index 0000000000000000000000000000000000000000..58cfa129fec22aab67b4a6e8367fdb900a7eb861 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/53/5365e3d96d94aec45595224a8478855a differ diff --git a/[AIOLOS]/Library/Artifacts/53/539b06f7aeee58e2efa2082abbe767c4 b/[AIOLOS]/Library/Artifacts/53/539b06f7aeee58e2efa2082abbe767c4 new file mode 100644 index 0000000000000000000000000000000000000000..00e649bff5cb646290ba36481f955f827745f84f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/53/539b06f7aeee58e2efa2082abbe767c4 differ diff --git a/[AIOLOS]/Library/Artifacts/54/541f92c6d19a38ddb2deafefcd465447 b/[AIOLOS]/Library/Artifacts/54/541f92c6d19a38ddb2deafefcd465447 new file mode 100644 index 0000000000000000000000000000000000000000..61e8dba834341b13960bbc5584ca96537a814eb7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/54/541f92c6d19a38ddb2deafefcd465447 differ diff --git a/[AIOLOS]/Library/Artifacts/54/5437798f9f24742510fd2675709e658d b/[AIOLOS]/Library/Artifacts/54/5437798f9f24742510fd2675709e658d new file mode 100644 index 0000000000000000000000000000000000000000..a2d07503783486847d7c09def1239398f9fe535b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/54/5437798f9f24742510fd2675709e658d differ diff --git a/[AIOLOS]/Library/Artifacts/55/552a8dbe9e7613a85a14823a3453ac09 b/[AIOLOS]/Library/Artifacts/55/552a8dbe9e7613a85a14823a3453ac09 new file mode 100644 index 0000000000000000000000000000000000000000..44fafc0bc238bb0f0777e5e9956d19a5d49ece30 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/55/552a8dbe9e7613a85a14823a3453ac09 differ diff --git a/[AIOLOS]/Library/Artifacts/55/556f33375ea91af1cd81c47c720e4d8f b/[AIOLOS]/Library/Artifacts/55/556f33375ea91af1cd81c47c720e4d8f new file mode 100644 index 0000000000000000000000000000000000000000..24bd05259b044bd7f349297b5cfdfb8c27d3466f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/55/556f33375ea91af1cd81c47c720e4d8f differ diff --git a/[AIOLOS]/Library/Artifacts/56/561a0c143be2579d873455d4cdff2caf b/[AIOLOS]/Library/Artifacts/56/561a0c143be2579d873455d4cdff2caf new file mode 100644 index 0000000000000000000000000000000000000000..0d0a101248df681267dfb45cb16f8c47eab7464a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/56/561a0c143be2579d873455d4cdff2caf differ diff --git a/[AIOLOS]/Library/Artifacts/56/5627c1f1469f9e0dbb6bff5bb424cdd9 b/[AIOLOS]/Library/Artifacts/56/5627c1f1469f9e0dbb6bff5bb424cdd9 new file mode 100644 index 0000000000000000000000000000000000000000..cd5bcaf96ef430eea6b6c687be6cc71adc55e900 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/56/5627c1f1469f9e0dbb6bff5bb424cdd9 differ diff --git a/[AIOLOS]/Library/Artifacts/56/5680ac09d31ad35a624d8a6e912222e2 b/[AIOLOS]/Library/Artifacts/56/5680ac09d31ad35a624d8a6e912222e2 new file mode 100644 index 0000000000000000000000000000000000000000..6a29f636bd0a623c174b5d8e44d43885e3610d04 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/56/5680ac09d31ad35a624d8a6e912222e2 differ diff --git a/[AIOLOS]/Library/Artifacts/57/57ae99e5a1ff6d6f0a17e8b8470ec6bf b/[AIOLOS]/Library/Artifacts/57/57ae99e5a1ff6d6f0a17e8b8470ec6bf new file mode 100644 index 0000000000000000000000000000000000000000..cecad422a51f0ff5479d9b92533dcf1fc6f5e244 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/57/57ae99e5a1ff6d6f0a17e8b8470ec6bf differ diff --git a/[AIOLOS]/Library/Artifacts/58/5824c7c7aec34eeed8c378b712881eca b/[AIOLOS]/Library/Artifacts/58/5824c7c7aec34eeed8c378b712881eca new file mode 100644 index 0000000000000000000000000000000000000000..a301c2761abead4ea831d72e4037e8dddc06f3d1 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/58/5824c7c7aec34eeed8c378b712881eca differ diff --git a/[AIOLOS]/Library/Artifacts/58/5880bf006b723870b4fede3c9f60e1a9 b/[AIOLOS]/Library/Artifacts/58/5880bf006b723870b4fede3c9f60e1a9 new file mode 100644 index 0000000000000000000000000000000000000000..aee8c3ab619e596ec9044e22499683cf85d4e321 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/58/5880bf006b723870b4fede3c9f60e1a9 differ diff --git a/[AIOLOS]/Library/Artifacts/5a/5a8c550d116d4d8230168286cc69e2f4 b/[AIOLOS]/Library/Artifacts/5a/5a8c550d116d4d8230168286cc69e2f4 new file mode 100644 index 0000000000000000000000000000000000000000..bb489b1439bb9278acb533d724bebbbafebff1c0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/5a/5a8c550d116d4d8230168286cc69e2f4 differ diff --git a/[AIOLOS]/Library/Artifacts/5a/5a990dd684112a0b25fd17f2d4e05886 b/[AIOLOS]/Library/Artifacts/5a/5a990dd684112a0b25fd17f2d4e05886 new file mode 100644 index 0000000000000000000000000000000000000000..c43ac35c5c31c9eeeead5119f946c5323ca0646f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/5a/5a990dd684112a0b25fd17f2d4e05886 differ diff --git a/[AIOLOS]/Library/Artifacts/5a/5ae3e4679f9b6816bc9f7914eb52fd30 b/[AIOLOS]/Library/Artifacts/5a/5ae3e4679f9b6816bc9f7914eb52fd30 new file mode 100644 index 0000000000000000000000000000000000000000..d7472d747d0310d859bf91ecedbb450625f9dae2 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/5a/5ae3e4679f9b6816bc9f7914eb52fd30 differ diff --git a/[AIOLOS]/Library/Artifacts/5a/5afd18c2aad701bb677c96ec0de4dcd7 b/[AIOLOS]/Library/Artifacts/5a/5afd18c2aad701bb677c96ec0de4dcd7 new file mode 100644 index 0000000000000000000000000000000000000000..f32c417abbc5c1e0e48360d0a9470873dcd7f705 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/5a/5afd18c2aad701bb677c96ec0de4dcd7 differ diff --git a/[AIOLOS]/Library/Artifacts/5b/5b7ca48f9b1a2bd63e1ca4cae3e608d3 b/[AIOLOS]/Library/Artifacts/5b/5b7ca48f9b1a2bd63e1ca4cae3e608d3 new file mode 100644 index 0000000000000000000000000000000000000000..9bdff7f466ba240cf6aac884fa87f5f1f8f5da96 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/5b/5b7ca48f9b1a2bd63e1ca4cae3e608d3 differ diff --git a/[AIOLOS]/Library/Artifacts/5b/5bfa194cbdfe53e6e587f6678a10d01e b/[AIOLOS]/Library/Artifacts/5b/5bfa194cbdfe53e6e587f6678a10d01e new file mode 100644 index 0000000000000000000000000000000000000000..df81677ae3e011c2ef9c6b583ad46365a9e6c323 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/5b/5bfa194cbdfe53e6e587f6678a10d01e differ diff --git a/[AIOLOS]/Library/Artifacts/5c/5cba0c709e55ce33d8435b467b664cd4 b/[AIOLOS]/Library/Artifacts/5c/5cba0c709e55ce33d8435b467b664cd4 new file mode 100644 index 0000000000000000000000000000000000000000..d4be95423a24cf7a43d42b810b69f4473f1bf027 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/5c/5cba0c709e55ce33d8435b467b664cd4 differ diff --git a/[AIOLOS]/Library/Artifacts/5d/5d03d78dd98e4fece81ae6c9509d2939 b/[AIOLOS]/Library/Artifacts/5d/5d03d78dd98e4fece81ae6c9509d2939 new file mode 100644 index 0000000000000000000000000000000000000000..5670f835980c73de5fa0907828b8628c58e1270b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/5d/5d03d78dd98e4fece81ae6c9509d2939 differ diff --git a/[AIOLOS]/Library/Artifacts/5d/5d5e66439035fdf55fc2193338e53399 b/[AIOLOS]/Library/Artifacts/5d/5d5e66439035fdf55fc2193338e53399 new file mode 100644 index 0000000000000000000000000000000000000000..f0ada101725b01372ed0ed65c28bb9e15c685671 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/5d/5d5e66439035fdf55fc2193338e53399 differ diff --git a/[AIOLOS]/Library/Artifacts/5d/5d66c2d497199d80c248f3077fac457f b/[AIOLOS]/Library/Artifacts/5d/5d66c2d497199d80c248f3077fac457f new file mode 100644 index 0000000000000000000000000000000000000000..a206bf3c54c49d1ef747c4bc8f6f57ef985bc314 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/5d/5d66c2d497199d80c248f3077fac457f differ diff --git a/[AIOLOS]/Library/Artifacts/5d/5dce590284293e7029f065e450474d75 b/[AIOLOS]/Library/Artifacts/5d/5dce590284293e7029f065e450474d75 new file mode 100644 index 0000000000000000000000000000000000000000..e449b827c375a190135493815d1ce187c2ef03d6 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/5d/5dce590284293e7029f065e450474d75 differ diff --git a/[AIOLOS]/Library/Artifacts/5d/5df4d5c5076b2ed257fb179ee244065d b/[AIOLOS]/Library/Artifacts/5d/5df4d5c5076b2ed257fb179ee244065d new file mode 100644 index 0000000000000000000000000000000000000000..a28880a0cb6469245fae9b3221c1aea7372dfb99 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/5d/5df4d5c5076b2ed257fb179ee244065d differ diff --git a/[AIOLOS]/Library/Artifacts/5e/5e19b59ae6fa12b842bb831d461fe3fe b/[AIOLOS]/Library/Artifacts/5e/5e19b59ae6fa12b842bb831d461fe3fe new file mode 100644 index 0000000000000000000000000000000000000000..df129b1a57185fecd764511997cc72a33032ee56 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/5e/5e19b59ae6fa12b842bb831d461fe3fe differ diff --git a/[AIOLOS]/Library/Artifacts/60/60c30e2fc5b7068bae1a6ff4b927cca3 b/[AIOLOS]/Library/Artifacts/60/60c30e2fc5b7068bae1a6ff4b927cca3 new file mode 100644 index 0000000000000000000000000000000000000000..bcd5a9afa0b4f0811c8d08bf1bd7cf26d4252c3f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/60/60c30e2fc5b7068bae1a6ff4b927cca3 differ diff --git a/[AIOLOS]/Library/Artifacts/61/61026b48b05b49856009072ff380c346 b/[AIOLOS]/Library/Artifacts/61/61026b48b05b49856009072ff380c346 new file mode 100644 index 0000000000000000000000000000000000000000..c7f224a5125c658509f1b78e7de706388e106213 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/61/61026b48b05b49856009072ff380c346 differ diff --git a/[AIOLOS]/Library/Artifacts/61/61315d98d3429d36bcf055cdda334713 b/[AIOLOS]/Library/Artifacts/61/61315d98d3429d36bcf055cdda334713 new file mode 100644 index 0000000000000000000000000000000000000000..ec9da9a09d2762a371b20c056e209af5c96a4276 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/61/61315d98d3429d36bcf055cdda334713 differ diff --git a/[AIOLOS]/Library/Artifacts/63/634760f181346cb298885ef7b0cd946d b/[AIOLOS]/Library/Artifacts/63/634760f181346cb298885ef7b0cd946d new file mode 100644 index 0000000000000000000000000000000000000000..447703d0a66a7fd3f7422b805e50bb01aa739d86 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/63/634760f181346cb298885ef7b0cd946d differ diff --git a/[AIOLOS]/Library/Artifacts/63/638e7b1fad35f184ab96c0cf4dee4672 b/[AIOLOS]/Library/Artifacts/63/638e7b1fad35f184ab96c0cf4dee4672 new file mode 100644 index 0000000000000000000000000000000000000000..cad8ba0a9b88d481fb1c4eb18eae9000ac6bd5aa Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/63/638e7b1fad35f184ab96c0cf4dee4672 differ diff --git a/[AIOLOS]/Library/Artifacts/63/639bd419c8280b0cafd249c867b40d75 b/[AIOLOS]/Library/Artifacts/63/639bd419c8280b0cafd249c867b40d75 new file mode 100644 index 0000000000000000000000000000000000000000..3f5dab7d0599a9d58883676b5b5da22892e5e14d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/63/639bd419c8280b0cafd249c867b40d75 differ diff --git a/[AIOLOS]/Library/Artifacts/65/653f0f5057ea8e600ac2093bbc6a8075 b/[AIOLOS]/Library/Artifacts/65/653f0f5057ea8e600ac2093bbc6a8075 new file mode 100644 index 0000000000000000000000000000000000000000..f92bf922a33c7230259ce3d1fc058eb316314d5c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/65/653f0f5057ea8e600ac2093bbc6a8075 differ diff --git a/[AIOLOS]/Library/Artifacts/65/654994fc7eab827a4f130b1855c12719 b/[AIOLOS]/Library/Artifacts/65/654994fc7eab827a4f130b1855c12719 new file mode 100644 index 0000000000000000000000000000000000000000..d3a0d8fb849b7ea311c593b1129b4696c90e4a97 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/65/654994fc7eab827a4f130b1855c12719 differ diff --git a/[AIOLOS]/Library/Artifacts/65/657d2f43847cde95affac8c7bd3f276a b/[AIOLOS]/Library/Artifacts/65/657d2f43847cde95affac8c7bd3f276a new file mode 100644 index 0000000000000000000000000000000000000000..dfbf44ddc7fb18615892dfb72061933ec3b5a8c3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/65/657d2f43847cde95affac8c7bd3f276a differ diff --git a/[AIOLOS]/Library/Artifacts/66/66a240abf42fa0166c56bc29b0ee626d b/[AIOLOS]/Library/Artifacts/66/66a240abf42fa0166c56bc29b0ee626d new file mode 100644 index 0000000000000000000000000000000000000000..953941c8f4fb0c2b227785e14ae209e9bc480650 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/66/66a240abf42fa0166c56bc29b0ee626d differ diff --git a/[AIOLOS]/Library/Artifacts/67/6750e38c9d375d4aff78e5ac37fe194f b/[AIOLOS]/Library/Artifacts/67/6750e38c9d375d4aff78e5ac37fe194f new file mode 100644 index 0000000000000000000000000000000000000000..5d7df01c75dd518c187aec716e7f9473d40dd7d0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/67/6750e38c9d375d4aff78e5ac37fe194f differ diff --git a/[AIOLOS]/Library/Artifacts/67/6799e1e57002d083e7eb295b1c319136 b/[AIOLOS]/Library/Artifacts/67/6799e1e57002d083e7eb295b1c319136 new file mode 100644 index 0000000000000000000000000000000000000000..cb59888dde980b50bac7692578982e7bcdd8d1c2 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/67/6799e1e57002d083e7eb295b1c319136 differ diff --git a/[AIOLOS]/Library/Artifacts/67/67ba66671771c7c1bb42fb34f5c041a6 b/[AIOLOS]/Library/Artifacts/67/67ba66671771c7c1bb42fb34f5c041a6 new file mode 100644 index 0000000000000000000000000000000000000000..8f8cb5cc52cfa203cff4e82a412aab5359d4dbc4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/67/67ba66671771c7c1bb42fb34f5c041a6 differ diff --git a/[AIOLOS]/Library/Artifacts/68/6808b710d0fa3442110cabe7b64c3faa b/[AIOLOS]/Library/Artifacts/68/6808b710d0fa3442110cabe7b64c3faa new file mode 100644 index 0000000000000000000000000000000000000000..87f45db0dc4e3fd092a87ad4bf1fb1d0c66e080f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/68/6808b710d0fa3442110cabe7b64c3faa differ diff --git a/[AIOLOS]/Library/Artifacts/68/6810a6660c0db3cf83d317ec6d28cc6b b/[AIOLOS]/Library/Artifacts/68/6810a6660c0db3cf83d317ec6d28cc6b new file mode 100644 index 0000000000000000000000000000000000000000..85e9dc2607fa922813ecf4e2ac25fa068c6a0314 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/68/6810a6660c0db3cf83d317ec6d28cc6b differ diff --git a/[AIOLOS]/Library/Artifacts/69/690c7f8e1e6f9a5660b6ad2e4a8030dc b/[AIOLOS]/Library/Artifacts/69/690c7f8e1e6f9a5660b6ad2e4a8030dc new file mode 100644 index 0000000000000000000000000000000000000000..70b99bc5a8680fb05bcb4b22c56c5d18b69131d7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/69/690c7f8e1e6f9a5660b6ad2e4a8030dc differ diff --git a/[AIOLOS]/Library/Artifacts/69/693427c948aee87b9e13fa4860f70573 b/[AIOLOS]/Library/Artifacts/69/693427c948aee87b9e13fa4860f70573 new file mode 100644 index 0000000000000000000000000000000000000000..b7ea4f02ba75ee418cc565a77237f3d99f6254e0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/69/693427c948aee87b9e13fa4860f70573 differ diff --git a/[AIOLOS]/Library/Artifacts/6a/6a31bd5bed58f635ad92a6a82c5753b7 b/[AIOLOS]/Library/Artifacts/6a/6a31bd5bed58f635ad92a6a82c5753b7 new file mode 100644 index 0000000000000000000000000000000000000000..c4b69bae6b5d7e4d4ef28b3dc303a30193056ee1 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6a/6a31bd5bed58f635ad92a6a82c5753b7 differ diff --git a/[AIOLOS]/Library/Artifacts/6b/6b10f5b297c80631f4cf39f02e53e036 b/[AIOLOS]/Library/Artifacts/6b/6b10f5b297c80631f4cf39f02e53e036 new file mode 100644 index 0000000000000000000000000000000000000000..eadd181559e674f8818753163e8d93687b178776 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6b/6b10f5b297c80631f4cf39f02e53e036 differ diff --git a/[AIOLOS]/Library/Artifacts/6b/6b4be5d886d2a69022879031789923f6 b/[AIOLOS]/Library/Artifacts/6b/6b4be5d886d2a69022879031789923f6 new file mode 100644 index 0000000000000000000000000000000000000000..264c30593f73d6a300ccb495b90026c4208f703f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6b/6b4be5d886d2a69022879031789923f6 differ diff --git a/[AIOLOS]/Library/Artifacts/6b/6b5b5d9d5b4ed1765f9166516acca9e5 b/[AIOLOS]/Library/Artifacts/6b/6b5b5d9d5b4ed1765f9166516acca9e5 new file mode 100644 index 0000000000000000000000000000000000000000..7dcef69808c85729844c8437e2b0b2a3ba2df1e9 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6b/6b5b5d9d5b4ed1765f9166516acca9e5 differ diff --git a/[AIOLOS]/Library/Artifacts/6b/6b76f79490ba335ad1bf8031bdda44c6 b/[AIOLOS]/Library/Artifacts/6b/6b76f79490ba335ad1bf8031bdda44c6 new file mode 100644 index 0000000000000000000000000000000000000000..daf5444e430aca16c3e35eb7f8d7c3c3436a1267 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6b/6b76f79490ba335ad1bf8031bdda44c6 differ diff --git a/[AIOLOS]/Library/Artifacts/6b/6b7d3762d9abfe6bd5213109ce97ed82 b/[AIOLOS]/Library/Artifacts/6b/6b7d3762d9abfe6bd5213109ce97ed82 new file mode 100644 index 0000000000000000000000000000000000000000..e8cc2171281d5567e3e2eeb88f627298df7487a2 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6b/6b7d3762d9abfe6bd5213109ce97ed82 differ diff --git a/[AIOLOS]/Library/Artifacts/6b/6b8c452d98fa9f16a155fc6f9e4b372e b/[AIOLOS]/Library/Artifacts/6b/6b8c452d98fa9f16a155fc6f9e4b372e new file mode 100644 index 0000000000000000000000000000000000000000..7bb01787eeea66287d78a820b4e11feb9c2bb5aa Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6b/6b8c452d98fa9f16a155fc6f9e4b372e differ diff --git a/[AIOLOS]/Library/Artifacts/6b/6bed813721587453788e313ba3156ac3 b/[AIOLOS]/Library/Artifacts/6b/6bed813721587453788e313ba3156ac3 new file mode 100644 index 0000000000000000000000000000000000000000..e7a7ba539e3307c454057a9743d3095d3ad3a61f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6b/6bed813721587453788e313ba3156ac3 differ diff --git a/[AIOLOS]/Library/Artifacts/6b/6bf9ce5726ddbe207cf333e6f132ba7b b/[AIOLOS]/Library/Artifacts/6b/6bf9ce5726ddbe207cf333e6f132ba7b new file mode 100644 index 0000000000000000000000000000000000000000..ed3c93f1509f397b215516635460dc46b5a62f30 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6b/6bf9ce5726ddbe207cf333e6f132ba7b differ diff --git a/[AIOLOS]/Library/Artifacts/6c/6c70d8931a75af6c40e4fc3b6dcdc0f9 b/[AIOLOS]/Library/Artifacts/6c/6c70d8931a75af6c40e4fc3b6dcdc0f9 new file mode 100644 index 0000000000000000000000000000000000000000..96bb73f1b23d33e80e137476790ef1daf1f9e9ed Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6c/6c70d8931a75af6c40e4fc3b6dcdc0f9 differ diff --git a/[AIOLOS]/Library/Artifacts/6c/6c80746b1b82b5c96517ca4f4c2d3490 b/[AIOLOS]/Library/Artifacts/6c/6c80746b1b82b5c96517ca4f4c2d3490 new file mode 100644 index 0000000000000000000000000000000000000000..1c251917776bbffa79e98ee577b87ea08459781a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6c/6c80746b1b82b5c96517ca4f4c2d3490 differ diff --git a/[AIOLOS]/Library/Artifacts/6c/6cb2fd8f8141e40cb0b246a3cc535365 b/[AIOLOS]/Library/Artifacts/6c/6cb2fd8f8141e40cb0b246a3cc535365 new file mode 100644 index 0000000000000000000000000000000000000000..b133123110dafc8902bf63e8354d55629c809d4c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6c/6cb2fd8f8141e40cb0b246a3cc535365 differ diff --git a/[AIOLOS]/Library/Artifacts/6d/6d8648d8e0542c76917464ccc9882b26 b/[AIOLOS]/Library/Artifacts/6d/6d8648d8e0542c76917464ccc9882b26 new file mode 100644 index 0000000000000000000000000000000000000000..96913edb8c04678bba3a581a9f937099a370ea18 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6d/6d8648d8e0542c76917464ccc9882b26 differ diff --git a/[AIOLOS]/Library/Artifacts/6d/6d87601b9f74853b7a967a303711f33c b/[AIOLOS]/Library/Artifacts/6d/6d87601b9f74853b7a967a303711f33c new file mode 100644 index 0000000000000000000000000000000000000000..c0bd0af2c862f65d35560925d2097764a02abf7c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6d/6d87601b9f74853b7a967a303711f33c differ diff --git a/[AIOLOS]/Library/Artifacts/6d/6df82006e982119255633d70feb8571d b/[AIOLOS]/Library/Artifacts/6d/6df82006e982119255633d70feb8571d new file mode 100644 index 0000000000000000000000000000000000000000..5a0fec89ad0bb2281e0b3743e08618c8f2c019a5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6d/6df82006e982119255633d70feb8571d differ diff --git a/[AIOLOS]/Library/Artifacts/6e/6ef41be8a9a3e400d13ec43766ab10d4 b/[AIOLOS]/Library/Artifacts/6e/6ef41be8a9a3e400d13ec43766ab10d4 new file mode 100644 index 0000000000000000000000000000000000000000..d112b777638af5a55b1a4e2f2a8371d971170d95 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6e/6ef41be8a9a3e400d13ec43766ab10d4 differ diff --git a/[AIOLOS]/Library/Artifacts/6f/6f9ad7cdcad34bc4b62edf557a47b724 b/[AIOLOS]/Library/Artifacts/6f/6f9ad7cdcad34bc4b62edf557a47b724 new file mode 100644 index 0000000000000000000000000000000000000000..4b012290f628689eff527de7372102ad9ad97e8d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/6f/6f9ad7cdcad34bc4b62edf557a47b724 differ diff --git a/[AIOLOS]/Library/Artifacts/70/70138586a34731c43336222d28c2cef1 b/[AIOLOS]/Library/Artifacts/70/70138586a34731c43336222d28c2cef1 new file mode 100644 index 0000000000000000000000000000000000000000..ea0d01a4a0c5756d11d44219432ed9005da3d78a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/70/70138586a34731c43336222d28c2cef1 differ diff --git a/[AIOLOS]/Library/Artifacts/70/70377028dd7f6b555d55227cb8503efd b/[AIOLOS]/Library/Artifacts/70/70377028dd7f6b555d55227cb8503efd new file mode 100644 index 0000000000000000000000000000000000000000..bab1c3bd0239d9b16b219daa0c6e2b3e9c134c5e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/70/70377028dd7f6b555d55227cb8503efd differ diff --git a/[AIOLOS]/Library/Artifacts/71/71327b8e9202f93ffc2150a8b8bf9182 b/[AIOLOS]/Library/Artifacts/71/71327b8e9202f93ffc2150a8b8bf9182 new file mode 100644 index 0000000000000000000000000000000000000000..01bd7fd4e9e9f838cce7c2e9aefca233bc88fa03 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/71/71327b8e9202f93ffc2150a8b8bf9182 differ diff --git a/[AIOLOS]/Library/Artifacts/71/7135ed36f59d477334b81a80ee74e138 b/[AIOLOS]/Library/Artifacts/71/7135ed36f59d477334b81a80ee74e138 new file mode 100644 index 0000000000000000000000000000000000000000..4a994f2f59a05f030dc2730e6a3e14eac6793d5a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/71/7135ed36f59d477334b81a80ee74e138 differ diff --git a/[AIOLOS]/Library/Artifacts/71/713e0a66d708035f690ca2311afc8c94 b/[AIOLOS]/Library/Artifacts/71/713e0a66d708035f690ca2311afc8c94 new file mode 100644 index 0000000000000000000000000000000000000000..f8325ff997d893ecfedc5e1d2a343e2f6cc9391a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/71/713e0a66d708035f690ca2311afc8c94 differ diff --git a/[AIOLOS]/Library/Artifacts/71/7177737ea3eedd13a95b8ca641f73c10 b/[AIOLOS]/Library/Artifacts/71/7177737ea3eedd13a95b8ca641f73c10 new file mode 100644 index 0000000000000000000000000000000000000000..bbac90f6b41b72000d4a224196082d400264e2e0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/71/7177737ea3eedd13a95b8ca641f73c10 differ diff --git a/[AIOLOS]/Library/Artifacts/71/71a00b4823350bbc50a715b4a0180b94 b/[AIOLOS]/Library/Artifacts/71/71a00b4823350bbc50a715b4a0180b94 new file mode 100644 index 0000000000000000000000000000000000000000..d9dfd08324f5ce378693360a67bc44083062a1e5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/71/71a00b4823350bbc50a715b4a0180b94 differ diff --git a/[AIOLOS]/Library/Artifacts/71/71b41448c967dffb1f873428a954e015 b/[AIOLOS]/Library/Artifacts/71/71b41448c967dffb1f873428a954e015 new file mode 100644 index 0000000000000000000000000000000000000000..36257fd481c9424d7b4cfbcd19a25cfbc69f9ebe Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/71/71b41448c967dffb1f873428a954e015 differ diff --git a/[AIOLOS]/Library/Artifacts/71/71cae095fba997678244c0c1ac21b750 b/[AIOLOS]/Library/Artifacts/71/71cae095fba997678244c0c1ac21b750 new file mode 100644 index 0000000000000000000000000000000000000000..3a0d067ce935d26af854b46a8fdea446cc5a4d9e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/71/71cae095fba997678244c0c1ac21b750 differ diff --git a/[AIOLOS]/Library/Artifacts/72/7245b1eca593ec2ff00bc377522f11d9 b/[AIOLOS]/Library/Artifacts/72/7245b1eca593ec2ff00bc377522f11d9 new file mode 100644 index 0000000000000000000000000000000000000000..5310291847bb31828acbf16520b7aec601adcc79 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/72/7245b1eca593ec2ff00bc377522f11d9 differ diff --git a/[AIOLOS]/Library/Artifacts/72/7295bdd35ad6f222d5717a86a84b637c b/[AIOLOS]/Library/Artifacts/72/7295bdd35ad6f222d5717a86a84b637c new file mode 100644 index 0000000000000000000000000000000000000000..2541c232783229279394ff0719b84cce3b40c490 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/72/7295bdd35ad6f222d5717a86a84b637c differ diff --git a/[AIOLOS]/Library/Artifacts/73/7380262d9d4bee8c3d7da8ba282b3531 b/[AIOLOS]/Library/Artifacts/73/7380262d9d4bee8c3d7da8ba282b3531 new file mode 100644 index 0000000000000000000000000000000000000000..19dc46b3267731f472a262b4b01e482fd287ace8 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/73/7380262d9d4bee8c3d7da8ba282b3531 differ diff --git a/[AIOLOS]/Library/Artifacts/73/73b7798d16d8a38764f84b9732f2a81d b/[AIOLOS]/Library/Artifacts/73/73b7798d16d8a38764f84b9732f2a81d new file mode 100644 index 0000000000000000000000000000000000000000..f742e455754baf8adefecfdeeaad0b053beaec70 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/73/73b7798d16d8a38764f84b9732f2a81d differ diff --git a/[AIOLOS]/Library/Artifacts/73/73d92c0b0abca313062cbd9f8db5afd7 b/[AIOLOS]/Library/Artifacts/73/73d92c0b0abca313062cbd9f8db5afd7 new file mode 100644 index 0000000000000000000000000000000000000000..0ac0eb31ee32ff6346595032e17aed6b8ccadb34 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/73/73d92c0b0abca313062cbd9f8db5afd7 differ diff --git a/[AIOLOS]/Library/Artifacts/73/73f65037c81fdbf2e8f165a2396bacbc b/[AIOLOS]/Library/Artifacts/73/73f65037c81fdbf2e8f165a2396bacbc new file mode 100644 index 0000000000000000000000000000000000000000..d09c4f542f280b88c5b0c7414ac3e039403ccba3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/73/73f65037c81fdbf2e8f165a2396bacbc differ diff --git a/[AIOLOS]/Library/Artifacts/74/74113f6d3c9c365a45aaba4d60e92184 b/[AIOLOS]/Library/Artifacts/74/74113f6d3c9c365a45aaba4d60e92184 new file mode 100644 index 0000000000000000000000000000000000000000..707a6c336012cb69d89ad86de231ac4a41969807 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/74/74113f6d3c9c365a45aaba4d60e92184 differ diff --git a/[AIOLOS]/Library/Artifacts/74/744eeee81cfd4d9c53b553f11cefea37 b/[AIOLOS]/Library/Artifacts/74/744eeee81cfd4d9c53b553f11cefea37 new file mode 100644 index 0000000000000000000000000000000000000000..1134fa24f524a4c52a2d041224ef1c07810fb1b5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/74/744eeee81cfd4d9c53b553f11cefea37 differ diff --git a/[AIOLOS]/Library/Artifacts/74/74b03a898284aa895f285f9b5789c1a3 b/[AIOLOS]/Library/Artifacts/74/74b03a898284aa895f285f9b5789c1a3 new file mode 100644 index 0000000000000000000000000000000000000000..a476cd8b303be044d25c0f4e6de517d9353f8d3f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/74/74b03a898284aa895f285f9b5789c1a3 differ diff --git a/[AIOLOS]/Library/Artifacts/74/74b3fae677280acd1d1016227b8029c8 b/[AIOLOS]/Library/Artifacts/74/74b3fae677280acd1d1016227b8029c8 new file mode 100644 index 0000000000000000000000000000000000000000..f4f7d37d5c4f6e10a1ac948adaad076fc8ad85a7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/74/74b3fae677280acd1d1016227b8029c8 differ diff --git a/[AIOLOS]/Library/Artifacts/74/74e74a75fec95362a9aa0dbe7ea43165 b/[AIOLOS]/Library/Artifacts/74/74e74a75fec95362a9aa0dbe7ea43165 new file mode 100644 index 0000000000000000000000000000000000000000..f9dba0df8125c70289a318165d2acf3c403e1338 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/74/74e74a75fec95362a9aa0dbe7ea43165 differ diff --git a/[AIOLOS]/Library/Artifacts/75/750ff04ea2b6c596e7b74d45944f54c6 b/[AIOLOS]/Library/Artifacts/75/750ff04ea2b6c596e7b74d45944f54c6 new file mode 100644 index 0000000000000000000000000000000000000000..96722a6ed3ae16e5480b36f20fe389d5cda5809e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/75/750ff04ea2b6c596e7b74d45944f54c6 differ diff --git a/[AIOLOS]/Library/Artifacts/75/751c246565a8eef11432ffa439cb4cb8 b/[AIOLOS]/Library/Artifacts/75/751c246565a8eef11432ffa439cb4cb8 new file mode 100644 index 0000000000000000000000000000000000000000..3626f6ee6d74a585af7161b429f804efb2554997 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/75/751c246565a8eef11432ffa439cb4cb8 differ diff --git a/[AIOLOS]/Library/Artifacts/75/7550527b37742c24c9d6937958db44ba b/[AIOLOS]/Library/Artifacts/75/7550527b37742c24c9d6937958db44ba new file mode 100644 index 0000000000000000000000000000000000000000..84f7deb75dc486db8512ac7669650391025ef980 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/75/7550527b37742c24c9d6937958db44ba differ diff --git a/[AIOLOS]/Library/Artifacts/75/75df44a4a5173362b5e074d2fdd714dc b/[AIOLOS]/Library/Artifacts/75/75df44a4a5173362b5e074d2fdd714dc new file mode 100644 index 0000000000000000000000000000000000000000..5f9b83afceea503a5431131a9966094db39b414f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/75/75df44a4a5173362b5e074d2fdd714dc differ diff --git a/[AIOLOS]/Library/Artifacts/75/75ef89e3ee5804ac338cdaa4049d9691 b/[AIOLOS]/Library/Artifacts/75/75ef89e3ee5804ac338cdaa4049d9691 new file mode 100644 index 0000000000000000000000000000000000000000..478d442764396898f7ee816b98e59a52dff464e3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/75/75ef89e3ee5804ac338cdaa4049d9691 differ diff --git a/[AIOLOS]/Library/Artifacts/76/764f7c0b334469234d21c832662a8328 b/[AIOLOS]/Library/Artifacts/76/764f7c0b334469234d21c832662a8328 new file mode 100644 index 0000000000000000000000000000000000000000..da64014531b9c4992f409fb018a144c33ea4b67e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/76/764f7c0b334469234d21c832662a8328 differ diff --git a/[AIOLOS]/Library/Artifacts/76/76577859dc3a5264f7dc6eec30b0b510 b/[AIOLOS]/Library/Artifacts/76/76577859dc3a5264f7dc6eec30b0b510 new file mode 100644 index 0000000000000000000000000000000000000000..821a8fce6c79bfa9496e1ac0671d7838cea2f86f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/76/76577859dc3a5264f7dc6eec30b0b510 differ diff --git a/[AIOLOS]/Library/Artifacts/76/768bcb571f30f930aa59ae3e2ca9ae11 b/[AIOLOS]/Library/Artifacts/76/768bcb571f30f930aa59ae3e2ca9ae11 new file mode 100644 index 0000000000000000000000000000000000000000..861a01fcef6aba748fac2570955be75cda121b26 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/76/768bcb571f30f930aa59ae3e2ca9ae11 differ diff --git a/[AIOLOS]/Library/Artifacts/76/76b953fa2dc1eacb9a1ff4225bfc7df1 b/[AIOLOS]/Library/Artifacts/76/76b953fa2dc1eacb9a1ff4225bfc7df1 new file mode 100644 index 0000000000000000000000000000000000000000..803acb295aa9267d8df430a5adb606f95985cc55 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/76/76b953fa2dc1eacb9a1ff4225bfc7df1 differ diff --git a/[AIOLOS]/Library/Artifacts/77/777dbe2984339fc579c13ff2ad0d6e5a b/[AIOLOS]/Library/Artifacts/77/777dbe2984339fc579c13ff2ad0d6e5a new file mode 100644 index 0000000000000000000000000000000000000000..d92d71713451b282acaa2c372889887e8a610403 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/77/777dbe2984339fc579c13ff2ad0d6e5a differ diff --git a/[AIOLOS]/Library/Artifacts/77/77cd64daab302cab2f2b674697e8e1eb b/[AIOLOS]/Library/Artifacts/77/77cd64daab302cab2f2b674697e8e1eb new file mode 100644 index 0000000000000000000000000000000000000000..21998e1f6d46492ab43d85b27169d42ecd820174 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/77/77cd64daab302cab2f2b674697e8e1eb differ diff --git a/[AIOLOS]/Library/Artifacts/78/787666a5b6b3a189f6a54d17bb590dd3 b/[AIOLOS]/Library/Artifacts/78/787666a5b6b3a189f6a54d17bb590dd3 new file mode 100644 index 0000000000000000000000000000000000000000..0a6c2b026bdaa94a00312af891bf97e80c36837e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/78/787666a5b6b3a189f6a54d17bb590dd3 differ diff --git a/[AIOLOS]/Library/Artifacts/78/78c1ac1e65351605c9c9dbc27e424191 b/[AIOLOS]/Library/Artifacts/78/78c1ac1e65351605c9c9dbc27e424191 new file mode 100644 index 0000000000000000000000000000000000000000..f72afc52087bf2f4a7318f805dce8fa142372fe7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/78/78c1ac1e65351605c9c9dbc27e424191 differ diff --git a/[AIOLOS]/Library/Artifacts/79/79746a8abec29021189c22d99404c6d9 b/[AIOLOS]/Library/Artifacts/79/79746a8abec29021189c22d99404c6d9 new file mode 100644 index 0000000000000000000000000000000000000000..56dcbb6304ac6d51bcf63e4a5d8311a78354af06 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/79/79746a8abec29021189c22d99404c6d9 differ diff --git a/[AIOLOS]/Library/Artifacts/79/798e8d409e477b2dbc5c67497eadb418 b/[AIOLOS]/Library/Artifacts/79/798e8d409e477b2dbc5c67497eadb418 new file mode 100644 index 0000000000000000000000000000000000000000..83e29263764f1fc8d152e7199ca8f1c2df3f8e23 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/79/798e8d409e477b2dbc5c67497eadb418 differ diff --git a/[AIOLOS]/Library/Artifacts/79/79a5e43c2cfc4d7067173bb00bfa06b0 b/[AIOLOS]/Library/Artifacts/79/79a5e43c2cfc4d7067173bb00bfa06b0 new file mode 100644 index 0000000000000000000000000000000000000000..000b32c7076b46b4a9eb0bbdaa3434478fc157d0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/79/79a5e43c2cfc4d7067173bb00bfa06b0 differ diff --git a/[AIOLOS]/Library/Artifacts/79/79d2bf8710cf092734006de64a2f1363 b/[AIOLOS]/Library/Artifacts/79/79d2bf8710cf092734006de64a2f1363 new file mode 100644 index 0000000000000000000000000000000000000000..914583d99010d02eadc835d748055d9882811b24 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/79/79d2bf8710cf092734006de64a2f1363 differ diff --git a/[AIOLOS]/Library/Artifacts/7a/7a01329e55b97dd8613c9ff9dd742f89 b/[AIOLOS]/Library/Artifacts/7a/7a01329e55b97dd8613c9ff9dd742f89 new file mode 100644 index 0000000000000000000000000000000000000000..9f996cfeb7b14a0a20768918f9426fc16124965b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7a/7a01329e55b97dd8613c9ff9dd742f89 differ diff --git a/[AIOLOS]/Library/Artifacts/7b/7b0ce3901011439093e7c0dad32e303f b/[AIOLOS]/Library/Artifacts/7b/7b0ce3901011439093e7c0dad32e303f new file mode 100644 index 0000000000000000000000000000000000000000..f9b77c9ba42ce8e2736e6acc58c791c39426e4a6 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7b/7b0ce3901011439093e7c0dad32e303f differ diff --git a/[AIOLOS]/Library/Artifacts/7b/7b1e705ee2b7514b17c6008b2896b1e6 b/[AIOLOS]/Library/Artifacts/7b/7b1e705ee2b7514b17c6008b2896b1e6 new file mode 100644 index 0000000000000000000000000000000000000000..e005c713c1f5f849204a8fca4b5432db1b6b46eb Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7b/7b1e705ee2b7514b17c6008b2896b1e6 differ diff --git a/[AIOLOS]/Library/Artifacts/7b/7b2fc3fb2c0abecb6d1eb41ff20d049c b/[AIOLOS]/Library/Artifacts/7b/7b2fc3fb2c0abecb6d1eb41ff20d049c new file mode 100644 index 0000000000000000000000000000000000000000..570b37db1f8196ccb471b5383f7087c05d9f0d58 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7b/7b2fc3fb2c0abecb6d1eb41ff20d049c differ diff --git a/[AIOLOS]/Library/Artifacts/7b/7b59a4fa99465c025dfaaadbfb2428a1 b/[AIOLOS]/Library/Artifacts/7b/7b59a4fa99465c025dfaaadbfb2428a1 new file mode 100644 index 0000000000000000000000000000000000000000..039b4cac801d4050593c05cf2cae9d536cfc51fd Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7b/7b59a4fa99465c025dfaaadbfb2428a1 differ diff --git a/[AIOLOS]/Library/Artifacts/7b/7b84ee7094aac66f849ba3352b1b34c7 b/[AIOLOS]/Library/Artifacts/7b/7b84ee7094aac66f849ba3352b1b34c7 new file mode 100644 index 0000000000000000000000000000000000000000..de6c6a985e375e6053b1480d1e4105aee18b3952 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7b/7b84ee7094aac66f849ba3352b1b34c7 differ diff --git a/[AIOLOS]/Library/Artifacts/7b/7baef7b616c29a045197028343d69731 b/[AIOLOS]/Library/Artifacts/7b/7baef7b616c29a045197028343d69731 new file mode 100644 index 0000000000000000000000000000000000000000..baa5bd88c298698f7ac45dc3950becb27b1eab81 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7b/7baef7b616c29a045197028343d69731 differ diff --git a/[AIOLOS]/Library/Artifacts/7c/7c1fecb5fd52b4d18353ff395fcb9527 b/[AIOLOS]/Library/Artifacts/7c/7c1fecb5fd52b4d18353ff395fcb9527 new file mode 100644 index 0000000000000000000000000000000000000000..37568851956576ebd085860cab97826c0edd00ce Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7c/7c1fecb5fd52b4d18353ff395fcb9527 differ diff --git a/[AIOLOS]/Library/Artifacts/7c/7c42714cac3f6165ed925766891d5e0c b/[AIOLOS]/Library/Artifacts/7c/7c42714cac3f6165ed925766891d5e0c new file mode 100644 index 0000000000000000000000000000000000000000..1f497b9672bf05e08ab775ebf538660814654adb Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7c/7c42714cac3f6165ed925766891d5e0c differ diff --git a/[AIOLOS]/Library/Artifacts/7c/7c53be21a6f0e50c19f3163f69d62f73 b/[AIOLOS]/Library/Artifacts/7c/7c53be21a6f0e50c19f3163f69d62f73 new file mode 100644 index 0000000000000000000000000000000000000000..3ae26306da2ac148409b4b97fb90dff41ae5d563 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7c/7c53be21a6f0e50c19f3163f69d62f73 differ diff --git a/[AIOLOS]/Library/Artifacts/7c/7c9334e303f054c70d98b0a838bd9fc1 b/[AIOLOS]/Library/Artifacts/7c/7c9334e303f054c70d98b0a838bd9fc1 new file mode 100644 index 0000000000000000000000000000000000000000..9234f68533132ce1cfe8206dced127cc4e979e11 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7c/7c9334e303f054c70d98b0a838bd9fc1 differ diff --git a/[AIOLOS]/Library/Artifacts/7c/7c97fa2ac836b409966753eda0ec4b8d b/[AIOLOS]/Library/Artifacts/7c/7c97fa2ac836b409966753eda0ec4b8d new file mode 100644 index 0000000000000000000000000000000000000000..0e4aa3f37a670420e18b974fb7d005cfdb411de9 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7c/7c97fa2ac836b409966753eda0ec4b8d differ diff --git a/[AIOLOS]/Library/Artifacts/7c/7cc60c3d820fd198d8d18bf5104d3c6b b/[AIOLOS]/Library/Artifacts/7c/7cc60c3d820fd198d8d18bf5104d3c6b new file mode 100644 index 0000000000000000000000000000000000000000..5909a431e74ec3b87049317bef011e7546e24f56 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7c/7cc60c3d820fd198d8d18bf5104d3c6b differ diff --git a/[AIOLOS]/Library/Artifacts/7c/7cde65ca10922624ca0ae0d68a5cb133 b/[AIOLOS]/Library/Artifacts/7c/7cde65ca10922624ca0ae0d68a5cb133 new file mode 100644 index 0000000000000000000000000000000000000000..3ccde806e85c62ca041ad6a3d8480f386ad67842 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7c/7cde65ca10922624ca0ae0d68a5cb133 differ diff --git a/[AIOLOS]/Library/Artifacts/7c/7cfcca3958c9ca870a4ad8126e05c9c4 b/[AIOLOS]/Library/Artifacts/7c/7cfcca3958c9ca870a4ad8126e05c9c4 new file mode 100644 index 0000000000000000000000000000000000000000..97a5fe7e13408bf3e11feec8eb4ff1cb4f2e8948 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7c/7cfcca3958c9ca870a4ad8126e05c9c4 differ diff --git a/[AIOLOS]/Library/Artifacts/7d/7d426657923ff8f88a6e79ab5968cc81 b/[AIOLOS]/Library/Artifacts/7d/7d426657923ff8f88a6e79ab5968cc81 new file mode 100644 index 0000000000000000000000000000000000000000..162359a1154dd35237b30440e3c2e8f97fd4a40b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7d/7d426657923ff8f88a6e79ab5968cc81 differ diff --git a/[AIOLOS]/Library/Artifacts/7d/7d95cdd9e9c29707e0a1eec98d927bf9 b/[AIOLOS]/Library/Artifacts/7d/7d95cdd9e9c29707e0a1eec98d927bf9 new file mode 100644 index 0000000000000000000000000000000000000000..726e579bdbfa5b1470f73d5497d6a09bcbe9e02f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7d/7d95cdd9e9c29707e0a1eec98d927bf9 differ diff --git a/[AIOLOS]/Library/Artifacts/7d/7de9af155f387c86173b240bace3d788 b/[AIOLOS]/Library/Artifacts/7d/7de9af155f387c86173b240bace3d788 new file mode 100644 index 0000000000000000000000000000000000000000..3e8a49d5234ddb98a6635daa9b44e6044e69f2b1 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7d/7de9af155f387c86173b240bace3d788 differ diff --git a/[AIOLOS]/Library/Artifacts/7f/7fabea4d467ec9ace28f9251da86c8e9 b/[AIOLOS]/Library/Artifacts/7f/7fabea4d467ec9ace28f9251da86c8e9 new file mode 100644 index 0000000000000000000000000000000000000000..edbe6a7e56288b12e15762b79540ce2d16604e8c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7f/7fabea4d467ec9ace28f9251da86c8e9 differ diff --git a/[AIOLOS]/Library/Artifacts/7f/7facc4cf4fb32abee49d1bb2265f7f97 b/[AIOLOS]/Library/Artifacts/7f/7facc4cf4fb32abee49d1bb2265f7f97 new file mode 100644 index 0000000000000000000000000000000000000000..921b21e2017e8a2cd11b317e3c698bc83c998384 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7f/7facc4cf4fb32abee49d1bb2265f7f97 differ diff --git a/[AIOLOS]/Library/Artifacts/7f/7fce003c7d51136b63764d6fe070db0d b/[AIOLOS]/Library/Artifacts/7f/7fce003c7d51136b63764d6fe070db0d new file mode 100644 index 0000000000000000000000000000000000000000..17cb1e9c2ce3161691d1ddc1af4431d65e514dc5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7f/7fce003c7d51136b63764d6fe070db0d differ diff --git a/[AIOLOS]/Library/Artifacts/7f/7fe0d07e639ca5972756184c03afa285 b/[AIOLOS]/Library/Artifacts/7f/7fe0d07e639ca5972756184c03afa285 new file mode 100644 index 0000000000000000000000000000000000000000..6f81ed71cac14bbdcb8c02baedb612d355a244a3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/7f/7fe0d07e639ca5972756184c03afa285 differ diff --git a/[AIOLOS]/Library/Artifacts/80/8026fc6104c283d6b7371922f36a797d b/[AIOLOS]/Library/Artifacts/80/8026fc6104c283d6b7371922f36a797d new file mode 100644 index 0000000000000000000000000000000000000000..c388372e4ef82b75998c6d18f09c3152689bd7ba Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/80/8026fc6104c283d6b7371922f36a797d differ diff --git a/[AIOLOS]/Library/Artifacts/80/804bed645a103ed4c908fb1e9581ac42 b/[AIOLOS]/Library/Artifacts/80/804bed645a103ed4c908fb1e9581ac42 new file mode 100644 index 0000000000000000000000000000000000000000..1c0aa6e7807eadc57466ca06052e3d434a2d7afd Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/80/804bed645a103ed4c908fb1e9581ac42 differ diff --git a/[AIOLOS]/Library/Artifacts/80/809bc32b30f17975ca46a2f2e8e9f849 b/[AIOLOS]/Library/Artifacts/80/809bc32b30f17975ca46a2f2e8e9f849 new file mode 100644 index 0000000000000000000000000000000000000000..61eb241c39060fadeaf6443f06291ff3eb23cb9c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/80/809bc32b30f17975ca46a2f2e8e9f849 differ diff --git a/[AIOLOS]/Library/Artifacts/80/80b223d6e0e2a13d5694fa2382060457 b/[AIOLOS]/Library/Artifacts/80/80b223d6e0e2a13d5694fa2382060457 new file mode 100644 index 0000000000000000000000000000000000000000..fc299fd20c2a3ca5bbb5305f0f5956a6a3d2bb9e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/80/80b223d6e0e2a13d5694fa2382060457 differ diff --git a/[AIOLOS]/Library/Artifacts/80/80ede755c1597fd034f24ea7d01dfc14 b/[AIOLOS]/Library/Artifacts/80/80ede755c1597fd034f24ea7d01dfc14 new file mode 100644 index 0000000000000000000000000000000000000000..b023238ace6fef95c2baf61b2c5194ed575fb5ca Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/80/80ede755c1597fd034f24ea7d01dfc14 differ diff --git a/[AIOLOS]/Library/Artifacts/80/80fbfb177123d00f85f2c64661948393 b/[AIOLOS]/Library/Artifacts/80/80fbfb177123d00f85f2c64661948393 new file mode 100644 index 0000000000000000000000000000000000000000..606f38a745c242b614e638d8c0fe3e671b6dad52 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/80/80fbfb177123d00f85f2c64661948393 differ diff --git a/[AIOLOS]/Library/Artifacts/81/8119a021f24fc31020acfd6717fdfd7b b/[AIOLOS]/Library/Artifacts/81/8119a021f24fc31020acfd6717fdfd7b new file mode 100644 index 0000000000000000000000000000000000000000..99db6d373423830b5d9b4c841af94083ff2b4905 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/81/8119a021f24fc31020acfd6717fdfd7b differ diff --git a/[AIOLOS]/Library/Artifacts/81/812bd12ce65f70592b9cc9352160af68 b/[AIOLOS]/Library/Artifacts/81/812bd12ce65f70592b9cc9352160af68 new file mode 100644 index 0000000000000000000000000000000000000000..994f77ddb94a6a8e2520c7e16e2574ebc0498323 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/81/812bd12ce65f70592b9cc9352160af68 differ diff --git a/[AIOLOS]/Library/Artifacts/81/818300556ec8f1cefaad03dbf16f058e b/[AIOLOS]/Library/Artifacts/81/818300556ec8f1cefaad03dbf16f058e new file mode 100644 index 0000000000000000000000000000000000000000..bdd33704a9c56a2895eb35d3cffc78b587d780b4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/81/818300556ec8f1cefaad03dbf16f058e differ diff --git a/[AIOLOS]/Library/Artifacts/81/81c3f13ac1ee1f29e682b7facd895722 b/[AIOLOS]/Library/Artifacts/81/81c3f13ac1ee1f29e682b7facd895722 new file mode 100644 index 0000000000000000000000000000000000000000..da6d99c19a557fb2b365dc1dfa3ed61bcdb9327c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/81/81c3f13ac1ee1f29e682b7facd895722 differ diff --git a/[AIOLOS]/Library/Artifacts/81/81dc7a151b26ca5e2ea7c2e8566be79e b/[AIOLOS]/Library/Artifacts/81/81dc7a151b26ca5e2ea7c2e8566be79e new file mode 100644 index 0000000000000000000000000000000000000000..dd770258383b7cf4c30999a63a1653b7cef67a99 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/81/81dc7a151b26ca5e2ea7c2e8566be79e differ diff --git a/[AIOLOS]/Library/Artifacts/82/827fc41c02f174befcde970743056b7f b/[AIOLOS]/Library/Artifacts/82/827fc41c02f174befcde970743056b7f new file mode 100644 index 0000000000000000000000000000000000000000..7e605480983be852390c32c92bf903bb0e255070 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/82/827fc41c02f174befcde970743056b7f differ diff --git a/[AIOLOS]/Library/Artifacts/82/82ed636d6c2cea8026f527809f940f6b b/[AIOLOS]/Library/Artifacts/82/82ed636d6c2cea8026f527809f940f6b new file mode 100644 index 0000000000000000000000000000000000000000..f4b3fe29d857590f25992177239354e793d3c6d1 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/82/82ed636d6c2cea8026f527809f940f6b differ diff --git a/[AIOLOS]/Library/Artifacts/83/8302cfdc3503d4f7385a9ceaca8be3b6 b/[AIOLOS]/Library/Artifacts/83/8302cfdc3503d4f7385a9ceaca8be3b6 new file mode 100644 index 0000000000000000000000000000000000000000..0f897c0d02b7c8db2253a5a4da4909a98a927bf2 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/83/8302cfdc3503d4f7385a9ceaca8be3b6 differ diff --git a/[AIOLOS]/Library/Artifacts/83/8361d33a7c301a9e795575a43ae34c4e b/[AIOLOS]/Library/Artifacts/83/8361d33a7c301a9e795575a43ae34c4e new file mode 100644 index 0000000000000000000000000000000000000000..dc33ffaef006cd95ad9153c920b5c3b576d79942 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/83/8361d33a7c301a9e795575a43ae34c4e differ diff --git a/[AIOLOS]/Library/Artifacts/83/83a736d8a40ce3e93a7d57dd5da9f98a b/[AIOLOS]/Library/Artifacts/83/83a736d8a40ce3e93a7d57dd5da9f98a new file mode 100644 index 0000000000000000000000000000000000000000..7cc3e761c6fc42b0138d05da6c56c6b24d80efe8 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/83/83a736d8a40ce3e93a7d57dd5da9f98a differ diff --git a/[AIOLOS]/Library/Artifacts/83/83bd233abc47dba5e87a626469b441cf b/[AIOLOS]/Library/Artifacts/83/83bd233abc47dba5e87a626469b441cf new file mode 100644 index 0000000000000000000000000000000000000000..29b40a6d4163f6102dd460386a84811c0b176784 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/83/83bd233abc47dba5e87a626469b441cf differ diff --git a/[AIOLOS]/Library/Artifacts/84/845dc6ec44532bcaeeebfbec8ccaa00f b/[AIOLOS]/Library/Artifacts/84/845dc6ec44532bcaeeebfbec8ccaa00f new file mode 100644 index 0000000000000000000000000000000000000000..ee781692fd04f9d5b43e773e9755b65ff603f726 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/84/845dc6ec44532bcaeeebfbec8ccaa00f differ diff --git a/[AIOLOS]/Library/Artifacts/84/84a2acc99e52c40a051d40902195b407 b/[AIOLOS]/Library/Artifacts/84/84a2acc99e52c40a051d40902195b407 new file mode 100644 index 0000000000000000000000000000000000000000..d74c8b845cace3b5e6bf650ebaf584619a5dce48 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/84/84a2acc99e52c40a051d40902195b407 differ diff --git a/[AIOLOS]/Library/Artifacts/85/85007f77394641bc4431d8ccbcfb32c2 b/[AIOLOS]/Library/Artifacts/85/85007f77394641bc4431d8ccbcfb32c2 new file mode 100644 index 0000000000000000000000000000000000000000..fcf9baaf6a1bf50188fd85be791cb75b569a9a60 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/85/85007f77394641bc4431d8ccbcfb32c2 differ diff --git a/[AIOLOS]/Library/Artifacts/85/8505ed1f11f9101c21ce4a52b6ffa2f7 b/[AIOLOS]/Library/Artifacts/85/8505ed1f11f9101c21ce4a52b6ffa2f7 new file mode 100644 index 0000000000000000000000000000000000000000..1e704d84e48b7ef3ff4560360479f29d61141bf1 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/85/8505ed1f11f9101c21ce4a52b6ffa2f7 differ diff --git a/[AIOLOS]/Library/Artifacts/85/8535846968f8a91ecb021626c227bab1 b/[AIOLOS]/Library/Artifacts/85/8535846968f8a91ecb021626c227bab1 new file mode 100644 index 0000000000000000000000000000000000000000..f195b37158ce74868b6fafd0d747f4c22be23a23 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/85/8535846968f8a91ecb021626c227bab1 differ diff --git a/[AIOLOS]/Library/Artifacts/85/856b9224961477b85b233a1f6df9f36d b/[AIOLOS]/Library/Artifacts/85/856b9224961477b85b233a1f6df9f36d new file mode 100644 index 0000000000000000000000000000000000000000..47540e523b8f586e2c063f60087661fbf6be9c62 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/85/856b9224961477b85b233a1f6df9f36d differ diff --git a/[AIOLOS]/Library/Artifacts/86/860ae2d8484f69fd01154123f6d03189 b/[AIOLOS]/Library/Artifacts/86/860ae2d8484f69fd01154123f6d03189 new file mode 100644 index 0000000000000000000000000000000000000000..bfc560f00b24193cbc1e2f677bee695749e724b7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/86/860ae2d8484f69fd01154123f6d03189 differ diff --git a/[AIOLOS]/Library/Artifacts/86/86e41552c9019b4d7d145c9c0617c4c7 b/[AIOLOS]/Library/Artifacts/86/86e41552c9019b4d7d145c9c0617c4c7 new file mode 100644 index 0000000000000000000000000000000000000000..e27ba72274b45e7de7407b406883b979b95350ef Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/86/86e41552c9019b4d7d145c9c0617c4c7 differ diff --git a/[AIOLOS]/Library/Artifacts/87/870b2a15cc7680711253f8ece64c95ce b/[AIOLOS]/Library/Artifacts/87/870b2a15cc7680711253f8ece64c95ce new file mode 100644 index 0000000000000000000000000000000000000000..b7ae159fce19526122332a1cf2f223d6c2d9ef62 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/87/870b2a15cc7680711253f8ece64c95ce differ diff --git a/[AIOLOS]/Library/Artifacts/87/872e89d38e1c846e00743c97aa2523e7 b/[AIOLOS]/Library/Artifacts/87/872e89d38e1c846e00743c97aa2523e7 new file mode 100644 index 0000000000000000000000000000000000000000..8b86d19c91fb458a312a1bd6103ade940fb71029 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/87/872e89d38e1c846e00743c97aa2523e7 differ diff --git a/[AIOLOS]/Library/Artifacts/87/876b9d09dad2b2a6a96fdc43876966e4 b/[AIOLOS]/Library/Artifacts/87/876b9d09dad2b2a6a96fdc43876966e4 new file mode 100644 index 0000000000000000000000000000000000000000..f4c43aba425f596f0a4d59e1cfd3028b955a30af Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/87/876b9d09dad2b2a6a96fdc43876966e4 differ diff --git a/[AIOLOS]/Library/Artifacts/87/877a890ffbf3a70b5b16c35dab646e64 b/[AIOLOS]/Library/Artifacts/87/877a890ffbf3a70b5b16c35dab646e64 new file mode 100644 index 0000000000000000000000000000000000000000..cb987e4b3bd67827a6362d72cb7d81bc87e6c8db Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/87/877a890ffbf3a70b5b16c35dab646e64 differ diff --git a/[AIOLOS]/Library/Artifacts/87/8790088e97eff104fb2acc933c4199ed b/[AIOLOS]/Library/Artifacts/87/8790088e97eff104fb2acc933c4199ed new file mode 100644 index 0000000000000000000000000000000000000000..f85ef3b0ca8f56ebeeea54ba638b7b4cb6d6cda1 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/87/8790088e97eff104fb2acc933c4199ed differ diff --git a/[AIOLOS]/Library/Artifacts/87/87cb0d0cf50900e77f5a4745255f292d b/[AIOLOS]/Library/Artifacts/87/87cb0d0cf50900e77f5a4745255f292d new file mode 100644 index 0000000000000000000000000000000000000000..97d42dcbcee2f29c762eede2fbddefdb9262b2ee Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/87/87cb0d0cf50900e77f5a4745255f292d differ diff --git a/[AIOLOS]/Library/Artifacts/87/87d1f19f73b3bbd1aebf139a99caa00e b/[AIOLOS]/Library/Artifacts/87/87d1f19f73b3bbd1aebf139a99caa00e new file mode 100644 index 0000000000000000000000000000000000000000..07779f9742ab67c0a68ae6b6e0936dc37b732073 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/87/87d1f19f73b3bbd1aebf139a99caa00e differ diff --git a/[AIOLOS]/Library/Artifacts/88/881da0f7900cf431cf07c2ce9e59e5fb b/[AIOLOS]/Library/Artifacts/88/881da0f7900cf431cf07c2ce9e59e5fb new file mode 100644 index 0000000000000000000000000000000000000000..5526ef9884998c5146ef53f311bf4f4fa0e8b619 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/88/881da0f7900cf431cf07c2ce9e59e5fb differ diff --git a/[AIOLOS]/Library/Artifacts/88/8820471f843730664ea04194f51fbf73 b/[AIOLOS]/Library/Artifacts/88/8820471f843730664ea04194f51fbf73 new file mode 100644 index 0000000000000000000000000000000000000000..aadf9f7ddff61ffa9d74a676fc532f11599f223c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/88/8820471f843730664ea04194f51fbf73 differ diff --git a/[AIOLOS]/Library/Artifacts/88/888bd901f78fc8af8ed6d115740e6b32 b/[AIOLOS]/Library/Artifacts/88/888bd901f78fc8af8ed6d115740e6b32 new file mode 100644 index 0000000000000000000000000000000000000000..14f1cbc502dc76984b1e95ea5450c5b739c617d1 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/88/888bd901f78fc8af8ed6d115740e6b32 differ diff --git a/[AIOLOS]/Library/Artifacts/88/88a50391e4fac602a98c7c3e6872aeaa b/[AIOLOS]/Library/Artifacts/88/88a50391e4fac602a98c7c3e6872aeaa new file mode 100644 index 0000000000000000000000000000000000000000..d29fd27af48ac253567d36aae68c067f5e1a2abb Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/88/88a50391e4fac602a98c7c3e6872aeaa differ diff --git a/[AIOLOS]/Library/Artifacts/88/88e394071e5828eafe183a3502cfbc32 b/[AIOLOS]/Library/Artifacts/88/88e394071e5828eafe183a3502cfbc32 new file mode 100644 index 0000000000000000000000000000000000000000..4cf2d1659ebfaf393afde92a4057049ca5da691f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/88/88e394071e5828eafe183a3502cfbc32 differ diff --git a/[AIOLOS]/Library/Artifacts/89/895c86df0b8ea2dfa434cc59f807ac6b b/[AIOLOS]/Library/Artifacts/89/895c86df0b8ea2dfa434cc59f807ac6b new file mode 100644 index 0000000000000000000000000000000000000000..0b13fdda68e1bb833a685f104ae84b61e87db11d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/89/895c86df0b8ea2dfa434cc59f807ac6b differ diff --git a/[AIOLOS]/Library/Artifacts/89/89d3947725f844c3d00cf22808e83cfe b/[AIOLOS]/Library/Artifacts/89/89d3947725f844c3d00cf22808e83cfe new file mode 100644 index 0000000000000000000000000000000000000000..c9d97812d28d3c3c1d313138a7cf09e34cf7bcb7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/89/89d3947725f844c3d00cf22808e83cfe differ diff --git a/[AIOLOS]/Library/Artifacts/89/89e5f63bb4739ddc50d9a7a0ae14a94d b/[AIOLOS]/Library/Artifacts/89/89e5f63bb4739ddc50d9a7a0ae14a94d new file mode 100644 index 0000000000000000000000000000000000000000..2dca784b0122435264e35d2c2bd3dc82aa108359 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/89/89e5f63bb4739ddc50d9a7a0ae14a94d differ diff --git a/[AIOLOS]/Library/Artifacts/89/89f9d895831a9a45ce7172f366b90cf4 b/[AIOLOS]/Library/Artifacts/89/89f9d895831a9a45ce7172f366b90cf4 new file mode 100644 index 0000000000000000000000000000000000000000..2c4ece7592ec90a536134cbbc64751853e410a42 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/89/89f9d895831a9a45ce7172f366b90cf4 differ diff --git a/[AIOLOS]/Library/Artifacts/8a/8a3b584e33ebef79f04764678512f2fc b/[AIOLOS]/Library/Artifacts/8a/8a3b584e33ebef79f04764678512f2fc new file mode 100644 index 0000000000000000000000000000000000000000..1cb493ded41aec69919f93fc20167bc684e1cd9b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/8a/8a3b584e33ebef79f04764678512f2fc differ diff --git a/[AIOLOS]/Library/Artifacts/8a/8a8bcf3ca70d697e7e008c72d8b211ac b/[AIOLOS]/Library/Artifacts/8a/8a8bcf3ca70d697e7e008c72d8b211ac new file mode 100644 index 0000000000000000000000000000000000000000..127afda4470a706a592ecf3c21f884d54ddf150d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/8a/8a8bcf3ca70d697e7e008c72d8b211ac differ diff --git a/[AIOLOS]/Library/Artifacts/8a/8a9e0318b068767e6ef2ff2bd0cc54d6 b/[AIOLOS]/Library/Artifacts/8a/8a9e0318b068767e6ef2ff2bd0cc54d6 new file mode 100644 index 0000000000000000000000000000000000000000..7a81f38e0f208dc83992fbc54a66f9e883b07166 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/8a/8a9e0318b068767e6ef2ff2bd0cc54d6 differ diff --git a/[AIOLOS]/Library/Artifacts/8b/8b02c31f291b044210f8284b8d84c76d b/[AIOLOS]/Library/Artifacts/8b/8b02c31f291b044210f8284b8d84c76d new file mode 100644 index 0000000000000000000000000000000000000000..ed6fa8bb32f260e3b1941baa02dc516f8bd871ad Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/8b/8b02c31f291b044210f8284b8d84c76d differ diff --git a/[AIOLOS]/Library/Artifacts/8c/8c4ade1eecce43ef6d66d76479137102 b/[AIOLOS]/Library/Artifacts/8c/8c4ade1eecce43ef6d66d76479137102 new file mode 100644 index 0000000000000000000000000000000000000000..74f168bbbafad99d304e05a34f96124eb0bd0fad Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/8c/8c4ade1eecce43ef6d66d76479137102 differ diff --git a/[AIOLOS]/Library/Artifacts/8d/8d094369580f2c480f0459349cc0d0b9 b/[AIOLOS]/Library/Artifacts/8d/8d094369580f2c480f0459349cc0d0b9 new file mode 100644 index 0000000000000000000000000000000000000000..662ebdbe3892169cf72a6a52682c6fe95a2fc08a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/8d/8d094369580f2c480f0459349cc0d0b9 differ diff --git a/[AIOLOS]/Library/Artifacts/8d/8d0ec0bf92eb6dae9787be88ba12ff4b b/[AIOLOS]/Library/Artifacts/8d/8d0ec0bf92eb6dae9787be88ba12ff4b new file mode 100644 index 0000000000000000000000000000000000000000..63fec0811cc14bc47b818040b28203afb9ba7327 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/8d/8d0ec0bf92eb6dae9787be88ba12ff4b differ diff --git a/[AIOLOS]/Library/Artifacts/8d/8d488d48984f20a30c31802901753055 b/[AIOLOS]/Library/Artifacts/8d/8d488d48984f20a30c31802901753055 new file mode 100644 index 0000000000000000000000000000000000000000..35dd2a9b611c8776472918da6e3ed52e98f92f3e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/8d/8d488d48984f20a30c31802901753055 differ diff --git a/[AIOLOS]/Library/Artifacts/8f/8f3231dd04b3de805b759e0de389c7c8 b/[AIOLOS]/Library/Artifacts/8f/8f3231dd04b3de805b759e0de389c7c8 new file mode 100644 index 0000000000000000000000000000000000000000..b28e1b9651fb86005896a0dfad8824da74310b85 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/8f/8f3231dd04b3de805b759e0de389c7c8 differ diff --git a/[AIOLOS]/Library/Artifacts/8f/8f3255363536d94eda1399bb6d12e0a5 b/[AIOLOS]/Library/Artifacts/8f/8f3255363536d94eda1399bb6d12e0a5 new file mode 100644 index 0000000000000000000000000000000000000000..ce246ae30acb9037900d84580dbed683e7a9d084 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/8f/8f3255363536d94eda1399bb6d12e0a5 differ diff --git a/[AIOLOS]/Library/Artifacts/8f/8f386538bf4b36694b5e2693ef5ad711 b/[AIOLOS]/Library/Artifacts/8f/8f386538bf4b36694b5e2693ef5ad711 new file mode 100644 index 0000000000000000000000000000000000000000..a2159b238f9f2c60a27025d82507826bb96e0def Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/8f/8f386538bf4b36694b5e2693ef5ad711 differ diff --git a/[AIOLOS]/Library/Artifacts/8f/8fbb2ba1cc7cbc0523ad2d2d35aede64 b/[AIOLOS]/Library/Artifacts/8f/8fbb2ba1cc7cbc0523ad2d2d35aede64 new file mode 100644 index 0000000000000000000000000000000000000000..b701fb811821b02e5ce21fb3f7307946e2b4bfee Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/8f/8fbb2ba1cc7cbc0523ad2d2d35aede64 differ diff --git a/[AIOLOS]/Library/Artifacts/90/900391570fbc51c81cc03a3da7fbc738 b/[AIOLOS]/Library/Artifacts/90/900391570fbc51c81cc03a3da7fbc738 new file mode 100644 index 0000000000000000000000000000000000000000..689a17d1d0dd4bb342e9f98477d94afc39c3cda5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/90/900391570fbc51c81cc03a3da7fbc738 differ diff --git a/[AIOLOS]/Library/Artifacts/90/909e1e8387fdcf14efeaaaac81ca6656 b/[AIOLOS]/Library/Artifacts/90/909e1e8387fdcf14efeaaaac81ca6656 new file mode 100644 index 0000000000000000000000000000000000000000..4b5385585cffd30a09a208bd522d148a4d1967a2 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/90/909e1e8387fdcf14efeaaaac81ca6656 differ diff --git a/[AIOLOS]/Library/Artifacts/91/915e9d4d01e35fd39d83b84773694446 b/[AIOLOS]/Library/Artifacts/91/915e9d4d01e35fd39d83b84773694446 new file mode 100644 index 0000000000000000000000000000000000000000..b7c153cc692c5bdc466c5b18e06267abb8fa51d7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/91/915e9d4d01e35fd39d83b84773694446 differ diff --git a/[AIOLOS]/Library/Artifacts/91/917b7f90a7a01c6da21001dc27b2a943 b/[AIOLOS]/Library/Artifacts/91/917b7f90a7a01c6da21001dc27b2a943 new file mode 100644 index 0000000000000000000000000000000000000000..70b5f6568e4359b14e8e2f63abf0a541bf071e69 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/91/917b7f90a7a01c6da21001dc27b2a943 differ diff --git a/[AIOLOS]/Library/Artifacts/91/9194b1fe1f1f709cf63134f0513c4a1a b/[AIOLOS]/Library/Artifacts/91/9194b1fe1f1f709cf63134f0513c4a1a new file mode 100644 index 0000000000000000000000000000000000000000..ef0c1a073fe4ab02118f90a71c7ac638c2585884 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/91/9194b1fe1f1f709cf63134f0513c4a1a differ diff --git a/[AIOLOS]/Library/Artifacts/91/91a22e9695b16a68e808a471bac92d4e b/[AIOLOS]/Library/Artifacts/91/91a22e9695b16a68e808a471bac92d4e new file mode 100644 index 0000000000000000000000000000000000000000..faedec51a8d2bd5f9f2e404c1de7d3af9d944fb3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/91/91a22e9695b16a68e808a471bac92d4e differ diff --git a/[AIOLOS]/Library/Artifacts/91/91e2e7fe22def314a9ca0d6d51cb529c b/[AIOLOS]/Library/Artifacts/91/91e2e7fe22def314a9ca0d6d51cb529c new file mode 100644 index 0000000000000000000000000000000000000000..799b8af7beb83aa09098ea4743b5f359187228c4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/91/91e2e7fe22def314a9ca0d6d51cb529c differ diff --git a/[AIOLOS]/Library/Artifacts/92/92bd7ea7a88ecba13ba6b9ded493b0c2 b/[AIOLOS]/Library/Artifacts/92/92bd7ea7a88ecba13ba6b9ded493b0c2 new file mode 100644 index 0000000000000000000000000000000000000000..45f84a2c545bf693c0d634f0197958f1636b70ba Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/92/92bd7ea7a88ecba13ba6b9ded493b0c2 differ diff --git a/[AIOLOS]/Library/Artifacts/92/92c4f884933d80cb8d398ec868b4bbab b/[AIOLOS]/Library/Artifacts/92/92c4f884933d80cb8d398ec868b4bbab new file mode 100644 index 0000000000000000000000000000000000000000..b78da48f0bb18e84a1974cff2d804757cee9c6e6 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/92/92c4f884933d80cb8d398ec868b4bbab differ diff --git a/[AIOLOS]/Library/Artifacts/93/93c5fd8d93794f9a8df168edc7b241bb b/[AIOLOS]/Library/Artifacts/93/93c5fd8d93794f9a8df168edc7b241bb new file mode 100644 index 0000000000000000000000000000000000000000..644a1b46d17671e5280e0188615859f54d30f702 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/93/93c5fd8d93794f9a8df168edc7b241bb differ diff --git a/[AIOLOS]/Library/Artifacts/94/9402fbe81696b50681aa5ddc5ac2b167 b/[AIOLOS]/Library/Artifacts/94/9402fbe81696b50681aa5ddc5ac2b167 new file mode 100644 index 0000000000000000000000000000000000000000..b77279cfc86ed10a826a3bf4a09cb72d2e34754e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/94/9402fbe81696b50681aa5ddc5ac2b167 differ diff --git a/[AIOLOS]/Library/Artifacts/64/643694e1cc82e37026a7d9a72d0575e6 b/[AIOLOS]/Library/Artifacts/94/94f1a045b9f88c430fbcfd0f80c52c9a similarity index 92% rename from [AIOLOS]/Library/Artifacts/64/643694e1cc82e37026a7d9a72d0575e6 rename to [AIOLOS]/Library/Artifacts/94/94f1a045b9f88c430fbcfd0f80c52c9a index b830c48a7bdbf3a2c105652d90920e0221b21772..66907c10d3d3724b257a77564bb33a45fd9cde68 100644 Binary files a/[AIOLOS]/Library/Artifacts/64/643694e1cc82e37026a7d9a72d0575e6 and b/[AIOLOS]/Library/Artifacts/94/94f1a045b9f88c430fbcfd0f80c52c9a differ diff --git a/[AIOLOS]/Library/Artifacts/95/958d820146f0c01ca165e3ff748bf59f b/[AIOLOS]/Library/Artifacts/95/958d820146f0c01ca165e3ff748bf59f new file mode 100644 index 0000000000000000000000000000000000000000..f86110ddc557953fe94c58e0ddc826bb79fa0bbc Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/95/958d820146f0c01ca165e3ff748bf59f differ diff --git a/[AIOLOS]/Library/Artifacts/96/9675161edfc101983c9fcdc2409e1456 b/[AIOLOS]/Library/Artifacts/96/9675161edfc101983c9fcdc2409e1456 new file mode 100644 index 0000000000000000000000000000000000000000..5e74f4a015092b9c6219bc20cc00ea821ba1e9de Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/96/9675161edfc101983c9fcdc2409e1456 differ diff --git a/[AIOLOS]/Library/Artifacts/97/972dac9a9e9e59c8342fe730b7964455 b/[AIOLOS]/Library/Artifacts/97/972dac9a9e9e59c8342fe730b7964455 new file mode 100644 index 0000000000000000000000000000000000000000..591592fef063271e6447d067e0bdcb59ca00df6f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/97/972dac9a9e9e59c8342fe730b7964455 differ diff --git a/[AIOLOS]/Library/Artifacts/97/97466a582837a7be419df4d2fafc8ced b/[AIOLOS]/Library/Artifacts/97/97466a582837a7be419df4d2fafc8ced new file mode 100644 index 0000000000000000000000000000000000000000..d3a2d44b79d45d41590024739835a596d19abfee Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/97/97466a582837a7be419df4d2fafc8ced differ diff --git a/[AIOLOS]/Library/Artifacts/97/97e4052e0eaf4b24d8e25f6cf35cc31f b/[AIOLOS]/Library/Artifacts/97/97e4052e0eaf4b24d8e25f6cf35cc31f new file mode 100644 index 0000000000000000000000000000000000000000..f141546d4f405ffb4f6f9dcde62cf4ab0eee05cd Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/97/97e4052e0eaf4b24d8e25f6cf35cc31f differ diff --git a/[AIOLOS]/Library/Artifacts/98/985b8d41ba6a50403eb01507fd406592 b/[AIOLOS]/Library/Artifacts/98/985b8d41ba6a50403eb01507fd406592 new file mode 100644 index 0000000000000000000000000000000000000000..50c308008d39f57badca554d99367d7a94dd27cf Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/98/985b8d41ba6a50403eb01507fd406592 differ diff --git a/[AIOLOS]/Library/Artifacts/99/99397537d6de7e8a5ad63782e8095d3d b/[AIOLOS]/Library/Artifacts/99/99397537d6de7e8a5ad63782e8095d3d new file mode 100644 index 0000000000000000000000000000000000000000..05adc2514d139f4b6386009023eda23814591e04 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/99/99397537d6de7e8a5ad63782e8095d3d differ diff --git a/[AIOLOS]/Library/Artifacts/99/99a63da86f047f4b322dd7c33104d20b b/[AIOLOS]/Library/Artifacts/99/99a63da86f047f4b322dd7c33104d20b new file mode 100644 index 0000000000000000000000000000000000000000..bee36a63c12542c3d870d060897fb79a69593df0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/99/99a63da86f047f4b322dd7c33104d20b differ diff --git a/[AIOLOS]/Library/Artifacts/9a/9a0803fc6da2b1f88b70e698a6bb2ee5 b/[AIOLOS]/Library/Artifacts/9a/9a0803fc6da2b1f88b70e698a6bb2ee5 new file mode 100644 index 0000000000000000000000000000000000000000..d29b601163d7f64b0333464a87db9b80b1349901 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9a/9a0803fc6da2b1f88b70e698a6bb2ee5 differ diff --git a/[AIOLOS]/Library/Artifacts/9a/9a09981a12f36647c913b495f3511410 b/[AIOLOS]/Library/Artifacts/9a/9a09981a12f36647c913b495f3511410 new file mode 100644 index 0000000000000000000000000000000000000000..d745840175588e0162cfff53ec15d640880268d5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9a/9a09981a12f36647c913b495f3511410 differ diff --git a/[AIOLOS]/Library/Artifacts/9a/9a0bf01b26bcdbb9b17091f2dadb83db b/[AIOLOS]/Library/Artifacts/9a/9a0bf01b26bcdbb9b17091f2dadb83db new file mode 100644 index 0000000000000000000000000000000000000000..d999981449f5ef77b8bb94da58ebc3416cc4013f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9a/9a0bf01b26bcdbb9b17091f2dadb83db differ diff --git a/[AIOLOS]/Library/Artifacts/9a/9ad022afb643582afaae3f046daab433 b/[AIOLOS]/Library/Artifacts/9a/9ad022afb643582afaae3f046daab433 new file mode 100644 index 0000000000000000000000000000000000000000..a36e7fdf45e3a7d559b870679280408526952c66 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9a/9ad022afb643582afaae3f046daab433 differ diff --git a/[AIOLOS]/Library/Artifacts/9a/9ae4678de87cba30caf9e858b64e01ae b/[AIOLOS]/Library/Artifacts/9a/9ae4678de87cba30caf9e858b64e01ae new file mode 100644 index 0000000000000000000000000000000000000000..03de964577a84e24509aaf833c3286166c98af0e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9a/9ae4678de87cba30caf9e858b64e01ae differ diff --git a/[AIOLOS]/Library/Artifacts/9b/9b3918502e53be886eeaa221986e47e9 b/[AIOLOS]/Library/Artifacts/9b/9b3918502e53be886eeaa221986e47e9 new file mode 100644 index 0000000000000000000000000000000000000000..174556568ed619598878c1483089e8dcf4189762 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9b/9b3918502e53be886eeaa221986e47e9 differ diff --git a/[AIOLOS]/Library/Artifacts/9b/9b76341b545a88efca569f010dc81dbc b/[AIOLOS]/Library/Artifacts/9b/9b76341b545a88efca569f010dc81dbc new file mode 100644 index 0000000000000000000000000000000000000000..5972bc7f70aa807841530c41d2ff4f832d595f9e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9b/9b76341b545a88efca569f010dc81dbc differ diff --git a/[AIOLOS]/Library/Artifacts/9b/9bbd4b42e5b2f2c94903c839db222db3 b/[AIOLOS]/Library/Artifacts/9b/9bbd4b42e5b2f2c94903c839db222db3 new file mode 100644 index 0000000000000000000000000000000000000000..1a33cec898d24a1c568e4682d52fb0903c5fde80 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9b/9bbd4b42e5b2f2c94903c839db222db3 differ diff --git a/[AIOLOS]/Library/Artifacts/9c/9c3f34a2338a473899d898dc2292ec21 b/[AIOLOS]/Library/Artifacts/9c/9c3f34a2338a473899d898dc2292ec21 new file mode 100644 index 0000000000000000000000000000000000000000..2d5e86b9bd0fa17c1acc6429210635a775db8828 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9c/9c3f34a2338a473899d898dc2292ec21 differ diff --git a/[AIOLOS]/Library/Artifacts/9c/9c797f75629fd3faf7ef4733ccc57a20 b/[AIOLOS]/Library/Artifacts/9c/9c797f75629fd3faf7ef4733ccc57a20 new file mode 100644 index 0000000000000000000000000000000000000000..98e116c8f631d8ae1fcd4a5429101b0216551b61 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9c/9c797f75629fd3faf7ef4733ccc57a20 differ diff --git a/[AIOLOS]/Library/Artifacts/9d/9d1f05506e72a41681b1ae87adb52e7f b/[AIOLOS]/Library/Artifacts/9d/9d1f05506e72a41681b1ae87adb52e7f new file mode 100644 index 0000000000000000000000000000000000000000..54d00515b77e3f0a629c92a609256caca69d7dc0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9d/9d1f05506e72a41681b1ae87adb52e7f differ diff --git a/[AIOLOS]/Library/Artifacts/9d/9d28d631591ec39e34d08ad68ba5617b b/[AIOLOS]/Library/Artifacts/9d/9d28d631591ec39e34d08ad68ba5617b new file mode 100644 index 0000000000000000000000000000000000000000..b355aff4255ab0a9026f736c4856f6611f091aac Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9d/9d28d631591ec39e34d08ad68ba5617b differ diff --git a/[AIOLOS]/Library/Artifacts/9d/9d44c2f5e98aaaef3489da9687a88581 b/[AIOLOS]/Library/Artifacts/9d/9d44c2f5e98aaaef3489da9687a88581 new file mode 100644 index 0000000000000000000000000000000000000000..5c85f3b4e520aa43e158d653a2ff29ed5426e91f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9d/9d44c2f5e98aaaef3489da9687a88581 differ diff --git a/[AIOLOS]/Library/Artifacts/9d/9d61cc8d747cffc6ae7afc18ad923947 b/[AIOLOS]/Library/Artifacts/9d/9d61cc8d747cffc6ae7afc18ad923947 new file mode 100644 index 0000000000000000000000000000000000000000..e7dd9cecf296bb0b07471889a978c1617ff5cb6d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9d/9d61cc8d747cffc6ae7afc18ad923947 differ diff --git a/[AIOLOS]/Library/Artifacts/9d/9d8ba05133e5ed8156c4f19c10214ed3 b/[AIOLOS]/Library/Artifacts/9d/9d8ba05133e5ed8156c4f19c10214ed3 new file mode 100644 index 0000000000000000000000000000000000000000..c798d6c69d9cb9b9b33b49677c37438c0fe09e82 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9d/9d8ba05133e5ed8156c4f19c10214ed3 differ diff --git a/[AIOLOS]/Library/Artifacts/9d/9d9cfc5a49eecaa7dc402428f6e341fb b/[AIOLOS]/Library/Artifacts/9d/9d9cfc5a49eecaa7dc402428f6e341fb new file mode 100644 index 0000000000000000000000000000000000000000..134996fbb1ec4b9fe5d7ef9f12833f4cc914ab15 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9d/9d9cfc5a49eecaa7dc402428f6e341fb differ diff --git a/[AIOLOS]/Library/Artifacts/9e/9e0301c9244e7d552d8c65f6c4fd3aaa b/[AIOLOS]/Library/Artifacts/9e/9e0301c9244e7d552d8c65f6c4fd3aaa new file mode 100644 index 0000000000000000000000000000000000000000..33a79e7216579f7b8d88b62a395a3b7809210646 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9e/9e0301c9244e7d552d8c65f6c4fd3aaa differ diff --git a/[AIOLOS]/Library/Artifacts/9e/9e34f8e835018d83fb2c0b31f283ee0c b/[AIOLOS]/Library/Artifacts/9e/9e34f8e835018d83fb2c0b31f283ee0c new file mode 100644 index 0000000000000000000000000000000000000000..91e52ad9be70854118a3c61a9f881d16e97fe072 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9e/9e34f8e835018d83fb2c0b31f283ee0c differ diff --git a/[AIOLOS]/Library/Artifacts/9e/9eb3e8dddb4f2f4b4b13c085e066aeb9 b/[AIOLOS]/Library/Artifacts/9e/9eb3e8dddb4f2f4b4b13c085e066aeb9 new file mode 100644 index 0000000000000000000000000000000000000000..5bd27089b59cecc665cc06ce1e7141048a26496e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9e/9eb3e8dddb4f2f4b4b13c085e066aeb9 differ diff --git a/[AIOLOS]/Library/Artifacts/9f/9f9e3322cf21e320225c4a1e2d4e172b b/[AIOLOS]/Library/Artifacts/9f/9f9e3322cf21e320225c4a1e2d4e172b new file mode 100644 index 0000000000000000000000000000000000000000..4d3f605f1a2d6eb603109723d6273bb9e433d173 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9f/9f9e3322cf21e320225c4a1e2d4e172b differ diff --git a/[AIOLOS]/Library/Artifacts/9f/9f9edbedf3656a65356d3b7ce7cb25d3 b/[AIOLOS]/Library/Artifacts/9f/9f9edbedf3656a65356d3b7ce7cb25d3 new file mode 100644 index 0000000000000000000000000000000000000000..13ea5d6d151c324e90b67564d2ee582895973adc Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/9f/9f9edbedf3656a65356d3b7ce7cb25d3 differ diff --git a/[AIOLOS]/Library/Artifacts/a0/a019e4c05ec4564105bbaba64ca8ce1a b/[AIOLOS]/Library/Artifacts/a0/a019e4c05ec4564105bbaba64ca8ce1a new file mode 100644 index 0000000000000000000000000000000000000000..5ba113e3f029713352052002c2bb5220df3db384 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a0/a019e4c05ec4564105bbaba64ca8ce1a differ diff --git a/[AIOLOS]/Library/Artifacts/a0/a0552dafdb06b64b8303a77db5ad1f03 b/[AIOLOS]/Library/Artifacts/a0/a0552dafdb06b64b8303a77db5ad1f03 new file mode 100644 index 0000000000000000000000000000000000000000..da0eb160b8c7843e52939937cb3298e9c91b2fb4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a0/a0552dafdb06b64b8303a77db5ad1f03 differ diff --git a/[AIOLOS]/Library/Artifacts/a0/a07c40735e79d8d4cd0cd82763af55b3 b/[AIOLOS]/Library/Artifacts/a0/a07c40735e79d8d4cd0cd82763af55b3 new file mode 100644 index 0000000000000000000000000000000000000000..9c9a85699d5159e34291d5a1196d7c2d9b4cbd27 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a0/a07c40735e79d8d4cd0cd82763af55b3 differ diff --git a/[AIOLOS]/Library/Artifacts/a0/a0d078f0af89984347d9823e44672f12 b/[AIOLOS]/Library/Artifacts/a0/a0d078f0af89984347d9823e44672f12 new file mode 100644 index 0000000000000000000000000000000000000000..8002d804d4b084dde91565fa0ccf71b4669a351f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a0/a0d078f0af89984347d9823e44672f12 differ diff --git a/[AIOLOS]/Library/Artifacts/a1/a108c3020adc9f6a8f03c58199ae928b b/[AIOLOS]/Library/Artifacts/a1/a108c3020adc9f6a8f03c58199ae928b new file mode 100644 index 0000000000000000000000000000000000000000..8f58037ebda228a30fb3f7abe4c08ece2ac45c44 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a1/a108c3020adc9f6a8f03c58199ae928b differ diff --git a/[AIOLOS]/Library/Artifacts/a1/a10d776c334ef2fbbda23f4c9e106dc9 b/[AIOLOS]/Library/Artifacts/a1/a10d776c334ef2fbbda23f4c9e106dc9 new file mode 100644 index 0000000000000000000000000000000000000000..ccf5fbda23a221b6fc5f214f6fe1bda4d08e5362 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a1/a10d776c334ef2fbbda23f4c9e106dc9 differ diff --git a/[AIOLOS]/Library/Artifacts/a1/a1773f21ec9abfd6ecdaf3d915562800 b/[AIOLOS]/Library/Artifacts/a1/a1773f21ec9abfd6ecdaf3d915562800 new file mode 100644 index 0000000000000000000000000000000000000000..a9450cba9c7f1d3df0303a912f64f4fb7f454dd3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a1/a1773f21ec9abfd6ecdaf3d915562800 differ diff --git a/[AIOLOS]/Library/Artifacts/a2/a2338a8d5e7f24c5795637e8493b5883 b/[AIOLOS]/Library/Artifacts/a2/a2338a8d5e7f24c5795637e8493b5883 new file mode 100644 index 0000000000000000000000000000000000000000..d6c9c7f37117bcdd24906868361da04357f77739 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a2/a2338a8d5e7f24c5795637e8493b5883 differ diff --git a/[AIOLOS]/Library/Artifacts/a2/a24a1682abe3827cab644da15f246b9a b/[AIOLOS]/Library/Artifacts/a2/a24a1682abe3827cab644da15f246b9a new file mode 100644 index 0000000000000000000000000000000000000000..716e8dfd85ea71afec2ad73900fd93b5a6c128b3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a2/a24a1682abe3827cab644da15f246b9a differ diff --git a/[AIOLOS]/Library/Artifacts/a3/a30c6702ee8cfd2c5c57aaf0ad11b360 b/[AIOLOS]/Library/Artifacts/a3/a30c6702ee8cfd2c5c57aaf0ad11b360 new file mode 100644 index 0000000000000000000000000000000000000000..2b60d7c85406ab66891e717b1ae98b8bf7b76ea7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a3/a30c6702ee8cfd2c5c57aaf0ad11b360 differ diff --git a/[AIOLOS]/Library/Artifacts/a3/a340b8d8585ac504ee37676683b2ce60 b/[AIOLOS]/Library/Artifacts/a3/a340b8d8585ac504ee37676683b2ce60 new file mode 100644 index 0000000000000000000000000000000000000000..145cd3bc3b6969823d8512d70b129b2cf8e702d4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a3/a340b8d8585ac504ee37676683b2ce60 differ diff --git a/[AIOLOS]/Library/Artifacts/a3/a3f3145c4450541ba64638d9f43d2097 b/[AIOLOS]/Library/Artifacts/a3/a3f3145c4450541ba64638d9f43d2097 new file mode 100644 index 0000000000000000000000000000000000000000..a3bf3d28c458e2f35cbfe23628441cb4f45fc935 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a3/a3f3145c4450541ba64638d9f43d2097 differ diff --git a/[AIOLOS]/Library/Artifacts/a4/a41fbb9b1c10ff855a34b2255634d964 b/[AIOLOS]/Library/Artifacts/a4/a41fbb9b1c10ff855a34b2255634d964 new file mode 100644 index 0000000000000000000000000000000000000000..2d4c04caf797ce2e36c0db88a0015240d3fb3a99 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a4/a41fbb9b1c10ff855a34b2255634d964 differ diff --git a/[AIOLOS]/Library/Artifacts/a4/a45bd2412dbf0f46581ca064bd6ac04f b/[AIOLOS]/Library/Artifacts/a4/a45bd2412dbf0f46581ca064bd6ac04f new file mode 100644 index 0000000000000000000000000000000000000000..a487c28e73b22bc5a73ebf202465a44476b10747 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a4/a45bd2412dbf0f46581ca064bd6ac04f differ diff --git a/[AIOLOS]/Library/Artifacts/a4/a49bff9c8162ba0f6f46fd938ec14525 b/[AIOLOS]/Library/Artifacts/a4/a49bff9c8162ba0f6f46fd938ec14525 new file mode 100644 index 0000000000000000000000000000000000000000..5e7f9e338c66d537c674d72e4730c77329709924 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a4/a49bff9c8162ba0f6f46fd938ec14525 differ diff --git a/[AIOLOS]/Library/Artifacts/a4/a4bcb536a045b84d17e2438c0a2d9310 b/[AIOLOS]/Library/Artifacts/a4/a4bcb536a045b84d17e2438c0a2d9310 new file mode 100644 index 0000000000000000000000000000000000000000..4b83912e92850437caa85bdd9a809ff39bfd7ebc Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a4/a4bcb536a045b84d17e2438c0a2d9310 differ diff --git a/[AIOLOS]/Library/Artifacts/a5/a53e730bbe210eab4b22c2ed4aeb325c b/[AIOLOS]/Library/Artifacts/a5/a53e730bbe210eab4b22c2ed4aeb325c new file mode 100644 index 0000000000000000000000000000000000000000..4544fac1dabcd74e64bb5d10f4936d25b009140c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a5/a53e730bbe210eab4b22c2ed4aeb325c differ diff --git a/[AIOLOS]/Library/Artifacts/a5/a5d1daa0cfb53519186d4e7f099d9f68 b/[AIOLOS]/Library/Artifacts/a5/a5d1daa0cfb53519186d4e7f099d9f68 new file mode 100644 index 0000000000000000000000000000000000000000..c309534898ca9d180af01f3d1fb43123ad39cf5b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a5/a5d1daa0cfb53519186d4e7f099d9f68 differ diff --git a/[AIOLOS]/Library/Artifacts/a6/a684747a426b5f354cbb9d59604b3768 b/[AIOLOS]/Library/Artifacts/a6/a684747a426b5f354cbb9d59604b3768 new file mode 100644 index 0000000000000000000000000000000000000000..47b71d92783a4e76d2c3345dc016f880311a4ab9 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a6/a684747a426b5f354cbb9d59604b3768 differ diff --git a/[AIOLOS]/Library/Artifacts/a7/a77a7c4af13b01cbc9cd1f7ff9bdddce b/[AIOLOS]/Library/Artifacts/a7/a77a7c4af13b01cbc9cd1f7ff9bdddce new file mode 100644 index 0000000000000000000000000000000000000000..6433bf3c7854b2407416c2e95f4876e188f67b2e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a7/a77a7c4af13b01cbc9cd1f7ff9bdddce differ diff --git a/[AIOLOS]/Library/Artifacts/a7/a7e3ffbfffcb6e3a0c030b0c4763012f b/[AIOLOS]/Library/Artifacts/a7/a7e3ffbfffcb6e3a0c030b0c4763012f new file mode 100644 index 0000000000000000000000000000000000000000..bf9f02fbcdb6f344109692e239568017beebbfe3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a7/a7e3ffbfffcb6e3a0c030b0c4763012f differ diff --git a/[AIOLOS]/Library/Artifacts/a8/a803a60e3082fad01b0c19fe8e306d80 b/[AIOLOS]/Library/Artifacts/a8/a803a60e3082fad01b0c19fe8e306d80 new file mode 100644 index 0000000000000000000000000000000000000000..dc17c257fbab756154f52b58757305fb043a0fb6 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a8/a803a60e3082fad01b0c19fe8e306d80 differ diff --git a/[AIOLOS]/Library/Artifacts/a8/a840fa535bd5c491e6c632a9485ff1c5 b/[AIOLOS]/Library/Artifacts/a8/a840fa535bd5c491e6c632a9485ff1c5 new file mode 100644 index 0000000000000000000000000000000000000000..780c6510d99b365b8b094eab5e358443d85bf8ba Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a8/a840fa535bd5c491e6c632a9485ff1c5 differ diff --git a/[AIOLOS]/Library/Artifacts/a8/a843dcd278ccd55ceb241026ea85937c b/[AIOLOS]/Library/Artifacts/a8/a843dcd278ccd55ceb241026ea85937c new file mode 100644 index 0000000000000000000000000000000000000000..c4a0c1d32d04d98e83bcffb0ce2030ee2268bf28 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a8/a843dcd278ccd55ceb241026ea85937c differ diff --git a/[AIOLOS]/Library/Artifacts/a8/a8f27f4b671250cef7daf50201b00aa5 b/[AIOLOS]/Library/Artifacts/a8/a8f27f4b671250cef7daf50201b00aa5 new file mode 100644 index 0000000000000000000000000000000000000000..76c77acfcabdcdf04878e1a960c4371666832298 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a8/a8f27f4b671250cef7daf50201b00aa5 differ diff --git a/[AIOLOS]/Library/Artifacts/a9/a934df65c4ea118fbe6ae106a2c7b2d9 b/[AIOLOS]/Library/Artifacts/a9/a934df65c4ea118fbe6ae106a2c7b2d9 new file mode 100644 index 0000000000000000000000000000000000000000..2aa2c4863cc015143f81b4e7593dd1c394c6475a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/a9/a934df65c4ea118fbe6ae106a2c7b2d9 differ diff --git a/[AIOLOS]/Library/Artifacts/aa/aabb1963011df093b18f8f07859d3ebc b/[AIOLOS]/Library/Artifacts/aa/aabb1963011df093b18f8f07859d3ebc new file mode 100644 index 0000000000000000000000000000000000000000..afc05c7cea2b25dfe185c9b6d3039dc0e07abb91 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/aa/aabb1963011df093b18f8f07859d3ebc differ diff --git a/[AIOLOS]/Library/Artifacts/aa/aabe406eb3780e0dd55cee7e7a97f92e b/[AIOLOS]/Library/Artifacts/aa/aabe406eb3780e0dd55cee7e7a97f92e new file mode 100644 index 0000000000000000000000000000000000000000..8e269bf92e3ce021ccff05d612c7a2ab4a8ae3ab Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/aa/aabe406eb3780e0dd55cee7e7a97f92e differ diff --git a/[AIOLOS]/Library/Artifacts/aa/aadc5dedacc53afddefa60af3293e353 b/[AIOLOS]/Library/Artifacts/aa/aadc5dedacc53afddefa60af3293e353 new file mode 100644 index 0000000000000000000000000000000000000000..4a0cacfdadd3b4adcf27e84e8fac38fc03244343 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/aa/aadc5dedacc53afddefa60af3293e353 differ diff --git a/[AIOLOS]/Library/Artifacts/ab/ab2708a2046266444d35317f0c91f9be b/[AIOLOS]/Library/Artifacts/ab/ab2708a2046266444d35317f0c91f9be new file mode 100644 index 0000000000000000000000000000000000000000..2e30322b043337fa3b5c42e02dba4e1c54cb137d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ab/ab2708a2046266444d35317f0c91f9be differ diff --git a/[AIOLOS]/Library/Artifacts/ab/ab59898a2d21321efe95182bb3398bde b/[AIOLOS]/Library/Artifacts/ab/ab59898a2d21321efe95182bb3398bde new file mode 100644 index 0000000000000000000000000000000000000000..9593674ee4391925516e5d101d93206b4a455bd1 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ab/ab59898a2d21321efe95182bb3398bde differ diff --git a/[AIOLOS]/Library/Artifacts/ab/abc8b237ebd02e2379f448717589cc07 b/[AIOLOS]/Library/Artifacts/ab/abc8b237ebd02e2379f448717589cc07 new file mode 100644 index 0000000000000000000000000000000000000000..9370a5ac590df803b0438c3dbf430931e30726d8 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ab/abc8b237ebd02e2379f448717589cc07 differ diff --git a/[AIOLOS]/Library/Artifacts/ab/abc99f19742821b5f0cb94f2d9301cd4 b/[AIOLOS]/Library/Artifacts/ab/abc99f19742821b5f0cb94f2d9301cd4 new file mode 100644 index 0000000000000000000000000000000000000000..a8a26bec9d844cbf76a4a9eb0b61aeee098599a6 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ab/abc99f19742821b5f0cb94f2d9301cd4 differ diff --git a/[AIOLOS]/Library/Artifacts/ab/abf57fec1759f3c021579f2dd90b85c1 b/[AIOLOS]/Library/Artifacts/ab/abf57fec1759f3c021579f2dd90b85c1 new file mode 100644 index 0000000000000000000000000000000000000000..7cb35e0291da36faed7d9a39557be5f6422144f8 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ab/abf57fec1759f3c021579f2dd90b85c1 differ diff --git a/[AIOLOS]/Library/Artifacts/ac/ac4a7ca29192fb551175716add02c3e3 b/[AIOLOS]/Library/Artifacts/ac/ac4a7ca29192fb551175716add02c3e3 new file mode 100644 index 0000000000000000000000000000000000000000..d99e45a6b3ae7cf3847cf69e79cd6784a445e2b9 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ac/ac4a7ca29192fb551175716add02c3e3 differ diff --git a/[AIOLOS]/Library/Artifacts/ac/ac7cf16d3cf79d89ada392c409ba27ad b/[AIOLOS]/Library/Artifacts/ac/ac7cf16d3cf79d89ada392c409ba27ad new file mode 100644 index 0000000000000000000000000000000000000000..d00ee4355920e9ffa0d176546fdd1fc8be3d4d70 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ac/ac7cf16d3cf79d89ada392c409ba27ad differ diff --git a/[AIOLOS]/Library/Artifacts/ad/ad62773c2eeac3937a2dc19224dd2072 b/[AIOLOS]/Library/Artifacts/ad/ad62773c2eeac3937a2dc19224dd2072 new file mode 100644 index 0000000000000000000000000000000000000000..c1e05d27b8d5fa8989ffa8655dfc0a86d8180656 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ad/ad62773c2eeac3937a2dc19224dd2072 differ diff --git a/[AIOLOS]/Library/Artifacts/ad/adb309b1af7012a4448ba51adac66853 b/[AIOLOS]/Library/Artifacts/ad/adb309b1af7012a4448ba51adac66853 new file mode 100644 index 0000000000000000000000000000000000000000..7295c836dec3f306e25ccc54aaea18065fec6a0c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ad/adb309b1af7012a4448ba51adac66853 differ diff --git a/[AIOLOS]/Library/Artifacts/ae/ae1d007c4bdc026d0ac606db7545eb24 b/[AIOLOS]/Library/Artifacts/ae/ae1d007c4bdc026d0ac606db7545eb24 new file mode 100644 index 0000000000000000000000000000000000000000..c815f0aba4b8349fca4af0ba8f3530613c5845bd Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ae/ae1d007c4bdc026d0ac606db7545eb24 differ diff --git a/[AIOLOS]/Library/Artifacts/ae/ae502257fec6326d80ed8af79030e090 b/[AIOLOS]/Library/Artifacts/ae/ae502257fec6326d80ed8af79030e090 new file mode 100644 index 0000000000000000000000000000000000000000..907adedd88ff06aef3c332989be9f89ab2565f74 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ae/ae502257fec6326d80ed8af79030e090 differ diff --git a/[AIOLOS]/Library/Artifacts/ae/ae864c0cc14f19d75752e1c44e717f92 b/[AIOLOS]/Library/Artifacts/ae/ae864c0cc14f19d75752e1c44e717f92 new file mode 100644 index 0000000000000000000000000000000000000000..90a795e3690c4e2bcf9b3eba75c2cf136e8dd67c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ae/ae864c0cc14f19d75752e1c44e717f92 differ diff --git a/[AIOLOS]/Library/Artifacts/ae/aee0911230d162720426d4bcbf857b8e b/[AIOLOS]/Library/Artifacts/ae/aee0911230d162720426d4bcbf857b8e new file mode 100644 index 0000000000000000000000000000000000000000..a58df4c1cdab8e83964f09d82b40fb3836daa927 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ae/aee0911230d162720426d4bcbf857b8e differ diff --git a/[AIOLOS]/Library/Artifacts/ae/aef6589642a18963c60339db3d624fdd b/[AIOLOS]/Library/Artifacts/ae/aef6589642a18963c60339db3d624fdd new file mode 100644 index 0000000000000000000000000000000000000000..5eb0f2f835b8c7aea8841ca0aec120c3f97542ac Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ae/aef6589642a18963c60339db3d624fdd differ diff --git a/[AIOLOS]/Library/Artifacts/af/af61f16a4d32ee0466b3682a4527fb92 b/[AIOLOS]/Library/Artifacts/af/af61f16a4d32ee0466b3682a4527fb92 new file mode 100644 index 0000000000000000000000000000000000000000..39171f9c1cda313d721ff65be9b1f901a6aced9a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/af/af61f16a4d32ee0466b3682a4527fb92 differ diff --git a/[AIOLOS]/Library/Artifacts/af/af7c51a426ffb17b24d8260ce1ba3063 b/[AIOLOS]/Library/Artifacts/af/af7c51a426ffb17b24d8260ce1ba3063 new file mode 100644 index 0000000000000000000000000000000000000000..e099a70f3213fb0753333552770ff50ef425a4ab Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/af/af7c51a426ffb17b24d8260ce1ba3063 differ diff --git a/[AIOLOS]/Library/Artifacts/af/afa002c4a8aa4201e2981a26373a987d b/[AIOLOS]/Library/Artifacts/af/afa002c4a8aa4201e2981a26373a987d new file mode 100644 index 0000000000000000000000000000000000000000..213678f3af4ddf46d7604c8f9da7fa760be9a6f3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/af/afa002c4a8aa4201e2981a26373a987d differ diff --git a/[AIOLOS]/Library/Artifacts/af/afa529f71fd43a51dbb95f81812310db b/[AIOLOS]/Library/Artifacts/af/afa529f71fd43a51dbb95f81812310db new file mode 100644 index 0000000000000000000000000000000000000000..ea7681c74f4d298ef80ab836a8d587960cde5241 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/af/afa529f71fd43a51dbb95f81812310db differ diff --git a/[AIOLOS]/Library/Artifacts/b0/b00b388f06ce5b2399f4350c8544be07 b/[AIOLOS]/Library/Artifacts/b0/b00b388f06ce5b2399f4350c8544be07 new file mode 100644 index 0000000000000000000000000000000000000000..fd3c2bdef9711f739ed2e47f0bcb47856bdb9cd4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b0/b00b388f06ce5b2399f4350c8544be07 differ diff --git a/[AIOLOS]/Library/Artifacts/b0/b0a1b579c61a290fd6272e006210805d b/[AIOLOS]/Library/Artifacts/b0/b0a1b579c61a290fd6272e006210805d new file mode 100644 index 0000000000000000000000000000000000000000..a79f0b31863fdd8ccf27bbdedc23fd1a26342a7a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b0/b0a1b579c61a290fd6272e006210805d differ diff --git a/[AIOLOS]/Library/Artifacts/b0/b0ee4d4f11138ba6d1248d477e3f7546 b/[AIOLOS]/Library/Artifacts/b0/b0ee4d4f11138ba6d1248d477e3f7546 new file mode 100644 index 0000000000000000000000000000000000000000..c84df150219806e7fcd0254ae79d89ac089233cb Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b0/b0ee4d4f11138ba6d1248d477e3f7546 differ diff --git a/[AIOLOS]/Library/Artifacts/b0/b0f39fa960848aef23cb83a8e532dc1d b/[AIOLOS]/Library/Artifacts/b0/b0f39fa960848aef23cb83a8e532dc1d new file mode 100644 index 0000000000000000000000000000000000000000..09448efcb76aaed65804e134e14b73d1cb640eef Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b0/b0f39fa960848aef23cb83a8e532dc1d differ diff --git a/[AIOLOS]/Library/Artifacts/b1/b11d51e55f33fc51701b266fcb5235f2 b/[AIOLOS]/Library/Artifacts/b1/b11d51e55f33fc51701b266fcb5235f2 new file mode 100644 index 0000000000000000000000000000000000000000..f3c622a39a565ac7123d93fa457c0d9023f8f1a4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b1/b11d51e55f33fc51701b266fcb5235f2 differ diff --git a/[AIOLOS]/Library/Artifacts/b1/b1387b82eca27b31ee768c4f02387bdd b/[AIOLOS]/Library/Artifacts/b1/b1387b82eca27b31ee768c4f02387bdd new file mode 100644 index 0000000000000000000000000000000000000000..db1f0fd358053091b619e97e366c1a7be8806b2c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b1/b1387b82eca27b31ee768c4f02387bdd differ diff --git a/[AIOLOS]/Library/Artifacts/b1/b144e6352eed6aa68f30925bc65dd592 b/[AIOLOS]/Library/Artifacts/b1/b144e6352eed6aa68f30925bc65dd592 new file mode 100644 index 0000000000000000000000000000000000000000..0b69ea464447c0566c3a39614abc488ca0e98a31 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b1/b144e6352eed6aa68f30925bc65dd592 differ diff --git a/[AIOLOS]/Library/Artifacts/b1/b18cfd41f4b977ad3c92ec7bf904b4ce b/[AIOLOS]/Library/Artifacts/b1/b18cfd41f4b977ad3c92ec7bf904b4ce new file mode 100644 index 0000000000000000000000000000000000000000..6190215a3c7648d48e650550026d1e8008f85330 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b1/b18cfd41f4b977ad3c92ec7bf904b4ce differ diff --git a/[AIOLOS]/Library/Artifacts/b1/b190c735eb61e91fc0ca3f18217d5c50 b/[AIOLOS]/Library/Artifacts/b1/b190c735eb61e91fc0ca3f18217d5c50 new file mode 100644 index 0000000000000000000000000000000000000000..cfc8a1518a21be3c648daf3688146bbb3536f160 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b1/b190c735eb61e91fc0ca3f18217d5c50 differ diff --git a/[AIOLOS]/Library/Artifacts/b2/b21a171727ad7cdade037af0acf0f4e9 b/[AIOLOS]/Library/Artifacts/b2/b21a171727ad7cdade037af0acf0f4e9 new file mode 100644 index 0000000000000000000000000000000000000000..28a117764797ab0928f4ce2b3aeac4a34a7806a5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b2/b21a171727ad7cdade037af0acf0f4e9 differ diff --git a/[AIOLOS]/Library/Artifacts/b2/b2abd814c8fb64f285d17c78fed5c55d b/[AIOLOS]/Library/Artifacts/b2/b2abd814c8fb64f285d17c78fed5c55d new file mode 100644 index 0000000000000000000000000000000000000000..3537684b1108a1731487263d868110cb8d0b284a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b2/b2abd814c8fb64f285d17c78fed5c55d differ diff --git a/[AIOLOS]/Library/Artifacts/d3/d32778dad594166b3113ad5ad490993d b/[AIOLOS]/Library/Artifacts/b2/b2f11ffac7715c02b3d6f423ddc316a9 similarity index 86% rename from [AIOLOS]/Library/Artifacts/d3/d32778dad594166b3113ad5ad490993d rename to [AIOLOS]/Library/Artifacts/b2/b2f11ffac7715c02b3d6f423ddc316a9 index a5860583f23e64fa700abe86bdffdcbc13da1cd1..1cbc6b113951168c6015b36f0ad8d34aa6553d04 100644 Binary files a/[AIOLOS]/Library/Artifacts/d3/d32778dad594166b3113ad5ad490993d and b/[AIOLOS]/Library/Artifacts/b2/b2f11ffac7715c02b3d6f423ddc316a9 differ diff --git a/[AIOLOS]/Library/Artifacts/b2/b2ffc73c1649d659a28f2bb728cb6712 b/[AIOLOS]/Library/Artifacts/b2/b2ffc73c1649d659a28f2bb728cb6712 new file mode 100644 index 0000000000000000000000000000000000000000..5c090fe7f800d8ac36a5e084b0a4bd6b212787e9 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b2/b2ffc73c1649d659a28f2bb728cb6712 differ diff --git a/[AIOLOS]/Library/Artifacts/b3/b314794da984d3bc1e7a9aede1d9962f b/[AIOLOS]/Library/Artifacts/b3/b314794da984d3bc1e7a9aede1d9962f new file mode 100644 index 0000000000000000000000000000000000000000..19f0ea432d2ccd399a28b484c0b3953e7dc032ac Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b3/b314794da984d3bc1e7a9aede1d9962f differ diff --git a/[AIOLOS]/Library/Artifacts/b3/b3c809105ac550e0228ed4c505526d69 b/[AIOLOS]/Library/Artifacts/b3/b3c809105ac550e0228ed4c505526d69 new file mode 100644 index 0000000000000000000000000000000000000000..77684016821265fb6dcc9a03e898a176e6e6a9be Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b3/b3c809105ac550e0228ed4c505526d69 differ diff --git a/[AIOLOS]/Library/Artifacts/b4/b4267d00888bd8e7460318f1ae93d584 b/[AIOLOS]/Library/Artifacts/b4/b4267d00888bd8e7460318f1ae93d584 new file mode 100644 index 0000000000000000000000000000000000000000..ad11439907e14dadc2eb424243462191a5a0d579 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b4/b4267d00888bd8e7460318f1ae93d584 differ diff --git a/[AIOLOS]/Library/Artifacts/b4/b42d0ed7a750deefe22ad9bc0e06970b b/[AIOLOS]/Library/Artifacts/b4/b42d0ed7a750deefe22ad9bc0e06970b new file mode 100644 index 0000000000000000000000000000000000000000..bc6256053cb3eb0071c3c1e443c4de6d7ef263a2 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b4/b42d0ed7a750deefe22ad9bc0e06970b differ diff --git a/[AIOLOS]/Library/Artifacts/b4/b43db805a458e68f8948a5affc42c595 b/[AIOLOS]/Library/Artifacts/b4/b43db805a458e68f8948a5affc42c595 new file mode 100644 index 0000000000000000000000000000000000000000..3ff3911c8920677a134714220d5a5d58b1702ce7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b4/b43db805a458e68f8948a5affc42c595 differ diff --git a/[AIOLOS]/Library/Artifacts/b4/b4473ff9ded2581834a26a0bc2ce8f88 b/[AIOLOS]/Library/Artifacts/b4/b4473ff9ded2581834a26a0bc2ce8f88 new file mode 100644 index 0000000000000000000000000000000000000000..925de201ee1690ad8fd0926c58b8ed02c5bbb77f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b4/b4473ff9ded2581834a26a0bc2ce8f88 differ diff --git a/[AIOLOS]/Library/Artifacts/b4/b44db419f78c6ccc20622cf095e619d3 b/[AIOLOS]/Library/Artifacts/b4/b44db419f78c6ccc20622cf095e619d3 new file mode 100644 index 0000000000000000000000000000000000000000..375d71b2b07d4fef7e6a85e3d1b60a4c12041663 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b4/b44db419f78c6ccc20622cf095e619d3 differ diff --git a/[AIOLOS]/Library/Artifacts/b4/b468d21d1c635e931e0c8ae6519ec965 b/[AIOLOS]/Library/Artifacts/b4/b468d21d1c635e931e0c8ae6519ec965 new file mode 100644 index 0000000000000000000000000000000000000000..943e24c5c329f0005b7f7e8e851ab8d0a7dd5ff3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b4/b468d21d1c635e931e0c8ae6519ec965 differ diff --git a/[AIOLOS]/Library/Artifacts/b4/b4a8254f9420314feb9f5e6416476edf b/[AIOLOS]/Library/Artifacts/b4/b4a8254f9420314feb9f5e6416476edf new file mode 100644 index 0000000000000000000000000000000000000000..bc402260edd3150edd59e8aa1a04bdfd00c93afc Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b4/b4a8254f9420314feb9f5e6416476edf differ diff --git a/[AIOLOS]/Library/Artifacts/b4/b4b36ae59d0c443cb89865965174ed79 b/[AIOLOS]/Library/Artifacts/b4/b4b36ae59d0c443cb89865965174ed79 new file mode 100644 index 0000000000000000000000000000000000000000..a818aadf75ae1eeee0a91cdd66593fbafcd54c1e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b4/b4b36ae59d0c443cb89865965174ed79 differ diff --git a/[AIOLOS]/Library/Artifacts/b5/b50a91ddc98273b902def5fe911dc963 b/[AIOLOS]/Library/Artifacts/b5/b50a91ddc98273b902def5fe911dc963 new file mode 100644 index 0000000000000000000000000000000000000000..ad45c0ab1e71ea5cc8be18a97e56440c44266151 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b5/b50a91ddc98273b902def5fe911dc963 differ diff --git a/[AIOLOS]/Library/Artifacts/b5/b50d21761ff06cd1ce649d5db28cdb3c b/[AIOLOS]/Library/Artifacts/b5/b50d21761ff06cd1ce649d5db28cdb3c new file mode 100644 index 0000000000000000000000000000000000000000..dc1d9250b2623482c1ca129cfb840d51175b9c09 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b5/b50d21761ff06cd1ce649d5db28cdb3c differ diff --git a/[AIOLOS]/Library/Artifacts/b5/b56a62595984be6527a591c88f9f2b94 b/[AIOLOS]/Library/Artifacts/b5/b56a62595984be6527a591c88f9f2b94 new file mode 100644 index 0000000000000000000000000000000000000000..3a2e4ad4b0d67c057890d68ce8943aa6b8306e94 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b5/b56a62595984be6527a591c88f9f2b94 differ diff --git a/[AIOLOS]/Library/Artifacts/b5/b5a38521bc04902d5807988365c8f09d b/[AIOLOS]/Library/Artifacts/b5/b5a38521bc04902d5807988365c8f09d new file mode 100644 index 0000000000000000000000000000000000000000..e44059007a4465cfb1bdd8019ee01d707fc90834 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b5/b5a38521bc04902d5807988365c8f09d differ diff --git a/[AIOLOS]/Library/Artifacts/b5/b5b5432ba78e1c5000de0a7abf187b0e b/[AIOLOS]/Library/Artifacts/b5/b5b5432ba78e1c5000de0a7abf187b0e new file mode 100644 index 0000000000000000000000000000000000000000..0892fa5156944ff999c03c3fd30c853d4302718c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b5/b5b5432ba78e1c5000de0a7abf187b0e differ diff --git a/[AIOLOS]/Library/Artifacts/b6/b66796b2a25da241e7d1de04bc6f6c11 b/[AIOLOS]/Library/Artifacts/b6/b66796b2a25da241e7d1de04bc6f6c11 new file mode 100644 index 0000000000000000000000000000000000000000..2e45c5167674d9cf076f6bf23cae06a7e7960e3f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b6/b66796b2a25da241e7d1de04bc6f6c11 differ diff --git a/[AIOLOS]/Library/Artifacts/b7/b727e15138fb8df2ab6edba8056ec5de b/[AIOLOS]/Library/Artifacts/b7/b727e15138fb8df2ab6edba8056ec5de new file mode 100644 index 0000000000000000000000000000000000000000..cfad58722c8abe89f177ce8d15c3576356c0955a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b7/b727e15138fb8df2ab6edba8056ec5de differ diff --git a/[AIOLOS]/Library/Artifacts/b7/b72e334f89c745bf6446551da29a238b b/[AIOLOS]/Library/Artifacts/b7/b72e334f89c745bf6446551da29a238b new file mode 100644 index 0000000000000000000000000000000000000000..d1e3f7217a3b33f4c22fb23f2b820a222013840d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b7/b72e334f89c745bf6446551da29a238b differ diff --git a/[AIOLOS]/Library/Artifacts/b7/b740ca0e3dcd99a61c4880650b3a9b81 b/[AIOLOS]/Library/Artifacts/b7/b740ca0e3dcd99a61c4880650b3a9b81 new file mode 100644 index 0000000000000000000000000000000000000000..064fe089eb51b1f902d74ed6bb3d1ffb04ce9e33 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b7/b740ca0e3dcd99a61c4880650b3a9b81 differ diff --git a/[AIOLOS]/Library/Artifacts/b7/b77c171a4b60c12f66cb3fe15dc98e5f b/[AIOLOS]/Library/Artifacts/b7/b77c171a4b60c12f66cb3fe15dc98e5f new file mode 100644 index 0000000000000000000000000000000000000000..0b1e7936d3ce6149fb8cf96522eee93efc3ff8cd Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b7/b77c171a4b60c12f66cb3fe15dc98e5f differ diff --git a/[AIOLOS]/Library/Artifacts/b7/b7bbf6f2fec7742a47b60895c31fe652 b/[AIOLOS]/Library/Artifacts/b7/b7bbf6f2fec7742a47b60895c31fe652 new file mode 100644 index 0000000000000000000000000000000000000000..0e3f2ad121484e3138c684910df4dbc10ffa0faf Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b7/b7bbf6f2fec7742a47b60895c31fe652 differ diff --git a/[AIOLOS]/Library/Artifacts/b7/b7e1997c0115aeda660d4cd8cc9b76d1 b/[AIOLOS]/Library/Artifacts/b7/b7e1997c0115aeda660d4cd8cc9b76d1 new file mode 100644 index 0000000000000000000000000000000000000000..cc6d6a912641a3fbcf81785ec4b07bdb7f8e14bd Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b7/b7e1997c0115aeda660d4cd8cc9b76d1 differ diff --git a/[AIOLOS]/Library/Artifacts/b8/b82068bf249c5fef002b66e94609b75f b/[AIOLOS]/Library/Artifacts/b8/b82068bf249c5fef002b66e94609b75f new file mode 100644 index 0000000000000000000000000000000000000000..53e6d206638120a9e0de31642b08fbf0be51de3b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b8/b82068bf249c5fef002b66e94609b75f differ diff --git a/[AIOLOS]/Library/Artifacts/b8/b863a757a16932e370830d3f378b5445 b/[AIOLOS]/Library/Artifacts/b8/b863a757a16932e370830d3f378b5445 new file mode 100644 index 0000000000000000000000000000000000000000..b4a1cb27ddf1f7a5265bc20f2896068518400bbf Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b8/b863a757a16932e370830d3f378b5445 differ diff --git a/[AIOLOS]/Library/Artifacts/b8/b8fe5863a065a8f59a265dfc543e1ca1 b/[AIOLOS]/Library/Artifacts/b8/b8fe5863a065a8f59a265dfc543e1ca1 new file mode 100644 index 0000000000000000000000000000000000000000..e57512b895b41c1937ae9d279dbc5be1c1646263 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b8/b8fe5863a065a8f59a265dfc543e1ca1 differ diff --git a/[AIOLOS]/Library/Artifacts/b9/b9203267cbb50e80d2c6d3a65e30efb5 b/[AIOLOS]/Library/Artifacts/b9/b9203267cbb50e80d2c6d3a65e30efb5 new file mode 100644 index 0000000000000000000000000000000000000000..6cb664636670bf34c608aaafa39ade48fc536588 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b9/b9203267cbb50e80d2c6d3a65e30efb5 differ diff --git a/[AIOLOS]/Library/Artifacts/b9/b959c31907e0aaa8f5400fb4eadef660 b/[AIOLOS]/Library/Artifacts/b9/b959c31907e0aaa8f5400fb4eadef660 new file mode 100644 index 0000000000000000000000000000000000000000..27aef32614b5212ebc597c26ebfd00c6a5311349 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b9/b959c31907e0aaa8f5400fb4eadef660 differ diff --git a/[AIOLOS]/Library/Artifacts/b9/b9a633c4dc13dea051092be5da9b1938 b/[AIOLOS]/Library/Artifacts/b9/b9a633c4dc13dea051092be5da9b1938 new file mode 100644 index 0000000000000000000000000000000000000000..30a507394116216f3b228a957170efe91a5fe5cd Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b9/b9a633c4dc13dea051092be5da9b1938 differ diff --git a/[AIOLOS]/Library/Artifacts/b9/b9bff102c1e0abe1c5280756ea02a66f b/[AIOLOS]/Library/Artifacts/b9/b9bff102c1e0abe1c5280756ea02a66f new file mode 100644 index 0000000000000000000000000000000000000000..300b85906f3331980c4466bbfb2dd863081ad5ac Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b9/b9bff102c1e0abe1c5280756ea02a66f differ diff --git a/[AIOLOS]/Library/Artifacts/b9/b9c27477aa2b03882d45e2e9a7c47652 b/[AIOLOS]/Library/Artifacts/b9/b9c27477aa2b03882d45e2e9a7c47652 new file mode 100644 index 0000000000000000000000000000000000000000..7e92ad1898982ec18945c3110b4deae6051e3cd6 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b9/b9c27477aa2b03882d45e2e9a7c47652 differ diff --git a/[AIOLOS]/Library/Artifacts/b9/b9d1dda79561f2d077c6140429f7a923 b/[AIOLOS]/Library/Artifacts/b9/b9d1dda79561f2d077c6140429f7a923 new file mode 100644 index 0000000000000000000000000000000000000000..d1d139c8c83ee6991beab12f8d8f688141be610e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/b9/b9d1dda79561f2d077c6140429f7a923 differ diff --git a/[AIOLOS]/Library/Artifacts/ba/ba4586faecabb5104c9ffaf8beb71220 b/[AIOLOS]/Library/Artifacts/ba/ba4586faecabb5104c9ffaf8beb71220 new file mode 100644 index 0000000000000000000000000000000000000000..ff3e635b0669d79a1eb10a0fca44df11175f004d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ba/ba4586faecabb5104c9ffaf8beb71220 differ diff --git a/[AIOLOS]/Library/Artifacts/ba/ba4a00452dc2a0b9b8e6860adc30a5d2 b/[AIOLOS]/Library/Artifacts/ba/ba4a00452dc2a0b9b8e6860adc30a5d2 new file mode 100644 index 0000000000000000000000000000000000000000..489c015c7b97cd16d8fefa892865c8bf94a11202 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ba/ba4a00452dc2a0b9b8e6860adc30a5d2 differ diff --git a/[AIOLOS]/Library/Artifacts/ba/bade84ca704e67373fc11bfd5e0d0fd2 b/[AIOLOS]/Library/Artifacts/ba/bade84ca704e67373fc11bfd5e0d0fd2 new file mode 100644 index 0000000000000000000000000000000000000000..e9ab48f2cf26524f503915dc1594b4548b96bc21 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ba/bade84ca704e67373fc11bfd5e0d0fd2 differ diff --git a/[AIOLOS]/Library/Artifacts/ba/bae7d6cc9d73647f477b0e21ca976d1c b/[AIOLOS]/Library/Artifacts/ba/bae7d6cc9d73647f477b0e21ca976d1c new file mode 100644 index 0000000000000000000000000000000000000000..dc49ca38bea07961148089fe0f075f769bf6ada0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ba/bae7d6cc9d73647f477b0e21ca976d1c differ diff --git a/[AIOLOS]/Library/Artifacts/bb/bb13c113026ac24d49bbedeb487dcc5c b/[AIOLOS]/Library/Artifacts/bb/bb13c113026ac24d49bbedeb487dcc5c new file mode 100644 index 0000000000000000000000000000000000000000..c7b9e78b53f3794018c7443971601b70ec651bca Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bb/bb13c113026ac24d49bbedeb487dcc5c differ diff --git a/[AIOLOS]/Library/Artifacts/bb/bb43bcfd104931ea4a3eef65464eab4b b/[AIOLOS]/Library/Artifacts/bb/bb43bcfd104931ea4a3eef65464eab4b new file mode 100644 index 0000000000000000000000000000000000000000..531140ce5c33f8199039ca676ebde7bd3059c1ab Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bb/bb43bcfd104931ea4a3eef65464eab4b differ diff --git a/[AIOLOS]/Library/Artifacts/bb/bb5e8551c60cf06af899fe9c44bcbea5 b/[AIOLOS]/Library/Artifacts/bb/bb5e8551c60cf06af899fe9c44bcbea5 new file mode 100644 index 0000000000000000000000000000000000000000..a4196cedd849487e2630caf96a08c076786adc9d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bb/bb5e8551c60cf06af899fe9c44bcbea5 differ diff --git a/[AIOLOS]/Library/Artifacts/bc/bc1175b170c7dfbecf835e128536f4e5 b/[AIOLOS]/Library/Artifacts/bc/bc1175b170c7dfbecf835e128536f4e5 new file mode 100644 index 0000000000000000000000000000000000000000..d600a594e17293571bd8fcacd21435fedb17697e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bc/bc1175b170c7dfbecf835e128536f4e5 differ diff --git a/[AIOLOS]/Library/Artifacts/bc/bc30a87f8c66b096c070bb1d2be8d1f6 b/[AIOLOS]/Library/Artifacts/bc/bc30a87f8c66b096c070bb1d2be8d1f6 new file mode 100644 index 0000000000000000000000000000000000000000..f0855517684feb230771447feb5a0de74892f6af Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bc/bc30a87f8c66b096c070bb1d2be8d1f6 differ diff --git a/[AIOLOS]/Library/Artifacts/bc/bc3f81afe4c4dbd1166bc1d1e7762c2b b/[AIOLOS]/Library/Artifacts/bc/bc3f81afe4c4dbd1166bc1d1e7762c2b new file mode 100644 index 0000000000000000000000000000000000000000..9458e5219cddaf153042105690dbbf5f0a76a5d3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bc/bc3f81afe4c4dbd1166bc1d1e7762c2b differ diff --git a/[AIOLOS]/Library/Artifacts/bc/bc769f9e8d8443a7f10caab83db5ec50 b/[AIOLOS]/Library/Artifacts/bc/bc769f9e8d8443a7f10caab83db5ec50 new file mode 100644 index 0000000000000000000000000000000000000000..ecf10d19aa79169ae8ad08761c556b1800c8da5f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bc/bc769f9e8d8443a7f10caab83db5ec50 differ diff --git a/[AIOLOS]/Library/Artifacts/bc/bca9cf4764e9462dee2622a8b30beb8f b/[AIOLOS]/Library/Artifacts/bc/bca9cf4764e9462dee2622a8b30beb8f new file mode 100644 index 0000000000000000000000000000000000000000..fc02419f29b8ee0698c88da74815235c119f82a9 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bc/bca9cf4764e9462dee2622a8b30beb8f differ diff --git a/[AIOLOS]/Library/Artifacts/bc/bcc36ad00026d5111cb8c2884232c290 b/[AIOLOS]/Library/Artifacts/bc/bcc36ad00026d5111cb8c2884232c290 new file mode 100644 index 0000000000000000000000000000000000000000..2e1c906158edb9b3bcbe4641aaf7371ae8cf3145 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bc/bcc36ad00026d5111cb8c2884232c290 differ diff --git a/[AIOLOS]/Library/Artifacts/bd/bd74d7c321b365849ff83755f4e54879 b/[AIOLOS]/Library/Artifacts/bd/bd74d7c321b365849ff83755f4e54879 new file mode 100644 index 0000000000000000000000000000000000000000..f72cf67d7b354b73fec34ce3d3f3fa30c3017e05 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bd/bd74d7c321b365849ff83755f4e54879 differ diff --git a/[AIOLOS]/Library/Artifacts/bd/bd78377e4c24910d38745aa9025971a8 b/[AIOLOS]/Library/Artifacts/bd/bd78377e4c24910d38745aa9025971a8 new file mode 100644 index 0000000000000000000000000000000000000000..2425732c4eda13976d34a10ec9af9573576dc970 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bd/bd78377e4c24910d38745aa9025971a8 differ diff --git a/[AIOLOS]/Library/Artifacts/bd/bd8d5d206ae3e2155190bfc6b42c1609 b/[AIOLOS]/Library/Artifacts/bd/bd8d5d206ae3e2155190bfc6b42c1609 new file mode 100644 index 0000000000000000000000000000000000000000..51797637e0bebb558ecbdb1876b73840c889e45f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bd/bd8d5d206ae3e2155190bfc6b42c1609 differ diff --git a/[AIOLOS]/Library/Artifacts/bd/bdec872fb6e0281f89d1707c6b5047bc b/[AIOLOS]/Library/Artifacts/bd/bdec872fb6e0281f89d1707c6b5047bc new file mode 100644 index 0000000000000000000000000000000000000000..22ff2eb7a691971b52d178bfb0f53eef18b99ae5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bd/bdec872fb6e0281f89d1707c6b5047bc differ diff --git a/[AIOLOS]/Library/Artifacts/be/be3cf7468efbd1c58f034d85d72eeefd b/[AIOLOS]/Library/Artifacts/be/be3cf7468efbd1c58f034d85d72eeefd new file mode 100644 index 0000000000000000000000000000000000000000..26b8ac09bbab6ee085b8555599351bdad3f77f4f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/be/be3cf7468efbd1c58f034d85d72eeefd differ diff --git a/[AIOLOS]/Library/Artifacts/be/be87c1486d3d4550654ccd14ca3bb853 b/[AIOLOS]/Library/Artifacts/be/be87c1486d3d4550654ccd14ca3bb853 new file mode 100644 index 0000000000000000000000000000000000000000..ba7920c33c5e4bffaa009037b6fc245cde4e21b4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/be/be87c1486d3d4550654ccd14ca3bb853 differ diff --git a/[AIOLOS]/Library/Artifacts/be/bed41850ecd1f0063a55078f1cb0891d b/[AIOLOS]/Library/Artifacts/be/bed41850ecd1f0063a55078f1cb0891d new file mode 100644 index 0000000000000000000000000000000000000000..c674c67e0eebed84ff7710627cbdcb19b07c1c16 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/be/bed41850ecd1f0063a55078f1cb0891d differ diff --git a/[AIOLOS]/Library/Artifacts/bf/bf18cc74c4aee7f09673e10f8a0ee5b1 b/[AIOLOS]/Library/Artifacts/bf/bf18cc74c4aee7f09673e10f8a0ee5b1 new file mode 100644 index 0000000000000000000000000000000000000000..baf371fc67bc659819f73de20e026ae397bb6a0b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bf/bf18cc74c4aee7f09673e10f8a0ee5b1 differ diff --git a/[AIOLOS]/Library/Artifacts/bf/bf53ff41bd23a54adc1a94e393cd056a b/[AIOLOS]/Library/Artifacts/bf/bf53ff41bd23a54adc1a94e393cd056a new file mode 100644 index 0000000000000000000000000000000000000000..b4c491c4e0822db3cfe72aded7818f70d20dae17 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bf/bf53ff41bd23a54adc1a94e393cd056a differ diff --git a/[AIOLOS]/Library/Artifacts/bf/bfa4acb54ef6cb78abf07aa94cfb6bca b/[AIOLOS]/Library/Artifacts/bf/bfa4acb54ef6cb78abf07aa94cfb6bca new file mode 100644 index 0000000000000000000000000000000000000000..9664fb22d2b938a8f94b4947cc338e95703e4605 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bf/bfa4acb54ef6cb78abf07aa94cfb6bca differ diff --git a/[AIOLOS]/Library/Artifacts/bf/bfe83861acc7d2731ade0d9b9d3eb07f b/[AIOLOS]/Library/Artifacts/bf/bfe83861acc7d2731ade0d9b9d3eb07f new file mode 100644 index 0000000000000000000000000000000000000000..4d42d0318852cf3f1200da0664608babe4c786d3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/bf/bfe83861acc7d2731ade0d9b9d3eb07f differ diff --git a/[AIOLOS]/Library/Artifacts/c0/c047292f363dfc1f56649c040dba5325 b/[AIOLOS]/Library/Artifacts/c0/c047292f363dfc1f56649c040dba5325 new file mode 100644 index 0000000000000000000000000000000000000000..90ab2829508a4e4183395e8d26fbc439fd75dfc4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c0/c047292f363dfc1f56649c040dba5325 differ diff --git a/[AIOLOS]/Library/Artifacts/c0/c088456eed7579c994572ed3e2d8da69 b/[AIOLOS]/Library/Artifacts/c0/c088456eed7579c994572ed3e2d8da69 new file mode 100644 index 0000000000000000000000000000000000000000..ef5836081b08870e9d0a0b592c87665b50baf71f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c0/c088456eed7579c994572ed3e2d8da69 differ diff --git a/[AIOLOS]/Library/Artifacts/c0/c0fc0946cff1635082a6d564864b353e b/[AIOLOS]/Library/Artifacts/c0/c0fc0946cff1635082a6d564864b353e new file mode 100644 index 0000000000000000000000000000000000000000..c69cac8ddb6c95b7c7985cac35e748727881c49a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c0/c0fc0946cff1635082a6d564864b353e differ diff --git a/[AIOLOS]/Library/Artifacts/c1/c139abd0b4690ab7f20e9369ed6372fd b/[AIOLOS]/Library/Artifacts/c1/c139abd0b4690ab7f20e9369ed6372fd new file mode 100644 index 0000000000000000000000000000000000000000..6ac71221e3a13001ae74e8e48eb94aa82a31933d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c1/c139abd0b4690ab7f20e9369ed6372fd differ diff --git a/[AIOLOS]/Library/Artifacts/c1/c1681a01ff78d0c5038acb6e118c2b59 b/[AIOLOS]/Library/Artifacts/c1/c1681a01ff78d0c5038acb6e118c2b59 new file mode 100644 index 0000000000000000000000000000000000000000..304965a6878ff71526373cdd2252b91fa017e78d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c1/c1681a01ff78d0c5038acb6e118c2b59 differ diff --git a/[AIOLOS]/Library/Artifacts/c1/c179a0bc6f8025d47c4a51cd8a159372 b/[AIOLOS]/Library/Artifacts/c1/c179a0bc6f8025d47c4a51cd8a159372 new file mode 100644 index 0000000000000000000000000000000000000000..66eaa36ebf1712f9c8409b4e520e67ee5ac6f63f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c1/c179a0bc6f8025d47c4a51cd8a159372 differ diff --git a/[AIOLOS]/Library/Artifacts/c2/c228e3072828f99b7d04349b20b062a2 b/[AIOLOS]/Library/Artifacts/c2/c228e3072828f99b7d04349b20b062a2 new file mode 100644 index 0000000000000000000000000000000000000000..63401e2b6d515845b66d564f31cc6e026e455a06 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c2/c228e3072828f99b7d04349b20b062a2 differ diff --git a/[AIOLOS]/Library/Artifacts/c2/c25641e550baabcaddb8b548b98d004d b/[AIOLOS]/Library/Artifacts/c2/c25641e550baabcaddb8b548b98d004d new file mode 100644 index 0000000000000000000000000000000000000000..7a322df37ec0615a08cda4248adb2cab8401ba0e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c2/c25641e550baabcaddb8b548b98d004d differ diff --git a/[AIOLOS]/Library/Artifacts/c2/c2683679c8fc3026753b54ee0195eaf0 b/[AIOLOS]/Library/Artifacts/c2/c2683679c8fc3026753b54ee0195eaf0 new file mode 100644 index 0000000000000000000000000000000000000000..52566bb04d986662733365de708dff3f31a400cb Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c2/c2683679c8fc3026753b54ee0195eaf0 differ diff --git a/[AIOLOS]/Library/Artifacts/c2/c2885fc189cb9c8e96726698cb48e84d b/[AIOLOS]/Library/Artifacts/c2/c2885fc189cb9c8e96726698cb48e84d new file mode 100644 index 0000000000000000000000000000000000000000..5731dee74cc71213bb434bfadcb1d6f13ce475b2 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c2/c2885fc189cb9c8e96726698cb48e84d differ diff --git a/[AIOLOS]/Library/Artifacts/c2/c2a6d3a9f996702c1b08877345fb7843 b/[AIOLOS]/Library/Artifacts/c2/c2a6d3a9f996702c1b08877345fb7843 new file mode 100644 index 0000000000000000000000000000000000000000..71ebb488ebaf6c14edf81c8f0b10f9b19624e348 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c2/c2a6d3a9f996702c1b08877345fb7843 differ diff --git a/[AIOLOS]/Library/Artifacts/c2/c2ea4b62efb7f946e57b9eed68e517b3 b/[AIOLOS]/Library/Artifacts/c2/c2ea4b62efb7f946e57b9eed68e517b3 new file mode 100644 index 0000000000000000000000000000000000000000..ad11f24e307aaa7faed3bbc00b93edbaf7b0baa7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c2/c2ea4b62efb7f946e57b9eed68e517b3 differ diff --git a/[AIOLOS]/Library/Artifacts/c3/c34b60f7d8f5ed05113e83ac075e4def b/[AIOLOS]/Library/Artifacts/c3/c34b60f7d8f5ed05113e83ac075e4def new file mode 100644 index 0000000000000000000000000000000000000000..ba994585afbdf60aaa88326e4d6d6851f117a025 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c3/c34b60f7d8f5ed05113e83ac075e4def differ diff --git a/[AIOLOS]/Library/Artifacts/c4/c40ca1baa94d433cddaf67abbe059d47 b/[AIOLOS]/Library/Artifacts/c4/c40ca1baa94d433cddaf67abbe059d47 new file mode 100644 index 0000000000000000000000000000000000000000..a9e94db0ed1181993e91254e8f3247b930f10142 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c4/c40ca1baa94d433cddaf67abbe059d47 differ diff --git a/[AIOLOS]/Library/Artifacts/c4/c46d7c046f1c98c2d3f891f6596f6ca6 b/[AIOLOS]/Library/Artifacts/c4/c46d7c046f1c98c2d3f891f6596f6ca6 new file mode 100644 index 0000000000000000000000000000000000000000..bc778d00d91b272a88b356c2e7d3af6bd58a81b9 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c4/c46d7c046f1c98c2d3f891f6596f6ca6 differ diff --git a/[AIOLOS]/Library/Artifacts/c4/c4950310d4e90209da2252de6c3fce12 b/[AIOLOS]/Library/Artifacts/c4/c4950310d4e90209da2252de6c3fce12 new file mode 100644 index 0000000000000000000000000000000000000000..7e6d5570c5e275450fc3444da0185673da92f3ea Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c4/c4950310d4e90209da2252de6c3fce12 differ diff --git a/[AIOLOS]/Library/Artifacts/c4/c4f92919ee4cbfa9c9f62d6590c31742 b/[AIOLOS]/Library/Artifacts/c4/c4f92919ee4cbfa9c9f62d6590c31742 new file mode 100644 index 0000000000000000000000000000000000000000..ee4e57579ecc3306ef7bcca3d4668041bed10d07 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c4/c4f92919ee4cbfa9c9f62d6590c31742 differ diff --git a/[AIOLOS]/Library/Artifacts/c5/c50571696208117eb793c91c43134191 b/[AIOLOS]/Library/Artifacts/c5/c50571696208117eb793c91c43134191 new file mode 100644 index 0000000000000000000000000000000000000000..f998cc35f4c94b38c742f63307a809afaf54d555 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c5/c50571696208117eb793c91c43134191 differ diff --git a/[AIOLOS]/Library/Artifacts/c5/c521565128640f33202af084c514f4f0 b/[AIOLOS]/Library/Artifacts/c5/c521565128640f33202af084c514f4f0 new file mode 100644 index 0000000000000000000000000000000000000000..7aa037f9aa810aa0a592c7996d79193f2263fb10 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c5/c521565128640f33202af084c514f4f0 differ diff --git a/[AIOLOS]/Library/Artifacts/c5/c598491cd3843becc25897db6d8942bc b/[AIOLOS]/Library/Artifacts/c5/c598491cd3843becc25897db6d8942bc new file mode 100644 index 0000000000000000000000000000000000000000..0c7d67f654b9db22721c3b17972b15c8d3107e9e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c5/c598491cd3843becc25897db6d8942bc differ diff --git a/[AIOLOS]/Library/Artifacts/c6/c60daa2b82d47c6e6adb3f5c3470dc6f b/[AIOLOS]/Library/Artifacts/c6/c60daa2b82d47c6e6adb3f5c3470dc6f new file mode 100644 index 0000000000000000000000000000000000000000..619e65681e53802ae09862e2e235f59c4633c437 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c6/c60daa2b82d47c6e6adb3f5c3470dc6f differ diff --git a/[AIOLOS]/Library/Artifacts/c7/c70a4ab0deec8be012cd9a600a3a062d b/[AIOLOS]/Library/Artifacts/c7/c70a4ab0deec8be012cd9a600a3a062d new file mode 100644 index 0000000000000000000000000000000000000000..ed198025a8ff366f0a7ac423ccb1cd977bd291da Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c7/c70a4ab0deec8be012cd9a600a3a062d differ diff --git a/[AIOLOS]/Library/Artifacts/c7/c76846f04dddd5a8cc13df64d66872cc b/[AIOLOS]/Library/Artifacts/c7/c76846f04dddd5a8cc13df64d66872cc new file mode 100644 index 0000000000000000000000000000000000000000..992405addac5437e2edc87d624aa28d66cc5ad27 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c7/c76846f04dddd5a8cc13df64d66872cc differ diff --git a/[AIOLOS]/Library/Artifacts/c8/c85bb4e30b16390bba79abe0798acd08 b/[AIOLOS]/Library/Artifacts/c8/c85bb4e30b16390bba79abe0798acd08 new file mode 100644 index 0000000000000000000000000000000000000000..25faf9c32ed977e1ceb140b5d11d487ca78e6db5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c8/c85bb4e30b16390bba79abe0798acd08 differ diff --git a/[AIOLOS]/Library/Artifacts/c8/c8cc1f675cd9d6eb24ec0c3ae7f88cfa b/[AIOLOS]/Library/Artifacts/c8/c8cc1f675cd9d6eb24ec0c3ae7f88cfa new file mode 100644 index 0000000000000000000000000000000000000000..cc8f1992db1cf1c325d44e5c541403449cf09183 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c8/c8cc1f675cd9d6eb24ec0c3ae7f88cfa differ diff --git a/[AIOLOS]/Library/Artifacts/c9/c94b547936dc20867b0c0742aab53eee b/[AIOLOS]/Library/Artifacts/c9/c94b547936dc20867b0c0742aab53eee new file mode 100644 index 0000000000000000000000000000000000000000..e5df6bc7a65e74b6f6c56396d13b321b51a711bf Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c9/c94b547936dc20867b0c0742aab53eee differ diff --git a/[AIOLOS]/Library/Artifacts/c9/c997e7cb203ca2959ed399c0ab432b85 b/[AIOLOS]/Library/Artifacts/c9/c997e7cb203ca2959ed399c0ab432b85 new file mode 100644 index 0000000000000000000000000000000000000000..460aaeda7d5ca67b185870409b691986ff453c5f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c9/c997e7cb203ca2959ed399c0ab432b85 differ diff --git a/[AIOLOS]/Library/Artifacts/c9/c9b16910c739ae9f5813182840c568d7 b/[AIOLOS]/Library/Artifacts/c9/c9b16910c739ae9f5813182840c568d7 new file mode 100644 index 0000000000000000000000000000000000000000..7d4865c1eeb9a8ad5c82257af6aaf87e1ac29555 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/c9/c9b16910c739ae9f5813182840c568d7 differ diff --git a/[AIOLOS]/Library/Artifacts/ca/ca2600ee432768899991a9b93ac28e1b b/[AIOLOS]/Library/Artifacts/ca/ca2600ee432768899991a9b93ac28e1b new file mode 100644 index 0000000000000000000000000000000000000000..d7c429e540a85038d0811b5d6c5237b61eefe549 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ca/ca2600ee432768899991a9b93ac28e1b differ diff --git a/[AIOLOS]/Library/Artifacts/ca/ca4a76f2a4a9381bcbd8d291e90b96d4 b/[AIOLOS]/Library/Artifacts/ca/ca4a76f2a4a9381bcbd8d291e90b96d4 new file mode 100644 index 0000000000000000000000000000000000000000..95ed4a42c13478319c3230c5019e45eaa545f7c7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ca/ca4a76f2a4a9381bcbd8d291e90b96d4 differ diff --git a/[AIOLOS]/Library/Artifacts/ca/ca5576ba6070c1657ea2dcf42b394cb7 b/[AIOLOS]/Library/Artifacts/ca/ca5576ba6070c1657ea2dcf42b394cb7 new file mode 100644 index 0000000000000000000000000000000000000000..7e16b4b2d2d02c9cfa32fc5e3ad9c2c1292f5d3c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ca/ca5576ba6070c1657ea2dcf42b394cb7 differ diff --git a/[AIOLOS]/Library/Artifacts/ca/ca898ec5bf858146066ed1dcbfb45130 b/[AIOLOS]/Library/Artifacts/ca/ca898ec5bf858146066ed1dcbfb45130 new file mode 100644 index 0000000000000000000000000000000000000000..909fade8640f1aca9d21a57c4cb088ab8e871b7d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ca/ca898ec5bf858146066ed1dcbfb45130 differ diff --git a/[AIOLOS]/Library/Artifacts/cc/ccb975a6080e5f9b137398674cfbcb6e b/[AIOLOS]/Library/Artifacts/cc/ccb975a6080e5f9b137398674cfbcb6e new file mode 100644 index 0000000000000000000000000000000000000000..f3fc214042f7efffb652612735d3cd3327058699 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/cc/ccb975a6080e5f9b137398674cfbcb6e differ diff --git a/[AIOLOS]/Library/Artifacts/cd/cd54cf5b04fa0476ba8b729900944928 b/[AIOLOS]/Library/Artifacts/cd/cd54cf5b04fa0476ba8b729900944928 new file mode 100644 index 0000000000000000000000000000000000000000..56b63b3f98cd44809259f253a93e3d9d823eaaef Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/cd/cd54cf5b04fa0476ba8b729900944928 differ diff --git a/[AIOLOS]/Library/Artifacts/cd/cd6bffb017ab7315b749bca4e7b81d1b b/[AIOLOS]/Library/Artifacts/cd/cd6bffb017ab7315b749bca4e7b81d1b new file mode 100644 index 0000000000000000000000000000000000000000..1e865457440011d9d89668c769642195e5879026 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/cd/cd6bffb017ab7315b749bca4e7b81d1b differ diff --git a/[AIOLOS]/Library/Artifacts/cd/cd769f9b4bb637853bd288838f810a62 b/[AIOLOS]/Library/Artifacts/cd/cd769f9b4bb637853bd288838f810a62 new file mode 100644 index 0000000000000000000000000000000000000000..fa050bfab8954b26575c03a6dc3397023babe19c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/cd/cd769f9b4bb637853bd288838f810a62 differ diff --git a/[AIOLOS]/Library/Artifacts/cd/cdd752143ba965dfb7543ff024d2d592 b/[AIOLOS]/Library/Artifacts/cd/cdd752143ba965dfb7543ff024d2d592 new file mode 100644 index 0000000000000000000000000000000000000000..86f582c1ba18e388205a3542dd1d57121537908e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/cd/cdd752143ba965dfb7543ff024d2d592 differ diff --git a/[AIOLOS]/Library/Artifacts/cd/cdd81c16f0988bb133d5ae1a444dd43d b/[AIOLOS]/Library/Artifacts/cd/cdd81c16f0988bb133d5ae1a444dd43d new file mode 100644 index 0000000000000000000000000000000000000000..83966cc90a6a7d58d3ba5ede1632f3b447c0d930 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/cd/cdd81c16f0988bb133d5ae1a444dd43d differ diff --git a/[AIOLOS]/Library/Artifacts/ce/ce56c50ca15fdf8802d9799029b62ad5 b/[AIOLOS]/Library/Artifacts/ce/ce56c50ca15fdf8802d9799029b62ad5 new file mode 100644 index 0000000000000000000000000000000000000000..04f98cab3bdbf2064e1ca69d0a4868bb0edd390a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ce/ce56c50ca15fdf8802d9799029b62ad5 differ diff --git a/[AIOLOS]/Library/Artifacts/cf/cf42b0f29b1031feb5b343a2b897496e b/[AIOLOS]/Library/Artifacts/cf/cf42b0f29b1031feb5b343a2b897496e new file mode 100644 index 0000000000000000000000000000000000000000..f9ec17989e01730d4d4a3c70b2b9a77b9a6fc93d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/cf/cf42b0f29b1031feb5b343a2b897496e differ diff --git a/[AIOLOS]/Library/Artifacts/cf/cf4446e87594f56deda453550ba885ca b/[AIOLOS]/Library/Artifacts/cf/cf4446e87594f56deda453550ba885ca new file mode 100644 index 0000000000000000000000000000000000000000..032cd0504dce741c097a45ee1fabde6d26072a41 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/cf/cf4446e87594f56deda453550ba885ca differ diff --git a/[AIOLOS]/Library/Artifacts/d1/d146f459b58b244ff809e0957ffeb2ec b/[AIOLOS]/Library/Artifacts/d1/d146f459b58b244ff809e0957ffeb2ec new file mode 100644 index 0000000000000000000000000000000000000000..6950d99f06080f1ecd52f23bfcd701d280dbb6f5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d1/d146f459b58b244ff809e0957ffeb2ec differ diff --git a/[AIOLOS]/Library/Artifacts/d1/d162c05a83af7b698a2cb22e5037bce9 b/[AIOLOS]/Library/Artifacts/d1/d162c05a83af7b698a2cb22e5037bce9 new file mode 100644 index 0000000000000000000000000000000000000000..10f05e2693a833495b6ac77451d2aabdc64cf8cf Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d1/d162c05a83af7b698a2cb22e5037bce9 differ diff --git a/[AIOLOS]/Library/Artifacts/d1/d1c4808ab978a4e9ec8a485b251d310a b/[AIOLOS]/Library/Artifacts/d1/d1c4808ab978a4e9ec8a485b251d310a new file mode 100644 index 0000000000000000000000000000000000000000..39f9a5f8aae320c5a6f2b2fbb32884b606a3a959 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d1/d1c4808ab978a4e9ec8a485b251d310a differ diff --git a/[AIOLOS]/Library/Artifacts/d1/d1d0897de25a2ed5ba0796b741897c0f b/[AIOLOS]/Library/Artifacts/d1/d1d0897de25a2ed5ba0796b741897c0f new file mode 100644 index 0000000000000000000000000000000000000000..81267c54bbb8bb832e62603725d758f7660f95b7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d1/d1d0897de25a2ed5ba0796b741897c0f differ diff --git a/[AIOLOS]/Library/Artifacts/d1/d1d6a8f99f1659020fd8d99ee8d0dec5 b/[AIOLOS]/Library/Artifacts/d1/d1d6a8f99f1659020fd8d99ee8d0dec5 new file mode 100644 index 0000000000000000000000000000000000000000..a4cb436dbf2fe4fcedca080d7d537c9cf555fed4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d1/d1d6a8f99f1659020fd8d99ee8d0dec5 differ diff --git a/[AIOLOS]/Library/Artifacts/d1/d1d6afe3a407f739e25afedb656f8112 b/[AIOLOS]/Library/Artifacts/d1/d1d6afe3a407f739e25afedb656f8112 new file mode 100644 index 0000000000000000000000000000000000000000..f7c9c6e6898ec41445e9e409b61a7870444f2bea Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d1/d1d6afe3a407f739e25afedb656f8112 differ diff --git a/[AIOLOS]/Library/Artifacts/d1/d1f89113e5c975532cd7eaea0fdf4bd0 b/[AIOLOS]/Library/Artifacts/d1/d1f89113e5c975532cd7eaea0fdf4bd0 new file mode 100644 index 0000000000000000000000000000000000000000..99083db91abf424df33b4fbe2e406e1a7362133c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d1/d1f89113e5c975532cd7eaea0fdf4bd0 differ diff --git a/[AIOLOS]/Library/Artifacts/d2/d2561d5beac43d98910aec0a89183220 b/[AIOLOS]/Library/Artifacts/d2/d2561d5beac43d98910aec0a89183220 new file mode 100644 index 0000000000000000000000000000000000000000..ab7cfb4b891c2f47609803064fde797825c0474b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d2/d2561d5beac43d98910aec0a89183220 differ diff --git a/[AIOLOS]/Library/Artifacts/d3/d3007062b25b4feed6827ba26b21c519 b/[AIOLOS]/Library/Artifacts/d3/d3007062b25b4feed6827ba26b21c519 new file mode 100644 index 0000000000000000000000000000000000000000..6a50740fe4f09abc39cad214152b419c9c14860e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d3/d3007062b25b4feed6827ba26b21c519 differ diff --git a/[AIOLOS]/Library/Artifacts/d3/d3246ac8d4a277ac4d0f1dda741e7dd4 b/[AIOLOS]/Library/Artifacts/d3/d3246ac8d4a277ac4d0f1dda741e7dd4 new file mode 100644 index 0000000000000000000000000000000000000000..48ab83a941894cefbd6ee3b0029a423e79b11dbb Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d3/d3246ac8d4a277ac4d0f1dda741e7dd4 differ diff --git a/[AIOLOS]/Library/Artifacts/d3/d33da792344c8865623fcbe250e555f4 b/[AIOLOS]/Library/Artifacts/d3/d33da792344c8865623fcbe250e555f4 new file mode 100644 index 0000000000000000000000000000000000000000..b2cacef36158e82682df2babd9f7253d69550c55 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d3/d33da792344c8865623fcbe250e555f4 differ diff --git a/[AIOLOS]/Library/Artifacts/d3/d38872bbac9ed4f4e7b88daf398616ed b/[AIOLOS]/Library/Artifacts/d3/d38872bbac9ed4f4e7b88daf398616ed new file mode 100644 index 0000000000000000000000000000000000000000..1fbe812a2335bfe6f883cfa0c39dde79f1cb3eab Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d3/d38872bbac9ed4f4e7b88daf398616ed differ diff --git a/[AIOLOS]/Library/Artifacts/d3/d3d8f1001d8600ba4c11e21507eb35d2 b/[AIOLOS]/Library/Artifacts/d3/d3d8f1001d8600ba4c11e21507eb35d2 new file mode 100644 index 0000000000000000000000000000000000000000..d3dc12c62e2ee3c49b067c281f0f678a281b8879 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d3/d3d8f1001d8600ba4c11e21507eb35d2 differ diff --git a/[AIOLOS]/Library/Artifacts/d4/d43c8d62321ed8f0c97aba60d1828c3b b/[AIOLOS]/Library/Artifacts/d4/d43c8d62321ed8f0c97aba60d1828c3b new file mode 100644 index 0000000000000000000000000000000000000000..375e100eedd752fad33ec2c1ed8b7171ddd5bf09 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d4/d43c8d62321ed8f0c97aba60d1828c3b differ diff --git a/[AIOLOS]/Library/Artifacts/d4/d43f5fe67af4380a4ff4dbef4a4faea6 b/[AIOLOS]/Library/Artifacts/d4/d43f5fe67af4380a4ff4dbef4a4faea6 new file mode 100644 index 0000000000000000000000000000000000000000..a512f2131f4f2df34ff2280b42091aefc68846a0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d4/d43f5fe67af4380a4ff4dbef4a4faea6 differ diff --git a/[AIOLOS]/Library/Artifacts/d4/d4804b7c1ea19ba949611c774245650d b/[AIOLOS]/Library/Artifacts/d4/d4804b7c1ea19ba949611c774245650d new file mode 100644 index 0000000000000000000000000000000000000000..b0a920c06101169fdabe9e913ac4eb87047b7bdd Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d4/d4804b7c1ea19ba949611c774245650d differ diff --git a/[AIOLOS]/Library/Artifacts/d4/d493c1c30811724dba09517931830ce5 b/[AIOLOS]/Library/Artifacts/d4/d493c1c30811724dba09517931830ce5 new file mode 100644 index 0000000000000000000000000000000000000000..1538147a6a080853fb2304680d422f54dcf47615 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d4/d493c1c30811724dba09517931830ce5 differ diff --git a/[AIOLOS]/Library/Artifacts/d4/d4e75c8bf8119d9127eb208f8fb1b0e9 b/[AIOLOS]/Library/Artifacts/d4/d4e75c8bf8119d9127eb208f8fb1b0e9 new file mode 100644 index 0000000000000000000000000000000000000000..d7554f022accee5e0753f834d2f5686821107102 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d4/d4e75c8bf8119d9127eb208f8fb1b0e9 differ diff --git a/[AIOLOS]/Library/Artifacts/d5/d5d15b7b8a59754ede2717d7aa5f643d b/[AIOLOS]/Library/Artifacts/d5/d5d15b7b8a59754ede2717d7aa5f643d new file mode 100644 index 0000000000000000000000000000000000000000..132c7aea3465d2515eb328911960e683ae56537e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d5/d5d15b7b8a59754ede2717d7aa5f643d differ diff --git a/[AIOLOS]/Library/Artifacts/d6/d6be8ceaed7e79c547e9a14cde705552 b/[AIOLOS]/Library/Artifacts/d6/d6be8ceaed7e79c547e9a14cde705552 new file mode 100644 index 0000000000000000000000000000000000000000..52b388db639b57339a796fe1471a3cb0185a2461 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d6/d6be8ceaed7e79c547e9a14cde705552 differ diff --git a/[AIOLOS]/Library/Artifacts/d6/d6c8886ff34a4c7f0d306c6aa28850c6 b/[AIOLOS]/Library/Artifacts/d6/d6c8886ff34a4c7f0d306c6aa28850c6 new file mode 100644 index 0000000000000000000000000000000000000000..c277d567907b908a79fb7e5db757a18cbaa6fb09 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d6/d6c8886ff34a4c7f0d306c6aa28850c6 differ diff --git a/[AIOLOS]/Library/Artifacts/d6/d6d364c78e0b9e6349281a8e237910ba b/[AIOLOS]/Library/Artifacts/d6/d6d364c78e0b9e6349281a8e237910ba new file mode 100644 index 0000000000000000000000000000000000000000..511064afcf840cef2e970cc355be9cfa0415e7f0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d6/d6d364c78e0b9e6349281a8e237910ba differ diff --git a/[AIOLOS]/Library/Artifacts/d7/d73e2d37811cf97d3a7513a24fdd02f6 b/[AIOLOS]/Library/Artifacts/d7/d73e2d37811cf97d3a7513a24fdd02f6 new file mode 100644 index 0000000000000000000000000000000000000000..f51875bd43d98194408a3a3e7b119db37e4d07b1 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d7/d73e2d37811cf97d3a7513a24fdd02f6 differ diff --git a/[AIOLOS]/Library/Artifacts/d7/d77d0460a02d993fcb6cb219ea479119 b/[AIOLOS]/Library/Artifacts/d7/d77d0460a02d993fcb6cb219ea479119 deleted file mode 100644 index 4ea66dbeed1dea823d81be5e48e5ba5b8a2f6af4..0000000000000000000000000000000000000000 Binary files a/[AIOLOS]/Library/Artifacts/d7/d77d0460a02d993fcb6cb219ea479119 and /dev/null differ diff --git a/[AIOLOS]/Library/Artifacts/d7/d7e62f757d14bd07c2342dd00f519bea b/[AIOLOS]/Library/Artifacts/d7/d7e62f757d14bd07c2342dd00f519bea new file mode 100644 index 0000000000000000000000000000000000000000..badc9e16bfabfb88b8e23d84b687c30d2df247c8 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d7/d7e62f757d14bd07c2342dd00f519bea differ diff --git a/[AIOLOS]/Library/Artifacts/d7/d7fa7e3de0c4aea7a283d4ee1d29370e b/[AIOLOS]/Library/Artifacts/d7/d7fa7e3de0c4aea7a283d4ee1d29370e new file mode 100644 index 0000000000000000000000000000000000000000..6fd87b997bc3033465cddf97cdb212c0a7ca099d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d7/d7fa7e3de0c4aea7a283d4ee1d29370e differ diff --git a/[AIOLOS]/Library/Artifacts/d8/d84603e22a2964bb4e01eea86c189897 b/[AIOLOS]/Library/Artifacts/d8/d84603e22a2964bb4e01eea86c189897 new file mode 100644 index 0000000000000000000000000000000000000000..7f611c0b6f8dc2d928b4359cbbed4dbdfa6abcae Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d8/d84603e22a2964bb4e01eea86c189897 differ diff --git a/[AIOLOS]/Library/Artifacts/d8/d8861c9033453e48387973a2d435911d b/[AIOLOS]/Library/Artifacts/d8/d8861c9033453e48387973a2d435911d new file mode 100644 index 0000000000000000000000000000000000000000..c780b8f1841f920894f48901a26fc7c74d44ba4e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d8/d8861c9033453e48387973a2d435911d differ diff --git a/[AIOLOS]/Library/Artifacts/d8/d8944728c8f48d0bc96fad279a405d43 b/[AIOLOS]/Library/Artifacts/d8/d8944728c8f48d0bc96fad279a405d43 new file mode 100644 index 0000000000000000000000000000000000000000..deaa034dceca5eb94e588e2648dd8e29a571bb03 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d8/d8944728c8f48d0bc96fad279a405d43 differ diff --git a/[AIOLOS]/Library/Artifacts/d8/d8daa575f1230c9ccc6ce470d6a56aaf b/[AIOLOS]/Library/Artifacts/d8/d8daa575f1230c9ccc6ce470d6a56aaf new file mode 100644 index 0000000000000000000000000000000000000000..e1e6501ba1a765877c582b4e2d0665828a4e957f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d8/d8daa575f1230c9ccc6ce470d6a56aaf differ diff --git a/[AIOLOS]/Library/Artifacts/d8/d8e9ac17cc3e3b9ced8562815a1a677d b/[AIOLOS]/Library/Artifacts/d8/d8e9ac17cc3e3b9ced8562815a1a677d new file mode 100644 index 0000000000000000000000000000000000000000..0876ed4594a9740524eedb01050e4688118e85ce Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d8/d8e9ac17cc3e3b9ced8562815a1a677d differ diff --git a/[AIOLOS]/Library/Artifacts/d9/d916a7da0a58ab437b24ca6d87d21007 b/[AIOLOS]/Library/Artifacts/d9/d916a7da0a58ab437b24ca6d87d21007 new file mode 100644 index 0000000000000000000000000000000000000000..bad027de5cceab197e8e4d824f4253bb300e0e0c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d9/d916a7da0a58ab437b24ca6d87d21007 differ diff --git a/[AIOLOS]/Library/Artifacts/d9/d94af297068af086611b03bb71fce9ad b/[AIOLOS]/Library/Artifacts/d9/d94af297068af086611b03bb71fce9ad new file mode 100644 index 0000000000000000000000000000000000000000..2861203df8ba5de856f0683c26c8b2acd179b7c3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d9/d94af297068af086611b03bb71fce9ad differ diff --git a/[AIOLOS]/Library/Artifacts/d9/d97db71583760e3163f0957917baa46d b/[AIOLOS]/Library/Artifacts/d9/d97db71583760e3163f0957917baa46d new file mode 100644 index 0000000000000000000000000000000000000000..d6a0dceb636cd6e93bcc724fb63c877efaf3ccf4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/d9/d97db71583760e3163f0957917baa46d differ diff --git a/[AIOLOS]/Library/Artifacts/da/da6cba406b3ecf350500045c8b3cd269 b/[AIOLOS]/Library/Artifacts/da/da6cba406b3ecf350500045c8b3cd269 new file mode 100644 index 0000000000000000000000000000000000000000..7c66c9825feba0f5a7dc1fd88bbb1b42dd42cd33 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/da/da6cba406b3ecf350500045c8b3cd269 differ diff --git a/[AIOLOS]/Library/Artifacts/da/da81585852cc49a01d60054190b22fe7 b/[AIOLOS]/Library/Artifacts/da/da81585852cc49a01d60054190b22fe7 new file mode 100644 index 0000000000000000000000000000000000000000..294759eb7a6870e56e4eb4628cd0516c9cdfee66 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/da/da81585852cc49a01d60054190b22fe7 differ diff --git a/[AIOLOS]/Library/Artifacts/da/dab7282537913f1924304bedabbf8344 b/[AIOLOS]/Library/Artifacts/da/dab7282537913f1924304bedabbf8344 new file mode 100644 index 0000000000000000000000000000000000000000..ace4ef227bdd310c512cc46a2417027a88204f4c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/da/dab7282537913f1924304bedabbf8344 differ diff --git a/[AIOLOS]/Library/Artifacts/da/dacbcb3fccf9a35912a107e1d6d8fd3f b/[AIOLOS]/Library/Artifacts/da/dacbcb3fccf9a35912a107e1d6d8fd3f new file mode 100644 index 0000000000000000000000000000000000000000..1e4277f16a970f9c85dc7243f97e10a57f638624 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/da/dacbcb3fccf9a35912a107e1d6d8fd3f differ diff --git a/[AIOLOS]/Library/Artifacts/db/db92ee65f8cf764792980a266f87efd4 b/[AIOLOS]/Library/Artifacts/db/db92ee65f8cf764792980a266f87efd4 new file mode 100644 index 0000000000000000000000000000000000000000..64537e25bef85c595791fef1d59fc9efe38d2353 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/db/db92ee65f8cf764792980a266f87efd4 differ diff --git a/[AIOLOS]/Library/Artifacts/dc/dc0c866671ea5f08aebec0604d8c6b55 b/[AIOLOS]/Library/Artifacts/dc/dc0c866671ea5f08aebec0604d8c6b55 new file mode 100644 index 0000000000000000000000000000000000000000..f3543f8f1a912636f6474625b236af72456b6bdf Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/dc/dc0c866671ea5f08aebec0604d8c6b55 differ diff --git a/[AIOLOS]/Library/Artifacts/dc/dccdfcb053f45c582b52892ffef1c86c b/[AIOLOS]/Library/Artifacts/dc/dccdfcb053f45c582b52892ffef1c86c new file mode 100644 index 0000000000000000000000000000000000000000..edfc5a8e3608cd70c4852092d804067104b55f1e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/dc/dccdfcb053f45c582b52892ffef1c86c differ diff --git a/[AIOLOS]/Library/Artifacts/dc/dcceaa6443c6920050b71269e94fb826 b/[AIOLOS]/Library/Artifacts/dc/dcceaa6443c6920050b71269e94fb826 new file mode 100644 index 0000000000000000000000000000000000000000..085d1ab95e524ef662da575e51edfe7ef95770a5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/dc/dcceaa6443c6920050b71269e94fb826 differ diff --git a/[AIOLOS]/Library/Artifacts/dc/dcdd8dd5532385f8934aa2ef058c74be b/[AIOLOS]/Library/Artifacts/dc/dcdd8dd5532385f8934aa2ef058c74be new file mode 100644 index 0000000000000000000000000000000000000000..a79f02411c497ee0ef09f1929691f843acdad758 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/dc/dcdd8dd5532385f8934aa2ef058c74be differ diff --git a/[AIOLOS]/Library/Artifacts/dc/dcea8f05b192c980b2c161a135f97af5 b/[AIOLOS]/Library/Artifacts/dc/dcea8f05b192c980b2c161a135f97af5 new file mode 100644 index 0000000000000000000000000000000000000000..fe65f8833c09c9997b1778e4c3a178441ed4c8a4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/dc/dcea8f05b192c980b2c161a135f97af5 differ diff --git a/[AIOLOS]/Library/Artifacts/dc/dcf1a7bbecede3ef2b3b791afc782328 b/[AIOLOS]/Library/Artifacts/dc/dcf1a7bbecede3ef2b3b791afc782328 new file mode 100644 index 0000000000000000000000000000000000000000..5236691687d93cc224d6967dc938d817e32a7992 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/dc/dcf1a7bbecede3ef2b3b791afc782328 differ diff --git a/[AIOLOS]/Library/Artifacts/dd/dd5c3c840c31b9899847542fd68b5034 b/[AIOLOS]/Library/Artifacts/dd/dd5c3c840c31b9899847542fd68b5034 new file mode 100644 index 0000000000000000000000000000000000000000..864ea145f3fa4c22fe81afa8198aac4fc8e273ea Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/dd/dd5c3c840c31b9899847542fd68b5034 differ diff --git a/[AIOLOS]/Library/Artifacts/de/de4925d202cd9799d862b263f904dbb1 b/[AIOLOS]/Library/Artifacts/de/de4925d202cd9799d862b263f904dbb1 new file mode 100644 index 0000000000000000000000000000000000000000..ee2f150367abdfacc13e45160b9da7d23280f17f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/de/de4925d202cd9799d862b263f904dbb1 differ diff --git a/[AIOLOS]/Library/Artifacts/de/de935f5628aabc61a3b068965758e8d4 b/[AIOLOS]/Library/Artifacts/de/de935f5628aabc61a3b068965758e8d4 new file mode 100644 index 0000000000000000000000000000000000000000..a5a545b1799b29ba127f00ae24ee7cdc0f08459b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/de/de935f5628aabc61a3b068965758e8d4 differ diff --git a/[AIOLOS]/Library/Artifacts/de/dea642995503aec74e02ea74503557da b/[AIOLOS]/Library/Artifacts/de/dea642995503aec74e02ea74503557da new file mode 100644 index 0000000000000000000000000000000000000000..f3a7dd44cb4f671702518fe2e1bf8972fbc65825 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/de/dea642995503aec74e02ea74503557da differ diff --git a/[AIOLOS]/Library/Artifacts/de/deacc3c1a44f27da8c41093e8391eafc b/[AIOLOS]/Library/Artifacts/de/deacc3c1a44f27da8c41093e8391eafc new file mode 100644 index 0000000000000000000000000000000000000000..b25ce5295f0bb2d4e4fc99dce5341c2ebd4aefe2 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/de/deacc3c1a44f27da8c41093e8391eafc differ diff --git a/[AIOLOS]/Library/Artifacts/de/deda5b6119c1b74ef3883e195848c6c8 b/[AIOLOS]/Library/Artifacts/de/deda5b6119c1b74ef3883e195848c6c8 new file mode 100644 index 0000000000000000000000000000000000000000..2c453011f64ef1c310253cd9267a4662e85310ab Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/de/deda5b6119c1b74ef3883e195848c6c8 differ diff --git a/[AIOLOS]/Library/Artifacts/de/def5c0cf2fc396e6e8372a039d94c1aa b/[AIOLOS]/Library/Artifacts/de/def5c0cf2fc396e6e8372a039d94c1aa new file mode 100644 index 0000000000000000000000000000000000000000..9c8e1ebc58c27709cee1b146634060e03ecbfe00 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/de/def5c0cf2fc396e6e8372a039d94c1aa differ diff --git a/[AIOLOS]/Library/Artifacts/df/df119f0356dfea4e09365660d913afa0 b/[AIOLOS]/Library/Artifacts/df/df119f0356dfea4e09365660d913afa0 new file mode 100644 index 0000000000000000000000000000000000000000..89f7393005e3bfcddb09880afe97183736efce9f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/df/df119f0356dfea4e09365660d913afa0 differ diff --git a/[AIOLOS]/Library/Artifacts/df/df170c2b33b27034881a162889671aeb b/[AIOLOS]/Library/Artifacts/df/df170c2b33b27034881a162889671aeb new file mode 100644 index 0000000000000000000000000000000000000000..2b7ed458f45a96c5513b5dfff4bd078df107f17f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/df/df170c2b33b27034881a162889671aeb differ diff --git a/[AIOLOS]/Library/Artifacts/df/dfe084a9eb645628447cff7e4f94820e b/[AIOLOS]/Library/Artifacts/df/dfe084a9eb645628447cff7e4f94820e new file mode 100644 index 0000000000000000000000000000000000000000..b042c4df1bcf8ec4b0a0e47f8daa17fa5b8282bd Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/df/dfe084a9eb645628447cff7e4f94820e differ diff --git a/[AIOLOS]/Library/Artifacts/e1/e108b905079fe76149de6964634e6b09 b/[AIOLOS]/Library/Artifacts/e1/e108b905079fe76149de6964634e6b09 new file mode 100644 index 0000000000000000000000000000000000000000..1eb7aa30be02b138adc767a0e024dee8bfe74ac4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e1/e108b905079fe76149de6964634e6b09 differ diff --git a/[AIOLOS]/Library/Artifacts/e1/e132571df60ac139bd2e01d8dff1884f b/[AIOLOS]/Library/Artifacts/e1/e132571df60ac139bd2e01d8dff1884f new file mode 100644 index 0000000000000000000000000000000000000000..b40040468f43e99528786e93524474d604b0feba Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e1/e132571df60ac139bd2e01d8dff1884f differ diff --git a/[AIOLOS]/Library/Artifacts/e1/e15b7289b56fe50ae8420a87f4ea49a8 b/[AIOLOS]/Library/Artifacts/e1/e15b7289b56fe50ae8420a87f4ea49a8 new file mode 100644 index 0000000000000000000000000000000000000000..d8507994e41bc816452fe5863629981b9d79aca6 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e1/e15b7289b56fe50ae8420a87f4ea49a8 differ diff --git a/[AIOLOS]/Library/Artifacts/e2/e220e9bae08f14768c025223bd9ad552 b/[AIOLOS]/Library/Artifacts/e2/e220e9bae08f14768c025223bd9ad552 new file mode 100644 index 0000000000000000000000000000000000000000..c240187d9c99688aeab4cdcce3e898bd00ef144e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e2/e220e9bae08f14768c025223bd9ad552 differ diff --git a/[AIOLOS]/Library/Artifacts/e3/e34b12f58abfdf987e149b8a877655e3 b/[AIOLOS]/Library/Artifacts/e3/e34b12f58abfdf987e149b8a877655e3 new file mode 100644 index 0000000000000000000000000000000000000000..073a7fbc42faa37ad18cfded51214757f3066f47 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e3/e34b12f58abfdf987e149b8a877655e3 differ diff --git a/[AIOLOS]/Library/Artifacts/e4/e45011b2ff715c04a92e44b14ee4ecf8 b/[AIOLOS]/Library/Artifacts/e4/e45011b2ff715c04a92e44b14ee4ecf8 new file mode 100644 index 0000000000000000000000000000000000000000..a42ab30f7adfbc3e1c650c0091ba5e3c85184ddc Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e4/e45011b2ff715c04a92e44b14ee4ecf8 differ diff --git a/[AIOLOS]/Library/Artifacts/e4/e4908e9ffb7ef7fe80a4fa2206b5d223 b/[AIOLOS]/Library/Artifacts/e4/e4908e9ffb7ef7fe80a4fa2206b5d223 new file mode 100644 index 0000000000000000000000000000000000000000..11299949ca79aaf1e73f839b1be5bce11b34b252 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e4/e4908e9ffb7ef7fe80a4fa2206b5d223 differ diff --git a/[AIOLOS]/Library/Artifacts/e5/e5ca23ce50d82ecbaf4965feff9d6ccd b/[AIOLOS]/Library/Artifacts/e5/e5ca23ce50d82ecbaf4965feff9d6ccd new file mode 100644 index 0000000000000000000000000000000000000000..9e364f6bb9f81843733ba8d53dcc9f6a3fd174f8 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e5/e5ca23ce50d82ecbaf4965feff9d6ccd differ diff --git a/[AIOLOS]/Library/Artifacts/e6/e60490ce7abcbd66077733ac6d697ac3 b/[AIOLOS]/Library/Artifacts/e6/e60490ce7abcbd66077733ac6d697ac3 new file mode 100644 index 0000000000000000000000000000000000000000..6813fca23f63abbc050dc819cbd48868d3f03c2d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e6/e60490ce7abcbd66077733ac6d697ac3 differ diff --git a/[AIOLOS]/Library/Artifacts/e6/e692feaac1b71b4fa2d4751260404e1f b/[AIOLOS]/Library/Artifacts/e6/e692feaac1b71b4fa2d4751260404e1f new file mode 100644 index 0000000000000000000000000000000000000000..6746285f9de0fd9374d1c7e19b00996afe73a47c Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e6/e692feaac1b71b4fa2d4751260404e1f differ diff --git a/[AIOLOS]/Library/Artifacts/e6/e6fba01b4f02a1daade87062b05209f8 b/[AIOLOS]/Library/Artifacts/e6/e6fba01b4f02a1daade87062b05209f8 new file mode 100644 index 0000000000000000000000000000000000000000..d0f32c4f7ef57d4a1494802746f2df4ea91f7e42 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e6/e6fba01b4f02a1daade87062b05209f8 differ diff --git a/[AIOLOS]/Library/Artifacts/e7/e70c162b5dcdf4bd24178ffa28f79691 b/[AIOLOS]/Library/Artifacts/e7/e70c162b5dcdf4bd24178ffa28f79691 new file mode 100644 index 0000000000000000000000000000000000000000..2fc0c2069ae587792ee7a4845dedb866fb48a992 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e7/e70c162b5dcdf4bd24178ffa28f79691 differ diff --git a/[AIOLOS]/Library/Artifacts/e7/e7273872a0609f6107ed1812e1282add b/[AIOLOS]/Library/Artifacts/e7/e7273872a0609f6107ed1812e1282add new file mode 100644 index 0000000000000000000000000000000000000000..42e988a28ef71ed406477aaf92c4f076f2876edd Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e7/e7273872a0609f6107ed1812e1282add differ diff --git a/[AIOLOS]/Library/Artifacts/e7/e755b5ba2093ba0d70d5ec99695ab90e b/[AIOLOS]/Library/Artifacts/e7/e755b5ba2093ba0d70d5ec99695ab90e new file mode 100644 index 0000000000000000000000000000000000000000..b03a6e00a8ea44dd40606b8d9f45f5d20a1eb950 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e7/e755b5ba2093ba0d70d5ec99695ab90e differ diff --git a/[AIOLOS]/Library/Artifacts/e7/e7d39d77d1015034bf391ea10b8fef38 b/[AIOLOS]/Library/Artifacts/e7/e7d39d77d1015034bf391ea10b8fef38 new file mode 100644 index 0000000000000000000000000000000000000000..691f10b13971b7d3eb305a2500a29b44215dbcf9 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e7/e7d39d77d1015034bf391ea10b8fef38 differ diff --git a/[AIOLOS]/Library/Artifacts/e8/e834ed6e7c1759fc37c087a38b2a85cc b/[AIOLOS]/Library/Artifacts/e8/e834ed6e7c1759fc37c087a38b2a85cc new file mode 100644 index 0000000000000000000000000000000000000000..b1918c6b34dabb256b694596f0d1d6533d918c40 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e8/e834ed6e7c1759fc37c087a38b2a85cc differ diff --git a/[AIOLOS]/Library/Artifacts/e8/e856164053b81972c1940a39d9934c08 b/[AIOLOS]/Library/Artifacts/e8/e856164053b81972c1940a39d9934c08 new file mode 100644 index 0000000000000000000000000000000000000000..50ac9aadf62c01976aab0bb31ab160b3216293cc Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e8/e856164053b81972c1940a39d9934c08 differ diff --git a/[AIOLOS]/Library/Artifacts/e8/e8852ce0836ca6b86d040f56fbc4310c b/[AIOLOS]/Library/Artifacts/e8/e8852ce0836ca6b86d040f56fbc4310c new file mode 100644 index 0000000000000000000000000000000000000000..1045ec42d3a6529eaa614836c20c425e0dac772e Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e8/e8852ce0836ca6b86d040f56fbc4310c differ diff --git a/[AIOLOS]/Library/Artifacts/e8/e897862ecc683ccd7992c8b3d27d634f b/[AIOLOS]/Library/Artifacts/e8/e897862ecc683ccd7992c8b3d27d634f new file mode 100644 index 0000000000000000000000000000000000000000..88635f725f99b58d0b886d3ee27aefdf920a6f12 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e8/e897862ecc683ccd7992c8b3d27d634f differ diff --git a/[AIOLOS]/Library/Artifacts/e8/e898510533fc78a6bf25884888c9913e b/[AIOLOS]/Library/Artifacts/e8/e898510533fc78a6bf25884888c9913e new file mode 100644 index 0000000000000000000000000000000000000000..e21d86e0bc60abafed77afd5f92adb72a6618392 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e8/e898510533fc78a6bf25884888c9913e differ diff --git a/[AIOLOS]/Library/Artifacts/e8/e8a2eef972c7fb96c5af7b9204a170dc b/[AIOLOS]/Library/Artifacts/e8/e8a2eef972c7fb96c5af7b9204a170dc new file mode 100644 index 0000000000000000000000000000000000000000..3d5c139399d9c61850713b81c7df0f068400fa39 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e8/e8a2eef972c7fb96c5af7b9204a170dc differ diff --git a/[AIOLOS]/Library/Artifacts/e8/e8c31b74fa8385cbd7ad3d55dd870c65 b/[AIOLOS]/Library/Artifacts/e8/e8c31b74fa8385cbd7ad3d55dd870c65 new file mode 100644 index 0000000000000000000000000000000000000000..91885b387143f08358da100cdd8f4a4c4acbf66f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e8/e8c31b74fa8385cbd7ad3d55dd870c65 differ diff --git a/[AIOLOS]/Library/Artifacts/e9/e96dd88cd4f9c129c3a2bbd68f754af7 b/[AIOLOS]/Library/Artifacts/e9/e96dd88cd4f9c129c3a2bbd68f754af7 new file mode 100644 index 0000000000000000000000000000000000000000..52094081b061efeabf56c99007b0d183728aebb0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e9/e96dd88cd4f9c129c3a2bbd68f754af7 differ diff --git a/[AIOLOS]/Library/Artifacts/e9/e985e15637becace66239fbecbec2927 b/[AIOLOS]/Library/Artifacts/e9/e985e15637becace66239fbecbec2927 new file mode 100644 index 0000000000000000000000000000000000000000..9cd29edf07ea0484a6b6f763f3d46c8b3c34940a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e9/e985e15637becace66239fbecbec2927 differ diff --git a/[AIOLOS]/Library/Artifacts/e9/e986facafa870fcc81e19d46799f969b b/[AIOLOS]/Library/Artifacts/e9/e986facafa870fcc81e19d46799f969b new file mode 100644 index 0000000000000000000000000000000000000000..5beab3804152ff286fa0905fd8ca262d196a4cc8 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e9/e986facafa870fcc81e19d46799f969b differ diff --git a/[AIOLOS]/Library/Artifacts/e9/e9c9b3c86ce048bee1a8597517867934 b/[AIOLOS]/Library/Artifacts/e9/e9c9b3c86ce048bee1a8597517867934 new file mode 100644 index 0000000000000000000000000000000000000000..79a1f605fd7a879d23ac55c700ad66cc88a86239 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/e9/e9c9b3c86ce048bee1a8597517867934 differ diff --git a/[AIOLOS]/Library/Artifacts/ea/ea2368b93c92816e99775f45f1de73ce b/[AIOLOS]/Library/Artifacts/ea/ea2368b93c92816e99775f45f1de73ce new file mode 100644 index 0000000000000000000000000000000000000000..9b69e21e9db497cdc085e7cdb440f3de99a74b27 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ea/ea2368b93c92816e99775f45f1de73ce differ diff --git a/[AIOLOS]/Library/Artifacts/ea/ea99c94b752bb94defbd88307492db41 b/[AIOLOS]/Library/Artifacts/ea/ea99c94b752bb94defbd88307492db41 new file mode 100644 index 0000000000000000000000000000000000000000..47dda6eeefbf51beca8be24d2af3e3ed6e78964d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ea/ea99c94b752bb94defbd88307492db41 differ diff --git a/[AIOLOS]/Library/Artifacts/ea/eab027b41ee6f31bd5ee866bd74b52ca b/[AIOLOS]/Library/Artifacts/ea/eab027b41ee6f31bd5ee866bd74b52ca new file mode 100644 index 0000000000000000000000000000000000000000..c8fa194fdeacaf0911c917d4a0467cd1a2926c82 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ea/eab027b41ee6f31bd5ee866bd74b52ca differ diff --git a/[AIOLOS]/Library/Artifacts/eb/eb04062145fd1047b91031acebae2310 b/[AIOLOS]/Library/Artifacts/eb/eb04062145fd1047b91031acebae2310 new file mode 100644 index 0000000000000000000000000000000000000000..eaab7f99d86c65ac084aebadcc4cc6ec6d1dd19b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/eb/eb04062145fd1047b91031acebae2310 differ diff --git a/[AIOLOS]/Library/Artifacts/eb/eb1814336a6b7c06fbe25012197c4621 b/[AIOLOS]/Library/Artifacts/eb/eb1814336a6b7c06fbe25012197c4621 new file mode 100644 index 0000000000000000000000000000000000000000..fa0bb1fa1afd423d3b2d94ec1c6ef4072751bea3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/eb/eb1814336a6b7c06fbe25012197c4621 differ diff --git a/[AIOLOS]/Library/Artifacts/eb/ebb724e7e936c382f5b4fe374f9ba29f b/[AIOLOS]/Library/Artifacts/eb/ebb724e7e936c382f5b4fe374f9ba29f new file mode 100644 index 0000000000000000000000000000000000000000..9474f887fcafb32cf3d9cfa7dcf1099c9fbb5531 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/eb/ebb724e7e936c382f5b4fe374f9ba29f differ diff --git a/[AIOLOS]/Library/Artifacts/eb/ebdd34a8a239e4ae5c0336708afa3d43 b/[AIOLOS]/Library/Artifacts/eb/ebdd34a8a239e4ae5c0336708afa3d43 new file mode 100644 index 0000000000000000000000000000000000000000..64d17185a9c5ba4776454712ce1fcd741eded77d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/eb/ebdd34a8a239e4ae5c0336708afa3d43 differ diff --git a/[AIOLOS]/Library/Artifacts/ec/ec4fb16e669a33d315e550763a59495b b/[AIOLOS]/Library/Artifacts/ec/ec4fb16e669a33d315e550763a59495b new file mode 100644 index 0000000000000000000000000000000000000000..238e3e05aebe8a5680dc36f7c9dbfa029fbf9e80 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ec/ec4fb16e669a33d315e550763a59495b differ diff --git a/[AIOLOS]/Library/Artifacts/ec/eca32679a16b2290310bff0cd80100bb b/[AIOLOS]/Library/Artifacts/ec/eca32679a16b2290310bff0cd80100bb new file mode 100644 index 0000000000000000000000000000000000000000..1e10170412ce85e0d24f3aa57c4ab8fabaa5ca40 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ec/eca32679a16b2290310bff0cd80100bb differ diff --git a/[AIOLOS]/Library/Artifacts/ed/ed47ff9d27b172cb60bc793df459a9fd b/[AIOLOS]/Library/Artifacts/ed/ed47ff9d27b172cb60bc793df459a9fd new file mode 100644 index 0000000000000000000000000000000000000000..5eeed1997e4b6d89764b40823e92413f04ceb9ea Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ed/ed47ff9d27b172cb60bc793df459a9fd differ diff --git a/[AIOLOS]/Library/Artifacts/ed/ed48f464b63b5d03ea2f7691a394954b b/[AIOLOS]/Library/Artifacts/ed/ed48f464b63b5d03ea2f7691a394954b new file mode 100644 index 0000000000000000000000000000000000000000..8015d79ca23a33ce0bd899d283831be0e377999f Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ed/ed48f464b63b5d03ea2f7691a394954b differ diff --git a/[AIOLOS]/Library/Artifacts/ed/edf9f8889666eaa7c3548092f0bbb16a b/[AIOLOS]/Library/Artifacts/ed/edf9f8889666eaa7c3548092f0bbb16a new file mode 100644 index 0000000000000000000000000000000000000000..8c23f79c32a038673ed0d045428130c087fe17d5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ed/edf9f8889666eaa7c3548092f0bbb16a differ diff --git a/[AIOLOS]/Library/Artifacts/ee/ee62857df14f64f5d38e78d8c6d2907c b/[AIOLOS]/Library/Artifacts/ee/ee62857df14f64f5d38e78d8c6d2907c new file mode 100644 index 0000000000000000000000000000000000000000..bca83f840f4e9d31f63b50d6d97ccd042d5871b9 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ee/ee62857df14f64f5d38e78d8c6d2907c differ diff --git a/[AIOLOS]/Library/Artifacts/ee/ee7a083cd1ba437a1819e6f51b19c592 b/[AIOLOS]/Library/Artifacts/ee/ee7a083cd1ba437a1819e6f51b19c592 new file mode 100644 index 0000000000000000000000000000000000000000..cd55fc666f072ab57fba91fda3899e8f830826c4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ee/ee7a083cd1ba437a1819e6f51b19c592 differ diff --git a/[AIOLOS]/Library/Artifacts/ef/ef6ccd3d87f305ad1968d83be0baf0df b/[AIOLOS]/Library/Artifacts/ef/ef6ccd3d87f305ad1968d83be0baf0df new file mode 100644 index 0000000000000000000000000000000000000000..8850a1fa6dd5012f7c71c258b9d49a29e0ca1291 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ef/ef6ccd3d87f305ad1968d83be0baf0df differ diff --git a/[AIOLOS]/Library/Artifacts/ef/efab5f64e8b06007065ebbb0be3e6c5a b/[AIOLOS]/Library/Artifacts/ef/efab5f64e8b06007065ebbb0be3e6c5a new file mode 100644 index 0000000000000000000000000000000000000000..69098596f7ab3a3474898eac9c3f01575a9dcabb Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ef/efab5f64e8b06007065ebbb0be3e6c5a differ diff --git a/[AIOLOS]/Library/Artifacts/ef/efe2af7098e1faac565a231669f981e0 b/[AIOLOS]/Library/Artifacts/ef/efe2af7098e1faac565a231669f981e0 new file mode 100644 index 0000000000000000000000000000000000000000..9adff547e15caa313835291258bba7fec1c914c4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ef/efe2af7098e1faac565a231669f981e0 differ diff --git a/[AIOLOS]/Library/Artifacts/f0/f017290439b31001af2e7789ca06f61c b/[AIOLOS]/Library/Artifacts/f0/f017290439b31001af2e7789ca06f61c new file mode 100644 index 0000000000000000000000000000000000000000..ed76b240991e1b7b242927fb8e9ca4bdc559b998 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f0/f017290439b31001af2e7789ca06f61c differ diff --git a/[AIOLOS]/Library/Artifacts/f1/f15418bb2b1b7e60818e6351b036b406 b/[AIOLOS]/Library/Artifacts/f1/f15418bb2b1b7e60818e6351b036b406 new file mode 100644 index 0000000000000000000000000000000000000000..d60e9417a99e6e0b87e18366b884105b047fe58a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f1/f15418bb2b1b7e60818e6351b036b406 differ diff --git a/[AIOLOS]/Library/Artifacts/f1/f1a8b7cb1413bb29e14b60a85c318b92 b/[AIOLOS]/Library/Artifacts/f1/f1a8b7cb1413bb29e14b60a85c318b92 new file mode 100644 index 0000000000000000000000000000000000000000..feb39489afe049e4bef9995614db373d10aea568 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f1/f1a8b7cb1413bb29e14b60a85c318b92 differ diff --git a/[AIOLOS]/Library/Artifacts/f1/f1c533dbabccffd4f383201d451936a4 b/[AIOLOS]/Library/Artifacts/f1/f1c533dbabccffd4f383201d451936a4 new file mode 100644 index 0000000000000000000000000000000000000000..a9cc5e52eb61451dfe6ab8d643e3342d2af03143 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f1/f1c533dbabccffd4f383201d451936a4 differ diff --git a/[AIOLOS]/Library/Artifacts/f2/f22365b23d298db417cd4d85db79fd3a b/[AIOLOS]/Library/Artifacts/f2/f22365b23d298db417cd4d85db79fd3a new file mode 100644 index 0000000000000000000000000000000000000000..735b75fae73f73538424fc14392b7c351d26b07d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f2/f22365b23d298db417cd4d85db79fd3a differ diff --git a/[AIOLOS]/Library/Artifacts/f2/f2544b8623cf035629341839084e8991 b/[AIOLOS]/Library/Artifacts/f2/f2544b8623cf035629341839084e8991 new file mode 100644 index 0000000000000000000000000000000000000000..03bfb3f337aa38c8465277420e2d9b436998c167 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f2/f2544b8623cf035629341839084e8991 differ diff --git a/[AIOLOS]/Library/Artifacts/f2/f28f955984011fe29cbf095d94db08e0 b/[AIOLOS]/Library/Artifacts/f2/f28f955984011fe29cbf095d94db08e0 new file mode 100644 index 0000000000000000000000000000000000000000..fbcae4c78c8a8898525fc72df5a4c3974c62b152 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f2/f28f955984011fe29cbf095d94db08e0 differ diff --git a/[AIOLOS]/Library/Artifacts/f2/f2b0eac92af829f0522e035a643b3461 b/[AIOLOS]/Library/Artifacts/f2/f2b0eac92af829f0522e035a643b3461 new file mode 100644 index 0000000000000000000000000000000000000000..1fc53853d9b0a32dd9f900b16407f5c9e15e30c4 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f2/f2b0eac92af829f0522e035a643b3461 differ diff --git a/[AIOLOS]/Library/Artifacts/f2/f2b7310d44a1ec314347e92e478d8cbd b/[AIOLOS]/Library/Artifacts/f2/f2b7310d44a1ec314347e92e478d8cbd new file mode 100644 index 0000000000000000000000000000000000000000..7b5091a968f5a8ab8289d241387d853f2efc59c7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f2/f2b7310d44a1ec314347e92e478d8cbd differ diff --git a/[AIOLOS]/Library/Artifacts/f4/f491314056a7adffa7c73de06fd0e7d1 b/[AIOLOS]/Library/Artifacts/f4/f491314056a7adffa7c73de06fd0e7d1 new file mode 100644 index 0000000000000000000000000000000000000000..787043d1cec7a362b85cc31d9ff1c8a6938a2bde Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f4/f491314056a7adffa7c73de06fd0e7d1 differ diff --git a/[AIOLOS]/Library/Artifacts/f5/f55cf3d1029dc394892de5e5adfa5d5d b/[AIOLOS]/Library/Artifacts/f5/f55cf3d1029dc394892de5e5adfa5d5d new file mode 100644 index 0000000000000000000000000000000000000000..6245ee70cb7de89fbfa63cf8b9571504c4cc9d14 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f5/f55cf3d1029dc394892de5e5adfa5d5d differ diff --git a/[AIOLOS]/Library/Artifacts/f5/f5c6e94004c3deed05c1b16c89e25d05 b/[AIOLOS]/Library/Artifacts/f5/f5c6e94004c3deed05c1b16c89e25d05 new file mode 100644 index 0000000000000000000000000000000000000000..b505d0421b087b18a2d6a00fedd11a8b21c357e7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f5/f5c6e94004c3deed05c1b16c89e25d05 differ diff --git a/[AIOLOS]/Library/Artifacts/f6/f621da731ca50ccd3983cbde062c5f78 b/[AIOLOS]/Library/Artifacts/f6/f621da731ca50ccd3983cbde062c5f78 new file mode 100644 index 0000000000000000000000000000000000000000..c9a927a54533151a0eb80de36d763b1fcc962b0b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f6/f621da731ca50ccd3983cbde062c5f78 differ diff --git a/[AIOLOS]/Library/Artifacts/f6/f622fa2916fff5c3d41493eee498bb91 b/[AIOLOS]/Library/Artifacts/f6/f622fa2916fff5c3d41493eee498bb91 new file mode 100644 index 0000000000000000000000000000000000000000..b7502d0f68aa97dbc332d0310be9ac127835cf08 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f6/f622fa2916fff5c3d41493eee498bb91 differ diff --git a/[AIOLOS]/Library/Artifacts/f6/f6bccc4061b0e14fc310d6d3cb62373e b/[AIOLOS]/Library/Artifacts/f6/f6bccc4061b0e14fc310d6d3cb62373e new file mode 100644 index 0000000000000000000000000000000000000000..2098f00995b05bd7a5530d78b24a644d14545507 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f6/f6bccc4061b0e14fc310d6d3cb62373e differ diff --git a/[AIOLOS]/Library/Artifacts/f7/f746f6ca37674f47200bf6097876bfa3 b/[AIOLOS]/Library/Artifacts/f7/f746f6ca37674f47200bf6097876bfa3 new file mode 100644 index 0000000000000000000000000000000000000000..9cb40c805cd061f410944722b6cb4b5b87e392ec Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f7/f746f6ca37674f47200bf6097876bfa3 differ diff --git a/[AIOLOS]/Library/Artifacts/f7/f7af4a88c6958e4ec39006b507f2997a b/[AIOLOS]/Library/Artifacts/f7/f7af4a88c6958e4ec39006b507f2997a new file mode 100644 index 0000000000000000000000000000000000000000..48908a516a307b0cc0b2fe208e4960b6a15095c1 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f7/f7af4a88c6958e4ec39006b507f2997a differ diff --git a/[AIOLOS]/Library/Artifacts/f7/f7c58cc5cf4541bd1584b74efeca1495 b/[AIOLOS]/Library/Artifacts/f7/f7c58cc5cf4541bd1584b74efeca1495 new file mode 100644 index 0000000000000000000000000000000000000000..8af390ae3995fbd12e841ee8dd9f6ef643869625 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f7/f7c58cc5cf4541bd1584b74efeca1495 differ diff --git a/[AIOLOS]/Library/Artifacts/f8/f870c9caeef87707e935d09e46b9acf5 b/[AIOLOS]/Library/Artifacts/f8/f870c9caeef87707e935d09e46b9acf5 new file mode 100644 index 0000000000000000000000000000000000000000..945fb4389aecd9fdffce01b45e1c147c63cde44b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f8/f870c9caeef87707e935d09e46b9acf5 differ diff --git a/[AIOLOS]/Library/Artifacts/f9/f939581770fb287353957717f2759a23 b/[AIOLOS]/Library/Artifacts/f9/f939581770fb287353957717f2759a23 new file mode 100644 index 0000000000000000000000000000000000000000..295d8ecd741b4329ae31d3a089de87e85abf288a Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f9/f939581770fb287353957717f2759a23 differ diff --git a/[AIOLOS]/Library/Artifacts/f9/f944d2184da55e3e50b726ab004160ca b/[AIOLOS]/Library/Artifacts/f9/f944d2184da55e3e50b726ab004160ca new file mode 100644 index 0000000000000000000000000000000000000000..6f594744cfd94c2b987473b44f1bbca532352e39 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f9/f944d2184da55e3e50b726ab004160ca differ diff --git a/[AIOLOS]/Library/Artifacts/f9/f98cd542ccf97639c6bc8d23f9b15745 b/[AIOLOS]/Library/Artifacts/f9/f98cd542ccf97639c6bc8d23f9b15745 new file mode 100644 index 0000000000000000000000000000000000000000..3807bc0087e20ac378b2fc44947032ee1872a430 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f9/f98cd542ccf97639c6bc8d23f9b15745 differ diff --git a/[AIOLOS]/Library/Artifacts/f9/f9ef31177e81c181cd0339aa1246d05b b/[AIOLOS]/Library/Artifacts/f9/f9ef31177e81c181cd0339aa1246d05b new file mode 100644 index 0000000000000000000000000000000000000000..2eedefdd3349743991398942459914fa76e31180 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/f9/f9ef31177e81c181cd0339aa1246d05b differ diff --git a/[AIOLOS]/Library/Artifacts/fa/fa065fd2a807caad0703ecb87bd41561 b/[AIOLOS]/Library/Artifacts/fa/fa065fd2a807caad0703ecb87bd41561 new file mode 100644 index 0000000000000000000000000000000000000000..491d3447bcd07f65c076b8d6f2bd59dc5372ee74 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fa/fa065fd2a807caad0703ecb87bd41561 differ diff --git a/[AIOLOS]/Library/Artifacts/fa/fa4a8393ee54a82df76346a102889251 b/[AIOLOS]/Library/Artifacts/fa/fa4a8393ee54a82df76346a102889251 new file mode 100644 index 0000000000000000000000000000000000000000..eb328b48ec512ce36c270b7588a92859abbd4341 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fa/fa4a8393ee54a82df76346a102889251 differ diff --git a/[AIOLOS]/Library/Artifacts/fa/fabdd75a7845d3ce3f9bd0b1334d4274 b/[AIOLOS]/Library/Artifacts/fa/fabdd75a7845d3ce3f9bd0b1334d4274 new file mode 100644 index 0000000000000000000000000000000000000000..aa0775c5f7891c42077ef306d1128c4cb5d049c3 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fa/fabdd75a7845d3ce3f9bd0b1334d4274 differ diff --git a/[AIOLOS]/Library/Artifacts/fa/fae4f120b5d4e38074a222534012d471 b/[AIOLOS]/Library/Artifacts/fa/fae4f120b5d4e38074a222534012d471 new file mode 100644 index 0000000000000000000000000000000000000000..13f96ca6652031367acb22e00286b0dba621c59d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fa/fae4f120b5d4e38074a222534012d471 differ diff --git a/[AIOLOS]/Library/Artifacts/fa/faf132f78c3f0c11843cab787d28ca56 b/[AIOLOS]/Library/Artifacts/fa/faf132f78c3f0c11843cab787d28ca56 new file mode 100644 index 0000000000000000000000000000000000000000..6a02c6207599d695270e76b5501fefe68745fc63 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fa/faf132f78c3f0c11843cab787d28ca56 differ diff --git a/[AIOLOS]/Library/Artifacts/fb/fb809c5a7f75c731abeb96e3f3a3db11 b/[AIOLOS]/Library/Artifacts/fb/fb809c5a7f75c731abeb96e3f3a3db11 new file mode 100644 index 0000000000000000000000000000000000000000..f424e2774c3b2f132d2484970a6ef0c1fa3304a7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fb/fb809c5a7f75c731abeb96e3f3a3db11 differ diff --git a/[AIOLOS]/Library/Artifacts/fc/fc2df206982291636fb5e58aac972638 b/[AIOLOS]/Library/Artifacts/fc/fc2df206982291636fb5e58aac972638 new file mode 100644 index 0000000000000000000000000000000000000000..9642b00bd16dc0141e54bf031ddcf935c5ebda46 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fc/fc2df206982291636fb5e58aac972638 differ diff --git a/[AIOLOS]/Library/Artifacts/fc/fc9eebb94760962db22651e99912489d b/[AIOLOS]/Library/Artifacts/fc/fc9eebb94760962db22651e99912489d new file mode 100644 index 0000000000000000000000000000000000000000..134551b9bb051244b2c8766aab344ed9b72ce17d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fc/fc9eebb94760962db22651e99912489d differ diff --git a/[AIOLOS]/Library/Artifacts/fc/fca783c06ae28757337b05cc174cba72 b/[AIOLOS]/Library/Artifacts/fc/fca783c06ae28757337b05cc174cba72 new file mode 100644 index 0000000000000000000000000000000000000000..16fefaf08d6113b557f4b94d8b0ae36a3c8840a0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fc/fca783c06ae28757337b05cc174cba72 differ diff --git a/[AIOLOS]/Library/Artifacts/fc/fcdee73ea144bc40c84ffcb95aba5cd0 b/[AIOLOS]/Library/Artifacts/fc/fcdee73ea144bc40c84ffcb95aba5cd0 new file mode 100644 index 0000000000000000000000000000000000000000..fb3891fe0146fc590c784845aa05244b0151451d Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fc/fcdee73ea144bc40c84ffcb95aba5cd0 differ diff --git a/[AIOLOS]/Library/Artifacts/fd/fd178f5025048bef66cc0734a86c711b b/[AIOLOS]/Library/Artifacts/fd/fd178f5025048bef66cc0734a86c711b new file mode 100644 index 0000000000000000000000000000000000000000..bbfb729d14e2b988a6018486f21a76d1092cb96b Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fd/fd178f5025048bef66cc0734a86c711b differ diff --git a/[AIOLOS]/Library/Artifacts/fd/fd3a7b2f32c511ddbf969be6e797cc8a b/[AIOLOS]/Library/Artifacts/fd/fd3a7b2f32c511ddbf969be6e797cc8a new file mode 100644 index 0000000000000000000000000000000000000000..661d3f0190c655fbcff411a906f3aad1ea6a7b34 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fd/fd3a7b2f32c511ddbf969be6e797cc8a differ diff --git a/[AIOLOS]/Library/Artifacts/fd/fd80347fbc0f82a48c6b74e7146e1861 b/[AIOLOS]/Library/Artifacts/fd/fd80347fbc0f82a48c6b74e7146e1861 new file mode 100644 index 0000000000000000000000000000000000000000..b8f7c422fca732fafce10f16de04c8340f8dc649 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fd/fd80347fbc0f82a48c6b74e7146e1861 differ diff --git a/[AIOLOS]/Library/Artifacts/fd/fdfccefeccfd2a4b6137bb3eedbc417a b/[AIOLOS]/Library/Artifacts/fd/fdfccefeccfd2a4b6137bb3eedbc417a new file mode 100644 index 0000000000000000000000000000000000000000..df6a55799771045ae8dd1189f59345464c1ab4f7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fd/fdfccefeccfd2a4b6137bb3eedbc417a differ diff --git a/[AIOLOS]/Library/Artifacts/fe/fe46ba3f4ab2b1b0f5cd0dcdd8e4ac1d b/[AIOLOS]/Library/Artifacts/fe/fe46ba3f4ab2b1b0f5cd0dcdd8e4ac1d new file mode 100644 index 0000000000000000000000000000000000000000..b734e9607a80a7ab41b8af71c6ab4013f28e5709 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fe/fe46ba3f4ab2b1b0f5cd0dcdd8e4ac1d differ diff --git a/[AIOLOS]/Library/Artifacts/fe/feb77ca9e75cc7358b5676b6711f4181 b/[AIOLOS]/Library/Artifacts/fe/feb77ca9e75cc7358b5676b6711f4181 new file mode 100644 index 0000000000000000000000000000000000000000..4ddf35f670e0897cad5f0dc2339d83b41a4aa8bc Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fe/feb77ca9e75cc7358b5676b6711f4181 differ diff --git a/[AIOLOS]/Library/Artifacts/fe/fec24ec15dacb68c2c3c44e01d29c21f b/[AIOLOS]/Library/Artifacts/fe/fec24ec15dacb68c2c3c44e01d29c21f new file mode 100644 index 0000000000000000000000000000000000000000..1c2e34d3d7e474000d4b757710fe85299f926d56 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fe/fec24ec15dacb68c2c3c44e01d29c21f differ diff --git a/[AIOLOS]/Library/Artifacts/fe/fef0c471c06b3d88e353d53468049dcf b/[AIOLOS]/Library/Artifacts/fe/fef0c471c06b3d88e353d53468049dcf new file mode 100644 index 0000000000000000000000000000000000000000..f9b17d4e4fd456b30ed5f9ec3af8d252a41624c5 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/fe/fef0c471c06b3d88e353d53468049dcf differ diff --git a/[AIOLOS]/Library/Artifacts/ff/ff3e9ac24ce72f5caf9468d6f371ea0b b/[AIOLOS]/Library/Artifacts/ff/ff3e9ac24ce72f5caf9468d6f371ea0b new file mode 100644 index 0000000000000000000000000000000000000000..ca47e63c738e001b7cb5d8f9ed9b6bddc9cf02e0 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ff/ff3e9ac24ce72f5caf9468d6f371ea0b differ diff --git a/[AIOLOS]/Library/Artifacts/ff/ff67add0978ff66a1d06059b8bbde36c b/[AIOLOS]/Library/Artifacts/ff/ff67add0978ff66a1d06059b8bbde36c new file mode 100644 index 0000000000000000000000000000000000000000..53108096e9adc54e6238857c477583b621996532 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ff/ff67add0978ff66a1d06059b8bbde36c differ diff --git a/[AIOLOS]/Library/Artifacts/ff/ff887097f7ab4c1c4f9596f6bcd33466 b/[AIOLOS]/Library/Artifacts/ff/ff887097f7ab4c1c4f9596f6bcd33466 new file mode 100644 index 0000000000000000000000000000000000000000..a9696b1628c7896f3d4dbbef205f2db222445ca7 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ff/ff887097f7ab4c1c4f9596f6bcd33466 differ diff --git a/[AIOLOS]/Library/Artifacts/ff/ff8c4b6b2a4a542ff7e275743ed4f600 b/[AIOLOS]/Library/Artifacts/ff/ff8c4b6b2a4a542ff7e275743ed4f600 new file mode 100644 index 0000000000000000000000000000000000000000..74dbe6846491ddcb4e5962f4781f08bf75dd7adc Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ff/ff8c4b6b2a4a542ff7e275743ed4f600 differ diff --git a/[AIOLOS]/Library/Artifacts/ff/fff53fd16dd5fb0253187d1279efa1aa b/[AIOLOS]/Library/Artifacts/ff/fff53fd16dd5fb0253187d1279efa1aa new file mode 100644 index 0000000000000000000000000000000000000000..8a65f4a02144d4e4a2159c4e6b35bf0403d528e9 Binary files /dev/null and b/[AIOLOS]/Library/Artifacts/ff/fff53fd16dd5fb0253187d1279efa1aa differ diff --git a/[AIOLOS]/Library/CurrentLayout-default.dwlt b/[AIOLOS]/Library/CurrentLayout-default.dwlt index d028ce7f220aeba252fe95304402b5585f11272e..391f6c90730fe97a0b86a9af23b75cdde50693ab 100644 --- a/[AIOLOS]/Library/CurrentLayout-default.dwlt +++ b/[AIOLOS]/Library/CurrentLayout-default.dwlt @@ -14,14 +14,14 @@ MonoBehaviour: m_EditorClassIdentifier: m_PixelRect: serializedVersion: 2 - x: 1920 - y: -112 + x: 0 + y: 43 width: 1920 height: 997 m_ShowMode: 4 - m_Title: Project + m_Title: Console m_RootView: {fileID: 2} - m_MinSize: {x: 875, y: 521} + m_MinSize: {x: 875, y: 392} m_MaxSize: {x: 10000, y: 10000} m_Maximized: 1 --- !u!114 &2 @@ -46,7 +46,7 @@ MonoBehaviour: y: 0 width: 1920 height: 997 - m_MinSize: {x: 875, y: 521} + m_MinSize: {x: 875, y: 392} m_MaxSize: {x: 10000, y: 10000} m_UseTopView: 1 m_TopViewHeight: 30 @@ -119,10 +119,10 @@ MonoBehaviour: y: 30 width: 1920 height: 947 - m_MinSize: {x: 879, y: 471} - m_MaxSize: {x: 16004, y: 14021} + m_MinSize: {x: 881, y: 342} + m_MaxSize: {x: 16006, y: 8042} vertical: 0 - controlID: 5450 + controlID: 4681 --- !u!114 &6 MonoBehaviour: m_ObjectHideFlags: 52 @@ -144,10 +144,10 @@ MonoBehaviour: y: 0 width: 1573 height: 947 - m_MinSize: {x: 603, y: 471} - m_MaxSize: {x: 12003, y: 14021} + m_MinSize: {x: 605, y: 342} + m_MaxSize: {x: 12005, y: 8042} vertical: 1 - controlID: 5451 + controlID: 4682 --- !u!114 &7 MonoBehaviour: m_ObjectHideFlags: 52 @@ -169,11 +169,11 @@ MonoBehaviour: x: 0 y: 0 width: 1573 - height: 676 - m_MinSize: {x: 603, y: 221} - m_MaxSize: {x: 12003, y: 4021} + height: 671 + m_MinSize: {x: 605, y: 221} + m_MaxSize: {x: 12005, y: 4021} vertical: 0 - controlID: 5452 + controlID: 4683 --- !u!114 &8 MonoBehaviour: m_ObjectHideFlags: 52 @@ -191,8 +191,8 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 0 - width: 201 - height: 676 + width: 202 + height: 671 m_MinSize: {x: 201, y: 221} m_MaxSize: {x: 4001, y: 4021} m_ActualView: {fileID: 14} @@ -215,10 +215,10 @@ MonoBehaviour: m_Children: [] m_Position: serializedVersion: 2 - x: 201 + x: 202 y: 0 - width: 226 - height: 676 + width: 225 + height: 671 m_MinSize: {x: 202, y: 221} m_MaxSize: {x: 4002, y: 4021} m_ActualView: {fileID: 15} @@ -245,7 +245,7 @@ MonoBehaviour: x: 427 y: 0 width: 1146 - height: 676 + height: 671 m_MinSize: {x: 202, y: 221} m_MaxSize: {x: 4002, y: 4021} m_ActualView: {fileID: 13} @@ -263,23 +263,23 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 1 m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} - m_Name: ProjectBrowser + m_Name: ConsoleWindow m_EditorClassIdentifier: m_Children: [] m_Position: serializedVersion: 2 x: 0 - y: 676 + y: 671 width: 1573 - height: 271 - m_MinSize: {x: 231, y: 271} - m_MaxSize: {x: 10001, y: 10021} - m_ActualView: {fileID: 17} + height: 276 + m_MinSize: {x: 101, y: 121} + m_MaxSize: {x: 4001, y: 4021} + m_ActualView: {fileID: 18} m_Panes: - {fileID: 17} - {fileID: 18} - m_Selected: 0 - m_LastSelected: 1 + m_Selected: 1 + m_LastSelected: 0 --- !u!114 &12 MonoBehaviour: m_ObjectHideFlags: 52 @@ -326,10 +326,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 2347 - y: -82 + x: 427 + y: 73 width: 1144 - height: 655 + height: 650 m_ViewDataDictionary: {fileID: 0} m_SerializedViewNames: [] m_SerializedViewValues: [] @@ -337,7 +337,7 @@ MonoBehaviour: m_ShowGizmos: 0 m_TargetDisplay: 0 m_ClearColor: {r: 0, g: 0, b: 0, a: 0} - m_TargetSize: {x: 1144, y: 634} + m_TargetSize: {x: 1144, y: 629} m_TextureFilterMode: 0 m_TextureHideFlags: 61 m_RenderIMGUI: 1 @@ -354,8 +354,8 @@ MonoBehaviour: vZoomLockedByDefault: 0 m_HBaseRangeMin: -572 m_HBaseRangeMax: 572 - m_VBaseRangeMin: -317 - m_VBaseRangeMax: 317 + m_VBaseRangeMin: -314.5 + m_VBaseRangeMax: 314.5 m_HAllowExceedBaseRangeMin: 1 m_HAllowExceedBaseRangeMax: 1 m_VAllowExceedBaseRangeMin: 1 @@ -374,9 +374,9 @@ MonoBehaviour: x: 0 y: 21 width: 1144 - height: 634 + height: 629 m_Scale: {x: 1, y: 1} - m_Translation: {x: 572, y: 317} + m_Translation: {x: 572, y: 314.5} m_MarginLeft: 0 m_MarginRight: 0 m_MarginTop: 0 @@ -384,12 +384,12 @@ MonoBehaviour: m_LastShownAreaInsideMargins: serializedVersion: 2 x: -572 - y: -317 + y: -314.5 width: 1144 - height: 634 + height: 629 m_MinimalGUI: 1 m_defaultScale: 1 - m_LastWindowPixelSize: {x: 1144, y: 655} + m_LastWindowPixelSize: {x: 1144, y: 650} m_ClearInEditMode: 1 m_NoCameraWarning: 1 m_LowResolutionForAspectRatios: 01000000000000000000 @@ -415,17 +415,17 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 1920 - y: -82 - width: 200 - height: 655 + x: 0 + y: 73 + width: 201 + height: 650 m_ViewDataDictionary: {fileID: 0} m_SceneHierarchy: m_TreeViewState: scrollPos: {x: 0, y: 0} - m_SelectedIDs: cc3e0000 - m_LastClickedID: 0 - m_ExpandedIDs: 4cfbffff + m_SelectedIDs: fe440000 + m_LastClickedID: 17662 + m_ExpandedIDs: 4afbffff m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -469,10 +469,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 2121 - y: -82 - width: 224 - height: 655 + x: 202 + y: 73 + width: 223 + height: 650 m_ViewDataDictionary: {fileID: 0} m_ShowContextualTools: 0 m_WindowGUID: 55176db1c370e884587e3544c49d3840 @@ -538,9 +538,9 @@ MonoBehaviour: speed: 2 m_Value: {x: -0.23140088, y: 0.22718781, z: -0.055671286, w: -0.94431984} m_Size: - m_Target: 4.507395 + m_Target: 77.90927 speed: 2 - m_Value: 4.507395 + m_Value: 77.90927 m_Ortho: m_Target: 0 speed: 2 @@ -610,10 +610,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 1920 - y: 594 + x: 0 + y: 744 width: 1572 - height: 250 + height: 255 m_ViewDataDictionary: {fileID: 0} m_SearchFilter: m_NameFilter: @@ -628,22 +628,22 @@ MonoBehaviour: m_SkipHidden: 0 m_SearchArea: 1 m_Folders: - - Assets/StarterAssets/InputSystem + - Assets/StarterAssets/ThirdPersonController/Scripts m_Globs: [] m_OriginalText: m_ViewMode: 1 m_StartGridSize: 64 m_LastFolders: - - Assets/StarterAssets/InputSystem + - Assets/StarterAssets/ThirdPersonController/Scripts m_LastFoldersGridSize: -1 m_LastProjectPath: C:\Users\patri\OneDrive\Documents\Repository\aiolos-array\[AIOLOS] m_LockTracker: m_IsLocked: 0 m_FolderTreeState: scrollPos: {x: 0, y: 106} - m_SelectedIDs: 8c3f0000 - m_LastClickedID: 16268 - m_ExpandedIDs: 00000000463f00007c3f0000903f000000ca9a3b + m_SelectedIDs: 56460000 + m_LastClickedID: 18006 + m_ExpandedIDs: 00000000044600000646000000ca9a3b m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -671,7 +671,7 @@ MonoBehaviour: scrollPos: {x: 0, y: 0} m_SelectedIDs: m_LastClickedID: 0 - m_ExpandedIDs: 00000000463f0000903f000000ca9a3b + m_ExpandedIDs: 00000000044600000646000000ca9a3b m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -696,9 +696,9 @@ MonoBehaviour: m_Icon: {fileID: 0} m_ResourceFile: m_ListAreaState: - m_SelectedInstanceIDs: - m_LastClickedInstanceID: 0 - m_HadKeyboardFocusLastEvent: 1 + m_SelectedInstanceIDs: fe440000 + m_LastClickedInstanceID: 17662 + m_HadKeyboardFocusLastEvent: 0 m_ExpandedInstanceIDs: c6230000 m_RenameOverlay: m_UserAcceptedRename: 0 @@ -747,10 +747,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 1920 - y: 594 - width: 1643 - height: 250 + x: 0 + y: 744 + width: 1572 + height: 255 m_ViewDataDictionary: {fileID: 0} --- !u!114 &19 MonoBehaviour: @@ -772,8 +772,8 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 3493 - y: -82 + x: 1573 + y: 73 width: 346 height: 926 m_ViewDataDictionary: {fileID: 0} @@ -784,7 +784,7 @@ MonoBehaviour: m_ControlHash: -371814159 m_PrefName: Preview_InspectorPreview m_LastInspectedObjectInstanceID: -1 - m_LastVerticalScrollValue: 540 + m_LastVerticalScrollValue: 607 m_GlobalObjectId: m_LockTracker: m_IsLocked: 0 diff --git a/[AIOLOS]/Library/CurrentMaximizeLayout.dwlt b/[AIOLOS]/Library/CurrentMaximizeLayout.dwlt index 3ed8d00e8769a4bd6ad811986599f5f82c3b1647..38e45555453ea825b8acdbaff91222b733744110 100644 --- a/[AIOLOS]/Library/CurrentMaximizeLayout.dwlt +++ b/[AIOLOS]/Library/CurrentMaximizeLayout.dwlt @@ -21,10 +21,10 @@ MonoBehaviour: y: 30 width: 1920 height: 947 - m_MinSize: {x: 879, y: 471} - m_MaxSize: {x: 16004, y: 14021} + m_MinSize: {x: 881, y: 342} + m_MaxSize: {x: 16006, y: 8042} vertical: 0 - controlID: 4797 + controlID: 4515 --- !u!114 &2 MonoBehaviour: m_ObjectHideFlags: 52 @@ -45,10 +45,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 2347 - y: -82 + x: 427 + y: 73 width: 1144 - height: 655 + height: 650 m_ViewDataDictionary: {fileID: 0} m_SerializedViewNames: [] m_SerializedViewValues: [] @@ -56,7 +56,7 @@ MonoBehaviour: m_ShowGizmos: 0 m_TargetDisplay: 0 m_ClearColor: {r: 0, g: 0, b: 0, a: 0} - m_TargetSize: {x: 1144, y: 634} + m_TargetSize: {x: 1144, y: 629} m_TextureFilterMode: 0 m_TextureHideFlags: 61 m_RenderIMGUI: 1 @@ -73,8 +73,8 @@ MonoBehaviour: vZoomLockedByDefault: 0 m_HBaseRangeMin: -572 m_HBaseRangeMax: 572 - m_VBaseRangeMin: -317 - m_VBaseRangeMax: 317 + m_VBaseRangeMin: -314.5 + m_VBaseRangeMax: 314.5 m_HAllowExceedBaseRangeMin: 1 m_HAllowExceedBaseRangeMax: 1 m_VAllowExceedBaseRangeMin: 1 @@ -93,9 +93,9 @@ MonoBehaviour: x: 0 y: 21 width: 1144 - height: 634 + height: 629 m_Scale: {x: 1, y: 1} - m_Translation: {x: 572, y: 317} + m_Translation: {x: 572, y: 314.5} m_MarginLeft: 0 m_MarginRight: 0 m_MarginTop: 0 @@ -103,12 +103,12 @@ MonoBehaviour: m_LastShownAreaInsideMargins: serializedVersion: 2 x: -572 - y: -317 + y: -314.5 width: 1144 - height: 634 + height: 629 m_MinimalGUI: 1 m_defaultScale: 1 - m_LastWindowPixelSize: {x: 1144, y: 655} + m_LastWindowPixelSize: {x: 1144, y: 650} m_ClearInEditMode: 1 m_NoCameraWarning: 1 m_LowResolutionForAspectRatios: 01000000000000000000 @@ -135,10 +135,10 @@ MonoBehaviour: y: 0 width: 1573 height: 947 - m_MinSize: {x: 603, y: 471} - m_MaxSize: {x: 12003, y: 14021} + m_MinSize: {x: 605, y: 342} + m_MaxSize: {x: 12005, y: 8042} vertical: 1 - controlID: 4798 + controlID: 4516 --- !u!114 &4 MonoBehaviour: m_ObjectHideFlags: 52 @@ -160,11 +160,11 @@ MonoBehaviour: x: 0 y: 0 width: 1573 - height: 676 - m_MinSize: {x: 603, y: 221} - m_MaxSize: {x: 12003, y: 4021} + height: 671 + m_MinSize: {x: 605, y: 221} + m_MaxSize: {x: 12005, y: 4021} vertical: 0 - controlID: 4799 + controlID: 4490 --- !u!114 &5 MonoBehaviour: m_ObjectHideFlags: 52 @@ -182,8 +182,8 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 0 - width: 201 - height: 676 + width: 202 + height: 671 m_MinSize: {x: 201, y: 221} m_MaxSize: {x: 4001, y: 4021} m_ActualView: {fileID: 6} @@ -211,17 +211,17 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 1920 - y: -82 - width: 200 - height: 655 + x: 0 + y: 73 + width: 201 + height: 650 m_ViewDataDictionary: {fileID: 0} m_SceneHierarchy: m_TreeViewState: scrollPos: {x: 0, y: 0} m_SelectedIDs: m_LastClickedID: 0 - m_ExpandedIDs: 4cfbffff + m_ExpandedIDs: 4afbffff m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -260,10 +260,10 @@ MonoBehaviour: m_Children: [] m_Position: serializedVersion: 2 - x: 201 + x: 202 y: 0 - width: 226 - height: 676 + width: 225 + height: 671 m_MinSize: {x: 202, y: 221} m_MaxSize: {x: 4002, y: 4021} m_ActualView: {fileID: 8} @@ -292,10 +292,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 2121 - y: -82 - width: 224 - height: 655 + x: 202 + y: 73 + width: 223 + height: 650 m_ViewDataDictionary: {fileID: 0} m_ShowContextualTools: 0 m_WindowGUID: 55176db1c370e884587e3544c49d3840 @@ -361,9 +361,9 @@ MonoBehaviour: speed: 2 m_Value: {x: -0.2314009, y: 0.22718783, z: -0.055671293, w: -0.9443199} m_Size: - m_Target: 4.507395 + m_Target: 77.90927 speed: 2 - m_Value: 4.507395 + m_Value: 77.90927 m_Ortho: m_Target: 0 speed: 2 @@ -431,9 +431,9 @@ MonoBehaviour: x: 427 y: 0 width: 1146 - height: 676 - m_MinSize: {x: 200, y: 200} - m_MaxSize: {x: 4000, y: 4000} + height: 671 + m_MinSize: {x: 202, y: 221} + m_MaxSize: {x: 4002, y: 4021} m_ActualView: {fileID: 2} m_Panes: - {fileID: 2} @@ -449,23 +449,23 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 1 m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} - m_Name: ProjectBrowser + m_Name: ConsoleWindow m_EditorClassIdentifier: m_Children: [] m_Position: serializedVersion: 2 x: 0 - y: 676 + y: 671 width: 1573 - height: 271 - m_MinSize: {x: 230, y: 250} - m_MaxSize: {x: 10000, y: 10000} - m_ActualView: {fileID: 12} + height: 276 + m_MinSize: {x: 101, y: 121} + m_MaxSize: {x: 4001, y: 4021} + m_ActualView: {fileID: 13} m_Panes: - {fileID: 12} - {fileID: 13} - m_Selected: 0 - m_LastSelected: 1 + m_Selected: 1 + m_LastSelected: 0 --- !u!114 &12 MonoBehaviour: m_ObjectHideFlags: 52 @@ -486,10 +486,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 1920 - y: 594 + x: 0 + y: 744 width: 1572 - height: 250 + height: 255 m_ViewDataDictionary: {fileID: 0} m_SearchFilter: m_NameFilter: @@ -517,9 +517,9 @@ MonoBehaviour: m_IsLocked: 0 m_FolderTreeState: scrollPos: {x: 0, y: 106} - m_SelectedIDs: ee3f0000 - m_LastClickedID: 16366 - m_ExpandedIDs: 00000000463f00007c3f0000903f000000ca9a3b + m_SelectedIDs: 56460000 + m_LastClickedID: 18006 + m_ExpandedIDs: 00000000044600000646000000ca9a3b m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -547,7 +547,7 @@ MonoBehaviour: scrollPos: {x: 0, y: 0} m_SelectedIDs: m_LastClickedID: 0 - m_ExpandedIDs: 00000000463f0000903f000000ca9a3b + m_ExpandedIDs: 00000000044600000646000000ca9a3b m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -572,9 +572,9 @@ MonoBehaviour: m_Icon: {fileID: 0} m_ResourceFile: m_ListAreaState: - m_SelectedInstanceIDs: 663e0000 - m_LastClickedInstanceID: 15974 - m_HadKeyboardFocusLastEvent: 1 + m_SelectedInstanceIDs: fe440000 + m_LastClickedInstanceID: 17662 + m_HadKeyboardFocusLastEvent: 0 m_ExpandedInstanceIDs: c6230000 m_RenameOverlay: m_UserAcceptedRename: 0 @@ -623,10 +623,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 1920 - y: 594 - width: 1643 - height: 250 + x: 0 + y: 744 + width: 1572 + height: 255 m_ViewDataDictionary: {fileID: 0} --- !u!114 &14 MonoBehaviour: @@ -674,8 +674,8 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 3493 - y: -82 + x: 1573 + y: 73 width: 346 height: 926 m_ViewDataDictionary: {fileID: 0} @@ -685,8 +685,8 @@ MonoBehaviour: m_CachedPref: 160 m_ControlHash: -371814159 m_PrefName: Preview_InspectorPreview - m_LastInspectedObjectInstanceID: 15974 - m_LastVerticalScrollValue: 540 + m_LastInspectedObjectInstanceID: 17662 + m_LastVerticalScrollValue: 607 m_GlobalObjectId: m_LockTracker: m_IsLocked: 0 diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons.meta new file mode 100644 index 0000000000000000000000000000000000000000..7664a0855f9c0a64a5327879a238e88f22c8ae46 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1db26a9bb354d42cda31cf8b83b7fed4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/Fbx.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/Fbx.cs new file mode 100644 index 0000000000000000000000000000000000000000..acc835a14ae7c36573c90b5b64933d6cd773d177 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/Fbx.cs @@ -0,0 +1,110 @@ +// todo Once we drop support for 2018.3, use optional assembly definitions +using System; +using UnityEditor; +using System.Reflection; +using System.Linq; +using UnityEditor.ProBuilder; + +namespace UnityEngine.ProBuilder.Addons.FBX +{ + /// <summary> + /// ProBuilder-specific options when exporting FBX files with the Unity FBX Exporter. + /// </summary> + class FbxOptions + { + /// <summary> + /// Export mesh topology as quads if possible. + /// </summary> +#pragma warning disable 649 + public bool quads; +#pragma warning restore 649 + } + + /// <summary> + /// Provides some additional functionality when the FbxSdk and FbxExporter packages are available in the project. + /// </summary> + [InitializeOnLoad] + static class Fbx + { + private static Assembly FbxExporterAssembly + { + get + { + try + { + return Assembly.Load("Unity.Formats.Fbx.Editor"); + } + catch (System.IO.FileNotFoundException) + { + return null; + } + } + } + + static readonly Type[] k_ProBuilderTypes = new Type[] + { + typeof(BezierShape), + typeof(PolyShape), + typeof(Entity) + }; + + static FbxOptions m_FbxOptions = new FbxOptions() { + quads = true + }; + + static Fbx() + { + TryLoadFbxSupport(); + } + + static void TryLoadFbxSupport() + { + if (FbxExporterAssembly == null) + { + return; + } + + var modelExporter = FbxExporterAssembly.GetType("UnityEditor.Formats.Fbx.Exporter.ModelExporter"); + var registerMeshCallback = modelExporter.GetMethods(BindingFlags.NonPublic | BindingFlags.Static).Where(x => x.Name == "RegisterMeshCallback").First(x => x.ContainsGenericParameters); + registerMeshCallback = registerMeshCallback.MakeGenericMethod(typeof(ProBuilderMesh)); + + var getMeshForComponent = FbxExporterAssembly.GetTypes() + .Where(t => t.BaseType == typeof(MulticastDelegate) && t.Name.StartsWith("GetMeshForComponent")) + .First(t => t.ContainsGenericParameters); + + getMeshForComponent = getMeshForComponent.MakeGenericType(typeof(ProBuilderMesh)); + var meshDelegate = Delegate.CreateDelegate(getMeshForComponent, typeof(Fbx).GetMethod("GetMeshForComponent", BindingFlags.NonPublic | BindingFlags.Static)); + + registerMeshCallback.Invoke(null, new object[] { meshDelegate, true }); + + m_FbxOptions.quads = ProBuilderSettings.Get<bool>("Export::m_FbxQuads", SettingsScope.User, true); + } + + static bool GetMeshForComponent(object exporter, ProBuilderMesh pmesh, object node) + { + Mesh mesh = new Mesh(); + MeshUtility.Compile(pmesh, mesh, m_FbxOptions.quads ? MeshTopology.Quads : MeshTopology.Triangles); + + // using reflection to call: exporter.ExportMesh(mesh, node, pmesh.GetComponent<MeshRenderer>().sharedMaterials) + var pMeshRenderer = pmesh.GetComponent<MeshRenderer>(); + var sharedMaterials = pMeshRenderer ? pMeshRenderer.sharedMaterials : null; + var exportMeshMethod = exporter.GetType().GetMethod("ExportMesh", BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] { typeof(Mesh), node.GetType(), typeof(Material[]) }, null); + exportMeshMethod.Invoke(exporter, new object[] { mesh, node, sharedMaterials }); + + Object.DestroyImmediate(mesh); + + // probuilder can't handle mesh assets that may be externally reloaded, just strip pb stuff for now. + foreach (var type in k_ProBuilderTypes) + { + var component = pmesh.GetComponent(type); + if (component != null) + Object.DestroyImmediate(component); + } + + pmesh.preserveMeshAssetOnDestroy = true; + Object.DestroyImmediate(pmesh); + + return true; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/Fbx.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/Fbx.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..fef225decb50fb258c8a3950353a74fd54832ada --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/Fbx.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 561f179dea8740f41a4a539592427f2b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/Unity.ProBuilder.AddOns.Editor.asmdef b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/Unity.ProBuilder.AddOns.Editor.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..f1e18cd202b08ea02aadd46049582523e2bb92fc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/Unity.ProBuilder.AddOns.Editor.asmdef @@ -0,0 +1,16 @@ +{ + "name": "Unity.ProBuilder.AddOns.Editor", + "references": [ + "Unity.ProBuilder", + "Unity.ProBuilder.Editor" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/Unity.ProBuilder.AddOns.Editor.asmdef.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/Unity.ProBuilder.AddOns.Editor.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..4392e5080c2af32addfa4292229b41018b872446 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/Unity.ProBuilder.AddOns.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2cfd637d8bffa4f3ebad425f3bdd33a2 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/readme.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/readme.md new file mode 100644 index 0000000000000000000000000000000000000000..39574d5c87668826d230a4b43923b647cc83b1c8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/readme.md @@ -0,0 +1,7 @@ +# Enabling FBX Integration + +- Install *FBX Exporter* 2.0.1 or newer via Package Manager. +- Add the following dependencies to `Unity.ProBuilder.AddOns.Editor.asmdef` in the "references" array: + - "Autodesk.Fbx" + - "Unity.Formats.Fbx.Editor" +- Open *Project Settings* and add `PROBUILDER_FBX_2_0_1_OR_NEWER` to the *Scripting Define Symbols* field. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/readme.md.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/readme.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..6279be05ac31a8876404cede525026057abc8508 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Addons/readme.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 775c13f8a03a14fcf9021cd73ff0377e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility.meta new file mode 100644 index 0000000000000000000000000000000000000000..6d54df8ea7ee1d5792cd774cde9024b7d7421b2e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e50e13f5457645a89d6c209eac9242a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor.meta new file mode 100644 index 0000000000000000000000000000000000000000..5863d917b27204dd9e17fdfe9853c18bc0a3addb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 274744740648f42a19d3e77602101b06 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssemblyInfo.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..c5148cf22c45a068d60b9006c99bc929fa7b4078 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssemblyInfo.cs @@ -0,0 +1,4 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Unity.ProBuilder.Editor")] +[assembly: InternalsVisibleTo("Unity.ProBuilder.Debug.Editor")] diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssemblyInfo.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssemblyInfo.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5671d4c8c67d2f8c237b15d42c37b98b6995a0cd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssemblyInfo.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a84ca2d947f34a09bd44bc592e22d49c +timeCreated: 1516811154 \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetId.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetId.cs new file mode 100644 index 0000000000000000000000000000000000000000..fe4085fe85139eef01c0162d264081ff086f7a0b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetId.cs @@ -0,0 +1,379 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEditor; +using UObject = UnityEngine.Object; + +namespace UnityEngine.ProBuilder.AssetIdRemapUtility +{ + [Serializable] + sealed class AssetIdentifierTuple + { + public AssetId source; + public AssetId destination; + + public AssetIdentifierTuple() + { + source = null; + destination = null; + } + + public AssetIdentifierTuple(AssetId src, AssetId dest) + { + source = src ?? new AssetId(); + destination = dest ?? new AssetId(); + } + + public bool AssetEquals(AssetIdentifierTuple other) + { + return AssetId.IsValid(source) == AssetId.IsValid(other.source) && + source.AssetEquals(other.source) && + AssetId.IsValid(destination) == AssetId.IsValid(other.destination) && + destination.AssetEquals(other.destination); + } + } + + [Serializable] + class StringTuple + { + public string key; + public string value; + + public StringTuple(string k, string v) + { + key = k; + value = v; + } + } + + enum Origin + { + Source, + Destination + } + + [Serializable] + class AssetIdRemapObject + { + public List<string> sourceDirectory = new List<string>(); + public string destinationDirectory = null; + public List<AssetIdentifierTuple> map = new List<AssetIdentifierTuple>(); + + public AssetIdentifierTuple this[int i] + { + get { return map[i]; } + set { map[i] = value; } + } + + public void Clear(Origin origin) + { + switch (origin) + { + case Origin.Source: + sourceDirectory.Clear(); + for (int i = 0, c = map.Count; i < c; i++) + map[i].source.Clear(); + break; + + case Origin.Destination: + destinationDirectory = ""; + for (int i = 0, c = map.Count; i < c; i++) + map[i].destination.Clear(); + break; + } + + map = map.Where(x => AssetId.IsValid(x.source) || AssetId.IsValid(x.destination)).ToList(); + } + + public void Delete(IEnumerable<AssetIdentifierTuple> entries) + { + map.RemoveAll(entries.Contains); + } + + public void Merge(IEnumerable<AssetIdentifierTuple> entries) + { + var types = entries.SelectMany(x => new[] { x.source.assetType, x.destination.assetType }); + + if (types.Where(x => !string.IsNullOrEmpty(x)).Distinct().Count() > 1) + { + Debug.LogError("Attempting to map entries of multiple types! This is not allowed."); + return; + } + + var arr = entries as AssetIdentifierTuple[] ?? entries.ToArray(); + var src = arr.Where(x => AssetId.IsValid(x.source) && !AssetId.IsValid(x.destination)).ToArray(); + var dst = arr.Where(x => AssetId.IsValid(x.destination)).ToArray(); + + if (dst.Count() != 1) + { + Debug.LogError("Merging AssetId entries requires only one valid destination entry be selected."); + return; + } + + var d = dst.First().destination; + + foreach (var s in src) + map.Add(new AssetIdentifierTuple(new AssetId(s.source), new AssetId(d))); + + map.RemoveAll(src.Contains); + map.RemoveAll(x => dst.Contains(x) && !AssetId.IsValid(x.source)); + } + } + + [Serializable] + class AssetId : IEquatable<AssetId> + { + const string k_MonoScriptTypeString = "UnityEditor.MonoScript"; + + static readonly string[] k_MonoScriptTypeSplit = new string[1] {"::"}; + + enum AssetType + { + Unknown = 0, + Default = 1, + MonoScript = 2, + // add more as special cases require + } + + /// <summary> + /// A path relative to the root asset directory (ex, ProBuilder/About/Hello.cs). + /// Stored per-asset because the path may change between upgrades. A single file name is stored at the tuple + /// level. + /// </summary> + public string localPath + { + get { return m_LocalPath; } + } + + public string name + { + get { return m_Name; } + } + + /// <summary> + /// Return the backing type of this asset. If the asset is a MonoScript, the associated mono class will be + /// returned. To get the Unity asset type use assetType. + /// </summary> + public string type + { + get { return IsMonoScript() ? m_MonoScriptClass : m_Type; } + } + + public string assetType + { + get { return IsMonoScript() ? k_MonoScriptTypeString : m_Type; } + } + + /// <summary> + /// File Ids associated with this asset. + /// </summary> + public string fileId + { + get { return m_FileId; } + } + + /// <summary> + /// Asset GUID. + /// </summary> + public string guid + { + get { return m_Guid; } + } + + [SerializeField] + string m_Guid; + + [SerializeField] + string m_FileId; + + [SerializeField] + string m_LocalPath; + + [SerializeField] + string m_Name; + + [SerializeField] + string m_Type; + + // the remaining properties are only relevant to monoscript files + AssetType m_InternalType = AssetType.Unknown; + string m_MonoScriptClass = null; + #pragma warning disable 414 + bool m_IsEditorScript = false; + #pragma warning restore 414 + + public AssetId() + { + Clear(); + } + + public AssetId(AssetId other) + { + m_Guid = other.m_Guid; + m_FileId = other.m_FileId; + m_LocalPath = other.m_LocalPath; + m_Name = other.m_Name; + m_Type = other.m_Type; + } + + public AssetId(UObject obj, string file, string guid, string localPath = null) + { + if (obj == null) + throw new SystemException("Cannot initialize an AssetIdentifier with a null object"); + + if (string.IsNullOrEmpty(guid)) + throw new SystemException("Cannot initialize an AssetIdentifier without a GUID"); + + if (string.IsNullOrEmpty(file)) + throw new SystemException("Cannot initialize an AssetIdentifier without a FileId"); + + m_FileId = file; + m_Guid = guid; + m_Name = obj.name; + m_LocalPath = localPath; + m_Type = GetUObjectTypeString(obj); + } + + static string GetUObjectTypeString(UObject obj) + { + MonoScript ms = obj as MonoScript; + + if (ms != null) + return string.Format("{0}{1}{2}", obj.GetType().ToString(), k_MonoScriptTypeSplit[0], ms.GetClass()); + + return obj.GetType().ToString(); + } + + public bool Equals(AssetId other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return string.Equals(m_Guid, other.m_Guid) && + string.Equals(m_FileId, other.m_FileId) && + string.Equals(m_LocalPath, other.m_LocalPath); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + var id = obj as AssetId; + if (id != null) return Equals(id); + return false; + } + + public override int GetHashCode() + { + int hash = 0; + + unchecked + { + hash = (hash * 7) + (string.IsNullOrEmpty(m_Guid) ? 0 : m_Guid.GetHashCode()); + hash = (hash * 7) + (string.IsNullOrEmpty(m_FileId) ? 0 : m_FileId.GetHashCode()); + hash = (hash * 7) + (string.IsNullOrEmpty(m_LocalPath) ? 0 : m_LocalPath.GetHashCode()); + } + + return hash; + } + + public void Clear() + { + m_Guid = ""; + m_FileId = ""; + m_LocalPath = ""; + m_Name = ""; + m_Type = ""; + m_InternalType = AssetType.Unknown; + m_MonoScriptClass = null; + m_IsEditorScript = false; + } + + public void SetPathRelativeTo(string dir) + { + m_LocalPath = m_LocalPath.Replace(dir, ""); + } + + public static bool IsValid(AssetId id) + { + return !string.IsNullOrEmpty(id == null ? null : id.m_Guid); + } + + public bool IsMonoScript() + { + if (m_InternalType == AssetType.Unknown) + { + if (m_Type.StartsWith(k_MonoScriptTypeString)) + { + m_InternalType = AssetType.MonoScript; + + try + { + m_MonoScriptClass = m_Type.Split(k_MonoScriptTypeSplit, StringSplitOptions.RemoveEmptyEntries)[1]; + if (m_LocalPath.EndsWith(".dll", StringComparison.InvariantCultureIgnoreCase)) + m_IsEditorScript = m_LocalPath.StartsWith("Editor/") || m_LocalPath.Contains("/Editor/") || PackageImporter.IsEditorPluginEnabled(guid); + else + m_IsEditorScript = m_LocalPath.StartsWith("Editor/") || m_LocalPath.Contains("/Editor/"); + } + catch + { + m_MonoScriptClass = "null"; +// pb_Log.Debug("Failed parsing type from monoscript \"" + m_Name + "\" (" + m_Type + ")"); + } + } + else + { + m_InternalType = AssetType.Default; + } + } + + return m_InternalType == AssetType.MonoScript; + } + + bool GetNamespaceAndType(string classType, out string namespaceString, out string typeString) + { + namespaceString = null; + typeString = null; + + if (string.IsNullOrEmpty(classType)) + return false; + + int last = classType.LastIndexOf('.'); + + if (last < 0) + { + typeString = classType; + return true; + } + + namespaceString = classType.Substring(0, last); + typeString = classType.Substring(last + 1, (classType.Length - last) - 1); + + return true; + } + + public bool AssetEquals(AssetId other) + { + if (!assetType.Equals(other.assetType)) + return false; + + return localPath.Equals(other.localPath); + } + + /// <summary> + /// Does the object this id reference exist in the project? + /// </summary> + /// <returns></returns> + public bool ExistsInProject() + { + string assetPath = AssetDatabase.GUIDToAssetPath(m_Guid); + if (string.IsNullOrEmpty(assetPath)) + return false; + var assetObj = AssetDatabase.LoadAssetAtPath<UObject>(assetPath); + if (assetObj == null) + return false; + return m_Type.Equals(GetUObjectTypeString(assetObj)); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetId.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetId.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..939df8b612c70221df016a4b8ef382825d156962 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ce1c67454d65d14eb3eae2f44b0ffa7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapBuilderEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapBuilderEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..e90be3957f8385be681ec86673a0c00debf93ded --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapBuilderEditor.cs @@ -0,0 +1,477 @@ +#if PROBUILDER_DEBUG && UNITY_2018_2_OR_NEWER + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEngine; +using UnityEditor; +using UObject = UnityEngine.Object; +using UnityEditor.IMGUI.Controls; + +namespace UnityEngine.ProBuilder.AssetIdRemapUtility +{ + /// <summary> + /// Utility class for creating GUID remap files. + /// </summary> + sealed class AssetIdRemapBuilderEditor : EditorWindow + { + const string k_RemapFilePath = "AssetIdRemap.json"; + const string k_NamespaceRemapFilePath = "NamespaceRemap.json"; + + static string remapFilePath + { + get { return "Assets/" + k_RemapFilePath; } + } + + static string namespaceRemapFilePath + { + get { return "Assets/" + k_NamespaceRemapFilePath; } + } + + static readonly string[] k_DirectoryExcludeFilter = new string[] + { + "ProBuilder/About", + "ProBuilder/AssetIdRemapUtility", + "ProBuilder/API Examples", + "ProBuilder/Data", + "ProBuilder/Icons", + "ProBuilder/Upgrade", + }; + + static GUIContent m_SourceGuiContent = new GUIContent("Source", "The old GUID and FileId."); + static GUIContent m_DestinationGuiContent = new GUIContent("Destination", "The new GUID and FileId."); + + [SerializeField] TextAsset m_RemapTextAsset = null; + [SerializeField] TextAsset m_NamespaceRemapTextAsset = null; + [SerializeField] string m_SourceDirectory; + [SerializeField] string m_DestinationDirectory; + + [SerializeField] TreeViewState m_TreeViewState; + [SerializeField] MultiColumnHeaderState m_MultiColumnHeaderState; + [SerializeField] bool m_DetailsExpanded; + + MultiColumnHeader m_MultiColumnHeader; + AssetIdRemapBuilderTreeView m_TreeView; + SearchField m_SearchField; + + [MenuItem("Tools/GUID Remap Editor")] + static void MenuOpenGuidEditor() + { + var win = GetWindow<AssetIdRemapBuilderEditor>(true, "GUID Remap Editor", true); + win.m_DetailsExpanded = true; + } + + static class Styles + { + static GUIStyle m_Container = null; + + public static GUIStyle container + { + get + { + if (m_Container == null) + { + m_Container = new GUIStyle(EditorStyles.helpBox); + m_Container.padding = new RectOffset(4, 4, 4, 4); + } + return m_Container; + } + } + } + + void OnEnable() + { + // Check whether there is already a serialized view state (state + // that survived assembly reloading) + if (m_TreeViewState == null) + m_TreeViewState = new TreeViewState(); + + if (m_MultiColumnHeaderState == null) + m_MultiColumnHeaderState = new MultiColumnHeaderState(new MultiColumnHeaderState.Column[] + { + new MultiColumnHeaderState.Column() { + headerContent = m_SourceGuiContent, + autoResize = true + }, + new MultiColumnHeaderState.Column() { + headerContent = m_DestinationGuiContent, + autoResize = true + }, + }); + + m_MultiColumnHeader = new MultiColumnHeader(m_MultiColumnHeaderState); + m_MultiColumnHeader.ResizeToFit(); + m_TreeView = new AssetIdRemapBuilderTreeView(m_TreeViewState, m_MultiColumnHeader); + m_TreeView.remapObject = GetGuidRemapObject(); + m_TreeView.Reload(); + + m_SearchField = new SearchField(); + } + + void OnDestroy() + { + if (m_TreeView.isDirty) + { + if (EditorUtility.DisplayDialog("Unsaved Changes", "There are unsaved changes to the remap file. Save these changes?", "Save", "Discard")) + Save(); + } + } + + string GetRemapFilePath() + { + if (m_RemapTextAsset != null) + return AssetDatabase.GetAssetPath(m_RemapTextAsset); + return remapFilePath; + } + + void Save() + { + File.WriteAllText(GetRemapFilePath(), JsonUtility.ToJson(m_TreeView.remapObject, true)); + AssetDatabase.ImportAsset(GetRemapFilePath()); + EditorGUIUtility.PingObject(AssetDatabase.LoadAssetAtPath<TextAsset>(GetRemapFilePath())); + m_TreeView.isDirty = false; + } + + void OnGUI() + { + GUILayout.BeginHorizontal(EditorStyles.toolbar); + + if (GUILayout.Button(m_DetailsExpanded ? "Hide" : "Show", EditorStyles.toolbarButton)) + m_DetailsExpanded = !m_DetailsExpanded; + + GUILayout.FlexibleSpace(); + + GUI.enabled = m_TreeView.isDirty; + + if (GUILayout.Button("Revert", EditorStyles.toolbarButton)) + { + m_TreeView.remapObject = null; + m_TreeView.remapObject = GetGuidRemapObject(); + m_TreeView.Reload(); + m_TreeView.isDirty = false; + } + + if (GUILayout.Button("Save", EditorStyles.toolbarButton)) + Save(); + + GUI.enabled = true; + + GUILayout.EndHorizontal(); + + if (m_DetailsExpanded) + { + EditorGUI.BeginChangeCheck(); + + m_RemapTextAsset = (TextAsset)EditorGUILayout.ObjectField("Remap", m_RemapTextAsset, typeof(TextAsset), false); + m_NamespaceRemapTextAsset = (TextAsset)EditorGUILayout.ObjectField("Namespace", m_NamespaceRemapTextAsset, typeof(TextAsset), false); + + if (EditorGUI.EndChangeCheck()) + { + m_TreeView.remapObject = null; + m_TreeView.remapObject = GetGuidRemapObject(); + m_TreeView.Reload(); + Repaint(); + } + + EditorGUILayout.BeginVertical(Styles.container); + GUILayout.Label("Package Directories", EditorStyles.boldLabel); + EditorGUILayout.BeginVertical(Styles.container); + m_SourceDirectory = DoDirectoryField("Source", m_SourceDirectory); + + EditorGUI.BeginChangeCheck(); + if (GUILayout.Button("Collect Source (Old) Asset Identifiers")) + GetRemapSource(m_SourceDirectory); + + EditorGUILayout.EndVertical(); + EditorGUILayout.BeginVertical(Styles.container); + m_DestinationDirectory = DoDirectoryField("Destination", m_DestinationDirectory); + + if (GUILayout.Button("Collect Destination (New) Asset Identifiers")) + GetRemapDestination(m_DestinationDirectory); + + if (EditorGUI.EndChangeCheck()) + m_TreeView.Reload(); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + } + + GUILayout.BeginHorizontal(); + GUILayout.Label("Asset Id Mapping", EditorStyles.boldLabel); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("...")) + { + var menu = new GenericMenu(); + + menu.AddItem(new GUIContent("Clear Source", ""), false, () => + { + GetGuidRemapObject().Clear(Origin.Source); + m_TreeView.Reload(); + m_TreeView.isDirty = true; + }); + + menu.AddItem(new GUIContent("Clear Destination", ""), false, () => + { + GetGuidRemapObject().Clear(Origin.Destination); + m_TreeView.Reload(); + m_TreeView.isDirty = true; + }); + + menu.ShowAsContext(); + } + + GUILayout.EndHorizontal(); + + Rect last = GUILayoutUtility.GetLastRect(); + + m_TreeView.searchString = m_SearchField.OnGUI(new Rect(last.x, last.y + last.height + 4, position.width - last.x * 2f, 20f), + m_TreeView.searchString); + + Vector2 treeStart = new Vector2(last.x, last.y + last.height + 4 + 20f + 4f); + + m_TreeView.SetRowHeight(); + + m_TreeView.OnGUI(new Rect(treeStart.x, treeStart.y, position.width - treeStart.x * 2, position.height - treeStart.y)); + } + + static string DoDirectoryField(string title, string value) + { + GUILayout.BeginHorizontal(); + EditorGUI.BeginChangeCheck(); + + value = EditorGUILayout.TextField(title, value); + + if (GUILayout.Button("Select", GUILayout.MaxWidth(60))) + value = GetSelectedDirectory(); + + bool didChange = EditorGUI.EndChangeCheck(); + bool doOpenFolderPanel = GUILayout.Button("...", GUILayout.MaxWidth(32)); + + GUILayout.EndHorizontal(); + + if (doOpenFolderPanel) + { + value = EditorUtility.OpenFolderPanel(title, value, ""); + didChange = true; + } + + return didChange ? value = value.Replace("\\", "/").Replace(Application.dataPath, "Assets") : value; + } + + void GetRemapSource(string directory) + { + if (string.IsNullOrEmpty(directory) || !Directory.Exists(directory)) + { + Debug.LogWarning("No source directory selected."); + return; + } + + var remapObject = GetGuidRemapObject(); + + string localDirectory = directory.Replace("\\", "/").Replace(Application.dataPath, "Assets") + "/"; + + if (!remapObject.sourceDirectory.Contains(localDirectory)) + remapObject.sourceDirectory.Add(localDirectory); + + List<AssetIdentifierTuple> map = remapObject.map; + + foreach (var id in GetAssetIdentifiersInDirectory(localDirectory, k_DirectoryExcludeFilter)) + { + id.SetPathRelativeTo(localDirectory); + + if (map.Any(x => x.source != null && x.source.Equals(id))) + continue; + + // the only time where a destination can exist with a null source is when a single destination is in the + // map, so it's okay to grab the first and not bother searching for more dangling destination entries + AssetIdentifierTuple matchingDestination = + map.FirstOrDefault(x => + { + return x.destination != null && + x.destination.AssetEquals(id); + }); + + if (matchingDestination != null) + { + if (AssetId.IsValid(matchingDestination.source)) + map.Add(new AssetIdentifierTuple(id, matchingDestination.destination)); + else + matchingDestination.source = id; + } + else + { + map.Add(new AssetIdentifierTuple(id, null)); + } + } + + m_TreeView.isDirty = true; + } + + void GetRemapDestination(string directory) + { + if (string.IsNullOrEmpty(directory) || !Directory.Exists(directory)) + { + Debug.LogWarning("No destination directory selected."); + return; + } + + var remapObject = GetGuidRemapObject(); + + if (!string.IsNullOrEmpty(remapObject.destinationDirectory)) + { + if (!EditorUtility.DisplayDialog("Destination Directory Already Mapped", + "The destination directory has already been mapped. Continuing will overwrite the existing data. Are you sure you wish to continue?", + "Continue", "Cancel")) + return; + } + + string localDirectory = directory.Replace("\\", "/").Replace(Application.dataPath, "Assets") + "/"; + remapObject.destinationDirectory = localDirectory; + List<AssetIdentifierTuple> map = remapObject.map; + + foreach (var id in GetAssetIdentifiersInDirectory(localDirectory, k_DirectoryExcludeFilter)) + { + if (map.Any(x => x.destination.Equals(id))) + continue; + + id.SetPathRelativeTo(localDirectory); + + IEnumerable<AssetIdentifierTuple> matchingSources = + map.Where(x => x.source != null && x.source.AssetEquals(id)); + + if (matchingSources.Any()) + { + foreach (var tup in matchingSources) + tup.destination = id; + } + else + { + map.Add(new AssetIdentifierTuple(null, id)); + } + } + + m_TreeView.isDirty = true; + } + + /// <summary> + /// Collect asset identifier information from all files in a directory. + /// </summary> + /// <param name="directory"></param> + /// <param name="directoryIgnoreFilter"></param> + static List<AssetId> GetAssetIdentifiersInDirectory(string directory, string[] directoryIgnoreFilter) + { + List<AssetId> ids = new List<AssetId>(); + string unixPath = directory.Replace("\\", "/"); + string packageAbsolutePath = null; + string packageRelativePath = null; + + if (directory.StartsWith("Packages/")) + { + // +1 because we want the trailing "/" to be with the packageRelativePath + var en = unixPath.IndexOf("/", "Packages/".Length, StringComparison.InvariantCulture) + 1; + packageRelativePath = unixPath.Substring(0, en); + var targetPathRelative = unixPath.Substring(en, unixPath.Length - en); + packageAbsolutePath = Path.GetFullPath(unixPath).Replace("\\", "/"); + if (!string.IsNullOrEmpty(targetPathRelative)) + packageAbsolutePath = packageAbsolutePath.Replace(targetPathRelative, ""); + } + + if (directoryIgnoreFilter != null && directoryIgnoreFilter.Any(x => unixPath.Contains(x))) + return ids; + + foreach (string file in Directory.GetFiles(Path.GetFullPath(directory), "*", SearchOption.TopDirectoryOnly)) + { + if (file.EndsWith(".meta") || Path.GetFileName(file).StartsWith(".")) + continue; + + string localPath = file.Replace("\\", "/").Replace(Application.dataPath, "Assets"); + + if (!string.IsNullOrEmpty(packageAbsolutePath)) + localPath = localPath.Replace(packageAbsolutePath, packageRelativePath); + + ids.AddRange(GetAssetIdentifiers(localPath)); + } + + foreach (string dir in Directory.GetDirectories(directory, "*", SearchOption.TopDirectoryOnly)) + { + if (Path.GetDirectoryName(dir).StartsWith(".")) + continue; + + string path = !string.IsNullOrEmpty(packageAbsolutePath) + ? dir.Replace("\\", "/").Replace(packageAbsolutePath, packageRelativePath) + : dir; + + ids.AddRange(GetAssetIdentifiersInDirectory(path, directoryIgnoreFilter)); + } + + return ids; + } + + static List<AssetId> GetAssetIdentifiers(string assetPath) + { + List<AssetId> ids = new List<AssetId>(); + + if (assetPath.EndsWith(".unity")) + return ids; + + foreach (UnityEngine.Object o in AssetDatabase.LoadAllAssetsAtPath(assetPath)) + { + string g; + long file; + + if (o != null && AssetDatabase.TryGetGUIDAndLocalFileIdentifier(o, out g, out file)) + ids.Add(new AssetId(o, file.ToString(), g.ToString(), assetPath)); + } + + return ids; + } + + /// <summary> + /// Load a remap json file from a relative path (Assets/MyRemapFile.json). + /// </summary> + /// <returns>A GuidRemapObject from the path, or if not found, a new GuidRemapObject</returns> + AssetIdRemapObject GetGuidRemapObject() + { + var remapObject = m_TreeView.remapObject; + + if (remapObject != null) + return remapObject; + + if (m_RemapTextAsset == null) + m_RemapTextAsset = AssetDatabase.LoadAssetAtPath<TextAsset>(remapFilePath); + + remapObject = new AssetIdRemapObject(); + + if (m_RemapTextAsset != null) + JsonUtility.FromJsonOverwrite(m_RemapTextAsset.text, remapObject); + + return remapObject; + } + + static string GetSelectedDirectory() + { + UObject o = Selection.activeObject; + + if (o != null) + { + string path = AssetDatabase.GetAssetPath(o.GetInstanceID()); + + if (!string.IsNullOrEmpty(path)) + { + if (Directory.Exists(path)) + return Path.GetFullPath(path); + + string res = Path.GetDirectoryName(path); + + if (!string.IsNullOrEmpty(res) && System.IO.Directory.Exists(res)) + return Path.GetFullPath(res); + } + } + + return Path.GetFullPath("Assets"); + } + } +} + +#endif diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapBuilderEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapBuilderEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b85dc2703cd9b5b2697fc7ea55ad43e732d45ed4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapBuilderEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20257f54bb007a547b7cb64d633a1664 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapBuilderTreeView.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapBuilderTreeView.cs new file mode 100644 index 0000000000000000000000000000000000000000..d6db98993185015a3a65e54b417e4d35df27722b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapBuilderTreeView.cs @@ -0,0 +1,219 @@ +#if PROBUILDER_DEBUG + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using UnityEngine; +using UnityEditor; +using UnityEditor.IMGUI.Controls; + +namespace UnityEngine.ProBuilder.AssetIdRemapUtility +{ + sealed class AssetIdRemapBuilderTreeView : TreeView + { + AssetIdRemapObject m_RemapObject = null; + const float k_RowHeight = 20f; + const float k_RowHeightSearching = 76f; + + public bool isDirty = false; + + public AssetIdRemapObject remapObject + { + get { return m_RemapObject; } + set { m_RemapObject = value; } + } + + public AssetIdRemapBuilderTreeView(TreeViewState state, MultiColumnHeader header) + : base(state, header) + { + rowHeight = 20f; + showAlternatingRowBackgrounds = true; + showBorder = true; + extraSpaceBeforeIconAndLabel = 18f; + } + + protected override TreeViewItem BuildRoot() + { + StringTupleTreeElement root = new StringTupleTreeElement(0, -1, -1, "Root", "", ""); + + var all = new List<TreeViewItem>(); + + int index = 1; + + for (int i = 0, c = remapObject.map.Count; i < c; i++) + { + all.Add(new StringTupleTreeElement(index++, 0, i, "Remap Entry", remapObject[i].source.name, remapObject[i].destination.name)); + all.Add(new StringTupleTreeElement(index++, 1, i, "Local Path", remapObject[i].source.localPath, remapObject[i].destination.localPath)); + all.Add(new StringTupleTreeElement(index++, 1, i, "GUID", remapObject[i].source.guid, remapObject[i].destination.guid)); + all.Add(new StringTupleTreeElement(index++, 1, i, "File ID", remapObject[i].source.fileId, remapObject[i].destination.fileId)); + all.Add(new StringTupleTreeElement(index++, 1, i, "Type", remapObject[i].source.type, remapObject[i].destination.type)); + } + + SetupParentsAndChildrenFromDepths(root, all); + return root; + } + + public void SetRowHeight() + { + rowHeight = hasSearch ? k_RowHeightSearching : k_RowHeight; + } + + protected override void RowGUI(RowGUIArgs args) + { + StringTupleTreeElement item = args.item as StringTupleTreeElement; + + for (int i = 0; i < args.GetNumVisibleColumns(); ++i) + { + CellGUI(args.GetCellRect(i), item, i, ref args); + } + } + + GUIContent m_CellContents = new GUIContent(); + + void CellGUI(Rect rect, StringTupleTreeElement item, int visibleColumn, ref RowGUIArgs args) + { + if (hasSearch) + { + AssetId id = visibleColumn == 0 ? m_RemapObject[item.index].source : m_RemapObject[item.index].destination; + + m_CellContents.text = "<b>Name: </b>" + id.name + + "\n<b>Path: </b>" + id.localPath + + "\n<b>Guid: </b>" + id.guid + + "\n<b>FileId: </b>" + id.fileId + + "\n<b>Type: </b>" + id.type + (string.IsNullOrEmpty(id.assetType) ? "" : " (" + id.assetType + ")"); + } + else + { + m_CellContents.text = item.GetLabel(visibleColumn); + } + + rect.x += foldoutWidth + 4; + rect.width -= (foldoutWidth + 4); + + if (hasSearch) + { + float textHeight = GUI.skin.label.CalcHeight(m_CellContents, rect.width); + rect.y += (rect.height - textHeight) * .5f; + rect.height = textHeight; + } + else + { + CenterRectUsingSingleLineHeight(ref rect); + } + + GUI.skin.label.richText = true; + GUI.Label(rect, m_CellContents); + } + + protected override bool DoesItemMatchSearch(TreeViewItem element, string search) + { + StringTupleTreeElement tup = element as StringTupleTreeElement; + + if (tup == null || tup.depth > 0) + return false; + + var o = m_RemapObject[tup.index]; + + try + { + var patterns = search.Split(new[] { "\\&" }, StringSplitOptions.None).Select(x => new Regex(x)); + + foreach (var pattern in patterns) + { + if (!(pattern.IsMatch(o.source.localPath) || + pattern.IsMatch(o.source.guid) || + pattern.IsMatch(o.source.fileId) || + pattern.IsMatch(o.source.type) || + pattern.IsMatch(o.destination.localPath) || + pattern.IsMatch(o.destination.guid) || + pattern.IsMatch(o.destination.fileId) || + pattern.IsMatch(o.destination.type))) + return false; + } + + return true; + } + catch + { + return o.source.localPath.Contains(search) || + o.source.guid.Contains(search) || + o.source.fileId.Contains(search) || + o.source.type.Contains(search) || + o.destination.localPath.Contains(search) || + o.destination.guid.Contains(search) || + o.destination.fileId.Contains(search) || + o.destination.type.Contains(search); + } + } + + protected override void ContextClicked() + { + GenericMenu menu = new GenericMenu(); + + menu.AddItem(new GUIContent("Combine", ""), false, () => + { + m_RemapObject.Merge(GetAssetIdSelection()); + isDirty = true; + Reload(); + SetSelection(new int[] {}); + }); + menu.ShowAsContext(); + } + + IEnumerable<AssetIdentifierTuple> GetAssetIdSelection() + { + return GetSelection().Select(x => m_RemapObject[((StringTupleTreeElement)FindItem(x, rootItem)).index]); + } + + protected override void CommandEventHandling() + { + var evt = Event.current; + + var selected = GetSelection(); + + if (selected.Count > 0) + { + if (evt.type == EventType.ValidateCommand) + { + if (evt.commandName.Equals("SoftDelete")) + evt.Use(); + } + else if (evt.type == EventType.ExecuteCommand) + { + if (evt.commandName.Equals("SoftDelete") + && EditorUtility.DisplayDialog("Delete", "Delete Selected Entries?", "Delete", "Cancel")) + { + m_RemapObject.Delete(GetAssetIdSelection()); + evt.Use(); + Reload(); + isDirty = true; + SetSelection(new int[] {}); + } + } + } + + base.CommandEventHandling(); + } + } + + class StringTupleTreeElement : TreeViewItem + { + public string item1; + public string item2; + public int index; + + public StringTupleTreeElement(int id, int depth, int sourceIndex, string displayName, string key, string value) : base(id, depth, displayName) + { + item1 = key; + item2 = value; + index = sourceIndex; + } + + public string GetLabel(int column) + { + return column < 1 ? item1 : item2; + } + } +} +#endif diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapBuilderTreeView.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapBuilderTreeView.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a60f8ff62340411d5cb680e83f0f8fa9ad292e95 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapBuilderTreeView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: daa26ef7aa9c82a47a06ddb6eefc0674 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..be3e4fc9c0af59fe70c146ce900b5dd8a6a89667 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapEditor.cs @@ -0,0 +1,722 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using UnityEditor; +using UnityEditor.IMGUI.Controls; +using UnityEngine; +using UObject = UnityEngine.Object; + +namespace UnityEngine.ProBuilder.AssetIdRemapUtility +{ + sealed class AssetIdRemapEditor : EditorWindow + { + const string k_ProBuilder2DllName = "ProBuilderCore-Unity5.dll"; + const string k_ProBuilder3DllName = "ProBuilderCore.dll"; + const string k_ConversionLogPath = "Temp/ProBuilderConversionLog.txt"; + + static readonly string[] k_RemapFilePaths = new string[] + { + "Packages/com.unity.probuilder/Content/Upgrade/AssetIdRemap-4_0_0.json" + }; + + static readonly string[] k_AssetExtensionsToRemap = new string[] + { + "*.meta", + "*.unity", + "*.asset", + "*.anim", + "*.animset", + "*.blendtree", + "*.buildreport", + "*.colors", + "*.controller", + "*.cubemap", + "*.curves", + "*.curvesNormalized", + "*.flare", + "*.fontsettings", + "*.giparams", + "*.gradients", + "*.guiskin", + "*.ht", + "*.mask", + "*.mat", + "*.mesh", + "*.mixer", + "*.overrideController", + "*.particleCurves", + "*.particleCurvesSigned", + "*.particleDoubleCurves", + "*.particleDoubleCurvesSigned", + "*.physicMaterial", + "*.physicsMaterial2D", + "*.playable", + "*.prefab", + "*.preset", + "*.renderTexture", + "*.shadervariants", + "*.spriteatlas", + "*.state", + "*.statemachine", + "*.texture2D", + "*.transition", + "*.webCamTexture", + }; + + static readonly string[] k_AssetStoreDirectorySuggestedDeleteIgnoreFilter = new string[] + { + "(^|(?<=/))Data(/|)$", + "(^|(?<=/))ProBuilderMeshCache(/|)$", + ".meta$", + "^\\." + }; + + static readonly string[] k_AssetStoreSuggestedFileDeleteIgnoreFilter = new string[] + { + ".meta$", + ".asset$", + "^\\." + }; + + static readonly string[] k_AssetStoreMustDelete = new string[] + { + "pb_Object.cs", + "pb_Entity.cs", + "ProBuilder/Classes", + "ProBuilder/Editor", + "ProBuilderCore-Unity5.dll", + "ProBuilderMeshOps-Unity5.dll", + "ProBuilderEditor-Unity5.dll" + }; + + // @todo show a warning when any code is not getting deleted + static readonly string[] k_AssetStoreShouldDelete = new string[] + { + "ProBuilder/API Examples", + "API Examples/Editor", + "ProBuilder/About", + "ProBuilder/Shader", + }; + + [Flags] + enum ConversionReadyState + { + Ready = 0, + NoActionRequired = 1 << 0, + SerializationError = 1 << 1, + AssetStoreDeleteError = 1 << 2, + AssetStoreDeleteWarning = 1 << 3, + AssetStoreInstallFound = 1 << 4, + DeprecatedAssetIdsFound = 1 << 5, + MissingRemapFile = 1 << 6, + ConversionRan = 1 << 7 + }; + + TextAsset m_RemapFile = null; + + [SerializeField] + string m_DeprecatedProBuilderDirectory; + [SerializeField] + bool m_DeprecatedProBuilderFound; + [SerializeField] + ConversionReadyState m_ConversionReadyState = ConversionReadyState.Ready; + + string m_ConversionLog; + + AssetTreeView m_AssetsToDeleteTreeView; + MultiColumnHeader m_MultiColumnHeader; + Rect m_AssetTreeRect = new Rect(0, 0, 0, 0); + [SerializeField] + TreeViewState m_TreeViewState = null; + [SerializeField] + MultiColumnHeaderState m_MultiColumnHeaderState = null; + GUIContent m_AssetTreeSettingsContent = null; + Vector2 m_ConversionLogScroll = Vector2.zero; + + static class Styles + { + public static GUIStyle settingsIcon { get { return m_SettingsIcon; } } + public static GUIStyle convertButton { get { return m_ConvertButton; } } + + static bool m_Init = false; + + static GUIStyle m_SettingsIcon; + static GUIStyle m_ConvertButton; + + public static void Init() + { + if (!m_Init) + m_Init = true; + else + return; + + m_SettingsIcon = GUI.skin.GetStyle("IconButton"); + m_ConvertButton = new GUIStyle(GUI.skin.GetStyle("AC Button")); + m_ConvertButton.margin.bottom += 4; + } + } + + internal static void OpenConversionEditor() + { + GetWindow<AssetIdRemapEditor>(true, "ProBuilder Update Utility", true); + } + + void OnEnable() + { + m_AssetTreeSettingsContent = EditorGUIUtility.IconContent("_Popup"); + + for (int i = 0, c = k_RemapFilePaths.Length; m_RemapFile == null && i < c; i++) + m_RemapFile = AssetDatabase.LoadAssetAtPath<TextAsset>(k_RemapFilePaths[i]); + + if (m_RemapFile == null) + { + Debug.LogWarning("Could not find a valid asset id remap file!"); + } + + if (m_TreeViewState == null) + m_TreeViewState = new TreeViewState(); + + if (m_MultiColumnHeaderState == null) + m_MultiColumnHeaderState = new MultiColumnHeaderState(new MultiColumnHeaderState.Column[] + { + new MultiColumnHeaderState.Column() + { + headerContent = new GUIContent("Obsolete Files to Delete") + } + }); + + m_MultiColumnHeader = new MultiColumnHeader(m_MultiColumnHeaderState) { height = 0 }; + m_AssetsToDeleteTreeView = new AssetTreeView(m_TreeViewState, m_MultiColumnHeader); + + ResetAssetsToDelete(); + + try + { + if (File.Exists(k_ConversionLogPath)) + m_ConversionLog = File.ReadAllText(k_ConversionLogPath); + else + m_ConversionLog = null; + } + catch + { + m_ConversionLog = null; + } + + // if the project just contains deprecated guids, and is already in text serialization mode, we can skip the dialog + // and just run the conversion immediately. + if (m_ConversionReadyState == (ConversionReadyState.Ready | ConversionReadyState.DeprecatedAssetIdsFound)) + DoConversion(); + } + + void OnGUI() + { + Styles.Init(); + + if (m_ConversionReadyState == ConversionReadyState.NoActionRequired || + m_ConversionReadyState == ConversionReadyState.ConversionRan) + { + if (!string.IsNullOrEmpty(m_ConversionLog)) + { + m_ConversionLogScroll = EditorGUILayout.BeginScrollView(m_ConversionLogScroll); + GUILayout.Label(m_ConversionLog, EditorStyles.wordWrappedLabel); + EditorGUILayout.EndScrollView(); + } + else + { + GUI.Label(new Rect(0, 0, position.width, position.height), "ProBuilder is up to date!", + EditorStyles.centeredGreyMiniLabel); + + if (Event.current.type == EventType.ContextClick) + { + var menu = new GenericMenu(); + menu.AddItem(new GUIContent("Find and replace deprecated Asset IDs"), false, () => + { + var log = new StringBuilder(); + RemapAssetIds(log); + Debug.Log(log); + }); + menu.ShowAsContext(); + } + } + return; + } + else if ((m_ConversionReadyState & ConversionReadyState.AssetStoreInstallFound) > 0) + { + GUILayout.Label("Obsolete Files to Delete", EditorStyles.boldLabel); + + m_AssetTreeRect = GUILayoutUtility.GetRect(position.width, 128, GUILayout.ExpandHeight(true)); + + EditorGUI.BeginChangeCheck(); + + DrawTreeSettings(); + + m_AssetsToDeleteTreeView.OnGUI(m_AssetTreeRect); + + if (EditorGUI.EndChangeCheck()) + m_ConversionReadyState = GetReadyState(); + } + else if ((m_ConversionReadyState & ConversionReadyState.DeprecatedAssetIdsFound) > 0) + { + var deprecatedIdsRect = GUILayoutUtility.GetRect(position.width, 32, GUILayout.ExpandHeight(true)); + GUI.Label(deprecatedIdsRect, "References to old ProBuilder install found.\n\nProject is ready for conversion.", + EditorStyles.centeredGreyMiniLabel); + } + + if ((m_ConversionReadyState & ConversionReadyState.SerializationError) > 0) + { + EditorGUILayout.HelpBox( + "Cannot update project with binary or mixed serialization.\n\nPlease swith to ForceText serialization to proceed (you may switch back to ForceBinary or Mixed after the conversion process).", + MessageType.Error); + + SerializationMode serializationMode = EditorSettings.serializationMode; + + EditorGUI.BeginChangeCheck(); + + serializationMode = (SerializationMode)EditorGUILayout.EnumPopup("Serialization Mode", serializationMode); + + if (EditorGUI.EndChangeCheck()) + { + EditorSettings.serializationMode = serializationMode; + m_ConversionReadyState = GetReadyState(); + } + } + + if ((m_ConversionReadyState & ConversionReadyState.AssetStoreDeleteError) > 0) + EditorGUILayout.HelpBox( + "Cannot update project without removing ProBuilder/Classes and ProBuilder/Editor directories.", MessageType.Error); + + if ((m_ConversionReadyState & ConversionReadyState.AssetStoreDeleteWarning) > 0) + EditorGUILayout.HelpBox( + "Some old ProBuilder files are not marked for deletion. This may cause errors after the conversion process is complete.\n\nTo clear this error use the settings icon to reset the Assets To Delete tree.", + MessageType.Warning); + + GUI.enabled = + (m_ConversionReadyState & (ConversionReadyState.AssetStoreDeleteError | ConversionReadyState.SerializationError)) == + ConversionReadyState.Ready; + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Convert to ProBuilder 4", Styles.convertButton)) + { + DoConversion(); + GUIUtility.ExitGUI(); + } + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + #if UNITY_2018_3_OR_NEWER + GUILayout.Space(16); + #endif + GUI.enabled = true; + } + + void DoConversion() + { + var log = new StringBuilder(); + + try + { + // Set serialization mode to mixed then back to force-text to reserialize any assets in binary form + // that may have somehow persisted (version control makes a state where "Force Text" is enabled with + // some existing binary assets persisting possible). this happened during testing. + // mixed doesn't refresh anything, but setting to ForceText re-iterates all assets and double-checks + // that they are in the correct format. + EditorSettings.serializationMode = SerializationMode.Mixed; + EditorSettings.serializationMode = SerializationMode.ForceText; + + EditorApplication.LockReloadAssemblies(); + + log.AppendLine("ProBuilder 4 Conversion Log"); + log.AppendLine(""); + + if ((m_ConversionReadyState & ConversionReadyState.AssetStoreInstallFound) == ConversionReadyState.AssetStoreInstallFound) + { + log.AppendLine("Removing existing ProBuilder files..."); + + if (RemoveAssetStoreFiles(m_AssetsToDeleteTreeView.GetRoot(), log)) + { + log.AppendLine("\nRemapping Asset Ids..."); + RemapAssetIds(log); + } + } + else + { + log.AppendLine("Remapping Asset Ids..."); + RemapAssetIds(log); + } + } + finally + { + m_ConversionLog = log.ToString(); + + try + { + Directory.CreateDirectory("Temp"); + File.WriteAllText(k_ConversionLogPath, m_ConversionLog); + } + catch + { + Debug.Log(m_ConversionLog); + } + + EditorApplication.UnlockReloadAssemblies(); + m_ConversionReadyState = ConversionReadyState.ConversionRan; + EditorApplication.delayCall += AssetDatabase.Refresh; + } + } + + void DrawTreeSettings() + { + Vector2 iconSize = Styles.settingsIcon.CalcSize(m_AssetTreeSettingsContent); + + Rect settingsRect = new Rect( + position.width - iconSize.x - 4, + 4, + iconSize.x, + iconSize.y); + + if (EditorGUI.DropdownButton(settingsRect, m_AssetTreeSettingsContent, FocusType.Passive, Styles.settingsIcon)) + { + var menu = new GenericMenu(); + menu.AddItem(new GUIContent("Reset"), false, ResetAssetsToDelete); + menu.ShowAsContext(); + } + } + + ConversionReadyState GetReadyState() + { + var state = ConversionReadyState.Ready; + + if (ProjectContainsOldAssetIds()) + state |= ConversionReadyState.DeprecatedAssetIdsFound; + + if (PackageImporter.IsPreProBuilder4InProject()) + state |= ConversionReadyState.AssetStoreInstallFound; + + if (state == ConversionReadyState.Ready && PackageImporter.IsProBuilder4OrGreaterLoaded()) + return ConversionReadyState.NoActionRequired; + + state |= ValidateProjectTextSerialized(); + state |= ValidateAssetStoreRemoval(); + + return state; + } + + const int k_DialogOkay = 0; + const int k_DialogAlt = 1; + const int k_DialogCancel = 2; + + void ResetAssetsToDelete() + { + m_DeprecatedProBuilderFound = PackageImporter.IsPreProBuilder4InProject(); + + if (m_DeprecatedProBuilderFound && !ValidateAssetStoreProBuilderRoot(m_DeprecatedProBuilderDirectory)) + m_DeprecatedProBuilderDirectory = FindAssetStoreProBuilderInstall(); + + // If still no old folder found (and PackageImporter tells us one exists), ask the user to point it out + if (m_DeprecatedProBuilderFound && !ValidateAssetStoreProBuilderRoot(m_DeprecatedProBuilderDirectory)) + { + int res = EditorUtility.DisplayDialogComplex( + "Could Not Find Existing ProBuilder Directory", + "Would you like to manually select the Asset Store installed ProBuilder folder and continue with the conversion process, or continue without removing old ProBuilder files (not recommended)?", + "Select Folder", + "Continue", + "Cancel"); + + if (res == k_DialogOkay) + { + // if they don't get it right after 3 attempts it's probably not going to happen and they'll be annoyed at + // an inescapable dialog loop + int userDirectoryPickAttempts = 0; + + while (userDirectoryPickAttempts++ < 3) + { + m_DeprecatedProBuilderDirectory = EditorUtility.OpenFolderPanel("Select ProBuilder Directory", "Assets", ""); + + if (string.IsNullOrEmpty(m_DeprecatedProBuilderDirectory)) + { + UnityEngine.Debug.LogWarning("Canceling ProBuilder Asset Store to Package Manager conversion. You may start this process again at any time by accessing the 'Tools>ProBuilder>Repair>Convert to ProBuilder 4' menu item."); + EditorApplication.delayCall += Close; + break; + } + + if (ValidateAssetStoreProBuilderRoot(m_DeprecatedProBuilderDirectory)) + { + // got a good directory, continue with process + break; + } + else + { + if (!EditorUtility.DisplayDialog("Selected Folder is not a ProBuilder Install", + "The folder selected not an old version of ProBuilder. Would you like to select a different directory?", "Yes", + "Cancel")) + { + EditorApplication.delayCall += Close; + break; + } + } + } + } + else if (res == k_DialogCancel) + { + UnityEngine.Debug.LogWarning("Canceling ProBuilder Asset Store to Package Manager conversion. You may start this process again at any time by accessing the 'Tools>ProBuilder>Repair>Convert to ProBuilder 4' menu item."); + EditorApplication.delayCall += Close; + } + } + + m_AssetsToDeleteTreeView.directoryRoot = m_DeprecatedProBuilderDirectory; + m_AssetsToDeleteTreeView.SetDirectoryIgnorePatterns(k_AssetStoreDirectorySuggestedDeleteIgnoreFilter); + m_AssetsToDeleteTreeView.SetFileIgnorePatterns(k_AssetStoreSuggestedFileDeleteIgnoreFilter); + m_AssetsToDeleteTreeView.Reload(); + m_AssetsToDeleteTreeView.ExpandAll(); + m_MultiColumnHeader.ResizeToFit(); + m_ConversionReadyState = GetReadyState(); + } + + bool RemoveAssetStoreFiles(TreeViewItem root, StringBuilder log) + { + AssetTreeItem node = root as AssetTreeItem; + + if (node != null && (node.enabled && !node.isMixedState)) + { + if (!AssetDatabase.MoveAssetToTrash(node.fullPath)) + { + if (!AssetDatabase.DeleteAsset(node.fullPath)) + { + if (Directory.Exists(node.fullPath)) + { + Directory.Delete(node.fullPath, true); + + if (Directory.Exists(node.fullPath)) + { + Debug.LogError("Directory.Delete failed, giving up. (" + node.fullPath + ")"); + return false; + } + else + { + File.Delete(node.fullPath.Trim('/') + ".meta"); + } + } + else if (File.Exists(node.fullPath)) + { + File.Delete(node.fullPath); + + if (File.Exists(node.fullPath)) + { + Debug.LogError("File.Delete failed, giving up (" + node.fullPath + ")"); + return true; + } + else + { + File.Delete(node.fullPath + ".meta"); + } + } + } + } + + log.AppendLine(" - " + node.fullPath); + + return true; + } + + if (node.children != null) + { + bool success = true; + + foreach (var branch in node.children) + if (!RemoveAssetStoreFiles(branch, log)) + success = false; + + return success; + } + + return true; + } + + void RemapAssetIds(StringBuilder log) + { + AssetIdRemapObject remapObject = new AssetIdRemapObject(); + JsonUtility.FromJsonOverwrite(m_RemapFile.text, remapObject); + + int remappedReferences = 0; + int modifiedFiles = 0; + string[] assets = k_AssetExtensionsToRemap.SelectMany(x => Directory.GetFiles("Assets", x, SearchOption.AllDirectories)).ToArray(); + var failures = new StringBuilder(); + var successes = new StringBuilder(); + int failCount = 0; + + for (int i = 0, c = assets.Length; i < c; i++) + { + EditorUtility.DisplayProgressBar("Asset Id Remap", assets[i], i / (float)c); + + int modified; + + if (!DoAssetIdentifierRemap(assets[i], remapObject.map, out modified)) + { + failures.AppendLine(" - " + assets[i]); + failCount++; + } + else + { + if (modified > 0) + { + successes.AppendLine(string.Format(" - ({0}) references in {1}", modified.ToString(), assets[i])); + modifiedFiles++; + } + } + + remappedReferences += modified; + } + + EditorUtility.ClearProgressBar(); + + log.AppendLine(string.Format("Remapped {0} references in {1} files.", remappedReferences.ToString(), modifiedFiles.ToString())); + + log.AppendLine(string.Format("\nFailed remapping {0} files:", failCount.ToString())); + + log.AppendLine(failCount > 0 ? failures.ToString() : " - (none)"); + + log.AppendLine("\nSuccessfully remapped files:"); + + log.Append(successes); + + PackageImporter.Reimport(PackageImporter.EditorCorePackageManager); + AssetDatabase.Refresh(); + } + + static bool DoAssetIdentifierRemap(string path, IEnumerable<AssetIdentifierTuple> map, out int modified, bool remapSourceGuid = false) + { + modified = 0; + + try + { + var sr = new StreamReader(path); + var sw = new StreamWriter(path + ".remap", false); + + List<StringTuple> replace = new List<StringTuple>(); + + IEnumerable<AssetIdentifierTuple> assetIdentifierTuples = map as AssetIdentifierTuple[] ?? map.ToArray(); + + foreach (var kvp in assetIdentifierTuples) + { + if (kvp.source.fileId.Equals(kvp.destination.fileId) && kvp.source.guid.Equals(kvp.destination.guid)) + continue; + + replace.Add(new StringTuple( + string.Format("{{fileID: {0}, guid: {1}, type:", kvp.source.fileId, kvp.source.guid), + string.Format("{{fileID: {0}, guid: {1}, type:", kvp.destination.fileId, kvp.destination.guid))); + } + + // If remapping in-place (ie, changing a package guids) then also apply to metadata + if (remapSourceGuid) + { + HashSet<string> used = new HashSet<string>(); + foreach (var kvp in assetIdentifierTuples) + { + // AssetIdentifier list will contain duplicate guids (assets can contain sub-assets, separated by fileId) + // when swapping meta file guids we don't need multiple entries + if (used.Add(kvp.source.guid)) + replace.Add(new StringTuple( + string.Format("guid: {0}", kvp.source.guid), + string.Format("guid: {0}", kvp.destination.guid))); + } + } + + while (sr.Peek() > -1) + { + var line = sr.ReadLine(); + + foreach (var kvp in replace) + { + if (line.Contains(kvp.key)) + { + modified++; + line = line.Replace(kvp.key, kvp.value); + break; + } + } + + sw.WriteLine(line); + } + + sr.Close(); + sw.Close(); + + if (modified > 0) + { + File.Delete(path); + File.Move(path + ".remap", path); + } + else + { + File.Delete(path + ".remap"); + } + } + catch + { + return false; + } + + return true; + } + + bool ProjectContainsOldAssetIds() + { + // todo this should only check with the loaded remap file, but for now it's hard-coded + return PackageImporter.IsPreProBuilder4InProject() || PackageImporter.DoesProjectContainDeprecatedGUIDs(); + } + + static string FindAssetStoreProBuilderInstall() + { + string[] matches = Directory.GetDirectories("Assets", "ProBuilder", SearchOption.AllDirectories); + + foreach (var match in matches) + { + string dir = match.Replace("\\", "/") + "/"; + + if (ValidateAssetStoreProBuilderRoot(dir)) + return dir; + } + + return null; + } + + /// <summary> + /// Is the ProBuilder folder an Asset Store installed version? + /// </summary> + /// <param name="dir"></param> + /// <returns></returns> + static bool ValidateAssetStoreProBuilderRoot(string dir) + { + return !string.IsNullOrEmpty(dir) && + File.Exists(dir + "/Classes/ProBuilderCore-Unity5.dll") && + File.Exists(dir + "/Editor/ProBuilderEditor-Unity5.dll"); + } + + ConversionReadyState ValidateAssetStoreRemoval() + { + ConversionReadyState state = (ConversionReadyState)0; + + List<AssetTreeItem> assets = m_AssetsToDeleteTreeView.GetAssetList(); + + if (assets.Any(x => !x.enabled && k_AssetStoreMustDelete.Any(y => x.fullPath.Contains(y)))) + state |= ConversionReadyState.AssetStoreDeleteError; + else + state |= ConversionReadyState.Ready; + + if (assets.Any(x => !x.enabled && k_AssetStoreShouldDelete.Any(y => x.fullPath.Contains(y)))) + state |= ConversionReadyState.AssetStoreDeleteWarning; + + return state; + } + + static ConversionReadyState ValidateProjectTextSerialized() + { + return EditorSettings.serializationMode == SerializationMode.ForceText + ? ConversionReadyState.Ready + : ConversionReadyState.SerializationError; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ebee3b5b0ba1bfa542c21ea703041b6c3ad73f5d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetIdRemapEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2fa4bbd1a7ccee24783998770d56522e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetTreeView.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetTreeView.cs new file mode 100644 index 0000000000000000000000000000000000000000..269afe079bb237d69dc1e4c1befcbdd55dfb5066 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetTreeView.cs @@ -0,0 +1,310 @@ +using System; +using System.IO; +using System.Linq; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using UnityEditor; +using UnityEditor.IMGUI.Controls; +using UnityEditor.VersionControl; +using UnityEngine; +using UObject = UnityEngine.Object; + +namespace UnityEngine.ProBuilder.AssetIdRemapUtility +{ + sealed class AssetTreeItem : TreeViewItem + { + string m_RelativePath; + string m_FullPath; + bool m_IsEnabled; + bool m_IsDirectory; + bool m_IsMixedState; + + public AssetTreeItem(int id, string fullPath, string relativePath) : base(id, 0) + { + m_IsDirectory = Directory.Exists(fullPath); + m_FullPath = fullPath; + m_RelativePath = relativePath; + m_IsEnabled = true; + displayName = m_FullPath.Replace("\\", "/").Replace(Application.dataPath, "Assets/"); + } + + public bool enabled + { + get { return m_IsEnabled; } + set { m_IsEnabled = value; } + } + + public bool isDirectory + { + get { return m_IsDirectory; } + set { m_IsDirectory = value; } + } + + public string fullPath + { + get { return m_FullPath; } + } + + public string relativePath + { + get { return m_RelativePath; } + } + + public bool isMixedState { get { return m_IsMixedState; } } + + public void SetEnabled(bool isEnabled) + { + enabled = isEnabled; + + if (children != null) + { + foreach (var child in children) + { + AssetTreeItem asset = child as AssetTreeItem; + + if (asset != null) + asset.SetEnabled(isEnabled); + } + } + + var upstream = parent; + + while (upstream != null) + { + var up = upstream as AssetTreeItem; + + if (up != null && up.children != null) + { + AssetTreeItem firstChild = up.children.FirstOrDefault() as AssetTreeItem; + + if (firstChild != null) + { + up.m_IsMixedState = up.children.Any(x => + { + var y = x as AssetTreeItem; + return y.enabled != firstChild.enabled; + }); + + if (!up.m_IsMixedState) + up.enabled = firstChild.enabled; + } + else + { + up.m_IsMixedState = false; + } + } + + upstream = upstream.parent; + } + } + } + + class AssetTreeView : TreeView + { + string m_RootDirectory = null; + GUIContent m_TempContent = new GUIContent(); + Rect m_ToggleRect = new Rect(0, 0, 0, 0); + + public string directoryRoot + { + get { return m_RootDirectory; } + set { m_RootDirectory = value; } + } + + public AssetTreeItem GetRoot() + { + return rootItem.hasChildren + ? rootItem.children.First() as AssetTreeItem + : null; + } + + IEnumerable<Regex> m_DirectoryIgnorePatterns; + IEnumerable<Regex> m_FileIgnorePatterns; + + public void SetDirectoryIgnorePatterns(string[] regexStrings) + { + m_DirectoryIgnorePatterns = regexStrings.Select(x => new Regex(x)); + } + + public void SetFileIgnorePatterns(string[] regexStrings) + { + m_FileIgnorePatterns = regexStrings.Select(x => new Regex(x)); + } + + public AssetTreeView(TreeViewState state, MultiColumnHeader header) : base(state, header) + { + showBorder = true; + columnIndexForTreeFoldouts = 0; + rowHeight = 18f; + } + + protected override TreeViewItem BuildRoot() + { + AssetTreeItem root = new AssetTreeItem(0, Application.dataPath, "") + { + depth = -1, + enabled = false + }; + + if (string.IsNullOrEmpty(m_RootDirectory) || !Directory.Exists(m_RootDirectory)) + { + // if root has no children and you SetupDepthsFromParentsAndChildren nullrefs are thrown + var list = new List<TreeViewItem>() {}; + SetupParentsAndChildrenFromDepths(root, list); + } + else + { + int nodeIndex = 0; + PopulateAssetTree(m_RootDirectory, root, ref nodeIndex); + SetupDepthsFromParentsAndChildren(root); + ApplyEnabledFilters(root); + } + + return root; + } + + void PopulateAssetTree(string directory, AssetTreeItem parent, ref int nodeIdIndex) + { + string unixDirectory = directory.Replace("\\", "/"); + + AssetTreeItem leaf = new AssetTreeItem( + nodeIdIndex++, + unixDirectory, + unixDirectory.Replace(parent.fullPath, "").Trim('/')) + { + enabled = true + }; + + parent.AddChild(leaf); + + foreach (string path in Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly)) + { + if (path.StartsWith(".") || path.EndsWith(".meta")) + continue; + + string unixPath = path.Replace("\\", "/"); + + leaf.AddChild(new AssetTreeItem( + nodeIdIndex++, + unixPath, + unixPath.Replace(unixDirectory, "").Trim('/')) { enabled = true }); + } + + foreach (string dir in Directory.GetDirectories(directory, "*", SearchOption.TopDirectoryOnly)) + PopulateAssetTree(dir, leaf, ref nodeIdIndex); + } + + public void ApplyEnabledFilters(TreeViewItem root) + { + AssetTreeItem node = root as AssetTreeItem; + AssetTreeItem parent = root.parent as AssetTreeItem; + + if (node != null) + { + if (node.isDirectory) + node.SetEnabled( + (parent == null || parent.enabled) && + (m_DirectoryIgnorePatterns == null || !m_DirectoryIgnorePatterns.Any(x => x.IsMatch(node.fullPath)))); + else + node.SetEnabled( + (parent == null || parent.enabled) && + (m_FileIgnorePatterns == null || !m_FileIgnorePatterns.Any(x => x.IsMatch(node.fullPath)))); + } + + if (root.children != null) + foreach (var child in root.children) + ApplyEnabledFilters(child); + } + + protected override void AfterRowsGUI() + { + if (rootItem.hasChildren) + return; + + if (Event.current.type == EventType.Repaint) + { + Rect r = new Rect(treeViewRect); + // not sure why there is a two row pad to the treeViewRect + r.y -= rowHeight * 2; + GUI.Label(r, "No Existing ProBuilder Install Found", EditorStyles.centeredGreyMiniLabel); + } + } + + protected override void RowGUI(RowGUIArgs args) + { + CenterRectUsingSingleLineHeight(ref args.rowRect); + args.rowRect.xMin += GetContentIndent(args.item); + + AssetTreeItem item = args.item as AssetTreeItem; + m_TempContent.text = item.relativePath; + m_TempContent.tooltip = item.fullPath; + m_ToggleRect.x = args.rowRect.xMin; + m_ToggleRect.y = args.rowRect.yMin; + m_ToggleRect.width = 16; + m_ToggleRect.height = args.rowRect.height; + args.rowRect.xMin += m_ToggleRect.width; + + EditorGUI.BeginChangeCheck(); + EditorGUI.showMixedValue = item.isMixedState; + item.enabled = EditorGUI.Toggle(m_ToggleRect, "", item.enabled); + EditorGUI.showMixedValue = false; + + if (EditorGUI.EndChangeCheck()) + { + if (GetSelection().Any(x => FindItem(x, rootItem) == item)) + { + foreach (int id in GetSelection()) + { + var sel = FindItem(id, rootItem) as AssetTreeItem; + + if (sel != null) + sel.SetEnabled(item.enabled); + } + } + else + { + item.SetEnabled(item.enabled); + } + } + + bool guiEnabled = GUI.enabled; + GUI.enabled = item.enabled; + GUI.Label(args.rowRect, m_TempContent); + GUI.enabled = guiEnabled; + } + + protected override void ContextClickedItem(int id) + { + var clicked = FindItem(id, rootItem) as AssetTreeItem; + if (clicked != null) + { + var menu = new GenericMenu(); + menu.AddItem(new GUIContent("Show Asset"), false, () => + { + EditorGUIUtility.PingObject(AssetDatabase.LoadAssetAtPath<UObject>(clicked.fullPath)); + }); + menu.ShowAsContext(); + } + } + + public List<AssetTreeItem> GetAssetList() + { + List<AssetTreeItem> assets = new List<AssetTreeItem>(); + GatherTreeItems(rootItem as AssetTreeItem, assets); + return assets; + } + + void GatherTreeItems(AssetTreeItem node, List<AssetTreeItem> list) + { + if (node == null) + return; + + list.Add(node); + + if (node.children != null) + foreach (var child in node.children) + if (child is AssetTreeItem) + GatherTreeItems(child as AssetTreeItem, list); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetTreeView.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetTreeView.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e0e7fb3acdad289c11e9ac1863519ec8f6aa7fa7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/AssetTreeView.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 709975e9e21e4a52a8ea44cd4a779feb +timeCreated: 1512405263 \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/PackageImporter.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/PackageImporter.cs new file mode 100644 index 0000000000000000000000000000000000000000..8a9c76f6fb91dcf1baa193003a1fb5a71f5f658f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/PackageImporter.cs @@ -0,0 +1,139 @@ +using System; +using System.IO; +using System.Linq; +using System.Text; +using UnityEditor; +using UnityEngine; + +namespace UnityEngine.ProBuilder.AssetIdRemapUtility +{ + static class PackageImporter + { + const string k_PackageManagerEditorCore = "e98d45d69e2c4936a7382af00fd45e58"; + const string k_AssetStoreEditorCore = "4df21bd079886d84699ca7be1316c7a7"; + const string k_ProBuilder2CoreGUID = "0472bdc8d6d15384d98f22ee34302f9c"; + const string k_ProBuilder3CoreGUID = "4f0627da958b4bb78c260446066f065f"; + + static readonly string[] k_AssetStoreInstallGuids = new string[] + { + "0472bdc8d6d15384d98f22ee34302f9c", // ProBuilderCore + "b617d7797480df7499f141d87e13ebc5", // ProBuilderMeshOps + "4df21bd079886d84699ca7be1316c7a7" // ProBuilderEditor + }; + + static readonly string[] k_PackageManagerInstallGuids = new string[] + { + "4f0627da958b4bb78c260446066f065f", // Core + "9b27d8419276465b80eb88c8799432a1", // Mesh Ops + "e98d45d69e2c4936a7382af00fd45e58", // Editor + }; + + internal static string EditorCorePackageManager { get { return k_PackageManagerEditorCore; } } + internal static string EditorCoreAssetStore { get { return k_AssetStoreEditorCore; } } + + internal static void SetEditorDllEnabled(string guid, bool isEnabled) + { + string dllPath = AssetDatabase.GUIDToAssetPath(guid); + + var importer = AssetImporter.GetAtPath(dllPath) as PluginImporter; + + if (importer != null) + { + importer.SetCompatibleWithAnyPlatform(false); + importer.SetCompatibleWithEditor(isEnabled); + } + } + + internal static bool IsEditorPluginEnabled(string guid) + { + string path = AssetDatabase.GUIDToAssetPath(guid); + var importer = AssetImporter.GetAtPath(path) as PluginImporter; + if (!importer) + return false; + return importer.GetCompatibleWithEditor() && !importer.GetCompatibleWithAnyPlatform(); + } + + internal static void Reimport(string guid) + { + string dllPath = AssetDatabase.GUIDToAssetPath(guid); + + if (!string.IsNullOrEmpty(dllPath)) + AssetDatabase.ImportAsset(dllPath); + } + + static bool AreAnyAssetsAreLoaded(string[] guids) + { + foreach (var id in guids) + { + if (AssetImporter.GetAtPath(AssetDatabase.GUIDToAssetPath(id)) != null) + return true; + } + + return false; + } + + static bool FileContainsString(string path, string a, string b) + { + using (var sr = new StreamReader(path)) + { + while (sr.Peek() > -1) + { + var line = sr.ReadLine(); + + if (line.Contains(a) || line.Contains(b)) + return true; + } + } + + return false; + } + + internal static bool DoesProjectContainDeprecatedGUIDs() + { + var scenes = Directory.GetFiles("Assets", "*.unity", SearchOption.AllDirectories); + var prefabs = Directory.GetFiles("Assets", "*.prefab", SearchOption.AllDirectories); + var count = (scenes.Length + prefabs.Length) - 1f; + var exit = count < 1f; + + try + { + for (int n = 0; !exit && n < 2; n++) + { + var arr = n < 1 ? scenes : prefabs; + + for (int i = 0, c = arr.Length; !exit && i < c; i++) + { + if (FileContainsString(arr[i], k_ProBuilder2CoreGUID, k_ProBuilder3CoreGUID)) + return true; + + exit = EditorUtility.DisplayCancelableProgressBar( + "Checking for Broken ProBuilder References", + "Scanning scene " + arr[i], + i / count); + } + } + } + finally + { + EditorUtility.ClearProgressBar(); + } + + return false; + } + + /// <summary> + /// Check if any pre-4.0 ProBuilder package is present in the project + /// </summary> + /// <returns></returns> + internal static bool IsPreProBuilder4InProject() + { + return AreAnyAssetsAreLoaded(k_AssetStoreInstallGuids) + || AreAnyAssetsAreLoaded(k_PackageManagerInstallGuids); + } + + internal static bool IsProBuilder4OrGreaterLoaded() + { + return AppDomain.CurrentDomain.GetAssemblies().Any(x => x.ToString().Contains("Unity.ProBuilder")); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/PackageImporter.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/PackageImporter.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4d66e3e27282a9688bb540d920bd3c926283a327 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/PackageImporter.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bb48793c33304c1ca4300c46c9c13b46 +timeCreated: 1512069815 \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/Unity.ProBuilder.AssetIdRemapUtility.asmdef b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/Unity.ProBuilder.AssetIdRemapUtility.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..ed99c2de2d0d48cc0d3d5c30bfba4c3e59013af0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/Unity.ProBuilder.AssetIdRemapUtility.asmdef @@ -0,0 +1,10 @@ +{ + "name": "Unity.ProBuilder.AssetIdRemapUtility", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false +} \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/Unity.ProBuilder.AssetIdRemapUtility.asmdef.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/Unity.ProBuilder.AssetIdRemapUtility.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..8c760729c0837daea2cc6dc8d55618095d919b68 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/AssetIdRemapUtility/Editor/Unity.ProBuilder.AssetIdRemapUtility.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9caa7e155cb0648da84dca829b17620f +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/CHANGELOG.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..e0e3097ff0f5c3a93730938524813f1234dbdb6e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/CHANGELOG.md @@ -0,0 +1,2130 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [4.5.2] - 2021-06-08 + +### Bug Fixes + +- [case: 1332226] Fixed issue where some Gizmos menu items would be missing in projects that have ProBuilder package installed. + +## [4.5.1] - 2021-02-04 + +### Bug Fixes + +- [case: 1304561] Fix `Shape Preview` not rendering with the blue preview tint with High Definition Render Pipeline. + +## [4.5.0] - 2021-01-15 + +### Bug Fixes + +- Fixed the insertion of new points on a Poly Shape being unreliable. +- Fixed rect selection not working with Universal Render Pipeline. +- [case: 1281254] Fixed shader warning in URP for UNITY_PASS_FORWARDBASE macro redefinition. +- [case: 1294866] Fix annotation warning on InitializeOnLoad call. +- [case: 1304561] Fix `Shape Preview` not rendering with the blue preview tint. + +### Changes + +- Drop support for Unity 2018.3. This was necessary for optional assembly references. + +## [4.4.1] - 2020-11-10 + +- [case: 1286720] Fixed `Bezier Shape` and `Poly Shape` component preventing build when `Script Stripping` was enabled. + +## [4.4.0] - 2020-08-12 + +### Features + +- Added a `Select Path` tool. The default shortcut is `Ctrl + Shift + Click` or `Cmd + Shift + Click`. +- Added iterative selection on edges. + +### Bug Fixes + +- Ensure "ProBuilderize" action is enabled for current selection on opening main window. +- [case: 1258589] Fixed error in runtime sample examples. +- Fixed warning in `ShapeEditor` caused by duplicate using statements. +- [case: 1258421] Fixed an issue where GI UV streams would be lost at runtime due to `ProBuilderMesh` assigning a new `Mesh` to the statically combined `MeshFilter`. +- [case: 1251289] Fixed `m_WireMaterial null reference exception` when re-importing ProBuilder. +- Fixed `TooltipEditor.Hide` affecting performance linearly with scene size. +- [case: 1259506] Fixed shortcut not being saved in 2018.4. +- Fixed vertex colors not applying gamma-correct value when color space is Linear. +- [case: 1251574] Disable export options when no probuilder meshes are selected +- [case: 1248708] Fixed physx error when welding all vertices to a singularity. +- Fixed tooltips always clamping to the left of the screen on secondary monitors. +- Fixed `EditorUtility.SetIconEnabled` not respecting the enabled parameter. +- [case: 1241105] Fixed an issue where `Select Edge Loop` could overflow when encountering certain non-manifold geometry. +- [case: 1242263] Fixed `UV Editor` `Move` and `Rotate` tools throwing null reference exceptions as of Unity 2020.2.0a9. +- [case: 1251289] Fixed exception on script reloads in the `EditorMeshHandles` class. +- Fixed exception on script reloads in the `EditorMeshHandles` class. +- Reduced the amount of repaints in ProBuilder window. +- [case: 1249071] Fixed Shift selection being inconsistent. +- [case: 1249056] Fixed Ctrl selection being inconsistent. +- [case: 1247270] Fixed `Null Reference Exception` when entering Prefab Stage after merging multiple `ProBuilderMesh`. +- [case: 1252394] Fixed dragging selection with Ctrl problem (and key pressed problem in general). +- Fixed Cylinder shape clamping segments to 48. + +### Changes + +- Update to Settings Manager 1.0.3. + +### Known Issues + +- Prefab Stage does not work properly when `ProBuilderMesh` contains overrides that append geometry. +- Changelog dates pre-2.4.11-f.0+r4081 are incorrect. These releases were made from SVN, and the history was lost when converting to Git. + +## [4.3.1] - 2020-06-01 + +### Bug Fixes + +- [case: 1251289] Fixed exception on script reloads in the EditorMeshHandles class. + +## [4.3.0] - 2020-05-15 + +### Features + +- Added UI to reset Shape Editor parameters. +- Make public and document the Poly Shape component. + +### Bug Fixes + +- [case: 1242879] Fixed import error caused by UPM CI log file. +- [case: 1230949] Fixed EditorMeshHandles losing material references in some cases. +- [case: 1232389] Fixed Null Reference Exception thrown on applying Subdivide Object on complex New Poly Shape +- [case: 1238115] Fixed Exception thrown on selecting UV 2 mode with "Lock the SceneView handle tools" is enabled in the UV Editor +- Fixed New Shape menu item always creating a Cube instead of the last selected shape. +- [case: 1237636] Fixed exception being thrown when stripping pb components and smooth groups editor is open +- [case: 1230069] Fixed selection commands not being remapped to ProBuilder when in edge/face/vertex mode (Select All/Invert Selection/Deselect All) +- [case: 1225223] Fixed Mesh Collider component missing a reference to the mesh in builds. +- [case: 1225427] Fixed UV Editor exporting the UV template offset by 11 pixels when the editor window was dockable. +- Fix ProBuilderMesh.sharedTextureLookup throwing a null reference exception when accessed from runtime. +- [case: 1209522] Fixed Poly Shape component allowing incompatible Preset feature. +- [case: 1213742] Fixed bug where Delete menu item would incorrectly shows as available with no selection. +- [case: 1192479] Fixed an issue where translating UV positions in the UV Editor with a handle would not update the Inspector offset values. +- [case: 1176370] Fixed entering Play Mode with the Shape Editor open creating a new shape in the scene. +- [case: 1218413] Fixed Poly Shape input incorrectly snapping vertices when input plane is not on a grid. +- [case: 1223330] Fixed a crash when undoing the creation of a Poly Shape object. +- Fixed Shape Editor preferences not respecting "Reset All Preferences". +- [case: 1132509] Fixed Bevel sometimes resulting in non-conforming face normals. +- [case: 1158748] Fixed Export and Strip Scripts actions leaving Mesh Filter component hidden on resulting GameObjects. +- [case: 1224413] Fixed Shape Editor leaving behind a preview object if window is closed during play mode. +- [case: 1201746] The Move tool is now compatible with grid snapping (Unity 2019.3 and higher). +- [case: 1217930] Fixed duplicated objects shape reverts to original's mesh when entering play mode +- [case: 1214103] Fixed ProBuilder created meshes not rendering in project builds. +- [case: 1217024] Fixed inverted picking bias when cursor is not hovering selected object. +- [case: 1195261] Fixed an issue where the ProBuilderize action could cause the toolbar to emit GUILayout Group errors. +- [case: 1211721] Fixed tooltips in the ProBuilder toolbar not rendering on macOS. +- [case: 1167627] Fixed boolean operations not retaining material information. +- [case: 1210096] Fixed UV Editor rotation field allowing values outside of 360°. +- [case: 1214103] Fixed ProBuilder created meshes not appearing in built projects. +- [case: 1211169] Fixed Generate Shadow Object example throwing a Null Reference Exception when invoked. +- [case: 1209864] Fixed New Shape tool creating new GameObjects with the same name. +- [case: 1201858] Fixed Export action not showing a warning when attempting to export an empty selection. +- [case: 1205318] Fixed OBJ export not retaining material color information when Scriptable Render Pipeline is active. +- [case: 1194858] Fixed a Null Reference Exception in some cases when using the Bevel tool. +- [case: 1204731] Fixed marquee selection of mesh elements when using the High Definition Render Pipeline. +- [case: 1211096] Fixed tooltips rendering off screen in some cases. +- [case: 1203685] Fixed Poly Shape creation tool not accepting input when Scene View gizmos are disabled. +- [case: 1161998] Fixed an issue where scene objects could be selected through modal windows. +- [case: 1198568] Fixed MeshFilter and MeshCollider always showing properties as "Overridden" on Prefab instances. +- [case: 1204088] Fixed UV Editor actions window not using the mouse event, allowing inactive window properties to appear as interactable. +- [case: 1183101] Fixed broken help link in Smoothing Editor window. +- [case: 1173650] Fixed an issue that resulted in vertices and edges becoming unselectable on macOS in some cases. +- Fixed Edge pre-selection highlight not rendering on macOS when using Metal as a graphics backend. +- [case: 1198568] Fixed issues with prefab overrides not being applied to ProBuilderMesh components correctly. +- [case: 1198568] Fixed MeshFilter and ProBuilderMesh components incorrectly showing instance overrides on un-modified prefab instances. +- [case: 1194858] Fixed Bevel Edges throwing NullReferenceException in some cases. +- [case: 1208475] Fixed Set Pivot and Center Pivot actions throwing NullReferenceException if the selected mesh contains children. +- [case: 1183100] Fixed the Shape Editor Stair slider fields appearing too small to contain the text when Android is the selected build target. +- [case: 1206302] Fixed an issue with the Merge action that could result in invalid geometry. +- [case: 1161998] Fixed an issue where ProBuilder meshes could be selected through overlaying Editor windows. +- [case: 1198588] Fixed a rare case where ProBuilderMesh could throw errors due to an invalid internal state. +- [case: 1196134] Fixed an issue where resetting component data on a ProBuilderMesh through the Inspector window would not update the MeshFilter and scene gizmos. +- Fixed an issue where an invalid selection on ProBuilderMesh could prevent the selected mesh from being edited due to errors. +- Fixed case where the default material could fail to initialize when a Scriptable Render Pipeline is in use at runtime. + +### Changes + +- [case: 1203585] Removed Custom Shape option from the Shape Editor window. +- The ProBuilder Mesh component now has an icon in the Inspector. +- The MeshFilter component is now hidden by default on GameObjects created by ProBuilder, and the ProBuilderMesh component is renamed in the Inspector to ProBuilder MeshFilter. + +### Known Issues + +- Certain properties on ProBuilderMesh, MeshFilter, and MeshCollider always show as overridden on prefab instances. +- The ProBuilderMesh icon is always the Pro Skin version. +- The ProBuilderMesh icon is toggle-able in the Gizmos window (initial value is 'Off'). +- Marquee selection when the Universal Render Pipeline is enabled does not work (currently blocked due to URP missing required functionality). + +## [4.2.1] - 2019-11-22 + +### Features + +- Added the `Offset Elements` action to quickly move selected mesh elements in world, local, or element space. +- Added the ability to set a custom range in the `Subdivide Edges` options window. +- Added the ability to set wireframe and edge line width on macOS when using Metal as the graphics backend. + +### Bug Fixes + +- Fixed `Boolean Editor` menu item not respecting the Experimental Features Enabled preference. +- Fixed `Boolean Editor` preview images not updating with selection changes. +- Fixed potential error when pressing the `Object Mode` shortcut without a `ProBuilder Editor` instance available. +- Fixed an issue where a currently editing text field would lose focus when a ProBuilder tooltip was shown. +- Fixed a case where `Weld Vertices` could leave the mesh selection in an invalid state. +- Fixed an issue where a ProBuilder tooltip could appear when hovering on a window on top of the toolbar. +- Fixed the ProBuilder toolbar background color applying to entire button (Unity 2019.3 only). +- Fixed `Select by Material` sometimes returning incorrect results. +- Fixed `Merge Objects` not retaining active `GameObject` components and properties. +- Added a dialog when `New Poly Shape` fails to find an unlocked `Inspector` window. +- Fixed case where `New Poly Shape` could create a mis-aligned object when used with ProGrids. +- Fixed edge case where the ProBuilder selection could become desynchronized with the Unity selection. +- Fixed `UV Editor` window minimum width not being sufficient to accommodate the toolbar. +- Fixed a case where duplicate `ProBuilderMesh` components could share a reference to the same `Mesh`. +- Fixed an issue that caused mesh element picking to stop working for some users. +- Fixed the `Smooth Group` window toolbar buttons not showing active state correctly. +- Fixed a case where selecting a previously edited `ProBuilderMesh` could append to the prior selection instead of replacing it. +- Fixed some cases where `ProBuilderMesh` would incorrectly enforce a max vertex count. +- Fixed an issue that caused errors to thrown when entering play mode with the `Shape Tool` window open. +- Fixed the `Shape Tool` destroying and recreating the preview `GameObject` when adjusting settings. +- Fixed an issue where the `Poly Shape` editor would destroy the `GameObject` if initialized with an invalid path. +- Fixed a potential error when undoing a `ProBuilderize` action. +- Fixed a warning when importing ProBuilder to macOS projects using Metal as the rendering backend. + +### Changes + +- [Samples] Rename LWRP to Universal Render Pipeline. +- Added support for holes when creating shapes from a polygon (API only). +- [Samples] Remove obsolete references from `EventSystem` GameObject. +- [Samples] Remove `GUILayer` components from `Camera`. +- `Shape Tool` settings are now persistent as user settings. + +## [4.1.0] - 2019-07-03 + +### Features + +- Added the option to export assets either as prefabs, or just the mesh. +- Improved the naming of exported mesh assets. +- Added API examples as a sample package. +- Re-enabled FBX Exporter integration, adding support for quad export and automatic removal of ProBuilder components on export. +- Added ability to duplicate faces to a new game object or to new submesh. +- Added the option to toggle the dimensions overlay between object and element bounds. +- Added a shortcut to toggle the dimensions overlay between object, element, and off states. +- Added a `Duplicate Face` action. +- The UV Inspector is now resize-able from all sides and corners. +- Added the ability to set a `Poly Shape` height to `0` for a single face plane. +- Add support for HDRP and LWRP pipelines through Samples packages (available in the Package Manager UI for ProBuilder). +- Added the ability to copy UV transform values between manual and auto unwrapped faces. +- Added an explicit toggle to enable or disable rendering the background texture when exporting UV templates. +- Added additional methods for testing and fixing face topology (`MeshValidation.ContainsNonContiguousTriangles` and `MeshValidation.EnsureFacesAreComposedOfContiguousTriangles`). + +### Bug Fixes + +- Fixed new shapes not instantiating in prefab staging scenes. +- Fixed `Unlit Color` and `Face Highlight` shaders flickering in some cases. +- Fixed shortcuts not saving correctly in Unity 2018.3. +- Fixed a potential exception when an incompatible version of ProGrids is present in the project. +- Fixed an exception when maximizing and un-maximizing the ProBuilder editor window. +- Fixed the `Boolean Editor` incorrectly resizing it's contents. +- Fixed an exception when `Connect Edges` is executed on an edge with coplanar faces. +- Fixed a potential exception in the `Normals` class when vertex count exceeds `ushort.max`. +- Fixed an issue when upgrading ProBuilder from a version lower than `4.0.0` that would result in meshes with multiple materials being condensed to a single material. +- Fixed a potential exception when removing `ProBuilderMesh` components from code. +- Fixed an inconsistency in UV projection that could result in faces being unwrapped differently between Unity versions. +- Fixed obscured edges sometimes taking priority over visible edges when picking elements. +- Fixed `Select Holes` action incorrectly showing as disabled in some cases. +- Fixed compile errors when opened in Unity 2018.4. +- Fixed scene information view not showing the correct selected element counts. +- Fixed vertex dots rendering slightly offset from the vertex position with an orthographic camera. +- Fixed `Poly Shape` creation tool not recognizing terrain when adding the origin point. +- Fixed `Select Faces with Color` not selecting faces with no color. +- Fixed compile error in runtime samples on Unity 2019.3. +- Fixed `Split Vertices` not collecting coincident vertices when selected with a mouse click. +- Fixed case where `Apply Material` would not be registered for Undo. +- Fixed `Export OBJ` resulting in corrupted files when exporting multiple objects as a single model. +- Fixed `Poly Shape` tool incorrectly rendering a mesh preview before the shape is finalized. +- Fixed case where `Poly Shape` could leave the active tool in an invalid state. +- Fixed case where drag selecting a single vertex would enable "Collapse Vertices" in toolbar +- Fixed case where drag-and-dropping material onto selected faces applies material to all faces if "Edit UVs in Scene" enabled +- Fixed `Box Project UVs` not resetting UV coordinates to origin. +- Fixed naming conflict with `UnityEngine.Snapping` in Unity 2019.3. +- Fixed `Apply Material` not respecting the current face selection when editing UVs. +- Fixed the dimensions overlay graphics not updating when modifying vertices. +- Fixed bug where selecting an element with the `shift` key held would not make it the active selection. +- Fixed `Poly Shape` tool not clearing the mesh when an invalid path is created. +- Fixed `Collapse Vertices` action showing as available in some cases where the action was not applicable. +- Fixed an issue where setting the toolbar to use icon or text mode would not immediately refresh the UI. +- Fixed bug where exporting an OBJ could fail if a mesh did not have vertex colors. +- Fixed the shortcut for `Copy UVs` on macOS referencing `Control` instead of `Command`. +- Fixed an issue where the ProBuilder toolbar font size would initially be very small, then later return to the correct size (specific to Unity 2019.3). +- Fixed a bug that caused the `Material Editor` to not render the preview material on HDPI screens. +- Fixed a null reference error when attempting to subdivide a face with non-contiguous triangles. + +### Changes + +- Assembly definitions now have `Auto Referenced` enabled, meaning it is no longer required that a project use Assembly Definition files in order to access the ProBuilder API. +- Project layout restructured such that the git url may now be used as a version in the project manifest. +- Improved the default UV layout of Cone shape. +- Settings Manager is now a dependency instead of bundled with code. +- Changed the default value of `Apply Transforms` to false when exporting models. +- Changed the default value of `As Group` to true when exporting models. + +## [4.0.4] - 2019-03-13 + +### Bug Fixes + +- Set the pivot of merged meshes to the active selection pivot instead of origin. +- Fixed `Reset Auto UVs` not breaking element and texture group associations. +- Fixed in-scene texture tool setting faces to manual when editing in face mode. +- Fixed undo not refreshing the UV editor graph. +- Fixed UV editor tools remaining disabled after a selection change. +- Fixed `Auto Stitch UVs` action not getting correct edge for adjacent faces. +- Fixed `Boolean Tool` expecting certain mesh attributes to be present, causing errors in some cases. +- Fixed texture groups not saving correctly in some cases. +- Fixed selected object outline not rendering in specific cases. +- Fixed typo in Mirror Objects tooltip. +- Fixed `Export Asset` breaking prefab instances. +- `Vertex Color` action tooltip no longer mentions deprecated paint mode. +- Fixed changelog dates for January 2019. +- Fixed Material Editor rendering incorrectly when an SRP material is assigned to the "Quick Material" field. +- Lessen an edge case where `Math.PointInPolygon` could return the wrong value. +- Fixed an exception when keyframing mesh properties via Timeline. +- Fixed project settings not being consistently being saved in certain cases. +- Fixed assertion when importing ProBuilder to an empty project. +- Fixed warning in tests caused by a left-over meta file from a temporary directory. +- Fixed creating a new PB shape with the Shape Tool does not dirty the scene. +- Fixed MaterialEditor not filtering out unused submesh index when applying new material. +- Fixed Vertices/Faces/Edges picking in Prefab mode. +- Fixed Action window in UVEditor not scrollable. +- Fixed deep selection on faces shouldn't trigger when multiple faces are selected. +- Fixed UV action panel scroll does not work if nothing or just one vertex selected. +- Fixed `ProBuilderize` action potentially creating un-editable geometry if "Import Smoothing" is enabled. +- Fixed change to one member of a UV group not replicating to the other member of the group. +- Fixed UV group not having their settings applied at the same time. +- Fixed sometimes needing to click twice on a face in the UV editor to the right actions. +- Fixed de-selecting vertices not working properly in certain situations. +- Fixed edge selection sometimes picking edge behind the mesh. +- Fixed UV panel shows incorrect info when zero UVs are selected. +- Fixed deep Selection should not trigger if no elements are selected. +- Fixed Element Selection lost after using Weld action. +- Fixed UVs converting to manual when merging 2 objects. +- Fixed Selection being discarded when connecting edges. +- Fixed trigger and collider types not always hiding properly. +- Fixed Box Project resulting in skewed UVs. +- Fixed in-scene Texture Move tool not translating UVs at a constant speed when scaled. +- Fixed `Weld Vertices` and `Collapse Vertices` sometimes leaving invalid edges in affected faces. +- Fixed ProBuilder window not updating when toggling handle orientation from shortcut key. +- Fixed `Subdivide` action resulting in horizontally flipped UV coordinates. +- Fixed `Box Project` action resulting in horizontally flipped UV coordinates. +- Fixed UV Editor preview texture sometimes not appearing. +- Fixed lag when setting select mode via shortcuts. +- Frame bounds focuses on element selection when in Object mode. +- Apply material incorrectly applies to face selection when in Object mode. +- Dimension overlay displays element bounds when in Object mode. +- Fixed handle position not updating when the element selection mode changed. +- Fixed `Strip ProBuilder Scripts on Build` not being respected. +- Fixed `Export OBJ` not sharing vertex data, resulting in split vertices in other DCCs. + +### Changes + +- Name newly merged `GameObject`s after the active selected `GameObject`. +- Changed the order of UV transform operation (rotation and scale are now called before applying the anchor). +- Changed picking to now prefers the object hovered over the selected object. +- Added "Open ProBuilder" button back to `ProBuilderMesh` component Editor. +- Increased the minimum size of Auto UV Editor window to not require vertical scrollbars. +- Significantly improve the accuracy of `Convert to Auto UV` action. +- Add support for auto UV unwrapped faces in the `Auto Stitch UVS` action. +- Use `ShortcutManager` API to manage single-key shortcuts. +- Added option to show current tool delta in the Scene View ("Show Handle Info".) + +## [4.0.3] - 2019-01-25 + +### Bug Fixes + +- Fix an issue that caused version validation to run when entering playmode, resulting in large memory spikes and lag. +- Fix tooltips closing other popup dialogs. + +## [4.0.2] - 2019-01-18 + +### Bug Fixes + +- Fix OBJ export failing due to missing materials. + +## [4.0.1] - 2019-01-16 + +### Bug Fixes + +- Add missing [3.0.9] changelog entry. +- Update package metadata to meet current requirements. + +## [4.0.0] - 2019-01-14 + +### Features + +- New public API. +- Project now distributed as source code, with assembly definition files. +- Add experimental pre-selection highlight for vertices and faces (enable in Preferences / ProBuilder / Experimental). +- Improve the behaviour of vertex and edge selection with hidden faces. +- Add ability to resize the UV settings window. +- Dimensions overlay now works with mesh element selections. +- Update FBX Exporter integration to use version 2.0.0. +- Improve performance of UV calculation methods. +- Improve the default UV mapping of sphere primitives. +- Support new 2018.3 prefab system. +- Redesigned Lightmap UV workflow now exposes settings on the ProBuilderMesh component, provides a modifiable default value, and is generally smarter about keeping Lightmap UV channels in sync with changes. +- Improve performance of toolbar rendering by caching some frequently accessed selection information. +- Redesigned settings interface, now supports search and resetting individual fields. +- Add support for `Pivot` and `Center` handle position toggle. +- Handles now support operating in selection space (Position: Pivot + Orientation: Normal). +- Texture scene tool now supports vertices and edges. +- Improve performance of mesh rebuild functions. +- Improve performance of vertex, edge, and face gizmos. +- Respect Unity pivot mode and pivot orientation (note that setting `Orientation: Normal` overrides the Unity pivot orientation). +- Add a preference to disable depth testing for mesh selection highlights. +- Add manual documentation. + +### Bug Fixes + +- Fix regression that broke dragging and dropping GameObjects onto ProBuilder meshes. +- Fix Poly Shape and Bezier Shape incorrectly resetting materials to default. +- Fix `Export` not generating UV2 in some cases. +- Fix `Export` functions not refreshing the Project view. +- Fix edge colors not matching preferences. +- Fix oversized vertex handle pre-selection billboard. +- Fix `Collapse Vertices` breaking mesh topology. +- Fix "UV Overlap" warnings on default shapes when baking GI. +- Fix mismatched plane width, height segment fields. +- Fix ProGrids "Push to Grid" affecting un-selected vertices. +- Fix `Extrude` incorrectly applying smoothing groups to extruded face sides. +- Fix `Detach to GameObject` sometimes including children in duplicated `GameObject`. +- Fix vertex handle pre-selection gizmo drawing 2x larger on scaled screens. +- Fix "Detach to GameObject" deleting the current face selection. +- Fix deprecated GUID check running on every domain reload. +- Fix `ProBuilderize` importing quad topologies with incorrect winding. +- Fix `Extrude Edges` sometimes splitting vertices when extruding as a group. +- Fix toolbar vertex actions showing as available in some cases where not applicable. +- Fix case where drag selecting mesh elements could clear the current selection. +- Fix element preselection highlight incorrectly showing when a GUI control has focus. +- Fix `Create Poly Shape` throwing errors in some cases. +- Fix `Connect Edges` action showing incorrect results in notifications. +- Fix incorrect use of object finalizers in some classes. +- Fix vertex drag selection with "Select Hidden: Off" omitting distinct but coincident vertices. +- Fix changes to `MeshRenderer` materials being incorrectly reset by ProBuilder. +- Fix `Delete Faces` tooltip not showing "Backspace" as the shortcut key on Windows. +- Fix Auto UV settings inspector not allowing certain properties to be edited with multiple selections. +- Fix face, edge, and vertex modes requiring user to first select an object before registering element selection when clicking. +- Fix bug where adjusting shape creation parameters would move the preview mesh. +- Fix bug where the mesh element gizmos would not respect the screen DPI on startup. +- Fix `Pipe` and `Sphere` shapes not setting a consistent pivot point. +- Fix possible null reference exception when deleting the `Shape Editor` preview mesh. +- Automatically destroy invalid `Poly Shape` objects when the selection is lost. +- `Detach to GameObject` now sets the detached object as a child of the donor mesh. +- Fix vertex billboards not rendering when the backing graphics API does not support geometry shaders. +- Fix new shapes not instantiating on the grid when `Snap New Shape To Grid` is enabled. +- Fix potential error when `Poly Shape` enters an invalid path. +- Fix `Poly Shape` not instantiating on grid when ProGrids is enabled. +- Fix toggling static flags not consistently rebuilding lightmap UVs when `Auto Lightmap UVs` is enabled. +- Fix `Poly Shape` not aligning with the ProGrids plane. +- Fix FBX Exporter incompatibilities breaking compiliation. +- Fix stair shape showing dimensions field twice. +- Fix incorrect wireframe overlay when editing a `Poly Shape`. + +### Changes + +- Tests and documentation are no longer imported with package, significantly improving initial import times. +- Face selection highlight is now rendered with both front and back faces. +- Adding custom actions to the ProBuilder toolbar is now done by registering an attribute. +- ProBuilder Debug Editor removed. +- Rename `MenuAction::DoAlternativeAction` to `DoAlternateAction`. +- Simplify assembly definition files, merging ProBuilder.Core & ProBuilder.MeshOperations to single assembly. +- Minor performance improvements to some common mesh editing actions. +- Remove "Precise Element Selection" preference. +- Project preferences are no longer saved in the Assets directory (now located at "ProjectSettings/ProBuilderSettings.json"). +- Improve performance of normal and tangent calculations. +- `MeshSelection.Top()` becomes `MeshSelection.top` property. +- Include third party dependencies as source code with assembly definitions instead of pre-compiled DLLs. +- Performance optimization for selection changes in editor. +- Make auto-resizing colliders opt-in instead of on by default. +- Use the last selected mesh element as the active selection pivot, matching object selection. +- Remove "About" window. +- Expose APIs necessary for mesh element picking at runtime. + +### Changes since [4.0.0-preview.41] + +- Testing new CI runner. + +## [3.0.9] - 2018-05-30 + +- Fix exporting to OBJ and PLY not refreshing assets when the destination directory is in the project. +- Fix bug that broke drag and dropping prefabs onto ProBuilder meshes. + +## [3.0.8] - 2018-05-07 + +### Bug Fixes + +- Fix incompatibility with ProGrids 3.0.1. + +## [3.0.7] - 2018-04-30 + +### Features + +- Add a material property to the Poly Shape component. + +### Bug Fixes + +- Poly Shape creation now respects the user-set default material. + +## [3.0.6] - 2018-04-19 + +### Bug Fixes + +- Fix upgrade prompt failing to show on version changes. + +## [3.0.5] - 2018-04-16 + +### Bug Fixes + +- Fix About Window opening on every script reload event. + +## [3.0.4] - 2018-04-10 + +### Bug Fixes + +- Use the default material preference for shapes created through the Boolean Editor. + +## [3.0.3] - 2018-04-05 + +### Features + +- API Examples are now published on [Github](https://github.com/Unity-Technologies/ProBuilder-API-Examples). +- Expose poly shape creation methods. Add API example. +- Support drag and drop materials to ProBuilder meshes. +- Mesh handles now use Unity gizmo colors by default. +- New options to set unselected and selected edge colors. +- New option to set edge and wireframe line width (not available on Metal). + +### Bug Fixes + +- Fix scene info not updating with selection changes. +- Fix `Apply Material` only applying to parent gameobjects if children are also selected. +- Fix `pb_Object.SetSelectedFaces` setting duplicate vertex indices. +- Fix `Alt+Num` material shortcut throwing null if Material Editor has not been opened and no default palette is found. +- Fix bug where `Undo` on a Poly Shape would reset any mesh edits. +- Fix preferences interface not updating after resetting all preferences. +- Fix bug where the edge picker would prefer vertical lines over horizontal. +- Fix wireframe rendering with unselected edge color in certain cases. +- Fix edge selection preferring vertical edges. +- Expand preferences window contents to match size. +- Don't show "shortcuts were cleared" warning if no prior version is detected. +- Fix overexposed imgui controls in scene view with scene lighting disabled. +- Fix certain actions switching the current scene focus. +- Fix Create Material Palette failing to create asset. +- Export model files with culture invariant settings. +- Fix scene info display overlapping ProGrids toolbar in some cases. +- Fix local preferences not loading until restarting the ProBuilder editor. +- Fix Boolean Editor rendering a white texture filling the entire screen. + +### Changes + +- Remove update checking. +- Expose `pb_MeshImporter` class, making "ProBuilderize" action available at runtime. + +## [3.0.1-f.0] - 2018-02-12 + +### Features + +- ProBuilder now runs as package manager module. +- Custom color palettes for Vertex Color Editor. +- Added a new window to display licenses for third party software used in ProBuilder. +- Debug symbols are now included. +- Support partial and complete drag selection for edge elements. +- New `Set Trigger` and `Set Collider` replace the deprecated `pb_Entity` component. +- Add `pb_ShapeGenerator.CreateShape(pb_ShapeType shape)` function to build default primitives without requiring parameters. +- Add preference to set the static flags for new ProBuilder objects. + +### Bug Fixes + +- Fix "Select Hidden" preference not matching the state shown in toolbar on launch. +- Fix Standard Vertex Color shader errors in 2018.1 and up. +- Catch edge cases of bad input for Poly Shape, preventing console spam. +- Match element drag rect visual to Unity's. +- Fix Poly Shape objects not updating graphics on undo when not currently editing the contour. +- Fix "Connect Edges" notification showing 2x the amount of edges as connected. +- Fix ProBuilder Editor not refreshing after a ProBuilderize action. +- Fix UV editor throwing null if shader has no _MainTex uniform. +- Fix potential error if a menu action is called without a pb_Editor instance. +- Improve performance of pb_Editor selection caching, addressing lag when selecting high vertex count objects. +- Fix scene toolbar sometimes not matching free/pro skin. +- Fix washed colors in gui textures with linear rendering. +- Remove unused preferences from the ProBuilder/Preferences window. +- Fix torus and icosphere not remembering last used settings in a session. +- Fix Poly Shape editor repainting the scene view more than necessary. +- Corrected tool-tips for "Clear Smoothing" and "Break Smoothing" buttons. + +### Changes + +- Move Dimensions Overlay into ProBuilder menu. +- Move `ProBuilder2.Common` and `ProBuilder2.EditorCommon` namespaces to `ProBuilder.Core` and `ProBuilder.EditorCore`. +- Move `pb_Object` to ProBuilder.Core namespace. + +### Known Issues + +- "Library already loaded" warning logs when importing Package Manager over Asset Store install. +- "Cannot create menu item" warnings when importing Package Manager over Asset Store install. +- Deleting an Asset Store package before importing a Package Manager version does not automatically pop up the Convert To Package Manager editor window. +- API Examples are not accessible from Package Manager. + +### Changes from 3.0.0-f.1 + +- Fix `pb_Fbx` errors when Unity FbxExporter is present in project. +- Update Package Manager description and display name. + +## [2.9.8-f.2] - 2017-11-01 + +### Bug Fixes + +- Fix shader compile errors when targeting mobile platforms. +- Fix possible overflow in vector hashing functions. +- Fix ProBuilderize failing to import quads in some cases. +- Fix FBX export not including manually unwrapped UVs. +- Fix toolbar using old icons with basic skin. + +## [2.9.7-f.5] - 2017-10-23 + +### Features + +- Unity 2017.3 beta support. +- New toolbar icons (Right/Context + Click in Toolbar -> Use Icon Mode). +- Significantly improved quad detection in ProBuilderize function. +- ProBuilderize now able to import smoothing groups. +- Support exporting quads to FBX format (requires Unity FbxExporter in project). +- Newly redesigned `Smooth Groups Editor`. +- New `Select Face Loop` and `Select Face Ring` actions. + +### Bug Fixes + +- Fix possible null reference when picking ProBuilder objects. +- Fix "Select Hole" disappearing instead of showing as disabled. +- Fix "Extrude Face" disabled icon not matching current mode. +- Fix Standard Vertex Color shader preventing builds on some platforms when fog is enabled. + +### Changes + +- Don't show `pb_Lightmapping` warnings by default. +- Smoothing groups may now extend beyond the 42 provided in the editor. Any smoothing group between 1 and 24, or greater than 42 is treated as a smooth face (currently only accessible in code). +- Set ProBuilder Standard Vertex Color shader fallback to "Standard." + +## [2.9.5-f.3] - 2017-08-30 + +### Features + +- Deep selection support when clicking faces. + +### Bug Fixes + +- Drag select with "Select Hidden: Off" now works consistently in Unity 5.6 and up. +- Fix automatic lightmapping attempting to update while ProBuilder is modifying geometry. + +### Changes + +- Unity 4.7 and 5.0 are no longer supported (2.9.4 will continue to be available for these version of Unity). + +## [2.9.4-f.1] - 2017-08-03 + +### Features + +- When a lightmapping finishes baking show a warning if any ProBuilder objects marked as Detail were left out due to missing UV2s. + +### Bug Fixes + +- Fix single key shortcuts emitting system beep on Mac. +- Fix vertex movement not respecting snap settings when ProGrids is placed in Plugins folder. +- Don't delete UnityEngine meshes when unloading a scene in play mode. +- Fix occasional crashes when using Select Hole and Fill Hole actions. +- Fix hang on opening context menu with very large projects. +- Fix Vertex Color Palette not applying colors correctly in vertex mode. + +## [2.9.3-f.0] - 2017-07-13 + +### Features + +- Support exporting quads in OBJ format. +- Add a context menu item to quickly create material palettes from the current Asset window selection. + +### Bug Fixes + +- Use `additionalVertexStreams` mesh attributes where possible when ProBuilderizing. +- Fix for Windows version sometimes endlessly creating folders when root folder moved from Assets/ProCore. + +## [2.9.2-f.1] - 2017-06-22 + +### Bug Fixes + +- Add file stubs for deprecated repair actions to prevent compilation errors when updating. + +## [2.9.1-f.0] - 2017-06-12 + +### Features + +- New PLY model exporter. +- OBJ export rewritten, now supports: + - Multiple texture maps + - Vertex colors (MeshLab format) + - Texture map offset / scale + - Local or world space mesh coordinates + - PBR maps (http://exocortex.com/blog/extending_wavefront_mtl_to_support_pbr) +- Improve Mesh Asset export dialog and options. + +### Bug Fixes + +- Fix ProBuilder preferences sometimes not loading. +- Fix deprecated method warnings in 2017.1 beta. +- Fix occasionally flipped UV axis on merged faces. +- Don't crash if ProBuilder folder has been renamed. + +## [2.9.0-f.3] - 2017-05-22 + +### Features + +- Support for saving and loading custom Material Palettes. +- ProBuilder now able to store preferences per-project as well as globally. +- Significantly improve performance of Weld Vertices function. + +### Bug Fixes + +- Preferences Window now renders correctly in Unity 5.6 and up. +- Exit Bezier Shape editing when Esc is pressed. +- Quell unnecessary errors when ProGrids interface fails to load UnityEditor assembly. +- Fix potentially ambiguous reference to Axis enum in API examples. +- Fix mesh leak when exporting STL files. + +### Changes + +- Move pb_Constant into ProBuilder2.Common namespace. +- Move pb_Lightmapping class in EditorCommon namespace. +- Improve wording of warning when shortcut preferences are reset. + +## [2.8.1-f.0] - 2017-04-17 + +### Features + +- Improve grid snapping when placing Poly Shapes. +- Add a callback when a mesh is rebuilt (pb_EditorUtility.AddOnMeshCompiledListener). +- Remove max width limitation on Material Editor window. + +### Bug Fixes + +- Fix incorrect UV render scaling on retina and other scaled screens. +- Fix deprecated warnings on Handles calls in Unity 5.6. +- Fix Icosphere API example deprecated function calls in Unity 5.6. +- Fix UnityObjectToViewPos warnings Unity 5.6. +- Fix Poly Shape not generating UV2 for mesh. +- Catch an occasional Null Reference when viewing UV2 channel. +- Fix Null Reference in Poly Tool undo callbacks. +- Fix errors in adding pb_Entity script during repair mesh references action. +- Improve consistency of Vector2/3/4 hashing functions. +- Fix particularly slow function in MergeFaces action. +- Fix preferences GUI layout. + +### Changes + +- Start Poly Shape height at 0. +- First Poly Shape click always sets pivot. + +## [2.8.0-f.1] - 2017-03-29 + +### Features + +- New "Poly Shape" interactive shape. +- New "Bezier Shape" interactive shape. +- Unity 5.6 beta compatibility. +- Improve default UV layouts for new shapes. +- Add a shader for reference billboard planes ("ProBuilder/Reference Unlit"). + +### Bug Fixes + +- Fix material editor applying to child transforms of selection. +- Fix instantiated objects not getting a UV2 channel when "Auto Generate UV2" is enabled. +- Material Editor now works with a relative path. +- Fix incorrect handle rotations in Element mode. +- About Window now loads even when not in *Assets/ProCore/ProBuilder*. +- Address a rare NullReferenceException when ProBuilder Editor is initialized. +- Don't spam Console with errors if update check fails to connect (only affects WebPlayer target). +- Add a more descriptive message to update check if connection fails. + +### Changes + +- Automatically toggle Detail Entity Type object's lightmapping static flag, preventing broken lightmap atlases. + +## [2.7.0-f.7] - 2017-02-24 + +### Features + +- New redesigned "About" window. +- New "Check for Updates" window and menu item. +- Add a repair script to apply materials when upgrading from Basic to Advanced. +- Include option to restrict "Select by Vertex Color" to current selection. +- Add "Generate Shadow Volume" API example and action. +- Add preference to enable experimental features (current feature: Bezier shape). +- Add option to smooth round sides of cylinder in Shape Tool. +- Add repair script to strip and rebuild pb_Object from Unity mesh. +- Add repair script for rebuilding shared index caches (addressed IndexOutOfRange errors in RefreshNormals function). + +### Bug Fixes + +- Fix inconsistent About Window behavior when importing updates. +- Make face highlight code snippet more robust in Runtime Editing example. +- Don't leave a progress bar behind if Probuilderize fails. +- Fix ProBuilder-ize adding pb_Entity multiple times. +- Apply Quick Offset adjustments to all selected ProBuilder objects. + +## [2.6.9-f.3] - 2017-01-27 + +### Bug Fixes + +- Fix vertex handles appearing offset when using an orthographic scene view. +- Mark KDTree Triangle and pb_Stl as Any Platform in build targets. +- Fix compile errors in standard vertex color shader on Unity 5.5 on iOS +- Fix compile warnings in Unity 5.6.0b4 +- Use multi-Unity-version compatible shader in Vertex Colors API example. + +## [2.6.8-f.1] - 2017-01-16 + +### Features + +- Add option to restrict Select by Material to the current selection. +- Add alternate method of specifying torus radius dimensions. + +### Bug Fixes + +- Fix regression that broke iOS and Android build targets. +- Fix arch preview shape and built shape sides not matching. +- Fix issue where UV Editor could be out of sync with scene UVs after planar or box projection. +- Don't fail face or vertex picking when the required materials aren't found. +- Whenever a prefab change is detected rebuild the mesh. +- Fix null reference when attempting to bevel open edges. +- Remove unused and buggy Debug UVs shader. + +## [2.6.7-f.4] - 2017-01-09 + +### Features + +- New face extrusion options to extrude along face normal, vertex normal, or per-face. + +### Bug Fixes + +- Fix potential drag selection inconsistencies when picking vertices in Unity 5.5. +- Fix bug where Backspace key in UV Editor with a GUI control focused would incorrectly register as a shortcut. +- Fix auto uvs rotating around handle pivot when using the rotate gizmo. +- Add undo for auto uv changes made by gizmos. +- Fix uv tiling toolbar not applying with mixed selection. +- Move pb_Reflection to Editor so as not to be included in builds, fixing errors when targeting Windows Store. Remove unused ParseEnum<T> function in pbUtil for same reason. +- Retain smoothing group information when extruding. +- When flipping a selection of face edges where faces are not quads be specific about the reason for failing. +- Fix misc. potential hangs when registering ProBuilder objects for Undo. + +### Changes + +- Make default height segments for cylinder 0. +- Move some common class files into the Core folder so they're included with the Core lib instead of MeshOps. +- When grow selection by angle is off force iterative to on. + +## [2.6.6-f.0] - 2016-12-09 + +### Features + +- Unity 5.5 support. +- Improve readability of Unity version -> ProBuilder package chart. +- Improve performance of mesh rebuild functions. +- Add API example showing how to highlight faces based on distance to a point. + +### Bug Fixes + +- Don't update mouse edge when not in geometry mode. +- Fix face and edge previews only rendering a subset of elements on meshes with high vertex counts. +- ProBuilder Editor doesn't need to be open to export meshes. +- Fix weird triangulation on Door shape. + Fix some incorrect calls to pbUndo.RecordObjects that could cause Unity to lock up with large meshes. +- Fix bug where "Export Mesh Asset" would always create an extra folder. + +### Changes + +- pb_Object.Refresh now accepts a bitmask to enable/disable different component refreshes. +- Move Create ProBuilder Cube menu item to "GameObject/3D Object/ProBuilder Cube". + +## [2.6.5-f.0] - 2016-11-11 + +### Features + +- Add procedural mesh extrusion example. + +### Bug Fixes + +- Fix bug where face/vertex picking with hidden selection off and intersect rect would not work in deferred rendering path. +- Fix bug when "Meshes are Assets" is enabled where exiting play mode would clear the mesh cache. +- Fix bug when "Meshes are Assets" is enabled where entering play mode would invalidate the mesh cache. +- Fix bug when "Meshes are Assets" is enabled where deleting a selection of pb_Objects would leave orphaned cached meshes. +- Fix bug where UV2 channel of selected objects would be lost on scene save with "Meshes are Assets" enabled. +- Fix bug where stripping ProBuilder scripts with "Meshes are Assets" enabled would also delete the cached mesh asset. +- Fix incorrectly scaling slider control on retina display. + +## [2.6.4-f.1] - 2016-10-19 + +### Features + +- Unity 5.5 Beta compatibility. + +### Bug Fixes + +- Fix bug where generating UV2 would incorrectly merge incompatible vertices in the optimization function due to vertex references not being unique when returning from GeneratePerTriangleMesh. +- Add icons for `Drag Selection Mode`. +- Add `Toggle Drag Rect Mode` icons. +- Fix selected vertex billboards not rendering in 5.5 beta. +- Fix crash when setting pivot with multiple objects selected. +- Fix setting pivot of a parent object moving children. +- Don't disable the object outline when Probuilder is open, but do disable wireframe. +- Fix prism shape height resulting in half-sized shapes. +- Add `Triangulate Faces` icon. +- Ensure icons are always imported with the correct settings. +- Fix "Generate Scene UVs" toggle not being respected in `Generate UV2` action +- Fix bug where drag selecting with shift in subtraction mode with complete rect selection would always deselect the entire selection. + +## [2.6.3-f.4] - 2016-09-23 + +### Features + +- New `Vertex Positions Editor` provides fine-grained control over vertex postions. +- Add `Anchor` setting for Auto UVs to align faces before user transforms. +- When drag selecting faces add option to select by intersection. Toggle with menu item `Drag: Complete/Intersect`. +- New icons for `Select by {Material, Color}`. +- Significantly improve editor performance when drag selecting faces and vertices with `Select Hidden: Off`. +- New alternate drag selection modes: `Add`, `Subtract`, and `Difference` affects how the `Shift` key modifies selection when drag selecting elements. + +### Bug Fixes + +- Fix bug where using Undo in face selection mode could potentially delete faces on prefabs. +- Fix import settings on icons. +- Fix bug where `Fill Hole` would not correctly align normals after operation, sometimes also reversing neighboring face normals. +- Fix bug where `Fill Hole` would sometimes leave the filled faces with invalid edge caches (resulting in incorrect normals on extruding from the filled face). +- Added miscellaneous missing actions to documentation. +- Fix bug where drag selecting faces would sometimes leave the picker rect visible. +- Disable Select By Material/Color when no elements are selected. + +### Changes + +- Use Unity's default UV2 unwrapping parameters since they seem to produce generally better results than the padded params currently in use. +- New ProBuilder objects instantiate with `ShadowCastingMode.TwoSided` (configurable in Preferences/ProBuilder). + +## [2.6.2-f.0] - 2016-09-02 + +### Features + +- Add STL file export support. +- Standard Vertex Color shader now compatible with Unity 5.5 beta changes. +- Add API Example showing how to set custom default UV2 Unwrap Parameters. + +### Bug Fixes + +- Fix bug where exporting OBJ would sometimes insert "AllFiles" into the file path. +- Fix drag selecting edges then bridging sometimes using the default material instead of a neighboring one. +- Fix compile error when using Fog with Standard Vertex Color shader. +- Fix console warnings in Unity 5.5.0b1 +- Fix bug where `Select Edge Loop` would select too many edges. +- Don't show missing icon warnings unless in PB_DEBUG mode. + +## [2.6.1-f.0] - 2016-08-26 + +### Features + +- Add `Triangulate Face` action. +- Add ability to view UV2/3/4 channels in UV Editor. +- Add ability to edit per-object UV2 generation parameters in the Generate UV2 options menu. +- Improve performance of "Grow Selection" when flood selecting with angle restriction. +- Improve performance of some selection actions when in face mode. +- Add RenameNewObjects script to API examples folder (shows use of OnProBuilderObjectCreated delegate). +- Add "Select Faces with Material" and "Select Faces with Vertex Color" to the Selection menu. +- New options icon in toolbar: gear instead of triple lines. + +### Bug Fixes + +- Fix "About" window showing every changelog ever instead of just the latest. +- Fix bug in pb_Math.Normal(pb_Face) overload that would potentially return normals facing the wrong direction if fed ngons. +- Fix UV Editor incompatibilities with retina display on macOS. +- Fix bold label text color in Debug Window when Pro skin is used. +- Increase max allowed vertex handle size to 3 to accomodate macOS retina display. +- Fix import settings for `Center Elements` disabled icon. +- In ProBuilder-ize function don't bother showing 'include children' dialog if the top selection already contains all valid meshfilters +- Fix Advanced icon in PB Basic rendering blurry in toolbar. +- When freezing transforms also apply rotation in world space. Fixes some issues when freezing hierarchies of objects. +- Fix bug where edge ring would include faces with odd number of edges. +- Added "Fill Hole" and "Subdivide Edge" to documentation. +- Fix occasionally flipped face normals when connecting edges or vertices on n-gons. +- When connecting edges weed out any edges that don't connect to anything, preventing accidental edge subdivisions. + +### Changes + +- Make default angle error for uv2 unwrap a little higher to avoid bad unwraps in some common cases. +- Move ProBuilder-ize function to menu actions. + +## [2.6.0-f.1] - 2016-08-02 + +### Features + +- Add `Bevel Edges` action. +- Add `Fill Hole` action to quickly insert a face in a mesh hole (with option to fully select and fill hole or just the selected parts). +- Completely rewritten documentation: http://procore3d.github.io/probuilder2/ +- Add `Select Hole` menu action to quickly select the edges of any hole touching a selected vertex. +- Add a preference to disable "Precise Element Selection." When disabled edge and vertex modes will always select an edge or vertex no matter how far from the element they are. +- Add "Break Texture Groups" button to UV editor. +- Add non-manifold edge extrusion pref to Extrude Edge settings window. +- Replace mesh optimation functions with faster and more accurate versions. +- Improve performance of topology query operations (Grow Selection, Shrink Selection, Edge Loop, Edge Ring). +- `Center Pivot` action now available in Basic. +- Add Generate UV2 toolbar entry when "Disable Auto UV2 Generation" is enabled. +- Add a delegate in `pb_EditorUtility` to notify subscribers when a new pb_Object has been initialized. +- New API example `Tools > ProBuilder > API Examples > Log Callbacks Window` demonstrates hooking into various editor delegates. +- Adds an experimental new option to store Mesh objects as Assets in the project so as not to clutter the Unity scene file. Use with a prefab for maximum scene lean-ness. Enable this feature in Preferences/ProBuilder/Experimental/Meshes Are Assets. +- Add support for local/common toggles in Edge Debug mode. +- Add `Select Holes` action to editor toolbar (selects all connected open edge paths). +- `Connect {Edge, Vertices}` re-factored for speed and more robust edge case handling. +- New "Options" button for toolbar icons. +- Improve performance of `Delete Faces` action. +- Improve performance of `Subdivide` action. +- Add `Alt-S` shortcut for `Subdivide` action. +- Add option to `Mirror` action to either duplicate or move the selection when mirroring. + +### Bug Fixes + +- Fix some instances where modifying a mesh would result in NaN warnings. +- Fix icosphere audio example scene in ProBuilder Basic. +- Add `Center Pivot` action to menu. +- Bypass sRGB sampling for icons, fixing dark appearance in pro skin. +- Fix regression where switching between icon mode and text mode in toolbar would sometimes not immediately reload the toolbar. +- Fix an issue where meshes would be discarded and rebuilt on every instance id change, which Unity does a lot. The result of constant mesh rebuilds being invalidating the lightmap, making getting a decent bake very difficult. +- Ignore API examples in any build target that hasn't been tested (which is all of them save for standalones). +- Fix edge extrusion leaving black geometry when extrusion fails. +- Add extrude settings button to edge extrude toolbar item. +- Add a single context-sensitive Extrude shortcut so that super+e works properly in both edge & face modes. +- Fix 'KeyNotFound' exception when centering pivot sometimes. +- Fix UV3/4 assignment and getter functions reading out of bounds channel index. +- Fix Delete key notification not showing. +- Fix editor toolbar "leaking" due to incorrect hideflags in Unity 4. +- Fix cases where user could provide bad input to Arch generator. +- Fix `Weld Vertices` not welding vertices in some cases. +- Set detail pb_Objects with ReflectionProbeStatic flags. +- Fix key shortcuts for hidden but enabled menu actions not working. +- Don't show hover tooltips if mouse is outside window bounds. +- Fix some edge cases in `Conform Normals` action. +- Fix `Grow Selection` itererative field incorrectly being disabled when "Grow by Angle" is off. +- Fix issue where n-gons with > 90 degree angles would not auto UV unwrap correctly. +- Fix some cases where subdivide would fail due to non-planar vertex positions on a face. +- Fix bug where extruding edges or faces would sometimes align the inserted face normals incorrectly. +- Hide geometry actions when in object mode. +- Fix edge selection when mouse is hovering an object not in the selection but a valid edge is within distance of mouse. +- Fix bug where subdividing a face with an adjacent concave n-gon would break the adjacent face. +- When generating the menu item text for shortcuts always use lower case, since Mac doesn't recognize upper case as shortcuts. Fixes an issue with shortcuts not working on OSX. +- Support cases where texture groups on pb_Object aren't in linear order. +- Clear debug lines when a selected object is deleted. +- Fix bug where `Detach Faces` to submesh would incorrectly split all the detached selection vertices. +- Put UV Editor in namespace, preventing errors where common function names would be confused with other assets. +- In `pbUndo` use each individual object vertex count when deciding whether to diff or store object state for undo. Fixes hang when performing actions with small selections on large objects. +- Lower UV toolbar buttons by 1px when not using the Command GUIStyle since Button style adds 1px padding. +- When building ProBuilder delete user generated folders so that upgrades don't overwrite them. + +### Changes + +- Menu toolbar re-arranged for consistency. +- Remove UV2 generation parameters from pb_Object. +- Add a public function for setting tangents on pb_Objects. +- Deprecate GenerateUV2 extension method since mesh optimization is now an intertwined process. +- Improve hashing function in IntVec3 and Edge. +- Suffix pb_Math.Approx functions to make implicit casting of vectors more difficult to do accidentally. +- Move "World Space" toggle up in the Auto UV editor +- In Auto UV mode rename the scale property `Tiling`. +- `Detach Selection` now behaves like toolbar option panel instead of popup. +- Remove unnecessary option to save duplicates of selected gameobjects when using `Merge Objects` action. +- In addition to changing the icon and text, also show a brief explanation of the current handle alignment mode in the tooltip. +- Move Mirror to object level, making it an action instead of panel popup. + +## [2.5.0-f.0+r4241] - 2016-04-07 + +### Features + +- Toolbar redesign now adapts to both vertical and horizontal layouts (swap between Text and Icons by context clicking in the Inspector). +- New tooltips show inline documentation and keyboard shortcuts. Hold `Shift` to instantly view hovered tooltip, and turn off tooltips on hover in Preferences menu. +- New `Subdivide Edges` action inserts vertices along selected edges. +- GUI items are no longer stored in Resources. Changing the location of the ProBuilder directory is still supported. +- Add option to collapse vertices to the first selected vertex instead of always averaging. +- Mark the current mode and floating state in the toolbar context menu. +- Add preference toggle to disable Dimension Overlay lines. +- New Color Mask setting in Vertex Painter Editor enables painting only to specified component. +- Vector4 UV{3, 4} channels can now be stored in pb_Object (use pb.SetUVs(index, List<Vec4>)). + +### Bug Fixes + +- Fix shortcut editor modifier keys not being correctly stored. +- Fix Freeze Transforms moving objects when selection contains hierarchies of meshes. +- Entity visibility toggles no longer interferes with Collisions, as well as remembers all manually changed object visibility. +- Fix Element Toolbar placement in Scene view on Retina display Macs. +- Fix UVs all being set to {0,0} when using Weld in the UV Editor. +- When extruding an edge check that the new face winding order is equivalent to the face of the donor edge and flip if necessary. +- Fix shortcut editor not recognizing all keycode values (notably Alpha0-9). + +### Changes + +- Remove option to display Mode Toolbar in the Inspector window. +- ProBuilder2.Math namespace removed, pb_Math now belongs to ProBuilder2.Common. + +## [2.4.11-f.0+r4081] - 2016-04-07 + +### Bug Fixes + +- Fix regression in 2.4.10f2 that broke assigning materials in ProBuilder Basic. + +### API + +- Add `onEditLevelChanged` delegate to pb_Editor to notify other classes of edit level changes (Polybrush compatibility). + +## [2.4.10-f.2+r4027] - 2016-04-07 + +### Features + +- Shape and Material windows are now dockable (context click in window and select Window/Set {Floating, Dockable}). +- Add "Snap to Face" shortcut when dragging the move tool (hold 'C' while dragging to snap tool to the nearest face). +- New ShaderForge compatible Standard Vertex Color shader on ProBuilder default material. + +### Bug Fixes + +- Unity 5.4 compatibility. +- Workaround for Unity crash "Check DisallowAllocation Error" +- Fix most cases of meshes going completely black when modifying them in any way. +- Fix NullRef error when scaling a single selected edge. + +### Changes + +- Remove various `Get{Vertices, UVs, Triangles}` functions from `pb_Object`. Use `pbUtil.ValuesWithIndices` directly instead. +- Remove Instantiation API Example (there's nothing special about instantiating ProBuilder meshes anymore). + +## [2.4.9-f.1+r3978] - 2016-04-07 + +### Features + +- New "Flip Edge" tool swaps the direction of a connecting edge in a quad. + +### Bug Fixes + +- Fix bug where Trigger or Collider entities could remain visible in play mode when using source. +- Fix slowdowns when inserting edge loops due to undo. +- Fix missing namespace errors in Unity 5.3. +- Increase the resolution with which vertex positions are compared to avoid incorrectly merging distinct vertices (often causing trouble when modeling at very small dimensions). + +## [2.4.8-f.1+r3764] - 2016-04-07 + +### Features + +- Enable Set Pivot, Delete, and Vertex Painter in ProBuilder Basic. +- New Standard Shader with vertex color support (thanks to Unity Forum user @defaxer). + +### Bug Fixes + +- Add tooltips for every action in the ProBuilder toolbar. +- Fix consistent horizontal scrollbar showing in ProBuilder window. +- Smooth edges of curved stair sides, and align step UVs to match rotation. +- Use white text color in Dimensions Overlay when Unity Personal skin is used. +- Ensure DLLs retain GUID between releases, enabling simpler upgrades. +- Fix poor UV editor precision when working with small distances. +- Fix ~10px vertical offset image when rendering UV template in Unity 5. +- Fix slightly offset image when rendering UV template from docked UV Editor window. + +### Changes + +- Increase minimum allowed zoom in UV editor. +- Make warning shown when connecting edges or vertices fails a bit more descriptive. +- Don't show tangents and bitangents when Show Normals is enabled in the smoothing editor. +- Prototype becomes ProBuilder Basic. + +## [2.4.7-f.0+r3664] - 2016-04-07 + +### Changes + +- New upgrade procedure skips complicated Upgrade Kit in favor of a slightly more manual but more reliable approach. See FAQ or ProBuilder Documentation for more information. + +### Bug Fixes + +- Fix possible null reference error when working with prefabs that have been duplicated. +- Additional error checking when stripping pb_Objects from scene added. +- When ProBuilder-izing objects, ask user whether or not to traverse children. + +## [2.4.6-f.0+r3616] - 2016-04-07 + +### Features + +- Add preference to set default Entity type. +- Add preference to set dedicated keyboard shortcuts for entering Object, Face, Vertex, and Edge mode. +- New Curved Stair generator, and stairs now produce manifold geometry. +- Add "Batch Upgrade" menu items to Upgrade Kit, allowing users to run one action for an entire project. +- New GUI slider allows un-clamped input to the float field in Shape Tool. + +### Bug Fixes + +- Alt + E shortcut now works with only 2 vertices selected. +- Fix bug where colliders would be incorrect when instantiating trigger entities. +- Fix some cases where "Connect" would result in incorrect geometry. +- Fix UV editor not recognizing shortcuts sent from scene view. +- Fix occasional "Non-finite value in mesh vertices" error when extruding. +- Account for inconsistently sized vertex color arrays when ProBuilder-izing meshes. +- Fix null reference errors when Shape Creation Tool is open with preview enabled and a script reload takes place. +- Fix null reference sometimes caused by a Mirror action. +- Fix bug where merging objects would always add a MeshCollider, even if one already exists. +- Fix mesh bounds not refreshing when adjusting vertices with Quick Offset tool. +- Fix mis-calibrated drag selection wwhen first entering element mode after moving an object. +- Fix issue where duplicating GameObjects with child pb_Objects would leave references to original meshes intact, resulting in odd behavior when deleting objects. +- Fix bug where prefabs would not "Apply" changes to all children equally. +- Improve performance when editing scenes with many ProBuilder object prefabs. + +## [2.4.5-p.0+r3531] - 2016-04-07 + +### Bug Fixes + +- Fix bugs in Copy UV Settings and Quick Apply Material shortcuts. + +## [2.4.5-f.1+r3519] - 2016-04-07 + +### Features + +- New Torus shape. +- Greatly improve editor performance when working with medium to large meshes. +- New skin for scene info label, including more data about selection. +- Automatically batch vertices even if they don't belong to a smoothing group (actual mesh vertex is now shown in scene info box). +- Add mesh dimensions overlay (ProBuilder > Object Info > {Show, Hide} Dimensions Overlay). +- Make vertex colors button extend-able, with the option to set which color editor the shortcut should open (Palette or Painter). +- New option to show element/object mode toolbar in scene (default), including positioning parameters. +- Improve vertex painter performance with large meshes. +- Unity 5.2 compatibility. + +### Bug Fixes + +- Fix bug where reverting a prefab with non-prefab ProBuilder children would throw errors. +- Fix hangs when performing various actions. +- Merge now retains the GameObject properties of the first selected object. +- Axis snapping with ProGrids now translates correctly when object rotation is non-identity. +- Performance improvements in UV editor for large meshes. +- Fix bug where OBJ exporter wouldn't properly write submeshes. +- Fix one possible cause of "Mesh.{uv, colors} is out of bounds" errors. +- Catch null reference errors when creating wireframe overlays for meshes exceeding Unity's max vertex count. +- Fix issue where Merge objects would cause meshes to lose their graphics, requiring a refresh. +- Fix menu items showing as enabled when not applicable. +- Add pb_Entity in ProBuilderize if the RequireComponent attribute fails to do so. +- Fix bug where ProGrids wouldn't affect elements when PB is built to a DLL. +- Fix bug where the cube shortcut would ignore material preference. +- Fix vertices merging incorrectly in Optimize function when colors don't match. +- Recalculate mesh bounds after moving the pivot. +- Always refresh/rebuild meshes after making them assets, fixing issues with duplicate mesh references. +- Fix a few more causes of leaks in the mesh and line rendering systems. +- Fix bug where scaling a new object in the shape tool wouldn't take effect until after first refresh. +- Fix bug where Insert Edge Loop and ConnectEdges would sometimes select too many edges after application. +- Fix ProGrids over-zealously collapsing vertices when in axis snapping mode. +- Correctly set element toolbar position when toggling between scene and editor window placement. +- Re-enable user set vertex handle color preferences. + +### Changes + +- Move default textures out of resources folder. +- On pb_Object::Start, call ToMesh before Refresh since Refresh could try to set UVs or Colors to a mesh that has inconsistent vertex counts. +- Remove most functions accepting a pb_IntArray[] sharedIndex cache and replace with Dictionary versions. + +## [2.4.4-p.1+r3425] - 2016-04-07 + +### Features + +- Add scale shortcut toolbar for Auto UVs. +- Add Control+Shift+Left-Click when UV editor is open to copy auto UV settings (including texture). + +### Bug Fixes + +- Fix errors when building a project with geometry containing null materials. +- Fix rare null reference error when switching scenes. + +## [2.4.4-f.1+r3385] - 2016-04-07 + +### Features + +- Where possible* indices are now collapsed to share a single vertex. +- Add context menu to swap between dockable window modes in vertex painter. +- Unity 5.1 beta compatibility. +- New Icosphere shape. +- New API example shows a deformed icosphere with FFT spectrum. +- Grow Selection is now roughly one gajillion times faster. +- Grow with Angle can now optionally select all faces on a plane instead of just the ones near the perimeter. +- New vertex handle gizmos are now culled (and much faster). +- Add option to select only visible elements (Select All or Select Visible toggles this). +- New Repair/pb_RepairMeshReferences script fixes duplicate mesh references. +- Improve edge selection logic, making edge selection much easier. +- Add a preference to enable backface selection on meshes. +- Re-enable 'NoDraw' faces (now implemented as a shader replacement at compile time). +- Improve subdivide action performance. +- Improve performance when editing large numbers of vertices. +- Smooth Normals Window now displays vertex normals with culling, and much faster. +- Repair Missing Script references is now cancelable. +- Add option to extrude elements as a group or individual. + +### Bug Fixes + +- Improve Flip Normals shortcut selection context handling. +- Enable Subdivide shortcut in Top mode. +- Fix arch geometry that broke when subdividing caps. +- Fix bug where setting arch radius would also set the thickness to 0.01. +- Add option to toggle cap generation on/off in arch tool. +- Fix bug where extruding multiple adjacent faces with a shared center point would not correctly translate the shared center vertex. +- Fix bug where Smoothing Window would not repaint on selection change. +- Improve performance of MergeVertices function, helping to address lag after modifying large objects. +- Fix bug where selecting faces obscured by a culled face would sometimes not register. +- Remove obsolete preference entries. +- Add Undo support when a click drag changes the selection in the UV editor. +- Fix 'Quaternion Look Rotation is Zero' log spam when a face contains degenerate triangles. +- Fix most instances of mesh and material leaks in Editor. +- Fix bug where applying prefab changes to pb_Objects with the Editor closed would not propogate changes to instances. +- Hide some internal MonoBehaviours from the Scripts menu. +- Fix bug where deleting a face with 'delete' key shortcut would change static flags. +- Fix null ref when entering play mode with collider entities sporting boxcollider components. +- Fix bug where Connect Vertices would fail on thin isosceles triangles. +- Fix bug where Connect Edges would mangle adjacent long skinny faces. +- When adding colliders via pb_Entity toolbar, scan current collider components for isTrigger values and apply to new collider if found. +- Fix some instances where convexity and trigger for EntityType.Collider & EntityType.Trigger types would not be set on initialization. +- When detaching faces to a new object, make the detached object selected. +- Fix bug where exiting to Top or Plugin level would not clear the selection mesh. +- Copy userCollisions field when serializing pb_Object. +- Fix regression in Unity 5 that causes prefabs to lose instance modifications on save and entering playmode. +- When mirroring objects, make the mirrored results the new selection. +- Fix bug where setting entity type then undoing wouldn't catch changes to collider. +- Fix bug where duplicating multiple objects would leave pb_Object references pointing to same object. +- When probuilder-izing objects, perform the action in-place (and add undo support). +- Catch errors when repairing missing script references on objects with null materials. + +### Changes + +- Remove dependency on ProCore lib to communicate with ProGrids. +- Rename scripts to uniformly follow pb_ prefix and pascal case for runtime, underscore case for editor. + +### API + +- New `Optimize()` method calls CollapseSharedVertices and GenerateUV2. Replaces GenerateUV2() in most cases. +- Move most of remaining scripts into proper namespaces. +- ProBuilder2.GUI namespace become ProBuilder2.Interface to avoid conflicts with UnityEngine.GUI. +- Move Triangulation code into pbTriangleOps. +- Significantly improved performance of RefreshNormals() function. +- New VerifyMesh() function in pb_EditorUtility guarantees good mesh reference and geometry. +- Add ability to delete unfixable components in pb_MissingScriptEditor. +- New PointIsOccluded() check in pb_Handle_Utility tests if a point is visible in editor. +- Significantly improve performance of pbUtil.RemoveAt(). +- Significantly improve performance of many pbMeshOps methods. +- New pb_LineRenderer and pb_MeshRenderer provide fast gizmo drawing in the SceneView. + +* Vertices must be smoothed, and have the same texture coordinate to qualify for weld. + +### f1 Patch Notes + +- Fix ProGrids not affecting vertices / faces / edges in Edit mode. +- Minor tweak to vertex handle color. + +## [2.4.3-p.0+r3216] - 2016-04-07 + +### Features + +- Weld distance now adjustable in UV editor. + +### Bug Fixes + +- Fix weird arch geometry near caps, noticeable when inserting edge loops. +- Improve 'Flip Normals' shortcut context awareness. + +## [2.4.3-f.0+r3202] - 2016-04-07 + +### Features + +- Add preference to enable back-face selection. + +### Bug Fixes + +- Remove 'here' console log. +- Fix regression in 2.4.0 that broke Undo when used with ProGrids. +- Fix 'Look Rotation is Zero' console logs when selecting a face with degenerate triangles. +- Fix bug where sometimes clicking a face would not register due to a culled face intercepting the raycast. + +## [2.4.2-f.0+r3202] - 2016-04-07 + +### Features + +- New debug window visualizes mesh information in the sceneview. + +### Bug Fixes + +- Fix regression that broke prefab editing applying to instances. +- Fix latency in SceneView when selecting elements in the UV window. +- Fix bug where selecting elements in the UV window would not Undo correctly. +- Fix regression that caused UV handle to not update its position when right-click dragging. +- Fix bug where texture rotation handle in the scene view would not snap correctly on finishing a UV adjustment. +- Fix bug where drag selecting edges or faces could select elements behind the scene camera. + +## [2.4.1-f.1+r3174] - 2016-04-07 + +### Features + +- New "Export UV Template" function saves a PNG of your UV maps. +- Add new preference to show object vertex, face, and triangle count in the scene view (Preferences/Show Scene Info). + +### Bug Fixes + +- Edge wireframe no longer renders the material preview wells. +- Fix performance issues when editing large objects in the UV editor with Auto UVs. +- Fix bug where 'Push to Grid' from ProGrids would not Undo correctly. +- Fix lagging wireframe when running "Freeze Transforms" action. +- Fix null ref when deleting multiple faces. + + +## [2.4.0-f.4+r3132] - 2016-04-07 + +### Features + +- Unity 5 support. +- New wireframe shader overrides Unity default when ProBuilder Editor is open. +- New 'Merge Faces' geometry action combines selected faces to a single face. +- Add `Missing Script Reference` repair item. +- Show color name in vertex tools instead of RGBA info. +- When creating an mesh Asset, also create a prefab with the new mesh and materials already wired up. +- Cull hidden edges when in Edge mode. +- Fix spotty face selection highlight rendering when using Deferred Rendering. +- Add preference to disable automatic UV2 generation while modeling (improves editor performance). +- When selecting a texture-grouped face in UV editor, show an indicator of all faces in group. +- Improve performance when modifying geometry & UVs in Unity 5. +- New dark background in UV editor for Unity light skin users. +- Improve performance when selecting objects with large vertex counts. + +### Bug Fixes + +- Fix crash when a face material is null (defaults to Unity Default-Diffuse). +- Fix incorrect results when extruding multiple faces sharing a single center vertex (usually seen on the top of a cylinder). +- Save vertex colors when ProBuilder-izing a mesh. +- Fix occasional null ref when continuing UVs. +- Support Undo in UV Editor Auto panel. +- Support Undo for `Push to Grid` events from ProGrids. +- Fix occasional `Index out of range` errors when subdividing, triangulating, and setting pivot. +- Fix crash when running `Fix Missing Script References` in Unity 5.0.0b18 (big thanks to Michael N!) +- Improve the performance of Planar Mapping manual UVs. +- Create Material data asset path if it doesn't exist (fixes errors when saving Material preferences). +- Fix bug where dragging UVs in Unity 5 would sometimes corrupt the mesh. +- Disable Continuous Baking when dragging elements or making continuous changes to the mesh, fixing corruption issues in Unity 5. +- Fix occasional erroneous error message when subdividing faces. +- Fix null ref error when Auto UV panel is open with nothing selected. +- Allow `V` key usage when not in Element mode. +- Fix regression where instantiated objects would not respect ProGrids alignment. +- Fix leaks when deleting or duplicated pb_Objects. +- Fix occasional null ref errors when welding or collapsing vertices. +- When double-clicking a texture grouped face in UV editor, select the entire group. +- Fix regression that caused performance spikes when deleting or instantiating objects. +- When detaching faces to a new object, copy all of that objects properties. +- Add Undo support to Shape creation tool. +- Fix bug where running Flip Normals from the Menu would not immediately update the mesh graphics. +- When serializing pb_Objects, save color and material information (materials are now loaded by name). +- Fix bug where the texture handle tool would sometimes (most times) move UVs in the wrong direction. +- When entering Texture Blending mode in Vertex Painter, set the color to a solid variant of one of the available textures. +- Fix bug where projected UVs in manual mode could potentially be placed very far from the current handle. +- Fix lag when drag selecting edges on objects with large vertex counts. +- Fix bug where setting entity type would not immediately refresh the mesh. +- Fix minor edge selection bug that would break edge highlighting when not directly hovering a mesh. +- Improve appearance of Grow and Extrude foldouts in editor window. +- Fix bug where clicking on a vertex could sometimes select the object behind it. +- Fix compile errors when building to WebGL target. +- When creating a mesh asset, ensure that the source object mesh is not referenced by the new mesh asset. + +### Changes + +- Remove 'NoDraw' feature (necessary for Unity 5 compatiblity). + +### Beta + +- Rudimentary Boolean tool added - this is very early in development. + +- Fix issue where "Repair Missing Script References" script could get stuck on prefab instances. +- Silence cast exception error in pb_Object_Editor. + +## [2.3.3-f.1+r2970] - 2016-04-07 + +### Features + +- Significantly improve performance of Subdivide action. + +### Bug Fixes + +- Fix incorrect language in Plane generator. +- Fix bug that resulted in mangled vertices when Welding. + +## [2.3.2-f.2+r2947] - 2016-04-07 + +### Features + +- Add a toggle in pb_Entity to turn off automatic collision generation. +- Improve UV editor grid logic (now follows camera and resizes at far zoom levels). +- New PostProcessor automatically strips ProBuilder scripts when building executables (toggle-able in Preferences). + +### Bug Fixes + +- Respect ProGrids `X` key shortcut when translating faces. +- Fix build errors with Static Batching enabled. +- When applying Smooothing Groups, if no face is selected apply group to entire object. +- Static Flags now initialized with `Occluder Static` unchecked. +- Pressing 'F' while a single vertex is selected no longer frames the entire object. +- Vertex colors are now copied when stripping ProBuilder scripts. + +## [2.3.1-f.1+r2900] - 2016-04-07 + +### Features + +- New Vertex Painter tool. +- New 'Triangulate ProBuilder Object' action for facetized poly-world look. +- Significantly improve UV editor performance when drawing many elements. +- ProBuilderize action now preserves UVs. + +### Bug Fixes + +- Fix error when opening Material Editor after assigning a Substance Material. +- Fix bug that caused pb_Editor to freeze when editing prefabs made from ProBuilder objects. +- Remove prefab dependency on ProBuilder.Instantiate or RebuildMeshOnWake. +- Fix mesh leak in Shape Tool. +- Enable Alt+NumKey material shortcut when in Object level. +- When shift-extruding faces in Edge mode, default to face extrusion over edge. +- Fix leaking mesh and material in Face editing mode. +- Fix install script bug that would incorrectly delete non-ProBuilder files. + +### Changes + +- Handle position is now calculated as the center of selection bounding box. + +### API + +- New 'HueCube.cs' API example script demonstrates changing single vertex colors. +- New 'pb_SerializableObject' class provides serializable storage for ProBuilder objects. Add 'pb_Object::InitWithSerializableObject' constructor. + +### Beta Notes f1 + +- Fix install script bug that would incorrectly delete non-ProBuilder files. + +### Beta Notes f0 + +- New Vertex Painter tool. +- Fix error when opening Material Editor after assigning a Substance Material. +- Handle position is now calculated as the center of selection bounding box. + +## [2.3.0-f.14+r2861] - 2016-04-07 + +### Features + +- New UV Editor window. +- New 'Material Editor' window for quickly applying materials to ProBuilder objects. +- Completely redesigned ProBuilder EditorWindow. Dynamically displays only relevant action buttons. +- Editor: New 'Select Edge Loop' command (double click on an edge, or shift+double click to ring selection). +- Editor: New 'Detach to Object' action creates a new ProBuilder object from a face selection. +- Editor: New 'Shrink Selection' command. +- Editor: 'Invert Selection' command now works for Edges and Vertices in addition to Faces. +- Editor: Performance improvements when editing large meshes. +- Editor: 'Grow' settings allow for a user set maximum angle between adjacent faces to limit selection growth. +- Editor: New extendable GUI settings for 'Extrude' allow for user-set extrusion distance. +- Editor: Add 'Distance' setting to Weld tool. +- Editor: Remove requirement that all pb_Objects be scaled to (1,1,1). +- Editor: Add context menu to swap between floating / dockable windows. +- Editor: New 'Conform Normals' geometry operation. +- UV: New 'Continue UVs' action. With the UV Editor open, select a face then Ctrl + Click an adjacent face to seamlessly match UV coordinates. +- UV: Right click translation handle in UV editor to set a new pivot point (Ctrl snaps to grid, Shift key disables proximity snapping). +- UV: Merge Auto UV and Manual UV editors to a single ALL POWERFUL editor window. +- UV: New Box projection UV unwrapping. + +### Bug Fixes + +- Editor: Fix bug where toggling NoDraw would sometimes fail. +- Editor: Fix issue where Undo would sometimes cause actions immediately following to fail with 'Index Out of Range' exceptions. +- Editor: Fix Quick Apply Texture shortcut regression from last version. +- Editor: Fix bug that caused 'Undo Change Face Seletion' to delete faces. +- Editor: Fix bug where ProBuilder.Instantiate() would not properly traverse prefab hierarchy when initializing ProBuilder objects. +- Editor: Catch yet another 'Look Rotation is Zero' warning that would slow the editor to a crawl. +- Editor: Fix inconsistent Undo operations on Unity 4.3+ installs. +- Editor: Catch NullRef errors when dragging non-Material type objects into the SceneView. +- Editor: Fix NullRef errors on 'Connect Vertices' actions with multiple faces selected. +- Editor: Fix bug where handle rotation with multiple vertices and no faces selected would be incorrect, resulting in strange behavior. +- Editor: Fix bug in QuickStart script that would install Unity3.5 DLLs for Unity 4.3+ versions, breaking Undo operations. +- Editor: Fix ProBuilder SceneView toolbar positioning when Deferred Rendering is active. +- Editor: Improve Edge selection consistency. +- Editor: Fix incorrect zoom behavior with fewer than 2 vertices selected. +- Editor: Fix 'Set Pivot' moving selected pb_Objects all ova' the place. +- Editor: Fix regression that broke Lightmap channels on Prefab objects. +- Editor: Frame selection now takes all selected pb_Objects into calculations. +- Editor: Fix regression which broke instanced Prefab geometry when running "Apply". +- Editor: Implement 'Undo' when drag selecting elements. +- Editor: Window now implements a scroll bar when necessary. +- Editor: Switching to Rotate or Scale tool no longer resets the handle alignment to 'Local'. +- Editor: Fix bug where Subdivide / Connect Edges / Connect Vertices would not set the selection to match the newly created sub-objects. +- Editor: Fix Mirror Tool incorrectly placing mirrored object pivots. +- Editor: Fix bug where sub-object selection highlights would be left behind when modifying an object's transform via Inspector. +- Editor: Always refresh an object's materials when Undoing modifications to the SharedMaterial array. +- Editor: Face selection graphic now sits flush with faces. +- Editor: Fix bug where ProBuilder-ized meshes would instantiate disabled. +- Editor: Fix incorrect behavior when scaling multiple ProBuilder objects at once. +- Editor: When exiting AutoUV mode (formerly Texture Mode) remember the previous Edit Level, Selection Mode, and Handle aligment. +- Editor: Fix 'Weld Vertices' action failing to properly compare all vertices. +- Editor: Fix incorrect behavior when attempting to modify pb_Objects with children, or children of pb_Objects. +- Editor: Replace deprecated code for Unity 5. +- Editor: ProBuilder-ized objects now inherit donor mesh name. +- Editor: Catch null-ref when closing pb_Editor with Smoothing Window open. +- Editor: Register Undo when creating new objects (with Merge or Mirror actions). +- Editor: When Alt key is held, do not allow handles to capture mouse. +- Editor: Fix leaking mesh preview object when entering Playmode. +- Editor: Allow submeshes to reference Null materials. +- Editor: Fix z-fighting face highlight in Deferred Rendering path. +- Editor: Setting EntityType is now undo-able. +- Editor: Fix bug where extruding from faces would not inherit the correct winding order. +- UV: Retain UV modifications when Subdividing, Connecting, or otherwise noodling around with a face. + +### Changes + +- 'Top' and 'Geometry' modes become 'Object' and 'Element', respectively. +- Remove drill-down interface for pb_Object dimensions in favor of just always showing them. +- No longer show element highlights when generating shape previews. +- Smoothing editor now accessible via main Editor window and Menu items. +- Remove Lightmapping window shortcut button from Editor window. +- When setting a pb_Object to EntityType::Trigger, also toggle 'isConvex' on the collider. +- Texture Window becomes AutoUV Window, and no longer houses material placement tools (Material Editor window replaces this functionality). +- Smoothing Editor Normals is now a float field, allowing users to set the size of debugging mesh normal lines. + +### API + +- Move all menu and editor commands to pb_Menu_Commands class. +- Add ProBuilder::Instantiate(GameObject go) overload. +- Slightly improve pbMeshUtils::GetConnectedFaces() performance (still incredibly slow). +- New methods for caclulating point inclusion for complex polygons in pb_Math. +- pb_Handle_Utility is new and has some super cool stuff in it, and I think I forgot to mention it in the last changelogs. +- Add a Repair script to fix missing UV or Vertex caches. +- Improve performance of `GetUniversalEdges` by approximately 3x. +- Move `ProjectionAxis` to `pb_Enum`, and it's associated methods to `pb_Math`. +- Remove `ProjectionAxis.AUTO`, add entries for all other axes. +- New pb_Material_Editor window. +- New pb_Bounds2d class adds some functionality for AABB calculations. +- Improve frequency of expensive caching in pb_Editor. +- Removed most naughty words from the codebase. +- New pb_MenuCommands class synchronizes behavior between MenuItems and Editor buttons. + +### Beta Notes: f14 + +- Editor: New 'Conform Normals' geometry operation. +- Editor: Fix bug where extruding from faces would not inherit the correct winding order. +- API: Add new 'GetWindingOrder(pb_Face face)' extension for pb_Object. + +### Beta Notes: f13 + +- API: TranslateVertices now operates in local space. Add TranslateVertices_World for backwards compatibility. +- API: Extrude now optionally outs the appended faces. + +### Beta Notes: f12 + +- Change "Ledge Height" to "Door Height" in Door creation panel. +- Omit Entity information from instantiated pb_Object's name. +- Fix bug where duplicate faces could be selected when using Grow Selection without an Angle parameter set. + +### Beta Notes: f11 + +- Fix sometimes incorrect results when selecting UV islands. +- Show UV popups in UV Editor window. + +### Beta Notes: f8 + +- Fix bug where faces with flipped normals would extrude with incorrect winding order. +- Merge Entity and Visgroup toggles. +- 'J' key toggles UV editor open / closed. +- Visgroup status is now retained during playmode state changes. + +## [2.2.5-f.5] - 2016-04-07 + +### Features + +- Add 'Arch' tool to Shape Creation Panel. +- New parameters for Door shape generator. +- New 'Selection / Select All Faces with Material' menu item. +- Add a Selection menu item to select all faces with current material. +- New live information update show face movement information. +- Fancy new install script automatically detects previous installations and forgoes the need for user interaction in most upgrade cases. + +### Bug Fixes + +- Fix inconsistent Undo for face selection on ProBuilder objects. +- Clean up Shader warnings on initial import. +- Fix ProBuilder.Instantiate() ignoring position and rotation parameters. +- Don't force rename objects when changing the Entity type. +- Fix face selection highlight being incorrectly affected by Fog. +- Fix bug where handle alignment preference would be lost occasionally. +- Fix bug where Grow Selection (non-planar) would allow duplicate faces to be selected. +- Fix bug where prefab objects would throw "Shader wants normals" warnings and sometimes not initialize in scene. +- Fix issue where UV2 channel would not correctly initialize on prefab objects. +- Fix bug where rapidly clicking to add faces would frequently result in the deselection of all faces. +- Fix bug where MirrorTool would incorrectly affect source object's transform. +- Fix duplicate and mirrored objects affecting the original mesh geometry. +- Fix null-ref error when using Edge Ring tool on a non-circuital ring. +- Fix bug where mesh colliders added via Entity component menu would incorrectly have the 'Convex' flag toggled. +- Fix bug that caused mirrored objects to lose the source object's entity type. +- Remove the ability to select non-ProBuilder objects when in Geometry or Texture mode (toggle-able via ProBuilder/Preferences). +- Lower distance threshold for mouse distance to line to be considered selectable. +- Fix bug that broke scaling objects when not in PB editor. +- Fix regression that broke deep copying objects when duplicating or copy/pasting. +- Clean up Shape Creation interface to consistently show build button at bottom of screen, and provide scroll bars when necessary for parameters. +- Duplicate entire GameObject (including attached components) when running 'ProBuilder-ize' action. +- Fixed bug with cone shape generation not using radius parameter. +- Enable NavMeshStatic and OffMeshLinkGen flags by default on new pb-Objects. +- Add pb_Object component check in addition to pb_Entity check in Repair / Validate Components. +- Fix install script breakage on Unity 4.3+ +- Fix Mirror Tool incorrectly modifying donor object's normals. +- Fix issue where applied changes to ProBuilder prefabs would not immediately update all other instances. +- Fix inconsistent extrusion with Edge and Vertex selections. +- Fix bug where TextureWindow would not initialize with current selection. +- Automatically clean up degenerate triangles caused by vertex merge/weld operations. +- Enable 'Push to Grid' support for ProGrids users with vertex, edge, and face selection. +- Fix bug that caused vertices behind the scene camera to be selected incorrectly in some cases. +- Fix object incorrectly instantiating off-grid with strange pivot placement. +- (Beta) Rename AboutWindow to avoid namespace conflicts. + +### Changes + +- Rename 6by7 root folder to ProCore. +- New ProCore.dll replaces SixBySeven.dll (shared classes between ProCore products). + +### API + +- pb_Object.SelectedTriangles is no longer guaranteed to contain only unique indices. +- Convert pb_Preferences_Internal::GetEnum<> to use ints instead of strings, modify pb_Editor to match. +- pb_Object.SelectedTriangles is no longer guaranteed to contain values corresponding to uniqueIndices array. +- Remove deprecated pb_Face::DeepCopy. Implement copy constructor. +- Move many of ProBuilder's classes to namespaces (ProBuilder2.Common, ProBuilder2.MeshOperations, etc). +- New ClassesEditing segment of Classes folder contains all non-essential files. This allows for a single ProBuilderCore.dll that can be redistributed with ProBuilder objects allowing users without ProBuilder to view and load ProBuilder objects. + +## [2.2.4-f.0] - 2016-04-07 + +### Bug Fixes + +- Fix 'Null Reference Error' when editing objects at runtime. +- Fix crash at runtime when ProBuilder object is selected. + +## [2.2.3-f.0] - 2016-04-07 + +### Features + +- New 'Grow Selection Plane' which expands the selected face to nearby faces on the same plane. + +### Bug Fixes + +- Fix regression where handle tool would not default to Top level editing in Geometry mode when no vertices were selected. +- Fix bug where colliders would be lost on upgrading PB install. +- Enable multi-object editing for pb_Entity inspectors. + +### API + +- Move and rename pb_Object::MeshWithMesh to pbMeshUtils.DeepCopyMesh. +- Fix PlaneNormal not returning a normalized vector (yikes!). + +## [2.2.2-f.4] - 2016-04-07 + +### Features + +- New 'Texture Groups' UV setting. Select faces and group to project seamless UVs. +- New 'Make Asset' Action allows users to save ProBuilder objects as Mesh objects. +- New 'Subdivide' command. +- New 'Connect' command (edges, faces, vertices). +- New 'Insert Edge Loop' command. +- New 'Select Ring' command. +- New 'Grow Selection' command (Alt-G). +- Significant performance improvements when working with large objects. +- New preferences to set vertex handle colors and size. +- Improve performance when drag selecting edges. +- New 'Remove Degenerate Triangles' Repair menu item. +- New snap to nearest vertex feature. When moving vertices, hold 'V' to snap handle to nearest vertex. +- New 'Quick Offset' tool in pb_Object inspector window. Set a value and immediately move the selected vertices by that amount (thanks to Matt1988 for initially developing this feature). + +### Bug Fixes + +- Override Frame selection to focus on only selected vertices (thanks @nickgravelyn for this tip). +- Fix inconsistent keyboard shortcuts on Mac. +- Tool buttons are now respected by ProBuilder handle. +- Fix bug where ProBuilder GUISkin wouldn't correctly initialize when left open during a Unity restart. +- Fix bug where double clicking a pb_Object to select all would not properly select all Edges. +- Fix bug where ProBuilder would affect other EditorWindow GUI layouts. +- Fix bug where Mirror Tool would fail to correctly initialize objects with pb_Entity. +- Drag selection box now more closely matches Unity's default drag box. +- Update and improve ProBuilderize Action (now attempts to create faces instead of just triangles). +- Fix Rotation handle incorrectly updating to match selection when dragging (occasionally throwing Quaternion.LookRotation == Zero warnings). +- Fix Scale tool incorrectly using world coordinates when translating vertices. +- Fix weird Prism geometry. +- Fix bug where setting an object pivot with ProGrids enabled would sometimes move the object's vertices off grid. +- Edges may now be shift-deselected. +- Update Undo defines to check against Unity versions 4.1 -> 4.9. +- 'Use' events when shortcuts are detected. Seems to work about 60% of the time on Mac. +- Fix bug where pivot would instantiate offset from grid when used in conjunction with ProGrids. +- Fix bug that broke OBJ export when attempting to export more than one model per session. + +### Changes + +- Vertex Color shortcuts are now declared in ProBuilderMenuItems, allowing users to edit them without installing Source. +- Reorganized Menu structure. + +### API + +- Selection management at object level is now entirely set in pb_Object, using new SetSelected[Faces, Edges, Triangles]. +- New naming and placement guidelines for Menu items (see pb_Constant). +- New ShiftExtrude() method in pb_Editor removes duplicate code in Handle functions. +- New pb_Editor_Graphics class replaces calls to UnityEngine.Handles in pb_Editor. +- Move most MenuItems to ProBuilder2.Actions namespace (exceptions being Windowed items). +- New pbUndo class replaces #if > UNITY_4_3 junk. + +## [2.2.0-f.4] - 2016-04-07 + +### Features + +- Update Undo code for Unity 4.3 compatibility (Install Interface will determine the correct package for your Unity version automatically). +- Add Rotate and Scale tool when editing faces or vertices (accessed by 'E' and 'R' shortcuts, respectively). +- Add EditLevel toolbar in sceneview for quickly viewing and setting EditLevel. @Genstein suggested improvement. +- New Edge selection mode. +- New 'Bridge Edges' action. Selected 2 edges to create a face bridging them. +- New 'Collapse Selected Vertices' action. Select any number of vertices and merge them to a single point. +- New 'Split Selected Vertices' action. Splits the selected vertices. +- New 'Weld Selected Vertices' action. Checks if any selected vertices share a point, and if so, merge them. +- New 'Invert Selection' action. (ProBuilder -> Edit -> Invert Selection). +- New 'Extrude' action (ProBuilder -> Edit -> Extrude). Works for single or multiple faces, as well as edges. Hold shift while moving a face to automatically extrude (works for translate, rotate, and scale). +- New Install / Upgrade interface provides options to install Release and Source versions, as well as older packages. +- Source code is now included as an installation option. +- New Door primitive type in Shape Generator. +- New Pipe primitive in Shape Generator. +- New Sprite primitive in Shape Generator. +- New Cone primitive in Shape Generator. +- Improved Runtime Example scene demonstrating face highlighting. +- New "Default Material" user preference. +- New "Select Faces with Material" tool. +- New API example scene showing object and primitive instantiation +- New GUI buttons for 'Flip Normals', 'Mirror Object', 'Set Pivot', 'Vertex Color Interface' and 'Extrude Face'. +- Add ability to select vertex by clicking on it. +- Add preference for turning off sceneview notifications (Preferences/ProBuilder). +- New preference item allows you to specify the 'Force Convex' field of a 'Mesh Collider' if it is set to default collider. +- New 'Reset Projection Axis UV' repair tool. Resets all UV settings to use the 'Auto' face projection. +- New 'Force Pivot to Vertex' and 'Force Pivot to Grid' preferences allow for easier grid snapping. +- New default material for ProBuilder objects. + +### Bug Fixes + +- Fix system beep on Mac OS when using keyboard shortcuts (this could be a headling feature). +- Fix bug where detaching or deleting a face wouldn't always reset the _uniqueIndices array, causing bugs in the handle selection code. +- Add undo functionality to DetachFace action. +- Fix bug where vertex color information would be lost on duplication, refresh, build, or just about any other action you can imagine. +- Fix bug where detaching a face could result in empty entries to the pb_Object->_sharedIndices member, throwing null-ref. +- Fix InvertFaceSelection not correctly updating the pb_Object->SelectedTriangles list. +- Don't show 'Nodraw Face' notification if in Top Level editing mode. +- 'G' key now exits Texture Mode. +- Texture window shortcuts now show notifications. +- Fix button sizing in pb_Editor window. +- Show notification when toggling Selection Mode from GUI button. +- Fix error in 'Detach Face' where occasionally a null shared index array would survive the rebuild. +- Fix compile errors in Editor code when exporting to Web. +- Fix bug where notification for Selection Mode handle would be incorrect. +- Fix bug where deleting a face, then undoing so would result in a NullReferenceError +- Fix bug where 'Fix GameObject Flags' would improperly exit on failing to find a pb_Entity component. +- Fix vertex selection mouse icon drawing when not in Vertex Editing mode. +- Fix vertex color interface losing user preferences across Unity launches. +- Fix issue where pb_Upgrade_Utility would break installation on failing to run. +- Fix bug where rotated UVs would not move in the proper direction when dragging with texture move tool. +- Enable z-testing for face selection graphic. +- Don't show notification post-installation of Static Flag fixes if no fixes were performed. +- Fix bug where texture handles sometimes wouldn't match the selected face's transform. +- Refactor shortcut code to differentiate between modal specific actions. Fixes bug where entity assignments would incorrectly be applied in Geometry level and not Top level. +- Fix incorrect skin colors in Unity Free on 4.3. +- Fix bug introduced in 2.1.4 that broke texture handle toggling (thanks, H. David). +- Fix bug where UV rotate tool would be incorrectly calculated on selection change. +- Change UV scale and rotation behavior to no longer operate in world coordinates. +- Fix bug where extruding would occasionally corrupt the pb_Object.uniqueIndices cache, resulting in 'NullRefError' in pb_Object::GetVertices. +- Adjust minSize of pb_Editor window to completely encompass buttons. +- Re-word toggle select mode and edit level notifications and make them consistent between the different access points. +- Fix bug where 'Axis Constraints' toggle in ProGrids would not be respected when translating faces. +- Fix bug where UV and Smoothing group changes would not immediately revert on Undo operations. +- Fix regression that broke Ctrl-Left click to copy UV settings to face. +- Fix bug where ProBuilder Editor skin settings would "leak" to other Editor windows. +- Fix bug where collisions would sometimes not respect user preference when creating new geometry. +- Fix bug where SceneView would sometimes not refresh on an Undo event. +- Fix bug where pressing 'W' key in the SceneView Fly mode would lock the camera to forward movement. + +### Changes + +- In pb_Entity, switch the 'Sphere Collider' option for 'Remove Collider'. +- Change verbage in Geometry shortcut description. +- Add tooltip for selection mode toggle button. +- Show HandleAlignment text when using shortcut to modify. +- Move DetachFace to Edit menu. +- StaticBatchingFlags.BatchingStatic is now set by default on Occluder and Detail entity objects, and toggled appropriately when NoDraw is detected. +- Move "Create ProBuilder Cube" to "GameObject->Create Other" menu +- Re-organize ProBuilder menu. +- New "Fix GameObject Flags" utility to address static batching issues. Users experiencing issues with missing ProBuilder objects at compile time should run this command once (per scene). +- Remove 'Faces' menu item, merge with 'Geometry' +- Move 'Mirror Tool' and 'Vertex Color Interface' to Editor Core. +- Repair scripts now live in their own folder. +- Tool scripts (any Action with an interface) now live in their own folder. +- Remove unused beta upgrade script from Install folder. +- Drag selecting faces now (optional; defaults to true) limits face searching to selected objects. +- Remove 'Seamless' mode. + +### API / Internal + +- Add get/set for pb_Obect->_sharedIndices. +- Use ProBuilder.Actions namespace for all non-window requiring functions. +- When initializing a pb_Object with a pb_Object, use the vertex cache instead of accessing the mesh. +- Remove per-vertex smoothing methods in pb_Object. +- Remove _smoothIndices member from pb_Object. +- Move pb_Profiler to ClassesCore, allowing usage at runtime. +- Add 'color' property to pb_Face. Used when setting Mesh.colors32. +- New pb_Edge class (not currently in use). +- New ProBuilder.Instantiate(GameObject go) method. Behaves exactly like UnityEngine.GameObject.Instantiate() and may be used with ProBuilder and non-ProBuilder objects. +- Move math methods from pbUtil to pb_Math. +- Added List<> overrides to many of the more commonly used pb_Object method calls. +- Clean up face selection graphic rendering code (small editor performance improvement). +- New FixDegenerateTriangles method (handy when merging vertices or faces). +- CombineObjects method re-built for faster combine operations. +- New ProBuilder2.Common, ProBuilder2.MeshOperations, and ProBuilder2.Math namespaces. Partially integrated. +- New pb_Editor_Enum class and namespace. + +### Known issues + +- With Unity 4.3 and up, undoing a Collapse Vertices operation is slow. +- Merging rotated objects does not account for UV rotation. +- OBJ export, something broken, etc. +- Unity inserts an additional Undo when selecting a new face on an already selected object. +- Can't shift-click to deselect edges. + +## [2.1.4-f.0] - 2016-04-07 + +### Features + +- Notifications are now displayed when a shortcut is recognized. +- New preview feature in Geometry Interface. Interactively create and place shapes. +- Remove dependency on concave MeshCollider for face selection. +- New MenuItems for opening the Texture Window, and assorted editor commands. + +### Changes + +- Move GUI folder to Resources, allowing 6by7 root folder to be placed anywhere in Project hierarchy. +- Decouple collisions from ProBuilder API entirely. + +### Bug Fixes + +- Fix bug where Mesh.Colors32 property would be lost on duplication. +- Clamp values in Geometry Interface to sane values. +- Fix plane generation pivot location when segments < 0. +- Fix bug that caused Unity to no longer recognize numberical input. +- Fix regression in 2.1.3 that caused MeshColliders break on entering playmode. +- Fix bug where shortcut keys would sometimes not be recognized. +- When updating ProBuilder, the editor window is now force-reloaded. +- Editor window is now sized correctly for both dockable and non-dockable frames. +- Fix compile errors when building project in Unity 4.1.2+ +- Fix bug that caused merged objects to incorrectly snap vertex points while ProGrids window is present. +- Fix NullReferenceError when clicking Merge button with nothing selected. +- Fix GUISkin issues in Unity 3.5. +- Fix GUISkin modifications affecting pb_Geometry_Editor incorrectly. +- Fix 'Delete Face' notification incorrectly displaying on OSX. +- Fix merged objects losing collisions. + +### API + +- ProBuilder.Shortcut is now pb_Shortcut. +- Add pb_Upgrade_Utility as a base class for all updating operations. + +## [2.1.3] - 2016-04-07 + +### Features + +- New Vertex Color Interface. +- New 'Detach Face' action. +- New 'Toggle Mover Visibility' button. + +### Changes + +- pb_Mesh_Extension renamed to pb_Object_Extensions. +- Transition default shader to Diffuse Vertex Color. + +### Bug Fixes + +- Fix pb_Object breakage when upgrading to 2.1.2+ from <= 2.1.1. +- Fix bug where switching to Geometry mode would not always correctly set Tool.current to Tools.None. +- Fix bug where calling the distinctIndices member of a pb_Face would sometimes throw an exception. +- Fix null reference errors when deleting object faces. +- Fix regression in 2.1.2 that caused non-cube type primitives to lose entity data and mesh information. +- Fix regression that caused Nodraw Visiblity Toggle to break. + +### API + +- Remove unnecessary calls to the mesh reference when accessing vertex information (most notably in UV mapping functions). +- Cache distinct indices in pb_Face, replacing pb_Face::DistinctIndices() with pb_Face.distinctIndices. +- Add pb_Edge class, and accompanying methods to retrieve all face edges and selectively perimeter edges. +- Add SetColors32(Color32[] colors) to pb_Object class. +- Add DetachFace(pb_Face face) to pb_Object class. + +### Internal + +- Update to SVN 1.7, small adjustments to build scripts. +- Add shell script to build distributable packages on OSX. + +## [2.1.2] - 2016-04-07 + +### Features + +- New interface for pb_Entity class in Inspector. +- Scale transform now supported. +- Double click pb_Object face to select all faces. +- New ProBuilder/About window provides more build information. +- Full prefab support (removes "Create Prefab" button from ProBuilder editor). + +### Changes + +- Rewrite context tip for Lightmapping button to reflect it's new purpose. +- Automatically freeze scale transform when applying any change to vertices. +- Always ZTest for selection graphic in face mode. +- 'G' key now toggles between Edit Levels. +- Remove face vertex handle information from scene view. +- Remove install script from package. + +### Bug Fixes + +- Fix bug where user would be allowed to add multiple collision components to pb_Object. +- Fix bug where geometry would shift on Undo/Redo incorrectly. +- Fix leak when deleting pb_Objects. +- Fix regression in 2.1.1 that introduced a leak on switching pb_Objects while in ModeBased vertex editing. +- Fix bug where selection graphics would occasionally not update on undo, redo, or prefab apply / revert. +- Fix bug where setting EntityType would destroy transform parent/child connections. +- Fix incorrecty window sizing in pb_Editor. +- Fix rare error log when duplicating prefab objects. + +### API + +- Add OnVertexMovementFinished event to pb_Editor. + +### Internal + +- Implement SixBySeven shared library. + +## [2.1.1] - 2016-04-07 + +### Features + +- Add MirrorTool action. +- Add Prism primitive. +- Add ProBuilderizer action (API example). +- Add Flip Winding Order action (flips face normals). +- Add dimensions parameter to Prism and Cube in Geometry Interface. +- Add ability to delete faces (select faces and press backspace) + +### Changes + +- "Auto NoDraw" becomes "NoDraw Tool", and features a vastly improved interface. +- Scroll bars added to ProBuilder Preferences panel, allowing for unlimited preference additions. +- Add undo support to Set Pivot action. +- No longer force rename pb_Objects post-initialization. +- Comment out menu item for Project Wide Nodraw utility, leaving action available for advanced users. + +### Bug Fixes + +- Fix bug where handles in Seamless editing mode would not draw. +- Fix bug where selected objects would disappear at runtime. +- Fix bug where drag selection would not be recognized in Seamless editing mode. +- Fix Unity crash when importing packages while ProBuilder window is open. +- Fix regression in 2.1 where a MeshCollider would always be assigned to pb_Object, regardless of Collider settings. +- Fix cylinder generation code to properly account for height divisions (now accepts 0 as a parameter). +- Fix bug where undoing texture modifications would not consistently refresh pb_Object to original state. +- Fix bug where pb_Objects would disappear at runtime with static batching enabled. +- Add overload to TranslateVertices that accepts bool forceDisableSnap. +- Fix bug in PivotTool that caused vertices to incorrectly be snapped when setting new pivot with snapping enabled. + +### API Changes + +- Add pb_Object::InitWithObject +- Add ProBuilder::CreateObjectWithObject +- Add pb_Object::GetName +- Add ProBuilder::CreatePrimitive(ProBuilder.Shape shape) + +### Internal + +- Add DrawAllFaceNormals to #DEBUG flagged pb_Editor. +- Update Sublime Extension to version 3. + +## [2.1.0] - 2016-04-07 + +### Features + +- Add Smoothing Group support. +- New face selection graphic system respects depth order + speed boost. +- Add drag selection support for faces. +- UV2 channel generation now totally automated. +- New Lightmap Window exposes UnwrapParam properties per-object for fine-grained UV2 generation control. +- Add smart object naming, with the convention "pb(Shape Type)([Entity Type])-(Object ID)" - ex: pb-Cube[Detail]-1701) +- Add new "Mover" entity type, which is non-static and allows complete control at runtime. +- Add support for n-gon faces. + +### Changes + +- 'World' is now default handle alignment. +- Update default materials with dedicated textures. +- Update QuickStart window with more explicit options. +- Default values for Cylinder are now slightly more sane. + +### Bug Fixes + +- Fix ProceduralMaterials throwing errors in Texture Editor. +- Fix rare bug where incorrect vertex indices would be selected in an UpdateSelection() call, throwing a NullReferenceException. +- Fix bug where toggling selected faces would not correctly remove vertices from internal selection list. +- Fix bug where pivot would center at 0,0,0 on merging objects. +- Hide ACG property in Inspector window. +- Fix bug where merged objects would lose EntityType information. +- Fix bug where prefab creation would not account for pb_Group data. +- Fix bug where merged objects would lose normal data. +- Fix bug where exiting Texture Mode would not consistently set Edit Mode to Top. +- Fix bug where generating UV2 channel would incorrectly hide NoDraw faces, breaking synchronization with pb_Editor UI. +- Fix bug where ListenForTopLevelMovement would incorrectly fire, significantly slowing scene navigation. +- Fix bug where duplicating multiple objects would result in referenced pb_Objects. +- Fix bug in pb_Group where SetActive would incorrectly be called in Unity 3.5. +- Fix bug where collision meshes would not correctly update after an Undo / Redo event. +- Fix bug where drag selection would not exit properly if a function key is pressed mid drag. +- Fix bug where vertex handles would incorrectly be drawn in Top level editing mode. +- Fix bug where deleting a pb_Object would occasionally cause a NullReferenceError in UpdateSelection(). +- Fix bug where Occluder objects would not allow textures to be applied. +- Fix bug where box colliders would not properly inherit trigger boolean value. +- Fix bug where merging objects or creating groups would not snap pivot point to grid (this also introduces centered pivot points). +- Fix rare bug where get_localRotation would fail. +- Fix white flash in Texture Window preview. +- Fix bug where ProBuilder would not remember Handle Alignment setting. +- Fix bug where editor selection property would not correctly update on object deletion. +- Fix minor bug where vertex handles would sometimes not immediately draw on entering Geometry editing mode. +- Fix bug where closing Texture Window manually would not always exit EditLevel.Texture. +- Fix bug where an Undo/Redo event would sometimes cause pb_Editor to attempt to refresh every pb_Object in scene. +- Fix bug where exiting EditLevel.Texture to Geo Mode would not correctly remember the previous SelectionMode. +- Fix bug where cylinder object sometimes initialize with un-even side lengths. +- Fix bug where on deleting a pb_Object's MeshCollider, ProBuilder would not immediately re-initialize it (prevents common PEBKAC error). + +### API + +- Integrate Doxygen (Still a work in progress - feel free to drop by the forums with any questions). +- Add SharedTrianglesWithFacesExclusive for extracting shared triangle indices exclusive to passed faces. +- VerticesWithIndiceArray is now VerticesWithTriangleArray. +- Remove pb_Object::CreatePrimitive. Use pb_Shape for object creation, or pb_Object::CreateCube(float scale). +- Add OnVertexMovement EventHandler to pb_Object. +- pb_Object::CreateObjectWithPointsfaces is now pb_Object::CreateObjectWithVerticesFaces. + +### Actions + +- Update AutoNodraw to cast from all vertices + center point when determining hidden flag. +- In PivotTool.cs, snap pivot point to grid if no vertices are selected. +- Refactor EntityType.Brush to EntityType.Detail. + +### Internal + +- Add pb_Profiler class +- Add UVee window + ProBuilder specific modifications +- Add internal preference to force update preference when necessary (usually means adding shortcut items). +- Significant performace improvements in handle drawing. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/CHANGELOG.md.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/CHANGELOG.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..157aa01432b0f84be833ccac65c52eea45f852e1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 42772189aba88e14083aeac0eaa2c814 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/CONTRIBUTING.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/CONTRIBUTING.md new file mode 100644 index 0000000000000000000000000000000000000000..c854b63823f5e67f6c79fec4d867872e69330994 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/CONTRIBUTING.md @@ -0,0 +1,35 @@ +# Contributing + +## All contributions are subject to the [Unity Contribution Agreement(UCA)](https://unity3d.com/legal/licenses/Unity_Contribution_Agreement) +By making a pull request, you are confirming agreement to the terms and conditions of the UCA, including that your Contributions are your original creation and that you have complete right and authority to make your Contributions. + +## Pull Requests + +Please include an entry to the changelog for any PR, along with a Fogbugz ticket number if applicable. + +New logs should be placed under the `## [Unreleased]` header at the top of the changelog. + +Ex: + +``` +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## Features + +- Added some neat new feature. + +## Changes + +- [case: 1203585] Removed `Custom Shape` option from the `Shape Editor` window. + +## [4.3.0-preview.2] - 2020-01-15 + +etc. +``` \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/CONTRIBUTING.md.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/CONTRIBUTING.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..f7c75276009e33ca9881d29c5e6502be2f7f0cb6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/CONTRIBUTING.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 782636f1c7bb2455ba251d970530a4a3 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content.meta new file mode 100644 index 0000000000000000000000000000000000000000..9b05d3002bc17a68c9c1aac5b122854ee2f02fa2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 04a0feda657064ccbb5cc36319dfcf16 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About.meta new file mode 100644 index 0000000000000000000000000000000000000000..cf9fcd2a49f43f436f543a10149e9bea8a8e6d40 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 13e8e2669ebc444558b91736a36fee81 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images.meta new file mode 100644 index 0000000000000000000000000000000000000000..37d5c7355737d09552e2c4a96f63f8aaf0ba6c5b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 23b06ecb410fd483c92df383e874b9bb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner.png new file mode 100644 index 0000000000000000000000000000000000000000..17a903a23d4d8229ec0141a04e44fb2b09db2ae2 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..04cfda628798bc5dc9c210f966fea653ffb70dd8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: a4156609cb9e84be5b5fafc60adeac6d +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 1024 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner_Hover.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner_Hover.png new file mode 100644 index 0000000000000000000000000000000000000000..0b00170b440e9c95feb499bbfe4c4b4e27f5d723 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner_Hover.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner_Hover.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner_Hover.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..ea9df284660654678c27f87fc6fc24627cf01eab --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner_Hover.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: c012858f9c644432a934c73ca6083da1 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 1024 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner_Normal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner_Normal.png new file mode 100644 index 0000000000000000000000000000000000000000..c41c59091b569521145b8c413d0be76ebcfb8e5c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner_Normal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner_Normal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner_Normal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..8a299af09241ded257231002b7b5247808b2e1f4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/Banner_Normal.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: f65aa2ea5b9f142f79b8c7c07add93f0 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 1024 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/DownloadPB_Hover.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/DownloadPB_Hover.png new file mode 100644 index 0000000000000000000000000000000000000000..a992401a4e225b0d32720914bca4c96477dae0df Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/DownloadPB_Hover.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/DownloadPB_Hover.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/DownloadPB_Hover.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..2a0a7e22ec95d846af99113e12357961f3cce4e7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/DownloadPB_Hover.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 814f189721a304a02932c67ebbecb414 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 1024 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/DownloadPB_Normal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/DownloadPB_Normal.png new file mode 100644 index 0000000000000000000000000000000000000000..ba27d36b0b8e2b739100043132e55767be1df7bf Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/DownloadPB_Normal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/DownloadPB_Normal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/DownloadPB_Normal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..754582ef214157864a2769c93a45349dd8c17b00 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/DownloadPB_Normal.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: a33bffda6aac3479fb64e64b38663ad9 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 1024 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/ScrollBackground_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/ScrollBackground_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..3eaefc555df770f2b9dafc10957a12282f7bc4a7 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/ScrollBackground_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/ScrollBackground_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/ScrollBackground_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..436f4f05a703cdf5e0b69af25763cbda0b00313a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/ScrollBackground_Light.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: ce3f23f83566d4c859587839aee9eaca +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/ScrollBackground_Pro.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/ScrollBackground_Pro.png new file mode 100644 index 0000000000000000000000000000000000000000..332a7a17a98c41d377b68303a012b885c1ced165 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/ScrollBackground_Pro.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/ScrollBackground_Pro.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/ScrollBackground_Pro.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..6f1a930cdd42f33847efc766000aaee0d6e3156f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/About/Images/ScrollBackground_Pro.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: d667c5626e2c04b5e8f9f09c9098bc45 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons.meta new file mode 100644 index 0000000000000000000000000000000000000000..bc7507ec5dde7c582c85568a2674b07c559b2d46 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e3c81dc6e8a034282843a1b87d149aa0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes.meta new file mode 100644 index 0000000000000000000000000000000000000000..d6c7dfebe082cfd2a7b64365c900c4d6dc6e49f2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4b466ba17cf244f07869a81321a5b21f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Edge.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Edge.png new file mode 100644 index 0000000000000000000000000000000000000000..eb80402ce3ac0b3b876942dcedc1514de70e0f50 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Edge.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Edge.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Edge.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..eff39231fea5bafb25f60af94ba2e5d29f7d4f16 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Edge.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 3c6e8b060c00340b693cb3830b6d975c +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Edge_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Edge_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..3c308c898b92e48eea172dbb0cd3d0c278683937 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Edge_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Edge_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Edge_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..9aebd541dc754f214a257fcf4ac333e46f6a0ae4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Edge_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: d8b877e079e354f9282bff10c5e2d4b0 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Face.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Face.png new file mode 100644 index 0000000000000000000000000000000000000000..66bccbd935510cbfc99d3e768b748a420e57eae8 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Face.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Face.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Face.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..b25699f7ef7177190df06e562aa802f5055bdcb1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Face.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 00ac05966499340f98f0133550793d13 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Face_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Face_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..29f37fd064b7932864f1d27ce29b42234b524684 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Face_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Face_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Face_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..a22e42fc21758f4a409a250e1e412adfe581a08e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Face_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 3f77eeb57e96b47eea8a6ea060ccbfc4 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Object.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Object.png new file mode 100644 index 0000000000000000000000000000000000000000..30f0f4b417290629a5f4b84e69d9825b8ac5c573 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Object.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Object.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Object.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..d8c20e8228bf6c9f29b93c43ccb41bfbd77f340f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Object.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 44c2e74132ee947c88b465f152dc430b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Object_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Object_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..be1be4315d88599bacdf4acddb14d90338180499 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Object_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Object_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Object_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..0120c0c6ff0aed8948229c68ffa06cc4e1c01e4a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Object_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 5983a109090b74768ae1ff37dd65b0c9 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Vertex.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Vertex.png new file mode 100644 index 0000000000000000000000000000000000000000..57fc1705b066331edb2e8f33250d261f7995663d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Vertex.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Vertex.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Vertex.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c4ab285c668cd6620861375a9ebb9fdf267b46a0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Vertex.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 3e5ae4e6aa24547218f481474fee55d4 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Vertex_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Vertex_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..8f08fa904684f3374cbed9b848e304dbbb8b8caf Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Vertex_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Vertex_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Vertex_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..97313f784c135a34ff5dfda92627ee6cf3ee9114 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Modes/Mode_Vertex_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 4461d11690c974f94b55e0295c5274eb +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene.meta new file mode 100644 index 0000000000000000000000000000000000000000..e17a40d4105fd8ddbeba23f799caf0382914d403 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9de56aff4bb6f4475b12fe45833d342a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/SelectionRect.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/SelectionRect.png new file mode 100644 index 0000000000000000000000000000000000000000..60ff8d5f7e13e4095add8e6b9be9007e773797a7 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/SelectionRect.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/SelectionRect.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/SelectionRect.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..3f8f8f7e1d5f8f195195198bff1e8c1b01a39cb3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/SelectionRect.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 493bda9d2800a4516b04e170719fe521 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/SelectionRect@2x.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/SelectionRect@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..da5325b7f4ef3aa36c06c112609a727735337a70 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/SelectionRect@2x.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/SelectionRect@2x.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/SelectionRect@2x.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c62a2ef37de751ef335791f05b6fe0ee5cd9fc96 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/SelectionRect@2x.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 8a71d1d5ecfb449c1a4a70d7fb021d04 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/TextBackground.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/TextBackground.png new file mode 100644 index 0000000000000000000000000000000000000000..bcc253391a06675f801b2d04a10f05d524809ade Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/TextBackground.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/TextBackground.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/TextBackground.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..90cd88b8dbd4ed3279af3ceaaf863d7104a37236 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scene/TextBackground.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: efe0b4c986d4c46eaa935b7306936ebf +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scripts.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..f165b2d8f24faca87f3ddf4efdd8dbad1197ee77 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6d064e435ff054c84ac72ba0b893c8c2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scripts/MeshFilter Icon.asset b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scripts/MeshFilter Icon.asset new file mode 100644 index 0000000000000000000000000000000000000000..816ea6a8906c689a5eb15d079f19e4b359502c9b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scripts/MeshFilter Icon.asset @@ -0,0 +1,42 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!28 &2800000 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MeshFilter Icon + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 64 + m_Height: 64 + m_CompleteImageSize: 21844 + m_TextureFormat: 4 + m_MipCount: 7 + m_IsReadable: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 1 + image data: 21844 + _typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089dbff1981d9ffa381d8ffe380d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc81d8ffe381d9ffa389dbff190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089dbff1980d8ffea80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8ffea89dbff1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d9ffa380d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc81d9ffa300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d8ffe380d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc81d8ffe300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d8ffe380d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc81d8ffe300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d9ffa380d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc81d9ffa300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089dbff1980d8ffea80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8ffea89dbff190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089dbff1981d9ffa381d8ffe380d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc81d8ffe381d9ffa389dbff19000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d9ff4680d9ffe080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d9ffe081d9ff4600000000000000000000000000000000000000000000000080d9ffe080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d9ffe000000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d8fffc80d8fffc00000000000000000000000000000000000000000000000080d9ffe080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d9ffe000000000000000000000000000000000000000000000000081d9ff4680d9ffe080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d9ffe081d9ff46000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d9ffb280d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc81d9ffb100000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d8fffc00000000000000000000000080d9ffb280d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d8fffc80d9ffb200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e687b6e406c7f7e60a2bfbd406c7f7e60a2bfbd406c7f7e5e9ebbad00000000406c7f7e00000000406c7f7e00000000406c7f7e00000000406c7f7e00000000406c7f7e406c7f7e60a2bfbd406c7f7e60a2bfbd406c7f7e60a2bfbd00000000406c7f7e00000000406c7f7e00000000406c7f7e00000000406c7f7e00000000406c7f7e406c7f7e60a2bfbd406c7f7e60a2bfbd406c7f7e60a2bfbd00000000406c7f7e00000000406c7f7e00000000406c7f7e00000000406c7f7e000000001e323b2f406c7f7e406c7f7e406c7f7e406c7f7e406c7f7e3e687b6e000000001f353e3b28434f4e28434f4e17272e2b30515f5e385e6f6e385e6f6e28434f4e30515f5e385e6f6e385e6f6e28434f4e27424e4a30515f5e30515f5e1f353e3b2b49565527424e4d2f505e5d2b4956552b485655 + m_StreamData: + offset: 0 + size: 0 + path: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scripts/MeshFilter Icon.asset.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scripts/MeshFilter Icon.asset.meta new file mode 100644 index 0000000000000000000000000000000000000000..332e8de0b710e74d50e48d60a6ac75b31dcbbae4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Scripts/MeshFilter Icon.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 432b3086cebdc438d9d33de3669fb063 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar.meta new file mode 100644 index 0000000000000000000000000000000000000000..58ad9b49bee911ff9b2f9f2924bfd44b4b24daee --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cbeb66094b9da46058bb06f5cb123ea0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Hover.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Hover.png new file mode 100644 index 0000000000000000000000000000000000000000..710988bd94d1ac8c00dcd538b8aedfd6061640c0 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Hover.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Hover.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Hover.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5b3e00fc5b7052eda16744a63e8fff53dbe1b776 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Hover.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: d4f4647229a9f47a3b8739dad2c59db5 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Normal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Normal.png new file mode 100644 index 0000000000000000000000000000000000000000..8ab0ae93e21abc29aec07d2ffe00ff340bb0a033 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Normal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Normal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Normal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..d3e8c33b5d5775a77ef45d4133023752634cafc2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Normal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: c175d9b0ccfa2428ea936c9c6b654bd1 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Pressed.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..601334e618735130db3ef3458077f0868cbce486 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Pressed.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Pressed.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Pressed.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..aa915f1a460f9fe2c6cc0713998ebd0e90fb037c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/AltButton_Pressed.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 2306494ea7af64c58819a58d4396773f +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background.meta new file mode 100644 index 0000000000000000000000000000000000000000..ec7e80763866b088800f00e681b58d93f21a8a25 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cbdba146addc1410f8579e4d7691a480 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/AccentBar_Bottom.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/AccentBar_Bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..7487ce9eeb4367af0dba5e51e3a81c12f6b86a51 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/AccentBar_Bottom.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/AccentBar_Bottom.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/AccentBar_Bottom.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..3fd7397e81a211ed97f754567d1237113e994063 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/AccentBar_Bottom.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 19fabf6370255433fa736008910e1bf2 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Hover.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Hover.png new file mode 100644 index 0000000000000000000000000000000000000000..577d91f26a17a94598eb7880eb69134f93eb068a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Hover.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Hover.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Hover.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..63776a225a8051bc087e2b128bb1cf4cee841705 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Hover.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 72e91a236e4c6407ea89236b576032a5 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Hover_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Hover_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..0c70fd674a76c3a77fa31decb89dbb6a74d124ca Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Hover_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Hover_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Hover_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..7c31f6a474d0d7520c1c023b3e8ebc740489dd85 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Hover_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: bfa9ccc775ca74a1fbd2a39a5efc3f88 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Normal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Normal.png new file mode 100644 index 0000000000000000000000000000000000000000..b00a427714d3dfaa3ba2eccb534c4df3eb134b58 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Normal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Normal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Normal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..274fa332a6f6e3354cca5fcf6bfbd1cf243de9cc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Normal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 5c97f1b8af7a54ebfa287033b3917c45 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Normal_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Normal_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..c345d6d688c85ba5c4feaba95b377ce16f8eec4c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Normal_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Normal_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Normal_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..b5813ef6702d87a3071706290a772c8dddf80403 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Normal_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: fc9338a00657a4252b020c1e95c03f40 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Pressed.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..1e736ada086bad613ec7d1e32c15d365af952946 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Pressed.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Pressed.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Pressed.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..21ac3ea7fb5e90248e6c167358d3922860d78dfb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Pressed.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 47c61016cb52642a5874516ada0bc94f +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Pressed_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Pressed_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..e59d50ac6eeacb37ff1d29364e3ddda787639b71 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Pressed_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Pressed_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Pressed_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..736a827a0dd2eb65d144cf7807c5e276288dcbbe --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Circle-22px_Pressed_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: d82e04feb01304e53908fada3b58aebd +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Horizontal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..9526f0545c4c7056bde5b36759eaf311e0a16658 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Horizontal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Horizontal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Horizontal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..0244c3da9d187535f2b0e0a6865ce643fdec11d2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Horizontal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 58277d87f7d8f46c4be7586d538c95c0 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Horizontal_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Horizontal_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..29a62407b5a857d267ce04328ecb902f84288b08 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Horizontal_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Horizontal_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Horizontal_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..99db37cf3bff79494e638dfc9bb62ff5fda348df --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Horizontal_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: a73ccfe9b9ac24d3f8e0062d61999bc2 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Vertical.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..25f8b3fa696b7efc0a14609c8444655ec6bd88c3 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Vertical.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Vertical.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Vertical.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..7dfc549d6f9bc9469627d90d434688f6538b4c67 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Vertical.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: c7981a40a407c43c2a395acff035ec71 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Vertical_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Vertical_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..e4dfebb264b4c7bb57c30ace1d954691f9c20aa7 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Vertical_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Vertical_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Vertical_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..1fe3ccab6fd5ff50f825fd2adb4b0c1154616f79 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Hover_Vertical_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 486fdf705975a43dc84a4e8831d458b0 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Horizontal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..479ea69b1b1de43ac2e78d19e9f996433e86b2de Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Horizontal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Horizontal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Horizontal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..329c3ece7918ade8908ce9971fa34abcba423444 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Horizontal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 632d7c73bc4e14782b46b7ee28b5d383 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Horizontal_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Horizontal_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..f5adb5803c36df7956000fb0e8f45bf2751e2241 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Horizontal_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Horizontal_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Horizontal_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..011437c8f967fc8cc1993792a50ebc769259882b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Horizontal_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 169ef9ab92bd14fed8634f430151582b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Vertical.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..ea963bd8ab346fe8b36b59d467ecfda6688a49d4 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Vertical.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Vertical.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Vertical.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..e5c7357f607b66732adda48791179b7f44693a12 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Vertical.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 04fdee38d88f74afe85c35116ced973d +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Vertical_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Vertical_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..747427de8cec6d5dea0c3279ceba0d57cf363275 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Vertical_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Vertical_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Vertical_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5cb506c55d51899dfa503b92daf4478a8b6351d1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Normal_Vertical_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 56573328bc8d246b896c2d7396c20d1b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Horizontal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..7ec60572f39e3a0a3493457013fa04a974c49486 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Horizontal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Horizontal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Horizontal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..49f9a24e912239593e8c14ca4db78d042cc372af --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Horizontal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 6cfa1f4fa4f524777b44a27293390e0e +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Horizontal_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Horizontal_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..1dbc565eb7b9fc49722b169ff559636d6b652ccc Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Horizontal_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Horizontal_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Horizontal_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..d9cfe104dcc3bef3f7c883fb9d1684452cff0a71 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Horizontal_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: c3c324c91d8784d97a9819195a93cc36 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Vertical.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..07c57ed221aa085a62fb6e56f64bc26530314682 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Vertical.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Vertical.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Vertical.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..3a27ec9a11aaa14d58a9061d846d012659e184c5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Vertical.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 53c57c97fb66b4dad806f2dc1545afea +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Vertical_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Vertical_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..00a78d1cc88117b75b93b164e0354a40506e78f4 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Vertical_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Vertical_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Vertical_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..29ec1f5aa467d70d671280142d6d4ce76ece6c25 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Geo_Pressed_Vertical_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 743f777c402d949b38db65c82fc0fb64 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Horizontal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..4b3db67471af24a4cfeb62dcb5eb56efa91346bc Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Horizontal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Horizontal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Horizontal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..13b52244b25cdef121dd230fffd678b5defdca9d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Horizontal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 1d3700779bf8f4804b95e11d9d17ca0b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Horizontal_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Horizontal_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..ad27b0e509b610fccb0c9430e187ac59de75cdf7 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Horizontal_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Horizontal_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Horizontal_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c5f57d51e2df19b5f2cb2b04bb76e70558e112c3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Horizontal_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 71132b74263d94a9ca58f30cf6b648c9 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Vertical.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..0e47a9e043181a8e4a4824942e2c7e46c1e39ef7 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Vertical.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Vertical.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Vertical.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5d9a7ec0d5f58adb6748009cc3b49845ccb56dda --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Vertical.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 36b38eb074ce0473c9306311b8732a99 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Vertical_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Vertical_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..95fb53f776b007240726b4e2b2dd6f633165a8d8 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Vertical_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Vertical_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Vertical_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..9c5beddfe0a4e22fd210b830a23c142119e96d99 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Hover_Vertical_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 28943fad8a64e43d0b943c30dd7d2f2c +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Horizontal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..5b80de1f23f9950de8aafd92566751ad8f0803a7 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Horizontal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Horizontal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Horizontal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..b964bbaa59a34f7a6dfdedcb761ff676234a490e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Horizontal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 877f25df0541841d2949e0b669ec0f2d +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Horizontal_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Horizontal_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..3dca62be5d80827b95cb88592b15465b7913d798 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Horizontal_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Horizontal_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Horizontal_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..e20b3f159f56c7c002f4294f073b39fa95660dbf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Horizontal_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 65a40c4436783415b80819431830da46 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Vertical.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..19d04265d9fc6aaef49d6c0c31c4eee1bc43ab21 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Vertical.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Vertical.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Vertical.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..11abedad8181d91954249a4bf7bf1a7fe81df968 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Vertical.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: eb81941566ef74ae09df5053e01e2238 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Vertical_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Vertical_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..1c24701f086ad57b0589062525ac93d3a0049b17 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Vertical_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Vertical_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Vertical_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..6cbab4d6f37da55c0c5ec644d606698f11a76588 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Normal_Vertical_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 0b327ea5c42d34facb62547bfed012b3 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Horizontal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..df25a19f4ed17b3d1c892d933edc45f897d94803 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Horizontal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Horizontal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Horizontal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..f3e17b3e63f3f2d48f9f855f041422725646a9d3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Horizontal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 65eadc7e5577c458b87403498a117203 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Horizontal_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Horizontal_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..efda2c9dafada213dc719168df3159f772afb970 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Horizontal_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Horizontal_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Horizontal_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..e1ada3862432a393cf095c2b44b4e1e06be6b0f7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Horizontal_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 0d0c1f992010c4a15b1714ddfc896b5a +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Vertical.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..fd9cd7ff641e738676ab30c65c7bda3d1d6e0cc3 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Vertical.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Vertical.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Vertical.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..18ea468634787fd011fcc70b40169e10ec808496 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Vertical.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: fc0d74759c05e45149f0d8110191cf89 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Vertical_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Vertical_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..018ea4bbd9e8ad121a7d4af544bfb7d7a21493c3 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Vertical_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Vertical_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Vertical_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..97b16ba8c505fb4b135527bae3879d41a46af539 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Object_Pressed_Vertical_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 67aebd88e1d6f49d9817a1177bdbc5e5 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover.png new file mode 100644 index 0000000000000000000000000000000000000000..3b8728dc783dee47125c5b120c6eb31c3a73b137 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..d121d3a900dee4a2b97ad621bcd1e8da32066eb6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: c3040b50943004b5e892af2bfde68cb4 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Blue.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Blue.png new file mode 100644 index 0000000000000000000000000000000000000000..f2b88aad78b0b03b8aca373c5a7e6ea236a59eeb Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Blue.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Blue.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Blue.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..d9ee9c49c0277ce035c832604fcb8e238fef50e5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Blue.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: b1125a794934140a0920919da7685416 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_BlueSteel.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_BlueSteel.png new file mode 100644 index 0000000000000000000000000000000000000000..13d0d3cf9ff8dd8a92c2608ad826d366d51fb41e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_BlueSteel.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_BlueSteel.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_BlueSteel.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..b68c8b931b99c2135cdbac10dc592e2f917c4d70 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_BlueSteel.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: a04610ef640d34da59cd697db80486b4 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..d2c216f028c70aeb23c3ad3519c5a9a9de2bddb5 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..ce020f820af5fd9ca43e05be3b5f4fc2fc635502 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 42279466e4f354e708eb1084c665053e +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Orange.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Orange.png new file mode 100644 index 0000000000000000000000000000000000000000..fbcdc4991868b4a7c385a1e6e9907749befc88d9 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Orange.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Orange.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Orange.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..0c950534967de541ee758c4e89490acd4af0c6d1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Hover_Orange.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 9e22d5e03bda1442b999e173b4ae1b53 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal.png new file mode 100644 index 0000000000000000000000000000000000000000..214d5c265667b8afe8bd22b1a0deab0777fa02a0 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..1d7ed91618ffea93f62eab93dbe1dd4cd988833c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: b70a2a56c35a0439b9418e0aae585957 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Blue.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Blue.png new file mode 100644 index 0000000000000000000000000000000000000000..eb90468ad83cb1564e135fa9ea3f3131dc2773fb Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Blue.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Blue.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Blue.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..764618b3cb36b4058b9b9893f6f609830678cea3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Blue.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 761c6090fc3a4463c8313e83a32f2165 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_BlueSteel.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_BlueSteel.png new file mode 100644 index 0000000000000000000000000000000000000000..0dc9d30a5b8f142f3a55a01823429f8689a9f961 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_BlueSteel.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_BlueSteel.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_BlueSteel.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..10de911ca6934743e0fb204b589cfad5f47be8c5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_BlueSteel.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: b48bdede2d1f84662b3e62e0897572e2 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..b6c6c945d17a80863eb7536bda38aa616dc9f31c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..98f3b11db05e4ee7acd5356ffede66ade51caad3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: e45411041724a454393a0cfe3f45c0dd +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Orange.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Orange.png new file mode 100644 index 0000000000000000000000000000000000000000..800ae4117a7307a7e90cc787c83fca7ee51ab503 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Orange.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Orange.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Orange.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5356348aa57ab50ebbe642ef76232a86bfd045c9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Normal_Orange.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: c1fff777063ac4cfda0ceb4a6fb818a2 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..2de59735186345c0e9b58576d3def731cac8af43 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..e03013f012244ee0687d70bf6104b2a9034dcb84 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: cefb6a103e7404b398ec3189c6b085f8 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Blue.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Blue.png new file mode 100644 index 0000000000000000000000000000000000000000..90c903cbd7c33b9163af19d0110eab64927440a5 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Blue.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Blue.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Blue.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..2ea418190ab3e408f489e347bf9d358f42aadcc7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Blue.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: e09fae9db32a94f94873c17679666d12 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_BlueSteel.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_BlueSteel.png new file mode 100644 index 0000000000000000000000000000000000000000..805e4e7f789976f64ede3af73eca74b4d703996e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_BlueSteel.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_BlueSteel.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_BlueSteel.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..1e01ec5d5bffbefc3883c974217d130d3556cfed --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_BlueSteel.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 681e960584a3e4b2ebbb9913f2f70263 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..4873a1cb117c60879015bcd9e5faf02f71c356c7 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..84f786625713c51be93065d08e4b9df3ea255d2d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: d5e8f578cfa024bba911597e0430d021 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Orange.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Orange.png new file mode 100644 index 0000000000000000000000000000000000000000..efb56f21dcc154cb8fa9b45e70a2d3ec3c4c6c1a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Orange.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Orange.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Orange.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..1c5660576db39ab44b707e6a1e79b97f3cbf1f4d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/RoundedRect_Pressed_Orange.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: fc84a8874176645af9ce9b7f2182b3d8 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Horizontal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..5ad293204c72ce8f1e223de08c62763e3ae31d6d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Horizontal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Horizontal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Horizontal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..09b18591c12a28b588a6d32193fd551dedb8b04a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Horizontal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 7bf1fb783cc2f45a1aa52e6afae94ec7 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Horizontal_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Horizontal_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..a452546283f2de509d91254701ebfa190fe98596 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Horizontal_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Horizontal_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Horizontal_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..f2732e808a71acd6a90b1d6157c0b9b32d4aad7a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Horizontal_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: d942e0e1a3d9b431798ec4d1298b63ad +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Vertical.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..50ca0c918898b16d670c9f718cd8b32be9feec92 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Vertical.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Vertical.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Vertical.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..30e91da472d31e3430e6e21ccc31a561223ad1bc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Vertical.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 2e2b8d6789278460a963feb61377b9e0 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Vertical_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Vertical_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..f1a00c5b69746f1056b40176e622686824e17c00 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Vertical_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Vertical_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Vertical_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..e8632c7da1909a65581e856f8b263105e455ea43 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Hover_Vertical_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 2293da32f79384b619a13776098feba2 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Horizontal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..76b4d27dbea3b9c7a06176a95a8d3a84fbee52c3 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Horizontal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Horizontal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Horizontal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c032f0ec3477cf4315de4fa65458c413dfafd5a6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Horizontal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 26c24a6bf0ce7474c86da08fc5bc5dad +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Horizontal_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Horizontal_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..f5da41c7f98654daee7531625c744449a04bee06 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Horizontal_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Horizontal_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Horizontal_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..3bf5a050ee7dfc9aa72e5403415a3617ebece148 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Horizontal_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: bffd3acf455b6478fbbead214d089abb +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Vertical.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..2ba7fa913dbf1b44f6bec0321f56fd4d9907c8ba Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Vertical.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Vertical.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Vertical.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..fed3a6c464d0314501239fd25cb3cd288342fee7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Vertical.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 74bc49bc7f0374cd4b3fb09dbffbf632 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Vertical_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Vertical_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..47cd8907218a80efb4ee0c08f287cf654301b296 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Vertical_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Vertical_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Vertical_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..3226bd26a2d8fbce7740c56bfaa64cc7bb95ec2d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Normal_Vertical_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: c1b2fe2405bd8451484ed7c5de557e28 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Horizontal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..b90e9707021d569267b4c4b53fd910265d27361f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Horizontal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Horizontal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Horizontal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..ace00e0cd8e44568fe615f6320e7f8e95f354287 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Horizontal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 89eed54694d6d4c158fa5d2220796547 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Horizontal_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Horizontal_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..428f55c16bc17efea55f46fe1e8b349845a579a9 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Horizontal_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Horizontal_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Horizontal_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5901d55499a580b54c88b99a22a9b234dca6b688 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Horizontal_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 20a4b64d045784d2ca98c04d519027b2 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Vertical.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..7a96cc505f742357f0a3f968b314a94f89b36589 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Vertical.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Vertical.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Vertical.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..e8c812ea84e39b0294068e493ebb5a4cf0f1b73c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Vertical.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: a67eab5b1f52843f893fa9f2b00eea1e +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Vertical_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Vertical_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..c18b30748214aff57009e23e178b8b194de22409 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Vertical_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Vertical_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Vertical_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..65e95110d5324918c18fa088100439069847b0ff --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Selection_Pressed_Vertical_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 529c2357aac5041dab1ccf4c13677d45 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Horizontal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..6cce5ba1581486a91e55ee36ceaa71345f0d7adf Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Horizontal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Horizontal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Horizontal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..34f080129c70d3a898be28dd5698bfcdddd65f05 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Horizontal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 9bab02d192f844076ba0c205ecf1ea88 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Horizontal_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Horizontal_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..5a18c4342af5a96410b43297592b788829b75872 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Horizontal_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Horizontal_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Horizontal_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..7d1b70c091d628123e2d596e189c042946756681 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Horizontal_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 87d265bff5dc54d589054b46f1b253fe +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Vertical.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..40217f526e7746930b0c2daff4ef4a69078c0d85 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Vertical.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Vertical.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Vertical.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c0be5f90b8262ee8bd758413617351fdbfe4a944 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Vertical.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 994ce50ee442c4f259b8cbc4bf268c12 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Vertical_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Vertical_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..1b2fecd349b6ee5fe3707fdc43265bbadc40ec12 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Vertical_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Vertical_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Vertical_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..3efcf539d7482e1eeba8ffdbcf02aec29a05c866 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Hover_Vertical_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 2da08744ede4d43c7a048b6d16b3bd77 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Horizontal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..e32052c5435d7930b04422c2f3c821a721fe0bec Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Horizontal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Horizontal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Horizontal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..961a8db8ebeafe4a95b92727038673199f2706cd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Horizontal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 89890fa7d231845c0b41fed1b560c743 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Horizontal_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Horizontal_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..32af4869cae90eac03cc2967f7d669023616bf15 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Horizontal_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Horizontal_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Horizontal_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..718050db5258822bc0ce7fb388a557085072e23a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Horizontal_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 083cca3f43117418bbc1e704d2baae2b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Vertical.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..37832111ccd5ef6eb948668f35631dd056e76f95 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Vertical.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Vertical.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Vertical.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..61d088bdffdcd9293bb7261281c1593c05033fbe --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Vertical.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: d4dee7369d0da4c5cb294c4f3ea0aee7 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Vertical_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Vertical_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..5dd760db7ebe4ec969755e17505ad1dceca02253 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Vertical_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Vertical_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Vertical_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..4d966ca3e58b2b063f33ca88037311ab0cc055a3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Normal_Vertical_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: ed3960eacd3ee4ae7b47e851aee22cd5 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Horizontal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..4d3e2ef5992d1f298be485194f4fcd9a8c8ac8ce Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Horizontal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Horizontal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Horizontal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..2d2be78b69adb96ecfcd72f5f7fd7e76155ee0a0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Horizontal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 8736de6dd61c54aefb727304512a99bd +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Horizontal_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Horizontal_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..36e38aedd481d7c3126911e5fbad6ce3ea4ad762 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Horizontal_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Horizontal_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Horizontal_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..50fba2d24329b35e95d3c5e9bbb10f97859b0ea1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Horizontal_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 415aee97b56614b158e218be4e055e22 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Vertical.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..01f205466548f24d57edaa8d828766131c2c3c9b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Vertical.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Vertical.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Vertical.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..eb5faae2e61224a2434935f1f4fba2c935e17e17 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Vertical.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 83b19fe973562474c92f29a1228863b3 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Vertical_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Vertical_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..f9e379fb3ec4ad401fec0a8bcdf763279a1b74e0 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Vertical_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Vertical_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Vertical_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..77eedaf7c2aa921cc758d6396d42c7ab82f0d93a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Background/Tool_Pressed_Vertical_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 38e947d789b7d426393d6b74a3082b7f +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Aligned.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Aligned.png new file mode 100644 index 0000000000000000000000000000000000000000..93cd7046aefc0f8e0c9caaad1d3d9275ccdb16a0 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Aligned.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Aligned.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Aligned.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..4a69e7879b21321864ded032aaebedc782d9d5b4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Aligned.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: bf4846dc2a1a844a29268dbc71f1c454 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Free.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Free.png new file mode 100644 index 0000000000000000000000000000000000000000..a5a3ec313dc7d43a23cb5614f9449066f7f7eae9 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Free.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Free.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Free.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..99f6afd6fc231fa5713ec5c8c7bc9e46f51ccc89 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Free.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: da4df1da6f6124e98950375683b8fe1b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Mirrored.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Mirrored.png new file mode 100644 index 0000000000000000000000000000000000000000..2d0140b43817ce5813cb6cfb23d302445a823c24 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Mirrored.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Mirrored.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Mirrored.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..b78bac68e929c3200ad343e3e6ff948a755b3c42 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Bezier_Mirrored.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: ef7e9b1becafe43e08ebc38b881ce60d +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Hover.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Hover.png new file mode 100644 index 0000000000000000000000000000000000000000..9ca5e8445e6d25d143385a870cb2a967a9bc8dd2 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Hover.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Hover.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Hover.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..66a0f53a3a64cb2f5274890c2fc1a8418348fc08 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Hover.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 46d3dcf42ff5c4ccf805503767dae289 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Hover_Horizontal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Hover_Horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..df59c49bf801cb20938b2ea7e9d34ee5270afa4f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Hover_Horizontal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Hover_Horizontal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Hover_Horizontal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..01de2e65618b8f349601e48ba0654f2d27d65610 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Hover_Horizontal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 942688bbdf9e1427a96370f9a35d7fbf +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Normal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Normal.png new file mode 100644 index 0000000000000000000000000000000000000000..882a0a740863ca091d89f9d6fd520d09a6cf785e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Normal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Normal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Normal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..9e3c28815277ec73c7e180ad7f650f417e889cbc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Normal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 5c266eda6963f4b088cb4e69c9892a28 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Normal_Horizontal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Normal_Horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..c094da52177dbaa0b079d054ea06a86253471d11 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Normal_Horizontal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Normal_Horizontal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Normal_Horizontal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..33443b64e7abed285ff66b2f69d1cb02e393d742 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Normal_Horizontal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 2784dca559ce34a9a8e44028c547a3a0 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Pressed.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..bae2785d9cff1b1c7cf5e1ea2d6a8e3cc503ed38 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Pressed.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Pressed.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Pressed.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..31fd7f83804713428b6b2651c93fc5b9cc1a87ca --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Pressed.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 7fd132649d558432ba3da6dacc873882 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Pressed_Horizontal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Pressed_Horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..253ae7bb6c9439923eaf6ce5433d0493835d13e6 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Pressed_Horizontal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Pressed_Horizontal.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Pressed_Horizontal.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c6d27d66990517353bac2ebe3e8ffd4f7c06fbe1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Button_Pressed_Horizontal.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 812226b3d99374891a555960dac7ef49 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bevel.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bevel.png new file mode 100644 index 0000000000000000000000000000000000000000..3740f048dd42b608c4facd84f6b6c606395fff8f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bevel.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bevel.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bevel.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..99ef0bafd7ee1511aecee1b930155796bf4bdc6c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bevel.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 43dee953c3e16437c905284d61f0b482 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bevel_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bevel_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..6120794438327309cc34005e8c4bdaeeb4f4afba Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bevel_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bevel_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bevel_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5f0492974ea2251f768621a231d8f74b170ef9f1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bevel_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 856657b62858748498f0ca756ea934af +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bridge.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bridge.png new file mode 100644 index 0000000000000000000000000000000000000000..aafa2018b6f2e17e412b2022f2e251493353060e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bridge.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bridge.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bridge.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..888c894b66262cb8193f3fb8ecaaea490678d2e4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bridge.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 249ff8f97942f46bf9c03f603e87df35 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bridge_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bridge_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..c75cc0505f3f397507b1ecd68c8b8df5864220d0 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bridge_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bridge_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bridge_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..b3d777f6a307be160cbed8d44067fac1fefbbc70 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Bridge_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 821257d58060c41e29f55ecdab551f4b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Connect.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Connect.png new file mode 100644 index 0000000000000000000000000000000000000000..5e602ec7321fd984272f71cb2b6917905c50e761 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Connect.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Connect.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Connect.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5688e7c6c92ffb534309ceff812d9445d9f17b19 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Connect.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: a8aaa3be9d93e4e979be2cdb9b36c5a7 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Connect_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Connect_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..2bcf7648884ac6fb62a2eb4881b07feef06062f5 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Connect_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Connect_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Connect_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..0fac28beac03521c3074a736898872408440d1e3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Connect_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 730c69e680a894479906e6b80fe5c3c9 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Extrude.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Extrude.png new file mode 100644 index 0000000000000000000000000000000000000000..a99dd917818590194411b2c978032842b6f0196d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Extrude.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Extrude.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Extrude.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..8e10832cc3259950183c8d3f1d117ee2e705fa63 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Extrude.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 17ca372dc70ce445795e5327fd14617d +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Extrude_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Extrude_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..a2da130536c1b7a3c6425bddb1c5aaac836c0839 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Extrude_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Extrude_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Extrude_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..b256310b11fc3454bcb4386990e0e5a08f6ec2aa --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Extrude_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: d9267088ae9cb49389e48118c2a3b389 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_FillHole.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_FillHole.png new file mode 100644 index 0000000000000000000000000000000000000000..39d6343d8820f06031d3a176935706cb6de5c4aa Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_FillHole.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_FillHole.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_FillHole.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..dd0e1612f1172b561f4677f04eedfcac734e8839 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_FillHole.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 8af90ff5f51264541a5c2a2b24b3d0bf +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_FillHole_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_FillHole_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..5c92257dc95dee6d6d51bf17eb4d1150ab183def Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_FillHole_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_FillHole_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_FillHole_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..f56d8ceabc32ba8115b4e699b2b4b114af909cd3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_FillHole_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: b7defbd9ac0184d85b28922c48f45cea +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_InsertLoop.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_InsertLoop.png new file mode 100644 index 0000000000000000000000000000000000000000..ad4e6669e9eebbcdb2ac162f1f566233a750379b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_InsertLoop.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_InsertLoop.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_InsertLoop.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..e766ea7b070e65e3632ae4bf74d47447bf0b9e44 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_InsertLoop.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: c84a11398243f4f019945e198b15e027 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_InsertLoop_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_InsertLoop_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..ff2dce259f516f1ee7f517f6b1af8192150d106f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_InsertLoop_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_InsertLoop_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_InsertLoop_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..79dbe56e1ec2295e97efc21e369c80d2468e2a17 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_InsertLoop_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 0c2118973b15a41de89e16923ee7d23d +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Subdivide.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Subdivide.png new file mode 100644 index 0000000000000000000000000000000000000000..b9fd8ae34eaca907ef10a1e615f67c5d44f0bf9d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Subdivide.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Subdivide.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Subdivide.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..74e0e06780d04b1e25324b5c024315d456af6e7c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Subdivide.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 03784ef963c4741f1a1766dff98f093c +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Subdivide_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Subdivide_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..1926e1eb8cddccff30e05c0228d216644c7a6315 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Subdivide_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Subdivide_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Subdivide_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..849a337161d8b2e3e697de5f2dc35a845a9fda43 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Edge_Subdivide_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 1d3cfa6d5d3be48b49f9bc2055d9cc25 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_FaceNormals.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_FaceNormals.png new file mode 100644 index 0000000000000000000000000000000000000000..4810e68a04d99551c3fb7e66361ecd54c5264925 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_FaceNormals.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_FaceNormals.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_FaceNormals.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..30840458ae93f5ba12b0ae254868b2fb5405fa06 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_FaceNormals.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 452fce3d684314606b2da9b5dbf4eb8e +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_FaceNormals_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_FaceNormals_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..d9130ddf3860f54ede48548396e6e6e0c6d85a74 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_FaceNormals_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_FaceNormals_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_FaceNormals_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..db428afadfaa893974bd2f587a03b18e1c66eac1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_FaceNormals_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 504f22e2501944c509a1de50190e680e +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_Individual.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_Individual.png new file mode 100644 index 0000000000000000000000000000000000000000..eef0be1cd1f256137cb65ad0bfe47e4325429d2c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_Individual.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_Individual.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_Individual.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..f006d6d0c19ed6c9609bc4320b78b51d4948e511 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_Individual.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: ea438799abcec451b801b70c7299438b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_Individual_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_Individual_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..54b80f9c450139e0377d15b65246281b85eacc52 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_Individual_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_Individual_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_Individual_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..3d0bebb265c59bfb96931fcd11a16f102d3656c1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_Individual_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: d0945ff31532a4cc2adacd46c6abfc91 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_VertexNormals.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_VertexNormals.png new file mode 100644 index 0000000000000000000000000000000000000000..358de9bcc9b098e480599a5409ee08f49c6bec5f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_VertexNormals.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_VertexNormals.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_VertexNormals.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..cb845f289af4ca4e83cc7e4cd8a7d8bab4bc38fb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_VertexNormals.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 43ec922af57f445fab34eb16c76ee135 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_VertexNormals_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_VertexNormals_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..07abf5b35d43973a2b525b8bf47fcc84d1d54840 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_VertexNormals_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_VertexNormals_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_VertexNormals_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..9ca740683cbf38f60b09687320075b604c76c288 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ExtrudeFace_VertexNormals_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 73806305a4e494c60aabf8cb0b4bf5e0 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_Off.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..0b719fb0988121beea31fe971c5a0d080364fca1 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_Off.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_Off.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_Off.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..15fb373434de15f4b2fcb7689586d3af0af62dfa --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_Off.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: ed0f7a8b882ee4f6abefc9996d60afc2 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_Off_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_Off_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..b46547f4583b8c2a096670d5bfd616224b6309f4 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_Off_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_Off_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_Off_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..db4f034942dc917263a36da3c960d2af6ec2a16e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_Off_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 20d44a66b868d48ed8ec4ac8700c1807 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_On.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_On.png new file mode 100644 index 0000000000000000000000000000000000000000..b173a09dca2e86c1c62787e73d7da7ddbbf355a6 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_On.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_On.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_On.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..a54c8810fa8e35ec27e8330c37a7cc80d065c857 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_On.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: b6d07916b2876498ebc65ab5a16ed9c5 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_On_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_On_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..8ad18eee366495b03bda45eacb5de1b6794bc3e6 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_On_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_On_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_On_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..225dba99002668a66fef9cbd2c2c28f2313d4e1d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Eye_On_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: dbc263b202df744759ce4e89d5de7a22 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_BreakSmoothing.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_BreakSmoothing.png new file mode 100644 index 0000000000000000000000000000000000000000..d2bab8e0bf0a2cd19fb6e76930735ada81800306 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_BreakSmoothing.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_BreakSmoothing.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_BreakSmoothing.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..0af0dd1d98900963b5d1d875b746b7489694caad --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_BreakSmoothing.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 530fa8faf4a75475a91594dc67b3d727 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_ConformNormals.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_ConformNormals.png new file mode 100644 index 0000000000000000000000000000000000000000..14e23e00eb0bb5497b6965c095cec30deadaf218 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_ConformNormals.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_ConformNormals.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_ConformNormals.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..3bf0f5759611983113d330317209f109e3837d48 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_ConformNormals.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 414975dfc411e44d5873e1298b1badc4 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_ConformNormals_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_ConformNormals_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..9cac83c04eaeb243ef2f486d9da00b5faf452acf Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_ConformNormals_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_ConformNormals_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_ConformNormals_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..80d13b17fd568a1cccefcb54fac8c014e02b42ed --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_ConformNormals_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: ca1d1fcc0cd01419bba2407bfdc263f4 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Delete.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Delete.png new file mode 100644 index 0000000000000000000000000000000000000000..76dd336e4f716e3419b9c1835933a4640049fa73 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Delete.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Delete.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Delete.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..22abd983cc56c35af1f75cf2fb6e5f6ab15c7a0f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Delete.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: f5cbc2065eed9419bbc68124aad2ff87 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Delete_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Delete_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..b86d247f7905afcf4a4bb62cf0da28f0d7e0786a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Delete_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Delete_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Delete_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c17b65c131cbc1bf1b217150aeef025b616c8b9a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Delete_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 881426ae389ce4286a6761438a81f7a9 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Detach.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Detach.png new file mode 100644 index 0000000000000000000000000000000000000000..25f38bfd99b88574739e561c9c2cb4b541e4d363 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Detach.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Detach.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Detach.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c8e4ac544afe033da9f8396b6b513cf4ddca1cb4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Detach.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 335e609d01b074d95b939ad7401a2f6c +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Detach_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Detach_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..a193db2a4e0a4a6d8991d9895003598d767f294e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Detach_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Detach_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Detach_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..816ed9daf67883466fd44f4fc42017dccac11039 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Detach_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: c75e468d031474cb8bb8fa55052f571e +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Duplicate.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Duplicate.png new file mode 100644 index 0000000000000000000000000000000000000000..25801386085e097c24fcdcc07d8618bf4af5cb73 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Duplicate.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Duplicate.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Duplicate.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..74f4d6ab946ef2dd88b9467e9cf1d10fce8d4380 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Duplicate.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 873f5a608d94f1a41950dd475505ac99 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: WebGL + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Duplicate_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Duplicate_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..270a60c9fbfbf2f9c74e2427dfd01f9f3e8d8d99 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Duplicate_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Duplicate_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Duplicate_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..d33276988936373bcc8bf260e7642a0471424ea5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Duplicate_disabled.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 9fb527c1d5169144fac9f1e2a44989a7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: WebGL + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals.png new file mode 100644 index 0000000000000000000000000000000000000000..ce9271eb6ed989d882ae600b20a591f5010ec77a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..2f9633f2b67052bcdf0e620e69df363939000f59 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 969f83c37cad7444db46027976fc291f +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals_3D.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals_3D.png new file mode 100644 index 0000000000000000000000000000000000000000..2017eacf8cb4bd6be518bb64ddf7b571b37243ee Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals_3D.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals_3D.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals_3D.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..7fe98ee59e5abc38e096a869a8d9e201444452e2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals_3D.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 6e1f06572201e4182b190d4afb94b36a +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe4070b0bc6dcd04f7743f6ce461966a55275ad Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..bb9a9c25c3ae75e6925bf28d6174de3f476b622a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipNormals_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 737f5ea0ac9e84e078766b1d2a99b7f3 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipTri.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipTri.png new file mode 100644 index 0000000000000000000000000000000000000000..8b3143850a65dc9eeea6fbd9352acaac862ea94f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipTri.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipTri.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipTri.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..aad3933539a633fe7acbb1536cb8fec03a690ff7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipTri.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 8160430d66b1b46058a38d6eb90f9c5d +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipTri_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipTri_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..98e7d543f1a8aff1e2ff2bdc7e60e30365463896 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipTri_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipTri_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipTri_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..64c6e4b8615f09ef5c4f309e7c3c318609bff6a2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_FlipTri_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: bfce4f99a83ff4a38a9f79cd9740e127 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Merge.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Merge.png new file mode 100644 index 0000000000000000000000000000000000000000..455c0d8c6247bbceb1c7fbc2be3667e1ea158f25 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Merge.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Merge.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Merge.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..51a308bef453e2347271c31a0781fa85c3f7b413 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Merge.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 9a25118aa31374ba3a5030600816a351 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Merge_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Merge_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..efd4252f919ac51baf47165fd49512e7f183d05a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Merge_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Merge_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Merge_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c5ba450b91872117412a62efe9fdef5c3728c13f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Merge_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: b101a01607718410bb1121fee004c8b3 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Subdivide.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Subdivide.png new file mode 100644 index 0000000000000000000000000000000000000000..b49409bc5a0f1fa9647ccc8cbfce7918e9fc5ee8 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Subdivide.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Subdivide.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Subdivide.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c1df20770d576e61bbc5212e357eb75e19c9b90e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Subdivide.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: f39740293786844af83a632bff1665d9 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Subdivide_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Subdivide_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..84f506ef9d0934797039848edb1c33bd8dfe43cb Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Subdivide_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Subdivide_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Subdivide_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..7df0762fe73ab6dfbc8d20ebeda716f18146b301 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Subdivide_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 1969c94fa912348e9bd4d423c2618191 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Triangulate.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Triangulate.png new file mode 100644 index 0000000000000000000000000000000000000000..440ce49bc3a9d1f37553c92a0ff34a0846a63431 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Triangulate.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Triangulate.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Triangulate.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..4df1b132b922ad83bb494f9409dbfe7ba14c2148 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Triangulate.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: c81b119083ec94dd381aa40cfdd3384d +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Triangulate_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Triangulate_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..cca3f076703e9b5720500e44c41af1d303112501 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Triangulate_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Triangulate_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Triangulate_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..2137e594bfe6a2b9dfb76361cdbf6d730d582a6c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Face_Triangulate_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 1415d1687434e48a19b4343226a4504c +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Custom.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Custom.png new file mode 100644 index 0000000000000000000000000000000000000000..b82a8f11439334b9bc2fd2812930897639433d38 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Custom.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Custom.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Custom.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..b17dbc7a545581459c3a7d8c549c3f20218b0308 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Custom.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 1ca3f1b1d9b7b4e63bcb89526f13507d +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Local.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Local.png new file mode 100644 index 0000000000000000000000000000000000000000..4bdba40ce457b56a56c90c3c542ae209c6984f00 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Local.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Local.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Local.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..2c31d3b92ff4d7a18854b9e6a36433b46619e805 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Local.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: a187dcc3eec2047b38062e5def2d4dd7 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Plane.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Plane.png new file mode 100644 index 0000000000000000000000000000000000000000..17b00808ea0bb9bbc7a65ac6a159e2dc7eebcf5a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Plane.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Plane.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Plane.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5c2073e8c1fac458298367e572808c4cd2541722 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_Plane.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 6d8a0cbf20c07418bbb33ec170d3a000 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_World.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_World.png new file mode 100644 index 0000000000000000000000000000000000000000..74445c74241aacffc04d9723af4e25d8cb45519e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_World.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_World.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_World.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..2bafb9a68456e16105b49a531709f4d32e7d6b15 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/HandleAlign_World.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 07353549ad6f54463b035ea6bcc87fc8 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Help.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Help.png new file mode 100644 index 0000000000000000000000000000000000000000..6843599f07e66339b812dc21919861a51aa3f0d0 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Help.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Help.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Help.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..7b40edff366750bb7497e7a7a148935ea8850407 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Help.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 40ac0829cdb3a4533914f2bd954c0e0a +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Help_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Help_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..cde00486bcc883c17dc2a961749774afa44b3404 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Help_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Help_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Help_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..95269d8f3131500781f4ec1b1b663554d5e4fddd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Help_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: ae70d38adb50e41d69bdc4c3ecd89c12 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Edge.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Edge.png new file mode 100644 index 0000000000000000000000000000000000000000..614f2dcf8d5f1a74ea679dac6e81d7837d77f30d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Edge.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Edge.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Edge.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5b543260bdf9bfd2116431faa04fd490ba129461 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Edge.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 1cedd028e2b934968a4badb229f3bbfa +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Face.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Face.png new file mode 100644 index 0000000000000000000000000000000000000000..8068cde92b004fa8660b877435d46eb9a95eaa4a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Face.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Face.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Face.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..18c3d540a2d4e07f3d607a03ffc255e18add326c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Face.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 7f77ca82d147447829f8cf2f6b62c503 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Object.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Object.png new file mode 100644 index 0000000000000000000000000000000000000000..560190d4ad09d16485010a62e311f0a0e5267b85 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Object.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Object.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Object.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..b37daa45cb5e8aa01599bf597247e97fb7d39cb4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Object.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 3cfa89a4662de4f0898745f39286b955 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Vert.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Vert.png new file mode 100644 index 0000000000000000000000000000000000000000..14f50d7821955ff185fc895092e50b35fa7f836d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Vert.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Vert.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Vert.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..84ac0c84f5a436b6324fe5d02d406988ca6bc3f6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Mode_Vert.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 550d1cbeeb52b4f8694139628f2604ef +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/NewBezierSpline.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/NewBezierSpline.png new file mode 100644 index 0000000000000000000000000000000000000000..39fb48883c9b7c834a1f15206819004cbac8f539 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/NewBezierSpline.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/NewBezierSpline.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/NewBezierSpline.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..e5ac3f88982eb71e825ebb429cb86f2b4c098799 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/NewBezierSpline.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 2e64adba6c17a4993b85912f715560db +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/NewPolyShape.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/NewPolyShape.png new file mode 100644 index 0000000000000000000000000000000000000000..7db5d499a8aaf623eff24b5fc10eb143f2c9a00c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/NewPolyShape.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/NewPolyShape.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/NewPolyShape.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..099b9c1962b254ad2574401ca431689197c5ec3b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/NewPolyShape.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 242269b6d09cb4348a4916c9b919480f +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ConformNormals.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ConformNormals.png new file mode 100644 index 0000000000000000000000000000000000000000..38c8378dc37270bb0ba670560c6c3e428c18a6e2 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ConformNormals.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ConformNormals.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ConformNormals.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..f6abf5080696eb29e05b57fa87c400876315dc1c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ConformNormals.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 810f66354dd304a43bcebe1a55601513 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ConformNormals_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ConformNormals_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..68035154f707647631f8a28c9cb54c632a01d5bb Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ConformNormals_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ConformNormals_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ConformNormals_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..bb3328e4665382b93c8116baabd806969f36137e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ConformNormals_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 94249e00d22ef41adad51bab421b0e09 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Export.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Export.png new file mode 100644 index 0000000000000000000000000000000000000000..0642afd346a1286a7c30e78db6e7e7e0904cb629 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Export.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Export.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Export.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..ef88b38c0e83ee5a3463ea629a5b4640ebc06bd0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Export.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 7754f95d111474afb813edcc7c2ff9db +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Export_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Export_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..20e7c8ec7e8e9fafb35d14043440a939852eeb5d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Export_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Export_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Export_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..473ae642d85656c4b813078752c7d4a0abf0fc4d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Export_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: debe6a77aa48245eb9a87e54e3c1d3cb +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_FlipNormals.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_FlipNormals.png new file mode 100644 index 0000000000000000000000000000000000000000..c43593b4f83742c5c59834d7f51abb5f04bf5d9d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_FlipNormals.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_FlipNormals.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_FlipNormals.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..6486812b0e5a63a016a70ba39c66ac61fcf94e4b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_FlipNormals.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: f92a3f288555044279199c3a1134e80d +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_FlipNormals_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_FlipNormals_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..ab1941bd5ab9cee11b753f43dbd77a2c2125ada2 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_FlipNormals_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_FlipNormals_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_FlipNormals_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..96478732c40bf6d692ebea6a6fa51468da0a1451 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_FlipNormals_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: d2b89eba32d4e4836adfeab804053698 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_GenerateUV2.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_GenerateUV2.png new file mode 100644 index 0000000000000000000000000000000000000000..77aeeadf5870d73b5c5bbba831c341573bdd37da Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_GenerateUV2.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_GenerateUV2.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_GenerateUV2.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..ce4deaef7550cde72e6f39340dfc39e5ef16bf28 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_GenerateUV2.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: b389d16e3ce0e48289e8533dbc39bba8 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_GenerateUV2_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_GenerateUV2_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..60223bf1b4b170adcc7fdd4cd0391bd10b05ff1c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_GenerateUV2_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_GenerateUV2_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_GenerateUV2_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5205cddf8fffda945bed7e21f53ef82667513568 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_GenerateUV2_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 0e31e246654f24922a061e6bd9675d9c +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Merge.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Merge.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8ba94ff96a4ceaa849137507137a92c7243e20 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Merge.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Merge.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Merge.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..ee2aac99892f4fabbda60bb7de31db5f3c3e2569 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Merge.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 3dd24ef03b33b4f789b5e5869a8f175c +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Merge_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Merge_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..76a4df5e3031d3638296a371557b93caf778b2d8 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Merge_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Merge_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Merge_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..d3c0b096f18aa64641e895d0d3f247f3521c50c6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Merge_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: c07b62d30e3124a66bca5735d1cbb0d9 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Mirror.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Mirror.png new file mode 100644 index 0000000000000000000000000000000000000000..e322fad7770a3cc147fc4d82f69f9048882d6b23 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Mirror.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Mirror.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Mirror.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..3de22b126219168b77d6584c03572cccf29bb761 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Mirror.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: f62ae14c596ce4e8baec2ac12e0325cb +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Mirror_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Mirror_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..120e3bcfa2d258d5c67697c103c1495d51d24b15 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Mirror_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Mirror_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Mirror_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..0748010808963269025e8aab2e457214ebf693c3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Mirror_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 23809919cfbb5422c8c41a5ab9109723 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ProBuilderize.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ProBuilderize.png new file mode 100644 index 0000000000000000000000000000000000000000..a4492d603e7e695db7c109c7ac5c76b07310b600 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ProBuilderize.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ProBuilderize.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ProBuilderize.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..85cfc05093275d7426b38ec80a1263d66781dcb4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ProBuilderize.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: aa758a88ed4a5404fa8b0827990c1469 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ProBuilderize_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ProBuilderize_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..34db90736088512f9f79d0dd245c5df226cd85ce Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ProBuilderize_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ProBuilderize_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ProBuilderize_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..7c82203faace5e677c91121a3705f204479af802 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_ProBuilderize_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: a4aab6c0e7ac6441c8bdf395d78415a0 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Subdivide.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Subdivide.png new file mode 100644 index 0000000000000000000000000000000000000000..05bc093c41f1319ed6202f3935a44b3ca03e0846 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Subdivide.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Subdivide.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Subdivide.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..d3ccbd9695fba5398d57331f55d0b57c9c5413d0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Subdivide.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 241e08ff056bb40ea90eeb5745c045f8 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Subdivide_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Subdivide_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..e6cc8cfd2f60330ad2e723644ed9f2987cae5c27 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Subdivide_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Subdivide_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Subdivide_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..72d72b1f4dd89eef3c3d9792dae813701c795972 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Subdivide_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 4a239944eb900466eba405e00fba39be +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Triangulate.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Triangulate.png new file mode 100644 index 0000000000000000000000000000000000000000..13af6f5e5f68cf63e0d0eb46a114838b7bd0e73c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Triangulate.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Triangulate.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Triangulate.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..0b0af0eeaf35abcad06a889aa777c98d03480fff --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Triangulate.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 70c6b7d05bf524f3bac5f89a3f4c8194 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Triangulate_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Triangulate_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..f9485e041a62d048a6413e10603e39e79c12d94e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Triangulate_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Triangulate_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Triangulate_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..1612c52fb6c54dc85b14b3d6c87c39a36208e976 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Object_Triangulate_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 31913ad76661a4a7ab667ceabd697359 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Offset.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Offset.png new file mode 100644 index 0000000000000000000000000000000000000000..fc8e6b97f848ecd2f93d01743268266f65b1f6e8 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Offset.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Offset.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Offset.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5a4b987a01823caee938ea9e6535c5bc13cabdc0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Offset.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 80e67fafea209ad4aa1459b80c8db968 +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: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + 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: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Offset_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Offset_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..dd0f109437e5b6f54bffad64208138dedf0e45f4 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Offset_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Offset_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Offset_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..29797ca9eaf917b91c6b1cf2f9fe5e4eb29d7b82 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Offset_disabled.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: aca75d0125fbd4d4a89b5e9126a76d20 +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: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + 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: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Options.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Options.png new file mode 100644 index 0000000000000000000000000000000000000000..e8a6ea968c8c1fff074fea9fa3dc6d540b7e9c6d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Options.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Options.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Options.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..f49558bb16602e3d1d4333b540d943218f8690d4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Options.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 62abaf77b3059466288eeb593d07d59a +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Boolean.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Boolean.png new file mode 100644 index 0000000000000000000000000000000000000000..cb4427b3def145a98febc3bf2c6e114c9f69f204 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Boolean.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Boolean.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Boolean.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..bbb5242758805fe3fdcb734dad2066b5b5f688c4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Boolean.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 1f012abb1184a47c48035dd54530fb6e +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_GeoDrawing.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_GeoDrawing.png new file mode 100644 index 0000000000000000000000000000000000000000..5929c32c0f141a8b6b8d0c3f945b1932ab195398 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_GeoDrawing.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_GeoDrawing.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_GeoDrawing.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..45394a603809627637336b94aadd261baa972e05 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_GeoDrawing.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: d662a44726f8f4ae7bfe880c93229aa0 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Materials.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Materials.png new file mode 100644 index 0000000000000000000000000000000000000000..de68609cdbdbd548fda897124886abed1fbda372 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Materials.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Materials.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Materials.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..8411902bc1926d65016497d153ee2a037237e4d0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Materials.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 130b88294a9d04f8198229adfbce3c2c +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Shapes.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Shapes.png new file mode 100644 index 0000000000000000000000000000000000000000..5bf4adddb73a4163d61781a719043dc4c29d6f93 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Shapes.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Shapes.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Shapes.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..1584493f999875fd4c2d3705ab1a5426dd4ae7fd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Shapes.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: b1200b4e3bc72449e9735c9742fc6103 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Smoothing.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Smoothing.png new file mode 100644 index 0000000000000000000000000000000000000000..31c7cc28a81e840266290696ce2d3297afa951ff Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Smoothing.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Smoothing.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Smoothing.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..f02e8da08e30c5a30c9fe034ba73d702b367c07a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_Smoothing.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: cdf1fb390ba0745ff99b8f37be0803e6 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_UVEditor.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_UVEditor.png new file mode 100644 index 0000000000000000000000000000000000000000..2c0713f6421b83e7e346cba1c40cfc2d076a4602 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_UVEditor.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_UVEditor.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_UVEditor.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..6d5ea6cc67567f129a4815ab179e119da2d5125e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_UVEditor.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 55fa51605a4cb4f1081d7ac92acfe939 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_VertColors.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_VertColors.png new file mode 100644 index 0000000000000000000000000000000000000000..38c9488d29aec7f9c38b23ec1ea06b6d29118e56 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_VertColors.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_VertColors.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_VertColors.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..3c58a331e12d7199115310ecceb83b289889115e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Panel_VertColors.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: cfa793a5b357642bf83fa6888ee18e76 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnElements.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnElements.png new file mode 100644 index 0000000000000000000000000000000000000000..76e18a04089700fe7d4fd0734979f60b3e076d98 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnElements.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnElements.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnElements.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..07924739a12c5241a9dbae3c186d8bc13e79cca8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnElements.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: a112cd603fe664fb18e73b0700b4039f +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnElements_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnElements_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..91a18e6f1eac4f78a28bc791b0ed54c5d9370bc3 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnElements_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnElements_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnElements_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..eaee78e877ef3a9f8d773b29a8767b893d8f0d6a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnElements_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: cb4e6fc765183463cb5ab3522bfc607e +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnObject.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnObject.png new file mode 100644 index 0000000000000000000000000000000000000000..92576ebd82530363bc355bbf3cf167c4cea4bcfb Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnObject.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnObject.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnObject.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..59a98bcee4c375f029872d5e906f5225592fe6c0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnObject.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 7c1124a3b675b412e9b6f303869a1f61 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnObject_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnObject_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..a5f94c8eb2987a787e150f8e522fe7210685ef1c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnObject_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnObject_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnObject_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..88be9dc0227a88e2249e4974879d27e44804a433 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_CenterOnObject_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 681feae1fa1564753add1c7f0d1f8201 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_DirectEdit.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_DirectEdit.png new file mode 100644 index 0000000000000000000000000000000000000000..0ff8c1934217ca0060e068de1f739a66c10209af Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_DirectEdit.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_DirectEdit.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_DirectEdit.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..699ca401002018960f7331e710da2a95d882d1a0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_DirectEdit.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 1fb428ccc95fd406e89e0777f619cf2d +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_Reset.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_Reset.png new file mode 100644 index 0000000000000000000000000000000000000000..4501e8ab8d4d71f778c7bc6f3e73354cfb8cae58 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_Reset.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_Reset.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_Reset.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..a02e5c960fdc940254fe6dc909caf1c53acf1708 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_Reset.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 9e66b04a800d04546940b09710d86b8e +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_Reset_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_Reset_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..0b508970f69ba5168a4fb78cd29a850d12a94b13 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_Reset_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_Reset_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_Reset_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..0c2606b5dcecbbd04e871e0f29bf6dde32919b3e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Pivot_Reset_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: cc4d84aa3336c4f31ab4948641fffe9e +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ProOnly.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ProOnly.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec37dcfc18e64d8a21d954b40bbbacf2aceb5cd Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ProOnly.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ProOnly.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ProOnly.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..b1031b8e6228a2254faf5b1b4b01923b966a4666 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ProOnly.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 6db74a7ca279d45b58ab5d9be550ded6 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/RoundedBorder.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/RoundedBorder.png new file mode 100644 index 0000000000000000000000000000000000000000..3f83c56cf73c07a2b9a741206acda0b22be47a7b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/RoundedBorder.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/RoundedBorder.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/RoundedBorder.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..57c8d38840125288c87e0bf77596d23e749ea682 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/RoundedBorder.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: ac9e13c8802f74529be37e5cf1150360 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Grow.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Grow.png new file mode 100644 index 0000000000000000000000000000000000000000..25bb4f3af17bdac09c4b8f2eea385af6cd0949b2 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Grow.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Grow.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Grow.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c957a4a350bf949eb32fd3f505bc50094685a437 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Grow.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 92b965cb36c2241ff85afe194b701652 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Grow_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Grow_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..2d25dbf9ceee9937288316cf5163e183462c6512 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Grow_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Grow_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Grow_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..2811df217c4b0bc96c817100a465855183262770 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Grow_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: e15de6045960a4d53b088c0addcc390d +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Invert.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Invert.png new file mode 100644 index 0000000000000000000000000000000000000000..94d187c49dd79182d6e0ae79e3d8bd64048000a8 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Invert.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Invert.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Invert.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..757a0f5b48de1f4cee4905b4a43fa99434c90305 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Invert.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 1e81779d9a73a4572971700ad1ce0fe3 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Invert_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Invert_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..aa0c78a1eb9c244d25ea251390762b7a4364f134 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Invert_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Invert_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Invert_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..d4d34b6a165ee27ab8a76a5bcf5bd8c904bf6d3c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Invert_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 0fe35217875224a76b74cc8207629d22 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop.png new file mode 100644 index 0000000000000000000000000000000000000000..30b72d22b58ed1efa161272c0907258842e6a5f3 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..570c770807a9a7f9cbea391ba0111f6609d3b2cb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 1a10d9380e55746d29fc49763b2869d7 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop_Face.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop_Face.png new file mode 100644 index 0000000000000000000000000000000000000000..7fb0cb2a42596e3972dc7c2b8ae91ed6c088b27f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop_Face.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop_Face.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop_Face.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..d667850ff400de1645e99c65274a3af5690e4378 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop_Face.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 120f219005f4543348e937ed8b35599f +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..6de62373f9fb27246e8e581bcb0efdfaa4ae0b59 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c2cb4965456eb790affbe0dbe01fd7e1e0d9537f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Loop_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: f0334c0bc6d0e4053bbb3d22950b5ad5 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Rect_Complete.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Rect_Complete.png new file mode 100644 index 0000000000000000000000000000000000000000..5e05aac62934660011ba93d3b101a927c46a541c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Rect_Complete.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Rect_Complete.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Rect_Complete.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..81f3aae4d6fcc244f371db491d1632cedb0b7487 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Rect_Complete.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 07e89e2d154d04623b0fb96b6bfc29bf +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Rect_Intersect.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Rect_Intersect.png new file mode 100644 index 0000000000000000000000000000000000000000..de09a8eb1bc8446519577ce6497bc553361e462c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Rect_Intersect.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Rect_Intersect.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Rect_Intersect.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..9c004086b86c6eeff7df639aac845d19e7e610ff --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Rect_Intersect.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 359ed6d9c2f6e40c78c4fe5529307add +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring.png new file mode 100644 index 0000000000000000000000000000000000000000..805ee59885889aa3e3e0c925f2396823505ecbfc Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..e83d7d91257d4b7d049bc8fab89c93901e9091f7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: dda70ebc32c4c49b3a6187d6ded83f5b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring_Face.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring_Face.png new file mode 100644 index 0000000000000000000000000000000000000000..559793811a08fefe0c4b6219c67ea52909f18a75 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring_Face.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring_Face.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring_Face.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..82639c1379efda76ef62ab2e7be936720667723a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring_Face.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: cac1fca893e56468c9d18e0492d55653 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..fa1b32937a0d5295f6471da661d782f3de569767 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..22c37b0ee07fbfde869c7b5ebfe1b124ba4173a5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Ring_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 12a20356f49f84fcba632c43573fe1f4 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByMaterial.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByMaterial.png new file mode 100644 index 0000000000000000000000000000000000000000..7717c66498a88130638107ca690f4c70cd86530b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByMaterial.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByMaterial.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByMaterial.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..50f86ed08d9d1c750b510e1ac041fb7fed3bd3f6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByMaterial.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: c0404ba48e711412ab3269a164760091 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByMaterial_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByMaterial_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..77995271e8ce8155eb1e5486fbe7d7eb45e9bbc4 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByMaterial_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByMaterial_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByMaterial_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..e0fd4f2a7467e4b2ef5f4d738e30894306939c8d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByMaterial_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 07b70a092b6df4d37add639c429acb2b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectBySmoothingGroup.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectBySmoothingGroup.png new file mode 100644 index 0000000000000000000000000000000000000000..083dbb90456ab40f5cdcb328637ce5a98f7f7938 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectBySmoothingGroup.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectBySmoothingGroup.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectBySmoothingGroup.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..cd0b9731af673036548d1e4d6988bded22bab02c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectBySmoothingGroup.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: eb21164897b574d6b8a0c05c9d672652 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectBySmoothingGroup_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectBySmoothingGroup_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..0abe76f341ca5ca60162ecef85962d5cfe162c32 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectBySmoothingGroup_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectBySmoothingGroup_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectBySmoothingGroup_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..7a68130815b305c6bfdf42a20a43079abf86f268 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectBySmoothingGroup_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 8bec663da129b44709d5b7ff7ddd153c +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + 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: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByVertexColor.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByVertexColor.png new file mode 100644 index 0000000000000000000000000000000000000000..701c02d8128f12c65b817ac3f9920e41831ec397 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByVertexColor.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByVertexColor.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByVertexColor.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..914c81aec81f69bda72e921a0a02c03f29b1008d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByVertexColor.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: fd32b78549c224927a6139e8252f89c4 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByVertexColor_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByVertexColor_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..8dea89ca0f592baf00e2537ae77e5d004426cdd9 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByVertexColor_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByVertexColor_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByVertexColor_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5c2bd1a0bb40a2b1b0792712578d346ca7cdf6fc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectByVertexColor_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: da6f8820c1503491d877372224bd107e +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHidden-OFF.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHidden-OFF.png new file mode 100644 index 0000000000000000000000000000000000000000..a54abd791c572205a7d137c800674a9bb315d4c3 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHidden-OFF.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHidden-OFF.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHidden-OFF.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5f983d24a7ec37a469195b7e73aee05c9c6d543f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHidden-OFF.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: e95863eaba9e840398e091f5f012842b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHidden-ON.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHidden-ON.png new file mode 100644 index 0000000000000000000000000000000000000000..1e2011d18ffa3605e8a1e9e6f501a4d9cb4380f5 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHidden-ON.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHidden-ON.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHidden-ON.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..966eb8c5325812afd348a371f209695bbc96ef7e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHidden-ON.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: a8f9f8e9ccf234b838fd410a9275fa27 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHole.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHole.png new file mode 100644 index 0000000000000000000000000000000000000000..7ba824ac63dbf783917aa64f066e7bfd885baa88 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHole.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHole.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHole.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..60d628345b086622dbd6ef21eeee9a686c9ba7dd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_SelectHole.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: a62fa0baeb5984366875abfc6928f551 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftAdd.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftAdd.png new file mode 100644 index 0000000000000000000000000000000000000000..b99b49f6c0073bb4ced1a98e21e908132f1f514d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftAdd.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftAdd.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftAdd.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c613455bfac56a93fff1a2a5b8faedc8c022dfcc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftAdd.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 355d6186c739f4e57b30cd51ded99471 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftDifference.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftDifference.png new file mode 100644 index 0000000000000000000000000000000000000000..118b3af905e2d1c389acb6ebe9e9f3a07f9735e1 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftDifference.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftDifference.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftDifference.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..fe856c690c2df2b876c82fe89d4ef103e76f5834 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftDifference.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: b502e988e29114734b0025a00dcd8c16 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftSubtract.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftSubtract.png new file mode 100644 index 0000000000000000000000000000000000000000..178fa7e160d60414e3ee583a6b372522154e38a4 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftSubtract.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftSubtract.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftSubtract.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..806634d9c2a62b54601716cbe29753510550dde0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_ShiftSubtract.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: e22c7c7e1fedc47ab914c0bb4a724dbe +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Shrink.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Shrink.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d93770cbbd58e6e699547a4bb7413fc48b4b46 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Shrink.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Shrink.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Shrink.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..e6eddab99a4c59c5f823ab29c67ae879145c85dd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Shrink.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 8cc38b3a75170440ca1a1cfa37837ed5 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Shrink_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Shrink_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..083ec78e6e3e7cb46545b7f5265a60be68036ed9 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Shrink_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Shrink_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Shrink_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..2393e7756f57975f60bce9f52fb6b2564771e883 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Selection_Shrink_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: eb755aec2837044cb8f7ced981795b9d +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Down.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Down.png new file mode 100644 index 0000000000000000000000000000000000000000..8168a2dfb70e072403261e70474279e8b573b705 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Down.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Down.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Down.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..4882bf729d4fa8d14926ca9b2a4ee4dda20ba31f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Down.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 79459c0d618c144a894f23f3264a460f +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Down_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Down_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..84b44dffd251d2158768c419e1fc8e2e27014bd5 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Down_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Down_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Down_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5efc952fa1fbb53512d5b1b17479772a672c331e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Down_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 1396c9400c739429fa423f61ccc2e947 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Left.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Left.png new file mode 100644 index 0000000000000000000000000000000000000000..e3ecf66c0de1fb4e0c9ab7bbf5fc9899ec419a5b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Left.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Left.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Left.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..dcad1b1c1ffc9665f00964d664cebde2b3d2ec25 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Left.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 1f490d722029243d6b79a63a83914eb2 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Left_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Left_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..20b53b1c06fc0fb46b4ea18d38c3744379222e5e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Left_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Left_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Left_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c6b0a7f8dd3114d55509b7946563789e31add57a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Left_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 7858917c80cb444be834e62dbba6f9cc +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Right.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Right.png new file mode 100644 index 0000000000000000000000000000000000000000..5b1fb026b59251a6735ffb75f9ba372493b22ec8 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Right.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Right.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Right.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..97314dc9a87447113b3ade35b628cc99aa6c1076 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Right.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 3bf8693eb2c37403a811b4f1caf3d004 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Right_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Right_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..70715239806c3ef0912ad4a0ab9677531c755f34 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Right_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Right_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Right_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..7eb94cdc66e7070da587e53a398fdaa79ab9e716 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Right_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 98b0edc1a60664317a4908cd54622837 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Up.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Up.png new file mode 100644 index 0000000000000000000000000000000000000000..653c9b6180ffafeb23c00daf89c5d538beecdb3e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Up.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Up.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Up.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..f9ef609701cbcebbde9affd9f7d5b6e23a7fe532 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Up.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 27bba9dd9b54e4a9cb033d503a372266 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Up_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Up_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..35739689c1461e5c92c1c5dc0bde7bae3a57f476 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Up_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Up_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Up_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..149f5b9e6fab059d91d861f08b1eebe7d4ee2e50 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/ShowNextPage_Up_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 0d0df7ba3118e4400ad0e68fdec0a478 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Texturing_Paintbrush.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Texturing_Paintbrush.png new file mode 100644 index 0000000000000000000000000000000000000000..83ccbdbd1f6201a71ff37a2077e25d03c0e7a4c7 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Texturing_Paintbrush.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Texturing_Paintbrush.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Texturing_Paintbrush.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..cc77f8fb00835a4a3c568a7181f9dbbc484d425b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Texturing_Paintbrush.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: cd7a91ef87d0b4d028bf97077204fc1c +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Collapse.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Collapse.png new file mode 100644 index 0000000000000000000000000000000000000000..38901b685f52f9042e7eee531597c267291b432e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Collapse.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Collapse.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Collapse.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..0ac8084223b310899da37b9af80c1db129ac39bb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Collapse.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 212f6e5b4677e4aef89ab69f35bfd49b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Collapse_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Collapse_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..387248f2df744c9c165b39428b1ce6c46fc10374 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Collapse_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Collapse_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Collapse_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..e88af6a9f644c69d3fd6617114dcab9fa5fb3090 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Collapse_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: caffb61cabfd24d8a9f552826409dd9c +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Connect.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Connect.png new file mode 100644 index 0000000000000000000000000000000000000000..f7a5154dd80c5054af4d81dfb0757305dcea2a01 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Connect.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Connect.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Connect.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..7b10e1b4ddea30c33d83e952541326057708d00f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Connect.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: c4ae117c3220f4b4bb6a24ad586caafa +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Connect_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Connect_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..6c94beb356c35096aee656f12804c891d8637623 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Connect_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Connect_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Connect_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..1afcd2fc99e5392754585d12258cb9123988b7ef --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Connect_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 4256fc65ffe3045a189d6dc9126fc677 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Split.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Split.png new file mode 100644 index 0000000000000000000000000000000000000000..cc974ebd925f5e4543e34f2e383afdd4640b2774 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Split.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Split.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Split.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c7875326d0b0a3a2d5d40a0337edddc659cc88e9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Split.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 98b34f0cc329b4e808ea1cc1cf40c74b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Split_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Split_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..e37477e3ed5af75cf4cd14ef96b341e071c8e339 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Split_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Split_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Split_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..81faae01768ffaa010b0b1d53dad3723c270d826 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Split_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: a43c02bb4073847f7b8d45b92d46259c +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Weld.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Weld.png new file mode 100644 index 0000000000000000000000000000000000000000..250bd03bf8f20c4e8ebd4d74e66c80bb8e2da579 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Weld.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Weld.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Weld.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5db93568f1fa6d1785a8ea7e512f659ae80e417e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Weld.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: c0b06baa896f142f09a15698ea90e521 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Weld_disabled.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Weld_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..c76bef85408e0d17ed320d5974ea213c33ff0f1a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Weld_disabled.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Weld_disabled.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Weld_disabled.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..cb6b18a805298a8c24c9b46c69d89186a1b4da54 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/Vert_Weld_disabled.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: e80a17b3ac06e4a09b213b658fb3a2da +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/null.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/null.png new file mode 100644 index 0000000000000000000000000000000000000000..12044eab6b02ecdf89aeb11cf05e073f9d8a63cd Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/null.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/null.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/null.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5c62ad3360a9bcecbb30826ce1ba494095a57a72 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/Toolbar/null.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: df60c8a427a934c0eaab79a9ee840662 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 0 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor.meta new file mode 100644 index 0000000000000000000000000000000000000000..ab8f8fc91148a6a3750855577d37b601d401c8e4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3773386302d7549c68c440a7579afc6e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_Manip_Off.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_Manip_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..852269a2cdd14eece6e722eb9894a97a4b6d2dcd Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_Manip_Off.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_Manip_Off.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_Manip_Off.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..b3ac66cf6548eeda9b22a6189549b42dfe27e43d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_Manip_Off.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 637899925569746a3ac6f0b2b9b3d906 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_Manip_On.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_Manip_On.png new file mode 100644 index 0000000000000000000000000000000000000000..7139fec2c77a3422284b3eb09ac25cf24a344996 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_Manip_On.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_Manip_On.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_Manip_On.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..fbe774000fb58bffc0d3a7adce8f1c93eaaad3dc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_Manip_On.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: eb541c72b12c34a2d8ddadcb283b889e +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_ShowTexture_Off.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_ShowTexture_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..f21fb058b20dc4916504331a4811347de80e9697 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_ShowTexture_Off.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_ShowTexture_Off.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_ShowTexture_Off.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..d1ca0e500a55e2013bfc78af11701aeec48602b8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_ShowTexture_Off.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: dbb4b574fd7ee40eb876528351e6f9ad +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_ShowTexture_On.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_ShowTexture_On.png new file mode 100644 index 0000000000000000000000000000000000000000..f061b1150a63f6ee83c65ff5138bade5e83ef4a1 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_ShowTexture_On.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_ShowTexture_On.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_ShowTexture_On.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..3175cad435357f5f0191d2a6d8af3751ef6e52d7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/ProBuilderGUI_UV_ShowTexture_On.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 5a6dc9461316c413b909911cc5d9f136 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/camera-64x64.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/camera-64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..5c5dfb6b737046c7da1454928cb6451ae616306a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/camera-64x64.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/camera-64x64.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/camera-64x64.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..5bbfe6fea657127a57b1cafa5bc71e862be9f0d9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/camera-64x64.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: a9c8b9fa8aeda4bbea8fcb43e32cc958 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/camera-64x64_Light.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/camera-64x64_Light.png new file mode 100644 index 0000000000000000000000000000000000000000..2d091a9fbb371497663a68ce0acf76018732bdc4 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/camera-64x64_Light.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/camera-64x64_Light.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/camera-64x64_Light.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..27618b1278dea33beb9be2e21f785d33cc51340f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Icons/UVEditor/camera-64x64_Light.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 130a7195195104054a5f86c361605953 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: -3 + maxTextureSize: 64 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material.meta new file mode 100644 index 0000000000000000000000000000000000000000..49c7f2b375a60e0507a2b10ee5b128f14967513e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aed528667fa2e4e27b4a1fba64e57186 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Checker.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Checker.mat new file mode 100644 index 0000000000000000000000000000000000000000..06d6e77430257275ed31bf0ff68eede63704558a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Checker.mat @@ -0,0 +1,79 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Checker + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _EMISSION + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 2b3b02d65d5a24a20a12332c4125d74b, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _Gloss: 0.8 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Checker.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Checker.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..9552a73b50097c1b4ccfd38a5fb66fddbac44dca --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Checker.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4717b199010ca4cb3a8a7a465ec457d2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures.meta new file mode 100644 index 0000000000000000000000000000000000000000..a244a4d51b7a6eb26e0474e526b78eecd1483071 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f6e01a3849934e69a960a5b6a0ec949 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/Checker.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/Checker.png new file mode 100644 index 0000000000000000000000000000000000000000..0fb69e9097c968f639fde8d77192e476ac08da4a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/Checker.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/Checker.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/Checker.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..f5fb235b93798c8c5e79c2a2fe970387c4e22c20 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/Checker.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 2b3b02d65d5a24a20a12332c4125d74b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_Collider.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_Collider.png new file mode 100644 index 0000000000000000000000000000000000000000..0d3a5036c6f6618236ea25e16e2d0073bab70e31 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_Collider.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_Collider.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_Collider.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..df562914266ea36f66a21fdbc563eae47424d9b7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_Collider.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 7e4b97337334f42d2a700647fd938234 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_NoDraw.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_NoDraw.png new file mode 100644 index 0000000000000000000000000000000000000000..f013902854164dcf02a605998bb0b9c6c2019913 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_NoDraw.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_NoDraw.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_NoDraw.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..b72eb0b922510e8ac682c98eebc6c6d2641bf7de --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_NoDraw.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 464ca14f3cfaf433582758afa13a9473 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_Trigger.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_Trigger.png new file mode 100644 index 0000000000000000000000000000000000000000..e0781ef5176662b9be1ed80e0b4b9584b519f48e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_Trigger.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_Trigger.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_Trigger.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..d694569c480e97f20882715711b07f0159eb2972 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Material/Textures/GridBox_Trigger.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: b3fd87e2e956e41b0b43f76bb50a4934 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources.meta new file mode 100644 index 0000000000000000000000000000000000000000..5b36fc8fbd4913e15a1f329303b1940c4d9b99db --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 681e2a77546fa4aeea345b40dae7de04 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials.meta new file mode 100644 index 0000000000000000000000000000000000000000..690df0bfb8183d525d187cc3c9b137e768342195 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 86a33916cf3294ac7ab58f89c2aa40b9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/Collider.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/Collider.mat new file mode 100644 index 0000000000000000000000000000000000000000..6c98439382314a09a1c5ceeb1251536c9c81df98 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/Collider.mat @@ -0,0 +1,30 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Collider + m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 2800000, guid: 7e4b97337334f42d2a700647fd938234, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Cutoff: 0.5 + - _InvFade: 1 + m_Colors: + - _Color: {r: 0, g: 1, b: 0, a: 0.65882355} + - _TintColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/Collider.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/Collider.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..8a5dff5e843a6f5d969ce1514a9712e17f541623 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/Collider.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bbb235fff4f48426b863b36058ab66d2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/EdgePicker.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/EdgePicker.mat new file mode 100644 index 0000000000000000000000000000000000000000..0ad934c5aeccd335d1d3917b73ca5788fdb8c7d4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/EdgePicker.mat @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: EdgePicker + m_Shader: {fileID: 4800000, guid: 86212504c7e9f468db2300dc5932dc17, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: [] + m_Floats: [] + m_Colors: [] diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/EdgePicker.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/EdgePicker.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..8f06999dd1c3ccc7872ad00dc222653eb3122c8c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/EdgePicker.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4ff996e3a0a5743a3987ab6231160665 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/EdgePickerHDRP.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/EdgePickerHDRP.mat new file mode 100644 index 0000000000000000000000000000000000000000..65bc873de1813e5ebc8dc88831f99e2e83ce4b1c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/EdgePickerHDRP.mat @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: EdgePickerHDRP + m_Shader: {fileID: 4800000, guid: f1f8c9218a014514ab6f04436ad4c25a, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: [] + m_Floats: [] + m_Colors: [] diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/EdgePickerHDRP.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/EdgePickerHDRP.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..28d685137e35bd5b54b605ec58649ab0d00102d7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/EdgePickerHDRP.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 980c24c5a501a9a429356d191ad356a9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/FacePicker.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/FacePicker.mat new file mode 100644 index 0000000000000000000000000000000000000000..60beb7d3773e2c997f7c08b54d98f352046f0bb1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/FacePicker.mat @@ -0,0 +1,24 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: FacePicker + m_Shader: {fileID: 4800000, guid: c84d57d423a2042eb92da86f9fa670a3, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: [] + m_Floats: [] + m_Colors: + - _Tint: {r: 0, g: 0, b: 0, a: 1} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/FacePicker.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/FacePicker.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..cca96fb5c3e98efd9625bb7f4e54c67e0c74625a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/FacePicker.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5695904020f064fdab5ad265b274a616 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/FacePickerHDRP.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/FacePickerHDRP.mat new file mode 100644 index 0000000000000000000000000000000000000000..0af6ba9f68aa62d7bf230aab1700dcdd9accfb23 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/FacePickerHDRP.mat @@ -0,0 +1,24 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: FacePickerHDRP + m_Shader: {fileID: 4800000, guid: d632b247f24ee384c9fbd156e34ea930, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: [] + m_Floats: [] + m_Colors: + - _Tint: {r: 0, g: 0, b: 0, a: 1} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/FacePickerHDRP.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/FacePickerHDRP.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..b65baf1a5490b0d57f6f485fbdebd32d98fd2d69 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/FacePickerHDRP.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a53ef0dd76f2fe74eb5f43267d7c0195 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/InvisibleFace.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/InvisibleFace.mat new file mode 100644 index 0000000000000000000000000000000000000000..1af5d3aba2eaf205d8cc864811b3f5e2995c7c48 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/InvisibleFace.mat @@ -0,0 +1,29 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: InvisibleFace + m_Shader: {fileID: 4800000, guid: cfa7edf01005f4e338d973cea2f6eab3, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _InvFade: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 0} + - _TintColor: {r: 0.63432837, g: 0.63432837, b: 0.63432837, a: 0} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/InvisibleFace.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/InvisibleFace.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..c9d6001d2ca9d186a1467e674aeb73b5be2aeff4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/InvisibleFace.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 978bbcf5050244f1b95128c04103f628 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/NoDraw.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/NoDraw.mat new file mode 100644 index 0000000000000000000000000000000000000000..7b8a37282fab2516fe5aafff03e782ed1d08e9ad --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/NoDraw.mat @@ -0,0 +1,27 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: NoDraw + m_Shader: {fileID: 10752, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 2800000, guid: 464ca14f3cfaf433582758afa13a9473, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: [] + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/NoDraw.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/NoDraw.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..aa9c56046bee7bda30d31da1ee6cbe17c90ad9d3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/NoDraw.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8cb4d6fee77fd4ee6895f08b240d625f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/ProBuilderDefault.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/ProBuilderDefault.mat new file mode 100644 index 0000000000000000000000000000000000000000..d524857f7a02f16e2f19aa2882821b38f08a438a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/ProBuilderDefault.mat @@ -0,0 +1,111 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: ProBuilderDefault + m_Shader: {fileID: 4800000, guid: 1ccecd9b89b8a4f14bfb64f29ddfcc81, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FirstTex: + m_Texture: {fileID: 2800000, guid: eb18006e3122d7e4a84e8ef8b708df02, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FourthTex: + m_Texture: {fileID: 2800000, guid: 6b2e75e162ed72c428ddc9ca9cac6452, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 6344bf96fbda94141a525046d088fb23, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Occlusion: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SecondTex: + m_Texture: {fileID: 2800000, guid: 20fa208453803ab41b65dfe6fe92c848, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ThirdTex: + m_Texture: {fileID: 2800000, guid: 478de9d1d3cbac64bad0d9feaad9e272, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaTestRef: 0.5 + - _Amplitude: 0.33928573 + - _Angle: 0.46428573 + - _BumpScale: 1 + - _Cutoff: 0.27 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _Gloss: 0.5 + - _Glossiness: 0.48 + - _Lightmapping: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Phase: 1 + - _Size: 25 + - _SrcBlend: 1 + - _UVSec: 1 + - _Wavelength: 0.17857142 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _Color1: {r: 0.67910445, g: 0.67910445, b: 0.67910445, a: 1} + - _Color2: {r: 0.14179105, g: 0.14179105, b: 0.14179105, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColorWithMapUI: {r: 1, g: 1, b: 1, a: 1} + - _Indicator: {r: 1, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/ProBuilderDefault.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/ProBuilderDefault.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..4c5c9dc699a120bd573bff1fc78a808560a3f38a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/ProBuilderDefault.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c22777d6e868e4f2fb421913386b154e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/StandardVertexColorHDRP.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/StandardVertexColorHDRP.mat new file mode 100644 index 0000000000000000000000000000000000000000..7b1edfb31bf3ae07167376b5d7b27aa42c1750c9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/StandardVertexColorHDRP.mat @@ -0,0 +1,119 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: StandardVertexColorHDRP + m_Shader: {fileID: -6465566751694194690, guid: 7f3bdc6fd92af4529b40bcf8d577c8fb, + type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + MotionVector: User + disabledShaderPasses: + - MOTIONVECTORS + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - Texture2D_AD0BEF7C: + m_Texture: {fileID: 2800000, guid: 5cb8f08ad12bd42059c1a1dba12d7bca, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FirstTex: + m_Texture: {fileID: 2800000, guid: eb18006e3122d7e4a84e8ef8b708df02, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FourthTex: + m_Texture: {fileID: 2800000, guid: 6b2e75e162ed72c428ddc9ca9cac6452, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 6344bf96fbda94141a525046d088fb23, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Occlusion: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SecondTex: + m_Texture: {fileID: 2800000, guid: 20fa208453803ab41b65dfe6fe92c848, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ThirdTex: + m_Texture: {fileID: 2800000, guid: 478de9d1d3cbac64bad0d9feaad9e272, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaTestRef: 0.5 + - _Amplitude: 0.33928573 + - _Angle: 0.46428573 + - _BumpScale: 1 + - _Cutoff: 0.27 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _Gloss: 0.5 + - _Glossiness: 0.48 + - _Lightmapping: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Phase: 1 + - _Size: 25 + - _SrcBlend: 1 + - _UVSec: 1 + - _Wavelength: 0.17857142 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _Color1: {r: 0.67910445, g: 0.67910445, b: 0.67910445, a: 1} + - _Color2: {r: 0.14179105, g: 0.14179105, b: 0.14179105, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColorWithMapUI: {r: 1, g: 1, b: 1, a: 1} + - _Indicator: {r: 1, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/StandardVertexColorHDRP.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/StandardVertexColorHDRP.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..786abfa6bdd7ecf779bfdbca1d70d2a3b9c87b93 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/StandardVertexColorHDRP.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c35693c079f3840f7938a4a323096e84 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/StandardVertexColorLWRP.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/StandardVertexColorLWRP.mat new file mode 100644 index 0000000000000000000000000000000000000000..ffd60ed1f4756766493985c253f088d0dd4504d9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/StandardVertexColorLWRP.mat @@ -0,0 +1,118 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: StandardVertexColorLWRP + m_Shader: {fileID: 4800000, guid: a5e1047f27bee462089b2bc3104f90fd, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + MotionVector: User + disabledShaderPasses: + - MOTIONVECTORS + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - Texture2D_BF5F6835: + m_Texture: {fileID: 2800000, guid: 6344bf96fbda94141a525046d088fb23, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FirstTex: + m_Texture: {fileID: 2800000, guid: eb18006e3122d7e4a84e8ef8b708df02, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FourthTex: + m_Texture: {fileID: 2800000, guid: 6b2e75e162ed72c428ddc9ca9cac6452, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 6344bf96fbda94141a525046d088fb23, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Occlusion: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SecondTex: + m_Texture: {fileID: 2800000, guid: 20fa208453803ab41b65dfe6fe92c848, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ThirdTex: + m_Texture: {fileID: 2800000, guid: 478de9d1d3cbac64bad0d9feaad9e272, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaTestRef: 0.5 + - _Amplitude: 0.33928573 + - _Angle: 0.46428573 + - _BumpScale: 1 + - _Cutoff: 0.27 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _Gloss: 0.5 + - _Glossiness: 0.48 + - _Lightmapping: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Phase: 1 + - _Size: 25 + - _SrcBlend: 1 + - _UVSec: 1 + - _Wavelength: 0.17857142 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _Color1: {r: 0.67910445, g: 0.67910445, b: 0.67910445, a: 1} + - _Color2: {r: 0.14179105, g: 0.14179105, b: 0.14179105, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColorWithMapUI: {r: 1, g: 1, b: 1, a: 1} + - _Indicator: {r: 1, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/StandardVertexColorLWRP.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/StandardVertexColorLWRP.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..18d0922c7ad375f5c7ea5fbf5b7eba4fdf816824 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/StandardVertexColorLWRP.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 077a003b1de1e4c35923be7a21b5d948 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/Trigger.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/Trigger.mat new file mode 100644 index 0000000000000000000000000000000000000000..0cd70c5a72ace3580f44edac23925b771463c319 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/Trigger.mat @@ -0,0 +1,29 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Trigger + m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 2800000, guid: b3fd87e2e956e41b0b43f76bb50a4934, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _InvFade: 1 + m_Colors: + - _Color: {r: 1, g: 0.60839164, b: 0, a: 1} + - _TintColor: {r: 0.63432837, g: 0.63432837, b: 0.63432837, a: 0.5019608} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/Trigger.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/Trigger.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..adab13f88520bb15a639797cc98c32afdada374e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/Trigger.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a1e97cbf2538241b691aae8243b5fb10 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/UnlitVertexColor.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/UnlitVertexColor.mat new file mode 100644 index 0000000000000000000000000000000000000000..ba3b5cb1496c149a16ee531947d74c55ba5001a1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/UnlitVertexColor.mat @@ -0,0 +1,27 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: UnlitVertexColor + m_Shader: {fileID: 4800000, guid: 35e778fba8b2b49a198d8d7cfced67eb, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: [] + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/UnlitVertexColor.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/UnlitVertexColor.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..5593477870cc538af5d319bcc7d3e7994fe14d51 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/UnlitVertexColor.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 29966c3c0907b49b58c4e59342d020cf +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/VertexPicker.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/VertexPicker.mat new file mode 100644 index 0000000000000000000000000000000000000000..261a3a75406a74bf2d120b6f8c611c5d321bffaf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/VertexPicker.mat @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: VertexPicker + m_Shader: {fileID: 4800000, guid: c26db15b9a2ed4b2ebefefd26ce85ae1, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: [] + m_Floats: [] + m_Colors: [] diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/VertexPicker.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/VertexPicker.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..5a0c02fc26141f1afd9a73ef6d32e5a9a6903715 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/VertexPicker.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 30a8575e1d4cc4e01a88ffbf4f973d80 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/VertexPickerHDRP.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/VertexPickerHDRP.mat new file mode 100644 index 0000000000000000000000000000000000000000..9febefe5e2c9cfa5d85b3ca99396e72bb8a33151 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/VertexPickerHDRP.mat @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: VertexPickerHDRP + m_Shader: {fileID: 4800000, guid: 00e56516c5ee19442bc12a25d21ca18d, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: [] + m_Floats: [] + m_Colors: [] diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/VertexPickerHDRP.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/VertexPickerHDRP.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..ad0ba55f7fbd30b2c0ddf9ee4ce549522fce4147 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Materials/VertexPickerHDRP.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7d5c9fc287a2aa945a98203d41282923 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Textures.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Textures.meta new file mode 100644 index 0000000000000000000000000000000000000000..2af0f24be5e500da66c264647ea531f8f88b1f2f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f34d08485a9ab475e894ee6a078091e3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Textures/GridBox_Default.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Textures/GridBox_Default.png new file mode 100644 index 0000000000000000000000000000000000000000..0061dfbca7ab0b2e05413d36b0e49b4c978aea66 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Textures/GridBox_Default.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Textures/GridBox_Default.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Textures/GridBox_Default.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..6782b7d237e8412a685ba5a3688e654a7503d95b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Resources/Textures/GridBox_Default.png.meta @@ -0,0 +1,86 @@ +fileFormatVersion: 2 +guid: 6344bf96fbda94141a525046d088fb23 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..6117b50ce1c04c59ff33bf288f3c79b38f79883c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5df5a982723854050988cf6a154ce9af +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/DiffuseTextureBlend.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/DiffuseTextureBlend.shader new file mode 100644 index 0000000000000000000000000000000000000000..54da372230b985959f234bbc043bc98044ed23b8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/DiffuseTextureBlend.shader @@ -0,0 +1,54 @@ +Shader "ProBuilder/Diffuse Texture Blend" +{ + Properties + { + _FirstTex ("Texture", 2D) = "white" {} + _SecondTex ("Texture", 2D) = "white" {} + _ThirdTex ("Texture", 2D) = "white" {} + _FourthTex ("Texture", 2D) = "white" {} + } + + SubShader + { + Tags { "RenderType" = "Opaque" } + + ColorMask RGB + + CGPROGRAM + #pragma surface surf Lambert + + sampler2D _FirstTex; + sampler2D _SecondTex; + sampler2D _ThirdTex; + sampler2D _FourthTex; + + struct Input + { + float4 color : COLOR; + float2 uv_FirstTex; + float2 uv_SecondTex; + float2 uv_ThirdTex; + float2 uv_FourthTex; + }; + + void surf (Input IN, inout SurfaceOutput o) + { + fixed4 c0 = tex2D(_FirstTex, IN.uv_FirstTex); + fixed4 c1 = tex2D(_SecondTex, IN.uv_SecondTex); + fixed4 c2 = tex2D(_ThirdTex, IN.uv_ThirdTex); + fixed4 c3 = tex2D(_FourthTex, IN.uv_FourthTex); + + fixed4 blend = normalize(IN.color); + + fixed4 rgba = c0 * blend.r; + rgba = lerp(rgba, c1, blend.g); + rgba = lerp(rgba, c2, blend.b); + rgba = lerp(rgba, c3, blend.a); + + o.Albedo = rgba.rgb; + } + ENDCG + } + + Fallback "Diffuse" +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/DiffuseTextureBlend.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/DiffuseTextureBlend.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..7193d2975a2937fa55708605e36a4a2192650832 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/DiffuseTextureBlend.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 33cb4e8ff0c1d43ac8ec40692656c7ed +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/DiffuseVertexColor.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/DiffuseVertexColor.shader new file mode 100644 index 0000000000000000000000000000000000000000..ba0cb67d8b4b5494801df1abb651308fef0de4e2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/DiffuseVertexColor.shader @@ -0,0 +1,28 @@ +Shader "ProBuilder/Diffuse Vertex Color" { + Properties { + _MainTex ("Texture", 2D) = "white" {} + } + SubShader { + Tags { "RenderType" = "Opaque" } + + ColorMask RGB + + CGPROGRAM + #pragma surface surf Lambert + + sampler2D _MainTex; + + struct Input { + float4 color : COLOR; + float2 uv_MainTex; + }; + + void surf (Input IN, inout SurfaceOutput o) { + fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * IN.color; + o.Albedo = c.rgb; + } + ENDCG + } + + Fallback "Diffuse" +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/DiffuseVertexColor.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/DiffuseVertexColor.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..6f9d678af94a2219fdaa855d4d2ac2c595819b64 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/DiffuseVertexColor.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 911130a939bf84843bcc4211c327f579 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/EdgePicker.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/EdgePicker.shader new file mode 100644 index 0000000000000000000000000000000000000000..82815cfc34a3304cb50761c8a05d9d5ee2384305 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/EdgePicker.shader @@ -0,0 +1,58 @@ +Shader "Hidden/ProBuilder/EdgePicker" +{ + Properties {} + + SubShader + { + Tags + { + "ProBuilderPicker"="EdgePass" + "IgnoreProjector"="True" + "DisableBatching"="True" + } + + Lighting Off + ZTest LEqual + ZWrite On + Cull Off + Blend Off + + Pass + { + Name "Edges" + AlphaTest Greater .25 + +CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float4 color : COLOR; + }; + + struct v2f + { + float4 pos : SV_POSITION; + float4 color : COLOR; + }; + + v2f vert (appdata v) + { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex); + o.color = v.color; + + return o; + } + + float4 frag (v2f i) : COLOR + { + return i.color; + } +ENDCG + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/EdgePicker.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/EdgePicker.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..62a7688503eebc175a1588b3b60784b50737bee9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/EdgePicker.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 86212504c7e9f468db2300dc5932dc17 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/EdgePickerHDRP.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/EdgePickerHDRP.shader new file mode 100644 index 0000000000000000000000000000000000000000..85f04bbdc4a4b2d96758a2780aea63c6ffbd6c62 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/EdgePickerHDRP.shader @@ -0,0 +1,59 @@ +Shader "Hidden/ProBuilder/EdgePicker" +{ + Properties {} + + SubShader + { + Tags + { + "ProBuilderPicker"="EdgePass" + "IgnoreProjector"="True" + "DisableBatching"="True" + "LightMode"="Always" + } + + Lighting Off + ZTest LEqual + ZWrite On + Cull Off + Blend Off + + Pass + { + Name "Edges" + AlphaTest Greater .25 + +CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float4 color : COLOR; + }; + + struct v2f + { + float4 pos : SV_POSITION; + float4 color : COLOR; + }; + + v2f vert (appdata v) + { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex); + o.color = v.color; + + return o; + } + + float4 frag (v2f i) : COLOR + { + return i.color; + } +ENDCG + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/EdgePickerHDRP.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/EdgePickerHDRP.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..c91c462430ac3c7c25f586e63811bd8c0331ee13 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/EdgePickerHDRP.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f1f8c9218a014514ab6f04436ad4c25a +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FaceHighlight.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FaceHighlight.shader new file mode 100644 index 0000000000000000000000000000000000000000..df17798998ac68ee37f63b6f4ba55cb7e0f1fe57 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FaceHighlight.shader @@ -0,0 +1,63 @@ +Shader "Hidden/ProBuilder/FaceHighlight" +{ + Properties + { + _Color ("Color Tint", Color) = (1,1,1,1) + _Dither ("Dithering", float) = 0 + _HandleZTest ("_HandleZTest", Int) = 8 + } + + SubShader + { + Tags { "IgnoreProjector"="True" "Queue"="Transparent" } + Lighting Off + ZTest [_HandleZTest] + ZWrite On + Cull Off + Blend SrcAlpha OneMinusSrcAlpha + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + float4 _Color; + float _Dither; + + struct appdata + { + float4 vertex : POSITION; + }; + + struct v2f + { + float4 pos : SV_POSITION; + }; + + v2f vert (appdata v) + { + v2f o; + + // https://www.opengl.org/discussion_boards/showthread.php/166719-Clean-Wireframe-Over-Solid-Mesh + o.pos = float4(UnityObjectToViewPos(v.vertex.xyz), 1); + o.pos.xyz *= .99; + o.pos = mul(UNITY_MATRIX_P, o.pos); + + return o; + } + + half4 frag (v2f i) : COLOR + { + i.pos.xy = floor(i.pos.xy * 1) * .5; + float checker = -frac(i.pos.x + i.pos.y); + clip(lerp(1, checker, _Dither)); + + return _Color; + } + + ENDCG + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FaceHighlight.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FaceHighlight.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..ab8038e167b6fa5cb7158bfa3fa2d5f28a3b3f33 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FaceHighlight.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6f37d9e45fbae41b386f76d3bfefec4a +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FacePicker.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FacePicker.shader new file mode 100644 index 0000000000000000000000000000000000000000..31055f20a2f829deadab20538a7881c4bc91e19f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FacePicker.shader @@ -0,0 +1,54 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "Hidden/ProBuilder/FacePicker" +{ + SubShader + { + Tags { "ProBuilderPicker"="Base"} + Lighting Off + ZTest LEqual + ZWrite On + Cull Back + Blend Off + + Pass + { + Name "Base" + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + float4 _Tint; + + struct appdata + { + float4 vertex : POSITION; + float4 color : COLOR; + }; + + struct v2f + { + float4 pos : SV_POSITION; + float4 color : COLOR; + }; + + v2f vert (appdata v) + { + v2f o; + + o.pos = UnityObjectToClipPos(v.vertex); + o.color = v.color; + return o; + } + + float4 frag (v2f i) : COLOR + { + return i.color; + } + + ENDCG + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FacePicker.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FacePicker.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..8ff50c62d5b68ec05675c0e67542ca65d3f1c463 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FacePicker.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c84d57d423a2042eb92da86f9fa670a3 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FacePickerHDRP.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FacePickerHDRP.shader new file mode 100644 index 0000000000000000000000000000000000000000..c0b11fe365785740ef018d00c31d4a266c3df217 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FacePickerHDRP.shader @@ -0,0 +1,54 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "Hidden/ProBuilder/FacePickerHDRP" +{ + SubShader + { + Tags { "ProBuilderPicker"="Base" "LightMode"="Always"} + Lighting Off + ZTest LEqual + ZWrite On + Cull Back + Blend Off + + Pass + { + Name "Base" + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + float4 _Tint; + + struct appdata + { + float4 vertex : POSITION; + float4 color : COLOR; + }; + + struct v2f + { + float4 pos : SV_POSITION; + float4 color : COLOR; + }; + + v2f vert (appdata v) + { + v2f o; + + o.pos = UnityObjectToClipPos(v.vertex); + o.color = v.color; + return o; + } + + float4 frag (v2f i) : COLOR + { + return i.color; + } + + ENDCG + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FacePickerHDRP.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FacePickerHDRP.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..f3186851dc452c0038878622296cc1911a97ed18 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/FacePickerHDRP.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d632b247f24ee384c9fbd156e34ea930 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/HideVertices.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/HideVertices.shader new file mode 100644 index 0000000000000000000000000000000000000000..fa83ce0301a176a42f6bfe1bcf4366265ed04455 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/HideVertices.shader @@ -0,0 +1,44 @@ +Shader "Hidden/ProBuilder/HideVertices" +{ + SubShader + { + Tags { "IgnoreProjector"="True" "RenderType"="Geometry" } + Lighting Off + ZTest On + ZWrite On + Cull Back + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + }; + + struct v2f + { + float4 pos : SV_POSITION; + }; + + v2f vert (appdata v) + { + v2f o; + o.pos = fixed4(0,0,0,0); + + return o; + } + + half4 frag (v2f i) : COLOR + { + return fixed4(0,0,0,0); + } + + ENDCG + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/HideVertices.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/HideVertices.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..48ed2fb2aae4153cb5950a7c4927abb7fef4ee88 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/HideVertices.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cfa7edf01005f4e338d973cea2f6eab3 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/LineBillboard.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/LineBillboard.shader new file mode 100644 index 0000000000000000000000000000000000000000..bece0cfc317af1af6adb26f2ab7e61463e286c27 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/LineBillboard.shader @@ -0,0 +1,106 @@ +Shader "Hidden/ProBuilder/LineBillboard" +{ + Properties + { + _Color ("Color", Color) = (1,1,1,1) + _Scale ("Scale", Range(0, 20)) = 7 + _HandleZTest ("_HandleZTest", Int) = 8 + } + + SubShader + { + Tags + { + "ProBuilderPicker"="EdgePass" + "RenderType"="Geometry" + "Queue"="Geometry" + "DisableBatching"="True" + "ForceNoShadowCasting"="True" + "IgnoreProjector"="True" + } + + Lighting Off + ZTest [_HandleZTest] + ZWrite On + Cull Off + Blend Off + Offset -1, -1 + + Pass + { + Name "EdgePass" + + CGPROGRAM + #pragma target 4.0 + #pragma vertex vert + #pragma geometry geo + #pragma fragment frag + #pragma exclude_renderers metal + #include "UnityCG.cginc" + #include "ProBuilderCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + fixed4 color : COLOR; + }; + + struct v2f + { + float4 pos : SV_POSITION; + fixed4 color : COLOR; + }; + + float _Scale; + float4 _Color; + + v2f vert (appdata v) + { + v2f o; + + o.pos = float4(UnityObjectToViewPos(v.vertex.xyz), 1); + + // pull closer to camera and into clip space + o.pos *= .99; + o.pos = mul(UNITY_MATRIX_P, o.pos); + // convert clip -> ndc -> screen, build billboards in geo shader, then screen -> ndc -> clip + o.pos = ClipToScreen(o.pos); + o.color = v.color; + return o; + } + + [maxvertexcount(4)] + void geo(line v2f p[2], inout TriangleStream<v2f> triStream) + { + float2 perp = normalize(float2(-(p[1].pos.y - p[0].pos.y), p[1].pos.x - p[0].pos.x)) * _Scale; + + v2f geo_out; + + geo_out.pos = ScreenToClip( float4(p[1].pos.x + perp.x, p[1].pos.y + perp.y, p[1].pos.z, p[1].pos.w) ); + geo_out.color = p[1].color; + triStream.Append(geo_out); + + geo_out.pos = ScreenToClip( float4(p[1].pos.x - perp.x, p[1].pos.y - perp.y, p[1].pos.z, p[1].pos.w) ); + geo_out.color = p[1].color; + triStream.Append(geo_out); + + geo_out.pos = ScreenToClip( float4(p[0].pos.x + perp.x, p[0].pos.y + perp.y, p[0].pos.z, p[0].pos.w) ); + geo_out.color = p[0].color; + triStream.Append(geo_out); + + geo_out.pos = ScreenToClip( float4(p[0].pos.x - perp.x, p[0].pos.y - perp.y, p[0].pos.z, p[0].pos.w) ); + geo_out.color = p[0].color; + triStream.Append(geo_out); + } + + fixed4 frag (v2f i) : COLOR + { + return i.color * _Color; + } + + ENDCG + } + } + + Fallback Off +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/LineBillboard.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/LineBillboard.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..ce563e33f60f071e899903b82e8fc948a06efe13 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/LineBillboard.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4293210a3280c4283b9872316017f1f9 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/LineBillboardMetal.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/LineBillboardMetal.shader new file mode 100644 index 0000000000000000000000000000000000000000..7121a2f351b888fdc574dc1ee9231f3555adac8e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/LineBillboardMetal.shader @@ -0,0 +1,78 @@ +Shader "Hidden/ProBuilder/LineBillboardMetal" +{ + Properties + { + _Scale("Scale", Range(1,7)) = 3.3 + _Color ("Color", Color) = (1,1,1,1) + _HandleZTest ("_HandleZTest", Int) = 8 + _HandleZWrite("_HandleZWrite", Int) = 1 + } + + SubShader + { + Tags + { + "IgnoreProjector"="True" + "RenderType"="Geometry" + "Queue"="Geometry" + "DisableBatching"="True" + } + + Lighting Off + ZTest [_HandleZTest] + ZWrite [_HandleZWrite] + Cull Off + Blend Off + Offset -1,-1 + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "ProBuilderCG.cginc" + + float _Scale; + float4 _Color; + + struct appdata + { + float4 vertex : POSITION; + // next vertex is stored in xyz, and direction to move current vertex is w + float4 tangent : TANGENT; + }; + + struct v2f + { + float4 pos : SV_POSITION; + }; + + v2f vert (appdata v) + { + v2f o; + + o.pos = UnityObjectToClipPosWithOffset(v.vertex.xyz); + + // convert vertex to screen space, add pixel-unit xy to vertex, then transform back to clip space. + float4 clip = o.pos; + + float4 a = ClipToScreen(o.pos); + float4 b = ClipToScreen(UnityObjectToClipPosWithOffset(v.tangent.xyz)); + float2 d = normalize(b-a).xy; + float2 p = float2(-d.y, d.x); + a.xy += p * v.tangent.w * _Scale; + + o.pos = ScreenToClip(a); + return o; + } + + half4 frag (v2f i) : COLOR + { + return _Color; + } + + ENDCG + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/LineBillboardMetal.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/LineBillboardMetal.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..f8cffd83f34ab424428ee4523e685091ec89dce4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/LineBillboardMetal.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4300ae919783d4fa38001d745fbdecc1 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/NormalPreview.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/NormalPreview.shader new file mode 100644 index 0000000000000000000000000000000000000000..992e28117cdf8b0f30efe482e7c1568db5190b81 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/NormalPreview.shader @@ -0,0 +1,55 @@ +Shader "Hidden/ProBuilder/NormalPreview" +{ + SubShader + { + Tags { "Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="Geometry" } + Lighting Off + ZTest LEqual + Blend SrcAlpha OneMinusSrcAlpha + ZWrite On + Cull Off + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + float _Scale; + + struct appdata + { + float4 vertex : POSITION; + // secretely this is the normal, w is used to pass extrusion + float4 tangent : TANGENT; + }; + + struct v2f + { + float4 pos : SV_POSITION; + float4 color : COLOR; + }; + + v2f vert (appdata v) + { + v2f o; + + float4 world = mul(unity_ObjectToWorld, v.vertex); + float3 nrm = UnityObjectToWorldNormal(v.tangent.xyz); + float4 extruded = world + float4((nrm * v.tangent.w * _Scale), 0); + o.pos = mul(UNITY_MATRIX_VP, extruded); + o.color = float4(abs(v.tangent.xyz), 1); + + return o; + } + + half4 frag (v2f i) : COLOR + { + return i.color; + } + + ENDCG + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/NormalPreview.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/NormalPreview.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..6624898c2f806a8f85703483b436df8b1704fc12 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/NormalPreview.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a07688e921e974338945464731e069ce +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/PointBillboard.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/PointBillboard.shader new file mode 100644 index 0000000000000000000000000000000000000000..9f21b31ccfcd5ed27df692a2b2b99a441559bdfc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/PointBillboard.shader @@ -0,0 +1,130 @@ +Shader "Hidden/ProBuilder/PointBillboard" +{ + Properties + { + _Color ("Color", Color) = (1,1,1,1) + _Scale ("Scale", Range(0, 20)) = 7 + _HandleZTest ("_HandleZTest", Int) = 8 + } + + SubShader + { + Tags + { + "ProBuilderPicker"="VertexPass" + "RenderType"="Geometry" + "Queue"="Geometry" + "IgnoreProjector"="True" + "ForceNoShadowCasting"="True" + "DisableBatching"="True" + } + + Pass + { + Name "VertexPass" + Lighting Off + ZTest [_HandleZTest] + ZWrite On + Cull Off + Blend Off + Offset 0, -2 + + CGPROGRAM + #pragma target 4.0 + #pragma vertex vert + #pragma fragment frag + #pragma geometry geo + #pragma exclude_renderers metal + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float4 color : COLOR; + }; + + struct GS_INPUT + { + float4 pos : POSITION; + float4 color : COLOR; + }; + + struct FS_INPUT + { + float4 pos : POSITION; + float4 color : COLOR; + }; + + float _Scale; + float4 _Color; + + // Is the camera in orthographic mode? (1 yes, 0 no) + #define ORTHO (1 - UNITY_MATRIX_P[3][3]) + + #define ScreenDepthModifier (lerp(.00001, 0, ORTHO)) + + float4 ClipToScreen(float4 v) + { + v.xy /= v.w; + v.xy = v.xy * .5 + .5; + v.xy *= _ScreenParams.xy; + return v; + } + + float4 ScreenToClip(float4 v) + { + v.xy /= _ScreenParams.xy; + v.xy = (v.xy - .5) / .5; + v.xy *= v.w; + return v; + } + + GS_INPUT vert(appdata v) + { + GS_INPUT output = (GS_INPUT)0; + + output.pos = float4(UnityObjectToViewPos(v.vertex.xyz), 1); + // perspective rendering applies offset in view coordinates, and orthographic applies offset in the geometry + // shader screen space + output.pos.xyz *= lerp(1, .95, ORTHO); + output.pos = mul(UNITY_MATRIX_P, output.pos); + // convert clip -> ndc -> screen, build billboards in geo shader, then screen -> ndc -> clip + output.pos = ClipToScreen(output.pos); + output.color = v.color; + + return output; + } + + [maxvertexcount(4)] + void geo(point GS_INPUT p[1], inout TriangleStream<FS_INPUT> triStream) + { + // 3 1 + // 2 0 + + FS_INPUT geo_out; + geo_out.color = p[0].color; + + geo_out.pos = ScreenToClip( float4(p[0].pos.x + _Scale, p[0].pos.y - _Scale, p[0].pos.z, p[0].pos.w - ScreenDepthModifier) ); + triStream.Append(geo_out); + + geo_out.pos = ScreenToClip( float4(p[0].pos.x + _Scale, p[0].pos.y + _Scale, p[0].pos.z, p[0].pos.w - ScreenDepthModifier) ); + triStream.Append(geo_out); + + geo_out.pos = ScreenToClip( float4(p[0].pos.x - _Scale, p[0].pos.y - _Scale, p[0].pos.z, p[0].pos.w - ScreenDepthModifier) ); + triStream.Append(geo_out); + + geo_out.pos = ScreenToClip( float4(p[0].pos.x - _Scale, p[0].pos.y + _Scale, p[0].pos.z, p[0].pos.w - ScreenDepthModifier) ); + triStream.Append(geo_out); + } + + float4 frag(FS_INPUT input) : COLOR + { + return _Color * input.color; + } + + ENDCG + } + } + + Fallback Off +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/PointBillboard.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/PointBillboard.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..1cae1390036a384bf37e2c6fd51c0265c58b824b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/PointBillboard.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8ca8b34aa013842f3b399b6961e7dc3b +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ProBuilderCG.cginc b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ProBuilderCG.cginc new file mode 100644 index 0000000000000000000000000000000000000000..d00c36cdea69339e8ccdf37f7b19dc9d5a8c9eb6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ProBuilderCG.cginc @@ -0,0 +1,48 @@ +// Is the camera in orthographic mode? (1 yes, 0 no) +#define ORTHO (1 - UNITY_MATRIX_P[3][3]) + +// How far to pull vertices towards camera in orthographic mode +const float ORTHO_CAM_OFFSET = .0001; + +inline float4 ClipToScreen(float4 v) +{ + v.xy /= v.w; + v.xy = v.xy * .5 + .5; + v.xy *= _ScreenParams.xy; + return v; +} + +inline float4 ScreenToClip(float4 v) +{ + v.z -= ORTHO_CAM_OFFSET * ORTHO; + v.xy /= _ScreenParams.xy; + v.xy = (v.xy - .5) / .5; + v.xy *= v.w; + return v; +} + +inline float4 UnityObjectToClipPosWithOffset(float3 pos) +{ + float4 ret = float4(UnityObjectToViewPos(pos), 1); + ret *= lerp(.99, .95, ORTHO); + return mul(UNITY_MATRIX_P, ret); +} + +inline float4 GetPickerColor(float4 pos, float2 texcoord1) +{ + // convert vertex to screen space, add pixel-unit xy to vertex, then transform back to clip space. + float4 clip = pos; + + clip.xy /= clip.w; + clip.xy = clip.xy * .5 + .5; + clip.xy *= _ScreenParams.xy; + + clip.xy += texcoord1.xy * 3.5; + clip.z -= .0001 * (1 - UNITY_MATRIX_P[3][3]); + + clip.xy /= _ScreenParams.xy; + clip.xy = (clip.xy - .5) / .5; + clip.xy *= clip.w; + + return clip; +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ProBuilderCG.cginc.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ProBuilderCG.cginc.meta new file mode 100644 index 0000000000000000000000000000000000000000..cfcb4657692fee74f8b2a8269e2a4212c0f59407 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ProBuilderCG.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6aba455f32e574b6e86ede4acd901efa +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ReferenceUnlit.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ReferenceUnlit.shader new file mode 100644 index 0000000000000000000000000000000000000000..9f9582f0fa4f918eabe03da0bc3b00a9b33ae601 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ReferenceUnlit.shader @@ -0,0 +1,67 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "ProBuilder/Reference Unlit" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + } + + SubShader + { + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + } + + Lighting Off + ZTest LEqual + Blend SrcAlpha OneMinusSrcAlpha + ZWrite On + Cull Off + Offset 1,1 + + Pass + { + AlphaTest Greater .25 + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + sampler2D _MainTex; + + struct appdata + { + float4 vertex : POSITION; + float4 texcoord0 : TEXCOORD0; + }; + + struct v2f + { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + }; + + v2f vert (appdata v) + { + v2f o; + + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.texcoord0.xy; + + return o; + } + + half4 frag (v2f i) : COLOR + { + return tex2D(_MainTex, i.uv); + } + + ENDCG + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ReferenceUnlit.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ReferenceUnlit.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..541250e65f1514c8e2dc259165afe69c3624e43f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ReferenceUnlit.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 209f4c3496c1b46a3a2f9f0f27be788f +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ScrollHighlight.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ScrollHighlight.shader new file mode 100644 index 0000000000000000000000000000000000000000..e71c7b6ce9887a6fc97315ba9d3244c8006aa30b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ScrollHighlight.shader @@ -0,0 +1,70 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +// Shader created with Shader Forge v1.32 +// Shader Forge (c) Neat Corporation / Joachim Holmer - http://www.acegikmo.com/shaderforge/ +// Note: Manually altering this data may prevent you from opening it in Shader Forge +/*SF_DATA;ver:1.32;sub:START;pass:START;ps:flbk:,iptp:0,cusa:False,bamd:0,lico:1,lgpr:1,limd:0,spmd:1,trmd:0,grmd:0,uamb:True,mssp:True,bkdf:False,hqlp:False,rprd:False,enco:False,rmgx:True,rpth:0,vtps:0,hqsc:True,nrmq:1,nrsp:0,vomd:0,spxs:False,tesm:0,olmd:1,culm:2,bsrc:0,bdst:1,dpts:6,wrdp:True,dith:0,rfrpo:False,rfrpn:Refraction,coma:15,ufog:False,aust:False,igpj:False,qofs:0,qpre:1,rntp:5,fgom:False,fgoc:False,fgod:False,fgor:False,fgmd:0,fgcr:0.5,fgcg:0.5,fgcb:0.5,fgca:1,fgde:0.01,fgrn:0,fgrf:300,stcl:False,stva:128,stmr:255,stmw:255,stcp:6,stps:0,stfa:0,stfz:0,ofsf:0,ofsu:0,f2p0:False,fnsp:False,fnfb:False;n:type:ShaderForge.SFN_Final,id:3138,x:33161,y:32544,varname:node_3138,prsc:2|emission-7953-OUT;n:type:ShaderForge.SFN_Color,id:7241,x:32343,y:32483,ptovrint:False,ptlb:Highlight,ptin:_Highlight,varname:node_7241,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,c1:0.07843138,c2:0.3921569,c3:0.7843137,c4:1;n:type:ShaderForge.SFN_TexCoord,id:1076,x:32355,y:32830,varname:node_1076,prsc:2,uv:0;n:type:ShaderForge.SFN_Lerp,id:7953,x:32889,y:32503,varname:node_7953,prsc:2|A-7241-RGB,B-1009-RGB,T-3159-OUT;n:type:ShaderForge.SFN_Color,id:1009,x:32343,y:32656,ptovrint:False,ptlb:Base,ptin:_Base,varname:node_1009,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,c1:0.5,c2:0.5,c3:0.5,c4:1;n:type:ShaderForge.SFN_Multiply,id:6573,x:32673,y:33080,varname:node_6573,prsc:2|A-9717-OUT,B-9741-OUT;n:type:ShaderForge.SFN_Slider,id:9741,x:32275,y:33210,ptovrint:False,ptlb:Speed,ptin:_Speed,varname:node_9741,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,min:0,cur:0.1,max:1;n:type:ShaderForge.SFN_Frac,id:6472,x:32865,y:33050,varname:node_6472,prsc:2|IN-6573-OUT;n:type:ShaderForge.SFN_Distance,id:7233,x:32904,y:32864,varname:node_7233,prsc:2|A-6472-OUT,B-7546-OUT;n:type:ShaderForge.SFN_Smoothstep,id:3159,x:32856,y:32677,varname:node_3159,prsc:2|A-3575-OUT,B-4893-OUT,V-7233-OUT;n:type:ShaderForge.SFN_Vector1,id:3575,x:32608,y:32677,varname:node_3575,prsc:2,v1:0;n:type:ShaderForge.SFN_Vector1,id:4893,x:32608,y:32738,varname:node_4893,prsc:2,v1:0.2;n:type:ShaderForge.SFN_ValueProperty,id:9717,x:32387,y:33067,ptovrint:False,ptlb:EditorTime,ptin:_EditorTime,varname:node_9717,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,v1:0;n:type:ShaderForge.SFN_ValueProperty,id:6146,x:32486,y:32982,ptovrint:False,ptlb:LineDistance,ptin:_LineDistance,varname:node_6146,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,v1:18;n:type:ShaderForge.SFN_Divide,id:7546,x:32700,y:32889,varname:node_7546,prsc:2|A-1076-U,B-6146-OUT;proporder:7241-1009-9741-9717-6146;pass:END;sub:END;*/ + +Shader "Hidden/ProBuilder/ScrollHighlight" { + Properties { + _Highlight ("Highlight", Color) = (0.07843138,0.3921569,0.7843137,1) + _Base ("Base", Color) = (0.5,0.5,0.5,1) + _Speed ("Speed", Range(0, 1)) = 0.5 + _EditorTime ("EditorTime", Float ) = 0 + _LineDistance ("LineDistance", Float ) = 18 + } + SubShader { + Tags { + "RenderType"="Overlay" + } + Pass { + Name "FORWARD" + Tags { + "LightMode"="ForwardBase" + } + Cull Off + ZTest Always + + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #ifndef UNITY_PASS_FORWARDBASE + #define UNITY_PASS_FORWARDBASE + #endif + #include "UnityCG.cginc" + #pragma multi_compile_fwdbase_fullshadows + #pragma target 3.0 + uniform float4 _Highlight; + uniform float4 _Base; + uniform float _Speed; + uniform float _EditorTime; + uniform float _LineDistance; + struct VertexInput { + float4 vertex : POSITION; + float2 texcoord0 : TEXCOORD0; + }; + struct VertexOutput { + float4 pos : SV_POSITION; + float2 uv0 : TEXCOORD0; + }; + VertexOutput vert (VertexInput v) { + VertexOutput o = (VertexOutput)0; + o.uv0 = v.texcoord0; + o.pos = UnityObjectToClipPos(v.vertex ); + return o; + } + float4 frag(VertexOutput i, float facing : VFACE) : COLOR { + float isFrontFace = ( facing >= 0 ? 1 : 0 ); + float faceSign = ( facing >= 0 ? 1 : -1 ); +////// Lighting: +////// Emissive: + float3 emissive = lerp(_Highlight.rgb,_Base.rgb,smoothstep( 0.0, 0.2, distance(frac((_EditorTime*_Speed)),(i.uv0.r/_LineDistance)) )); + float3 finalColor = emissive; + return fixed4(finalColor,1); + } + ENDCG + } + } + FallBack "Diffuse" +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ScrollHighlight.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ScrollHighlight.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..7242cf4c966e9e392ad07f25d6393080aa8c40f3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/ScrollHighlight.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 04b5dda5f278e4f56a9dbda64d90bb95 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/SelectionPicker.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/SelectionPicker.shader new file mode 100644 index 0000000000000000000000000000000000000000..86373cc0757a09e0fe01921b0a7a71eb5e8ba0ba --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/SelectionPicker.shader @@ -0,0 +1,40 @@ +Shader "Hidden/ProBuilder/SelectionPicker" +{ + Properties {} + + SubShader + { + Tags { "ProBuilderPicker"="EdgePass" } + Lighting Off + ZTest LEqual + ZWrite On + Cull Off + Blend Off + + UsePass "Hidden/ProBuilder/EdgePicker/EDGES" + } + + SubShader + { + Tags { "ProBuilderPicker"="VertexPass" } + Lighting Off + ZTest LEqual + ZWrite On + Cull Off + Blend Off + + UsePass "Hidden/ProBuilder/VertexPicker/VERTICES" + } + + SubShader + { + Tags { "ProBuilderPicker"="Base" } + Lighting Off + ZTest LEqual + ZWrite On + Cull Back + Blend Off + + UsePass "Hidden/ProBuilder/FacePicker/BASE" + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/SelectionPicker.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/SelectionPicker.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..4ac0880929eb5d57e214851aac3c80ee9fe221bc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/SelectionPicker.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1fd883d610b2f42a98fc7abaf6809430 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/SmoothingPreview.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/SmoothingPreview.shader new file mode 100644 index 0000000000000000000000000000000000000000..fc2b44e430a0b86703a8199bc30a3d7a43720778 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/SmoothingPreview.shader @@ -0,0 +1,63 @@ +Shader "Hidden/ProBuilder/SmoothingPreview" +{ + Properties { + _Opacity ("Opacity", Float) = .5 + } + + SubShader + { + Tags { "IgnoreProjector"="True" "RenderType"="Geometry" } + Lighting Off + ZTest LEqual + ZWrite On + Cull Back + Blend SrcAlpha OneMinusSrcAlpha + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + float _Opacity; + float _Dither; + + struct appdata + { + float4 vertex : POSITION; + float4 color : COLOR; + }; + + struct v2f + { + float4 pos : SV_POSITION; + float4 color : COLOR; + }; + + v2f vert (appdata v) + { + v2f o; + + o.pos = float4(UnityObjectToViewPos(v.vertex.xyz), 1); + o.pos.xyz *= .98; + o.pos = mul(UNITY_MATRIX_P, o.pos); + o.color = v.color; + + return o; + } + + half4 frag (v2f i) : COLOR + { + i.pos.xy = floor(i.pos.xy * 1) * .5; + float checker = -frac(i.pos.x + i.pos.y); + clip(lerp(1, checker, _Dither)); + + half4 c = half4(i.color.rgb, i.color.a * _Opacity); + return c; + } + + ENDCG + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/SmoothingPreview.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/SmoothingPreview.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..c4e952c944dfe6b4876bf3ab9911c1a46d211589 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/SmoothingPreview.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e8c3a1662a88140ae84d69a3a4cfdbaa +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/StandardVertexColor.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/StandardVertexColor.shader new file mode 100644 index 0000000000000000000000000000000000000000..f7742bdd792e9ce34d6b55f94074a64980e21698 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/StandardVertexColor.shader @@ -0,0 +1,49 @@ +Shader "ProBuilder/Standard Vertex Color" { + Properties { + _Color ("Color", Color) = (1,1,1,1) + _MainTex ("Albedo (RGB)", 2D) = "white" {} + _Glossiness ("Smoothness", Range(0,1)) = 0.5 + _Metallic ("Metallic", Range(0,1)) = 0.0 + } + SubShader { + Tags { "RenderType"="Opaque" } + LOD 200 + + CGPROGRAM + // Physically based Standard lighting model, and enable shadows on all light types + #pragma surface surf Standard fullforwardshadows + + // Use shader model 3.0 target, to get nicer looking lighting + #pragma target 3.0 + + sampler2D _MainTex; + + struct Input { + float2 uv_MainTex; + float4 vertexColor : COLOR; + }; + + half _Glossiness; + half _Metallic; + fixed4 _Color; + + // Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader. + // See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing. + // #pragma instancing_options assumeuniformscaling + UNITY_INSTANCING_BUFFER_START(Props) + // put more per-instance properties here + UNITY_INSTANCING_BUFFER_END(Props) + + void surf (Input IN, inout SurfaceOutputStandard o) { + // Albedo comes from a texture tinted by color + fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color * IN.vertexColor; + o.Albedo = c.rgb; + // Metallic and smoothness come from slider variables + o.Metallic = _Metallic; + o.Smoothness = _Glossiness; + o.Alpha = c.a; + } + ENDCG + } + FallBack "Standard" +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/StandardVertexColor.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/StandardVertexColor.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..65e6fd21e386abf9f088623da6d618dfbac0aeca --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/StandardVertexColor.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1ccecd9b89b8a4f14bfb64f29ddfcc81 +ShaderImporter: + externalObjects: {} + defaultTextures: + - _MainTex: {fileID: 2800000, guid: 6344bf96fbda94141a525046d088fb23, type: 3} + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/TransparentOverlay.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/TransparentOverlay.shader new file mode 100644 index 0000000000000000000000000000000000000000..350a2dae8b39926ea0c441d749744c186b94cbdc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/TransparentOverlay.shader @@ -0,0 +1,61 @@ +Shader "Hidden/ProBuilder/TransparentOverlay" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + } + + SubShader + { + Tags { "IgnoreProjector"="True" "RenderType"="Transparent" "Queue"="Transparent" } + Lighting Off + ZTest LEqual + ZWrite On + Cull Back + Blend SrcAlpha OneMinusSrcAlpha + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + sampler2D _MainTex; + + struct appdata + { + float4 vertex : POSITION; + float4 color : COLOR; + float4 texcoord0 : TEXCOORD0; + }; + + struct v2f + { + float4 pos : SV_POSITION; + float4 color : COLOR; + float2 uv : TEXCOORD0; + }; + + v2f vert (appdata v) + { + v2f o; + + o.pos = UnityObjectToClipPos(v.vertex); + + o.uv = v.texcoord0.xy; + + o.color = v.color; + + return o; + } + + half4 frag (v2f i) : COLOR + { + return tex2D(_MainTex, i.uv) * i.color; + } + + ENDCG + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/TransparentOverlay.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/TransparentOverlay.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..9f05c72f273d10ae64a3f71743ee5c5895d2ce29 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/TransparentOverlay.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 25b8a80cb03994c769145599929a5e97 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/UnlitSolidColor.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/UnlitSolidColor.shader new file mode 100644 index 0000000000000000000000000000000000000000..24d61a3c218126a07464c3b272e39e09d645d9d7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/UnlitSolidColor.shader @@ -0,0 +1,55 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "ProBuilder/Unlit Solid Color" +{ + Properties + { + _Color ("Color Tint", Color) = (1,1,1,1) + } + + SubShader + { + Tags { "IgnoreProjector"="True" "Queue"="Transparent" } + Lighting Off + ZTest LEqual + ZWrite On + Cull Back + Blend SrcAlpha OneMinusSrcAlpha + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + float4 _Color; + + struct appdata + { + float4 vertex : POSITION; + }; + + struct v2f + { + float4 pos : SV_POSITION; + }; + + v2f vert (appdata v) + { + v2f o; + + o.pos = UnityObjectToClipPos(v.vertex); + + return o; + } + + half4 frag (v2f i) : COLOR + { + return _Color; + } + + ENDCG + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/UnlitSolidColor.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/UnlitSolidColor.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..34c267f82748859cbd95b730eb8ba08286b430d1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/UnlitSolidColor.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 24f9f312f97bd48dba1a728d58c89842 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/UnlitVertexColor.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/UnlitVertexColor.shader new file mode 100644 index 0000000000000000000000000000000000000000..46be8269b5d89e125685796debd04fa12919ddf9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/UnlitVertexColor.shader @@ -0,0 +1,51 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "ProBuilder/UnlitVertexColor" +{ + SubShader + { + Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } + Lighting Off + ZTest LEqual + Blend SrcAlpha OneMinusSrcAlpha + ZWrite On + Cull Off + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float4 color : COLOR; + }; + + struct v2f + { + float4 pos : SV_POSITION; + float4 color : COLOR; + }; + + v2f vert (appdata v) + { + v2f o; + + o.pos = UnityObjectToClipPos(v.vertex); + o.color = v.color; + + return o; + } + + half4 frag (v2f i) : COLOR + { + return i.color; + } + + ENDCG + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/UnlitVertexColor.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/UnlitVertexColor.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..e54c8f3c4b4a53212d11f319b66e93046d4d3ac4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/UnlitVertexColor.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 35e778fba8b2b49a198d8d7cfced67eb +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexPicker.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexPicker.shader new file mode 100644 index 0000000000000000000000000000000000000000..a201c326b59f791f707b0f765d02dfab0e046db9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexPicker.shader @@ -0,0 +1,74 @@ +Shader "Hidden/ProBuilder/VertexPicker" +{ + Properties {} + + SubShader + { + Tags + { + "ProBuilderPicker"="VertexPass" + "RenderType"="Transparent" + "IgnoreProjector"="True" + "DisableBatching"="True" + } + + Lighting Off + ZTest LEqual + ZWrite On + Cull Off + Blend Off + Offset -1, -1 + + Pass + { + Name "Vertices" + +CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "ProBuilderCG.cginc" + + // Is the camera in orthographic mode? (1 yes, 0 no) + #define ORTHO (1 - UNITY_MATRIX_P[3][3]) + + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 color : COLOR; + float2 texcoord : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct v2f + { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 color : COLOR; + }; + + v2f vert (appdata v) + { + v2f o; + + o.pos = float4(UnityObjectToViewPos(v.vertex.xyz), 1); + o.pos.xyz *= lerp(.99, .95, ORTHO); + o.pos = mul(UNITY_MATRIX_P, o.pos); + + o.pos = GetPickerColor(o.pos, v.texcoord1); + o.uv = v.texcoord.xy; + o.color = v.color; + + return o; + } + + float4 frag (v2f i) : COLOR + { + return i.color; + } + +ENDCG + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexPicker.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexPicker.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..321bd841e5155eba8a8db9d1bccc410e699e43aa --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexPicker.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c26db15b9a2ed4b2ebefefd26ce85ae1 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexPickerHDRP.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexPickerHDRP.shader new file mode 100644 index 0000000000000000000000000000000000000000..14d18d5f4a7ecb62a8ec48c3ec751491b666ac8d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexPickerHDRP.shader @@ -0,0 +1,75 @@ +Shader "Hidden/ProBuilder/VertexPickerHDRP" +{ + Properties {} + + SubShader + { + Tags + { + "ProBuilderPicker"="VertexPass" + "RenderType"="Transparent" + "IgnoreProjector"="True" + "DisableBatching"="True" + "LightMode"="Always" + } + + Lighting Off + ZTest LEqual + ZWrite On + Cull Off + Blend Off + Offset -1, -1 + + Pass + { + Name "Vertices" + +CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "ProBuilderCG.cginc" + + // Is the camera in orthographic mode? (1 yes, 0 no) + #define ORTHO (1 - UNITY_MATRIX_P[3][3]) + + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 color : COLOR; + float2 texcoord : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct v2f + { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 color : COLOR; + }; + + v2f vert (appdata v) + { + v2f o; + + o.pos = float4(UnityObjectToViewPos(v.vertex.xyz), 1); + o.pos.xyz *= lerp(.99, .95, ORTHO); + o.pos = mul(UNITY_MATRIX_P, o.pos); + + o.pos = GetPickerColor(o.pos, v.texcoord1); + o.uv = v.texcoord.xy; + o.color = v.color; + + return o; + } + + float4 frag (v2f i) : COLOR + { + return i.color; + } + +ENDCG + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexPickerHDRP.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexPickerHDRP.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..16e72e40de2190a5e357187a9ce4f2526a16a6e5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexPickerHDRP.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 00e56516c5ee19442bc12a25d21ca18d +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexShader.shader b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexShader.shader new file mode 100644 index 0000000000000000000000000000000000000000..8068cd502348627ae64a1deeda254d3740a32f1b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexShader.shader @@ -0,0 +1,81 @@ +Shader "Hidden/ProBuilder/VertexShader" +{ + Properties + { + _Scale("Scale", Range(1,7)) = 3.3 + _Color ("Color", Color) = (1,1,1,1) + _HandleZTest ("_HandleZTest", Int) = 8 + } + + SubShader + { + Tags + { + "IgnoreProjector"="True" + "RenderType"="Geometry" + "Queue"="Geometry" + } + + Lighting Off + ZTest [_HandleZTest] + ZWrite On + Cull Off + Blend Off + Offset -1,-1 + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + float _Scale; + float4 _Color; + + struct appdata + { + float4 vertex : POSITION; + float2 texcoord : TEXCOORD0; + }; + + struct v2f + { + float4 pos : SV_POSITION; + }; + + v2f vert (appdata v) + { + float ortho = (1 - UNITY_MATRIX_P[3][3]); + v2f o; + + o.pos = float4(UnityObjectToViewPos(v.vertex.xyz), 1); + o.pos.xyz *= lerp(.99, .95, ortho); + o.pos = mul(UNITY_MATRIX_P, o.pos); + + // convert vertex to screen space, add pixel-unit xy to vertex, then transform back to clip space. + float4 clip = o.pos; + + clip.xy /= clip.w; + clip.xy = clip.xy * .5 + .5; + clip.xy *= _ScreenParams.xy; + + clip.xy += v.texcoord.xy * _Scale; + clip.xy /= _ScreenParams.xy; + clip.xy = (clip.xy - .5) / .5; + clip.xy *= clip.w; + + o.pos = clip; + + return o; + } + + half4 frag (v2f i) : COLOR + { + return _Color; + } + + ENDCG + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexShader.shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexShader.shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..3a0ba46266f5f717f5f22141324b823ce4216ef2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Shader/VertexShader.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d6e5744ac426949ff8c0f02936689d4c +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Upgrade.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Upgrade.meta new file mode 100644 index 0000000000000000000000000000000000000000..06244a8eb92e41adcf008d5d9dca12c305124390 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Upgrade.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5ef3339a74ee9b146ad77b839a82c114 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Upgrade/AssetIdRemap-4_0_0.json b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Upgrade/AssetIdRemap-4_0_0.json new file mode 100644 index 0000000000000000000000000000000000000000..5757b37504c7ae77053591c0b941a927586232ba --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Upgrade/AssetIdRemap-4_0_0.json @@ -0,0 +1,1305 @@ +{ + "sourceDirectory": [ + "Assets/ProCore/ProBuilder/", + "Packages/com.unity.probuilder/" + ], + "destinationDirectory": "Packages/com.unity.probuilder/", + "map": [ + { + "source": { + "m_Guid": "0472bdc8d6d15384d98f22ee34302f9c", + "m_FileId": "146836576", + "m_LocalPath": "Classes/ProBuilderCore-Unity5.dll", + "m_Name": "pb_PreferenceDictionary", + "m_Type": "UnityEditor.MonoScript::ProBuilder2.Common.pb_PreferenceDictionary" + }, + "destination": { + "m_Guid": "c04d9be0543234e9cbb340e7ee259a5c", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/PreferenceDictionary.cs", + "m_Name": "PreferenceDictionary", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.PreferenceDictionary" + } + }, + { + "source": { + "m_Guid": "4f0627da958b4bb78c260446066f065f", + "m_FileId": "680703436", + "m_LocalPath": "ProBuilder/Classes/ProBuilderCore.dll", + "m_Name": "pb_PreferenceDictionary", + "m_Type": "UnityEditor.MonoScript::ProBuilder.Core.pb_PreferenceDictionary" + }, + "destination": { + "m_Guid": "c04d9be0543234e9cbb340e7ee259a5c", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/PreferenceDictionary.cs", + "m_Name": "PreferenceDictionary", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.PreferenceDictionary" + } + }, + { + "source": { + "m_Guid": "4f0627da958b4bb78c260446066f065f", + "m_FileId": "-852446773", + "m_LocalPath": "ProBuilder/Classes/ProBuilderCore.dll", + "m_Name": "pb_BezierShape", + "m_Type": "UnityEditor.MonoScript::ProBuilder.Core.pb_BezierShape" + }, + "destination": { + "m_Guid": "7b0368f3d533f4c379d9a83478864e0d", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/BezierShape.cs", + "m_Name": "BezierShape", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.BezierShape" + } + }, + { + "source": { + "m_Guid": "0472bdc8d6d15384d98f22ee34302f9c", + "m_FileId": "1364735194", + "m_LocalPath": "Classes/ProBuilderCore-Unity5.dll", + "m_Name": "pb_BezierShape", + "m_Type": "UnityEditor.MonoScript::ProBuilder2.Common.pb_BezierShape" + }, + "destination": { + "m_Guid": "7b0368f3d533f4c379d9a83478864e0d", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/BezierShape.cs", + "m_Name": "BezierShape", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.BezierShape" + } + }, + { + "source": { + "m_Guid": "4f0627da958b4bb78c260446066f065f", + "m_FileId": "-395903333", + "m_LocalPath": "ProBuilder/Classes/ProBuilderCore.dll", + "m_Name": "pb_ColorPalette", + "m_Type": "UnityEditor.MonoScript::ProBuilder.Core.pb_ColorPalette" + }, + "destination": { + "m_Guid": "dda436a9c8bbd4d109478acf25cd48d8", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/ColorPalette.cs", + "m_Name": "ColorPalette", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.ColorPalette" + } + }, + { + "source": { + "m_Guid": "0472bdc8d6d15384d98f22ee34302f9c", + "m_FileId": "-443790166", + "m_LocalPath": "Classes/ProBuilderCore-Unity5.dll", + "m_Name": "pb_ColorPalette", + "m_Type": "UnityEditor.MonoScript::ProBuilder2.Common.pb_ColorPalette" + }, + "destination": { + "m_Guid": "dda436a9c8bbd4d109478acf25cd48d8", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/ColorPalette.cs", + "m_Name": "ColorPalette", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.ColorPalette" + } + }, + { + "source": { + "m_Guid": "0472bdc8d6d15384d98f22ee34302f9c", + "m_FileId": "16342205", + "m_LocalPath": "Classes/ProBuilderCore-Unity5.dll", + "m_Name": "pb_Entity", + "m_Type": "UnityEditor.MonoScript::pb_Entity" + }, + "destination": { + "m_Guid": "69fbd00be8d904b3da640e502905c345", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/Entity.cs", + "m_Name": "Entity", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.Entity" + } + }, + { + "source": { + "m_Guid": "4f0627da958b4bb78c260446066f065f", + "m_FileId": "-1464689620", + "m_LocalPath": "ProBuilder/Classes/ProBuilderCore.dll", + "m_Name": "pb_Entity", + "m_Type": "UnityEditor.MonoScript::ProBuilder.Core.pb_Entity" + }, + "destination": { + "m_Guid": "69fbd00be8d904b3da640e502905c345", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/Entity.cs", + "m_Name": "Entity", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.Entity" + } + }, + { + "source": { + "m_Guid": "4f0627da958b4bb78c260446066f065f", + "m_FileId": "1034063083", + "m_LocalPath": "ProBuilder/Classes/ProBuilderCore.dll", + "m_Name": "pb_EntityBehaviour", + "m_Type": "UnityEditor.MonoScript::ProBuilder.Core.pb_EntityBehaviour" + }, + "destination": { + "m_Guid": "cd4d30ee1f2db48c6be97ed8d2fc9da4", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/EntityBehaviour.cs", + "m_Name": "EntityBehaviour", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.EntityBehaviour" + } + }, + { + "source": { + "m_Guid": "4f0627da958b4bb78c260446066f065f", + "m_FileId": "232430130", + "m_LocalPath": "ProBuilder/Classes/ProBuilderCore.dll", + "m_Name": "pb_Object", + "m_Type": "UnityEditor.MonoScript::ProBuilder.Core.pb_Object" + }, + "destination": { + "m_Guid": "8233d90336aea43098adf6dbabd606a2", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/ProBuilderMesh.cs", + "m_Name": "ProBuilderMesh", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.ProBuilderMesh" + } + }, + { + "source": { + "m_Guid": "0472bdc8d6d15384d98f22ee34302f9c", + "m_FileId": "185759285", + "m_LocalPath": "Classes/ProBuilderCore-Unity5.dll", + "m_Name": "pb_Object", + "m_Type": "UnityEditor.MonoScript::pb_Object" + }, + "destination": { + "m_Guid": "8233d90336aea43098adf6dbabd606a2", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/ProBuilderMesh.cs", + "m_Name": "ProBuilderMesh", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.ProBuilderMesh" + } + }, + { + "source": { + "m_Guid": "4f0627da958b4bb78c260446066f065f", + "m_FileId": "814573140", + "m_LocalPath": "ProBuilder/Classes/ProBuilderCore.dll", + "m_Name": "pb_PolyShape", + "m_Type": "UnityEditor.MonoScript::ProBuilder.Core.pb_PolyShape" + }, + "destination": { + "m_Guid": "bb977b126bc1b4f15813dcf9da9bb600", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/PolyShape.cs", + "m_Name": "PolyShape", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.PolyShape" + } + }, + { + "source": { + "m_Guid": "0472bdc8d6d15384d98f22ee34302f9c", + "m_FileId": "1227815207", + "m_LocalPath": "Classes/ProBuilderCore-Unity5.dll", + "m_Name": "pb_PolyShape", + "m_Type": "UnityEditor.MonoScript::ProBuilder2.Common.pb_PolyShape" + }, + "destination": { + "m_Guid": "bb977b126bc1b4f15813dcf9da9bb600", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/PolyShape.cs", + "m_Name": "PolyShape", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.PolyShape" + } + }, + { + "source": { + "m_Guid": "4f0627da958b4bb78c260446066f065f", + "m_FileId": "-80938053", + "m_LocalPath": "ProBuilder/Classes/ProBuilderCore.dll", + "m_Name": "pb_Renderable", + "m_Type": "UnityEditor.MonoScript::ProBuilder.Core.pb_Renderable" + }, + "destination": { + "m_Guid": "33e2ad0af51e5406bb1b09197e7d7929", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/Renderable.cs", + "m_Name": "Renderable", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.Renderable" + } + }, + { + "source": { + "m_Guid": "0472bdc8d6d15384d98f22ee34302f9c", + "m_FileId": "-378153031", + "m_LocalPath": "Classes/ProBuilderCore-Unity5.dll", + "m_Name": "pb_Renderable", + "m_Type": "UnityEditor.MonoScript::ProBuilder2.Common.pb_Renderable" + }, + "destination": { + "m_Guid": "33e2ad0af51e5406bb1b09197e7d7929", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/Renderable.cs", + "m_Name": "Renderable", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.Renderable" + } + }, + { + "source": { + "m_Guid": "0a705f158a134f649d357a98a329f863", + "m_FileId": "2800000", + "m_LocalPath": "ProBuilder/Material/Textures/Checker.png", + "m_Name": "Checker", + "m_Type": "UnityEngine.Texture2D" + }, + "destination": { + "m_Guid": "2b3b02d65d5a24a20a12332c4125d74b", + "m_FileId": "2800000", + "m_LocalPath": "Content/Material/Textures/Checker.png", + "m_Name": "Checker", + "m_Type": "UnityEngine.Texture2D" + } + }, + { + "source": { + "m_Guid": "fb037c7b29046d9498cdace8ee042a71", + "m_FileId": "2800000", + "m_LocalPath": "Material/Textures/Checker.png", + "m_Name": "Checker", + "m_Type": "UnityEngine.Texture2D" + }, + "destination": { + "m_Guid": "2b3b02d65d5a24a20a12332c4125d74b", + "m_FileId": "2800000", + "m_LocalPath": "Content/Material/Textures/Checker.png", + "m_Name": "Checker", + "m_Type": "UnityEngine.Texture2D" + } + }, + { + "source": { + "m_Guid": "1ab720e4dee3e6342b3573e5932f72ad", + "m_FileId": "2100000", + "m_LocalPath": "Material/Checker.mat", + "m_Name": "Checker", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "4717b199010ca4cb3a8a7a465ec457d2", + "m_FileId": "2100000", + "m_LocalPath": "Content/Material/Checker.mat", + "m_Name": "Checker", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "c52bccedebbd418989674bde440cdaf1", + "m_FileId": "2100000", + "m_LocalPath": "ProBuilder/Material/Checker.mat", + "m_Name": "Checker", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "4717b199010ca4cb3a8a7a465ec457d2", + "m_FileId": "2100000", + "m_LocalPath": "Content/Material/Checker.mat", + "m_Name": "Checker", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "ec0aa376067f4c6fa4b637e3cd479088", + "m_FileId": "2100000", + "m_LocalPath": "ProBuilder/Resources/Materials/Collider.mat", + "m_Name": "Collider", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "bbb235fff4f48426b863b36058ab66d2", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/Collider.mat", + "m_Name": "Collider", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "603fae72aff7ce047b3328181ccdb189", + "m_FileId": "2100000", + "m_LocalPath": "Resources/Materials/Collider.mat", + "m_Name": "Collider", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "bbb235fff4f48426b863b36058ab66d2", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/Collider.mat", + "m_Name": "Collider", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "98b4b9c5ae0f44bd09fb8e0256f4e90f", + "m_FileId": "2800000", + "m_LocalPath": "ProBuilder/Material/Textures/GridBox_Collider.png", + "m_Name": "GridBox_Collider", + "m_Type": "UnityEngine.Texture2D" + }, + "destination": { + "m_Guid": "7e4b97337334f42d2a700647fd938234", + "m_FileId": "2800000", + "m_LocalPath": "Content/Material/Textures/GridBox_Collider.png", + "m_Name": "GridBox_Collider", + "m_Type": "UnityEngine.Texture2D" + } + }, + { + "source": { + "m_Guid": "1c6c94e6f0b33b84794b532ebc14e8a3", + "m_FileId": "2800000", + "m_LocalPath": "Material/Textures/GridBox_Collider.tga", + "m_Name": "GridBox_Collider", + "m_Type": "UnityEngine.Texture2D" + }, + "destination": { + "m_Guid": "7e4b97337334f42d2a700647fd938234", + "m_FileId": "2800000", + "m_LocalPath": "Content/Material/Textures/GridBox_Collider.png", + "m_Name": "GridBox_Collider", + "m_Type": "UnityEngine.Texture2D" + } + }, + { + "source": { + "m_Guid": "2b0d2c82d755d4e11887c1a2869969a1", + "m_FileId": "2800000", + "m_LocalPath": "ProBuilder/Material/Textures/GridBox_NoDraw.png", + "m_Name": "GridBox_NoDraw", + "m_Type": "UnityEngine.Texture2D" + }, + "destination": { + "m_Guid": "464ca14f3cfaf433582758afa13a9473", + "m_FileId": "2800000", + "m_LocalPath": "Content/Material/Textures/GridBox_NoDraw.png", + "m_Name": "GridBox_NoDraw", + "m_Type": "UnityEngine.Texture2D" + } + }, + { + "source": { + "m_Guid": "958f4a2eb8ded00429391a9816f6415f", + "m_FileId": "2800000", + "m_LocalPath": "Material/Textures/GridBox_NoDraw.tga", + "m_Name": "GridBox_NoDraw", + "m_Type": "UnityEngine.Texture2D" + }, + "destination": { + "m_Guid": "464ca14f3cfaf433582758afa13a9473", + "m_FileId": "2800000", + "m_LocalPath": "Content/Material/Textures/GridBox_NoDraw.png", + "m_Name": "GridBox_NoDraw", + "m_Type": "UnityEngine.Texture2D" + } + }, + { + "source": { + "m_Guid": "da383c451e82c440480e03f4aad0db9f", + "m_FileId": "2800000", + "m_LocalPath": "ProBuilder/Material/Textures/GridBox_Trigger.png", + "m_Name": "GridBox_Trigger", + "m_Type": "UnityEngine.Texture2D" + }, + "destination": { + "m_Guid": "b3fd87e2e956e41b0b43f76bb50a4934", + "m_FileId": "2800000", + "m_LocalPath": "Content/Material/Textures/GridBox_Trigger.png", + "m_Name": "GridBox_Trigger", + "m_Type": "UnityEngine.Texture2D" + } + }, + { + "source": { + "m_Guid": "3cedd75ba729c3847bddf7bb13f31a5b", + "m_FileId": "2800000", + "m_LocalPath": "Material/Textures/GridBox_Trigger.tga", + "m_Name": "GridBox_Trigger", + "m_Type": "UnityEngine.Texture2D" + }, + "destination": { + "m_Guid": "b3fd87e2e956e41b0b43f76bb50a4934", + "m_FileId": "2800000", + "m_LocalPath": "Content/Material/Textures/GridBox_Trigger.png", + "m_Name": "GridBox_Trigger", + "m_Type": "UnityEngine.Texture2D" + } + }, + { + "source": { + "m_Guid": "52ade5953df0f7b48a2ffbce262817de", + "m_FileId": "2100000", + "m_LocalPath": "Resources/Materials/Trigger.mat", + "m_Name": "Trigger", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "a1e97cbf2538241b691aae8243b5fb10", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/Trigger.mat", + "m_Name": "Trigger", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "a4af9c331f874be9acf3658dcb2a3a1a", + "m_FileId": "2100000", + "m_LocalPath": "ProBuilder/Resources/Materials/Trigger.mat", + "m_Name": "Trigger", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "a1e97cbf2538241b691aae8243b5fb10", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/Trigger.mat", + "m_Name": "Trigger", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "f8af10ae2c674e569782e57b09c76a13", + "m_FileId": "2100000", + "m_LocalPath": "ProBuilder/Resources/Materials/Default_Prototype.mat", + "m_Name": "Default_Prototype", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "c22777d6e868e4f2fb421913386b154e", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/ProBuilderDefault.mat", + "m_Name": "ProBuilderDefault", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "55296d1b6ee54e14e8eb4648d4b448ee", + "m_FileId": "2100000", + "m_LocalPath": "Resources/Materials/Default_Prototype.mat", + "m_Name": "Default_Prototype", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "c22777d6e868e4f2fb421913386b154e", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/ProBuilderDefault.mat", + "m_Name": "ProBuilderDefault", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "4024a17c5f5543fe9eb4add419e1fe6a", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_FacePicker.shader", + "m_Name": "Hidden/ProBuilder/FacePicker", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "c84d57d423a2042eb92da86f9fa670a3", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/FacePicker.shader", + "m_Name": "Hidden/ProBuilder/FacePicker", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "0adce3c87598d6444bd095f123e5cfbf", + "m_FileId": "4800000", + "m_LocalPath": "Shader/pb_FacePicker.shader", + "m_Name": "Hidden/ProBuilder/FacePicker", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "c84d57d423a2042eb92da86f9fa670a3", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/FacePicker.shader", + "m_Name": "Hidden/ProBuilder/FacePicker", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "938152868a4b95549b1f1bbd0253ac42", + "m_FileId": "2100000", + "m_LocalPath": "Resources/Materials/FacePicker.mat", + "m_Name": "FacePicker", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "5695904020f064fdab5ad265b274a616", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/FacePicker.mat", + "m_Name": "FacePicker", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "428edb63eff344b9880efa9f474f2ad1", + "m_FileId": "2100000", + "m_LocalPath": "ProBuilder/Resources/Materials/FacePicker.mat", + "m_Name": "FacePicker", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "5695904020f064fdab5ad265b274a616", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/FacePicker.mat", + "m_Name": "FacePicker", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "9709198a867042d88a5a26984da61df8", + "m_FileId": "2100000", + "m_LocalPath": "ProBuilder/Resources/Materials/InvisibleFace.mat", + "m_Name": "InvisibleFace", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "978bbcf5050244f1b95128c04103f628", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/InvisibleFace.mat", + "m_Name": "InvisibleFace", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "ff383952e5ab4984fa6d78dc45f912ca", + "m_FileId": "2100000", + "m_LocalPath": "Resources/Materials/InvisibleFace.mat", + "m_Name": "InvisibleFace", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "978bbcf5050244f1b95128c04103f628", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/InvisibleFace.mat", + "m_Name": "InvisibleFace", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "6cbf8ff303d34df44b45c5624d244052", + "m_FileId": "2100000", + "m_LocalPath": "Resources/Materials/NoDraw.mat", + "m_Name": "NoDraw", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "8cb4d6fee77fd4ee6895f08b240d625f", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/NoDraw.mat", + "m_Name": "NoDraw", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "f736ea39e4334c659e288aa477a1a3c7", + "m_FileId": "2100000", + "m_LocalPath": "ProBuilder/Resources/Materials/NoDraw.mat", + "m_Name": "NoDraw", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "8cb4d6fee77fd4ee6895f08b240d625f", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/NoDraw.mat", + "m_Name": "NoDraw", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "c10a6c3b9765499f9fa96e5c32686cf9", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_VertexPicker.shader", + "m_Name": "Hidden/ProBuilder/VertexPicker", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "c26db15b9a2ed4b2ebefefd26ce85ae1", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/VertexPicker.shader", + "m_Name": "Hidden/ProBuilder/VertexPicker", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "c59eb027aca1897448cd55f6fcb6e88f", + "m_FileId": "4800000", + "m_LocalPath": "Shader/pb_VertexPicker.shader", + "m_Name": "Hidden/ProBuilder/VertexPicker", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "c26db15b9a2ed4b2ebefefd26ce85ae1", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/VertexPicker.shader", + "m_Name": "Hidden/ProBuilder/VertexPicker", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "c31e9d985a7477641845983a9e3f2dd5", + "m_FileId": "2100000", + "m_LocalPath": "Resources/Materials/VertexPicker.mat", + "m_Name": "VertexPicker", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "30a8575e1d4cc4e01a88ffbf4f973d80", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/VertexPicker.mat", + "m_Name": "VertexPicker", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "27b22249f8e1499b939029821545eaef", + "m_FileId": "2100000", + "m_LocalPath": "ProBuilder/Resources/Materials/VertexPicker.mat", + "m_Name": "VertexPicker", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "30a8575e1d4cc4e01a88ffbf4f973d80", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/VertexPicker.mat", + "m_Name": "VertexPicker", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "b55e75ccb8834190b85c8c56cf377a18", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_UnlitVertexColor.shader", + "m_Name": "ProBuilder/UnlitVertexColor", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "35e778fba8b2b49a198d8d7cfced67eb", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/UnlitVertexColor.shader", + "m_Name": "ProBuilder/UnlitVertexColor", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "84f04ba86cd824249bb1c2029be83101", + "m_FileId": "4800000", + "m_LocalPath": "Shader/pb_UnlitVertexColor.shader", + "m_Name": "ProBuilder/UnlitVertexColor", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "35e778fba8b2b49a198d8d7cfced67eb", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/UnlitVertexColor.shader", + "m_Name": "ProBuilder/UnlitVertexColor", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "6db7bfac3a973f84bbccc95d60c5dc34", + "m_FileId": "2100000", + "m_LocalPath": "Resources/Materials/UnlitVertexColor.mat", + "m_Name": "UnlitVertexColor", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "29966c3c0907b49b58c4e59342d020cf", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/UnlitVertexColor.mat", + "m_Name": "UnlitVertexColor", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "48536c6f025340eaa2b6ba340f0e1655", + "m_FileId": "2100000", + "m_LocalPath": "ProBuilder/Resources/Materials/UnlitVertexColor.mat", + "m_Name": "UnlitVertexColor", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "29966c3c0907b49b58c4e59342d020cf", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/UnlitVertexColor.mat", + "m_Name": "UnlitVertexColor", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "fafa2664534d447caf55f85769535525", + "m_FileId": "2800000", + "m_LocalPath": "ProBuilder/Resources/Textures/GridBox_Default.png", + "m_Name": "GridBox_Default", + "m_Type": "UnityEngine.Texture2D" + }, + "destination": { + "m_Guid": "6344bf96fbda94141a525046d088fb23", + "m_FileId": "2800000", + "m_LocalPath": "Content/Resources/Textures/GridBox_Default.png", + "m_Name": "GridBox_Default", + "m_Type": "UnityEngine.Texture2D" + } + }, + { + "source": { + "m_Guid": "9470468fda72f4773a90a0306decbf0f", + "m_FileId": "2800000", + "m_LocalPath": "Resources/Textures/GridBox_Default.png", + "m_Name": "GridBox_Default", + "m_Type": "UnityEngine.Texture2D" + }, + "destination": { + "m_Guid": "6344bf96fbda94141a525046d088fb23", + "m_FileId": "2800000", + "m_LocalPath": "Content/Resources/Textures/GridBox_Default.png", + "m_Name": "GridBox_Default", + "m_Type": "UnityEngine.Texture2D" + } + }, + { + "source": { + "m_Guid": "c12126735c6f437e877d60fb36148365", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/DiffuseTextureBlend.shader", + "m_Name": "ProBuilder/Diffuse Texture Blend", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "33cb4e8ff0c1d43ac8ec40692656c7ed", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/DiffuseTextureBlend.shader", + "m_Name": "ProBuilder/Diffuse Texture Blend", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "78587c467ea0d3d47a2f6abb67ddc588", + "m_FileId": "4800000", + "m_LocalPath": "Shader/DiffuseTextureBlend.shader", + "m_Name": "ProBuilder/Diffuse Texture Blend", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "33cb4e8ff0c1d43ac8ec40692656c7ed", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/DiffuseTextureBlend.shader", + "m_Name": "ProBuilder/Diffuse Texture Blend", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "5f2e318166a2346a4a1c50f27f484127", + "m_FileId": "4800000", + "m_LocalPath": "Shader/DiffuseVertexColor.shader", + "m_Name": "ProBuilder/Diffuse Vertex Color", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "911130a939bf84843bcc4211c327f579", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/DiffuseVertexColor.shader", + "m_Name": "ProBuilder/Diffuse Vertex Color", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "940c023969a34f64af8f2516f40c51fc", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/DiffuseVertexColor.shader", + "m_Name": "ProBuilder/Diffuse Vertex Color", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "911130a939bf84843bcc4211c327f579", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/DiffuseVertexColor.shader", + "m_Name": "ProBuilder/Diffuse Vertex Color", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "c49c140896ce4bdfa1e8cda538db7490", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_FaceHighlight.shader", + "m_Name": "Hidden/ProBuilder/FaceHighlight", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "6f37d9e45fbae41b386f76d3bfefec4a", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/FaceHighlight.shader", + "m_Name": "Hidden/ProBuilder/FaceHighlight", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "d8d498332605de34b8534d9cf22aea95", + "m_FileId": "4800000", + "m_LocalPath": "Shader/pb_FaceHighlight.shader", + "m_Name": "Hidden/ProBuilder/FaceHighlight", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "6f37d9e45fbae41b386f76d3bfefec4a", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/FaceHighlight.shader", + "m_Name": "Hidden/ProBuilder/FaceHighlight", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "f3af4aa88c834fbbb65dab59c08f4ad8", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_HideVertices.shader", + "m_Name": "Hidden/ProBuilder/HideVertices", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "cfa7edf01005f4e338d973cea2f6eab3", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/HideVertices.shader", + "m_Name": "Hidden/ProBuilder/HideVertices", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "99ab5b57a637bdb4192babafc1298bee", + "m_FileId": "4800000", + "m_LocalPath": "Shader/pb_HideVertices.shader", + "m_Name": "Hidden/ProBuilder/HideVertices", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "cfa7edf01005f4e338d973cea2f6eab3", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/HideVertices.shader", + "m_Name": "Hidden/ProBuilder/HideVertices", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "75909998af15439eba2d0f3be5b6e343", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_NormalPreview.shader", + "m_Name": "Hidden/ProBuilder/NormalPreview", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "a07688e921e974338945464731e069ce", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/NormalPreview.shader", + "m_Name": "Hidden/ProBuilder/NormalPreview", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "7ab5688c9cc8cf7479fba8f23d8eab9d", + "m_FileId": "4800000", + "m_LocalPath": "Shader/pb_NormalPreview.shader", + "m_Name": "Hidden/ProBuilder/NormalPreview", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "a07688e921e974338945464731e069ce", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/NormalPreview.shader", + "m_Name": "Hidden/ProBuilder/NormalPreview", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "51107f2429dd4f96ab5cf50056b2cb1d", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_ReferenceUnlit.shader", + "m_Name": "ProBuilder/Reference Unlit", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "209f4c3496c1b46a3a2f9f0f27be788f", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/ReferenceUnlit.shader", + "m_Name": "ProBuilder/Reference Unlit", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "35731d35d00f82046b37dbeabba5cda3", + "m_FileId": "4800000", + "m_LocalPath": "Shader/pb_ReferenceUnlit.shader", + "m_Name": "ProBuilder/Reference Unlit", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "209f4c3496c1b46a3a2f9f0f27be788f", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/ReferenceUnlit.shader", + "m_Name": "ProBuilder/Reference Unlit", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "5e5a1dfede0a473682d353d5630953ca", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_ScrollHighlight.shader", + "m_Name": "Hidden/ProBuilder/ScrollHighlight", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "04b5dda5f278e4f56a9dbda64d90bb95", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/ScrollHighlight.shader", + "m_Name": "Hidden/ProBuilder/ScrollHighlight", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "d12d55fd8a06e4f49b461f2f4c1ccec2", + "m_FileId": "4800000", + "m_LocalPath": "Shader/pb_ScrollHighlight.shader", + "m_Name": "Hidden/ProBuilder/ScrollHighlight", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "04b5dda5f278e4f56a9dbda64d90bb95", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/ScrollHighlight.shader", + "m_Name": "Hidden/ProBuilder/ScrollHighlight", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "2e58e16192dbb47469ae041ba1331088", + "m_FileId": "4800000", + "m_LocalPath": "Shader/pb_SelectionPicker.shader", + "m_Name": "Hidden/ProBuilder/SelectionPicker", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "1fd883d610b2f42a98fc7abaf6809430", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/SelectionPicker.shader", + "m_Name": "Hidden/ProBuilder/SelectionPicker", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "e4ad9545e16c4e6b982230eac22263d8", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_SelectionPicker.shader", + "m_Name": "Hidden/ProBuilder/SelectionPicker", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "1fd883d610b2f42a98fc7abaf6809430", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/SelectionPicker.shader", + "m_Name": "Hidden/ProBuilder/SelectionPicker", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "3990a77f519f9844e9e0dbd0b1d2e13c", + "m_FileId": "4800000", + "m_LocalPath": "Shader/pb_SmoothingPreview.shader", + "m_Name": "Hidden/ProBuilder/SmoothingPreview", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "e8c3a1662a88140ae84d69a3a4cfdbaa", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/SmoothingPreview.shader", + "m_Name": "Hidden/ProBuilder/SmoothingPreview", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "d98bfea588e14568a203206deb1f77f5", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_SmoothingPreview.shader", + "m_Name": "Hidden/ProBuilder/SmoothingPreview", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "e8c3a1662a88140ae84d69a3a4cfdbaa", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/SmoothingPreview.shader", + "m_Name": "Hidden/ProBuilder/SmoothingPreview", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "d51b0e4a87ac4a7ba04281341fc2ceef", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_StandardVertexColor.shader", + "m_Name": "ProBuilder/Standard Vertex Color", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "1ccecd9b89b8a4f14bfb64f29ddfcc81", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/StandardVertexColor.shader", + "m_Name": "ProBuilder/Standard Vertex Color", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "3a6e79a67e3129f409bae52acc3ab06b", + "m_FileId": "4800000", + "m_LocalPath": "Shader/pb_StandardVertexColor.shader", + "m_Name": "ProBuilder/Standard Vertex Color", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "1ccecd9b89b8a4f14bfb64f29ddfcc81", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/StandardVertexColor.shader", + "m_Name": "ProBuilder/Standard Vertex Color", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "b94b533d84b349f48ec94d0a149905f3", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_TransparentOverlay.shader", + "m_Name": "Hidden/ProBuilder/pb_TransparentOverlay", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "25b8a80cb03994c769145599929a5e97", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/TransparentOverlay.shader", + "m_Name": "Hidden/ProBuilder/TransparentOverlay", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "bc7ec57068c16b3448b8c7a9206eaf1d", + "m_FileId": "4800000", + "m_LocalPath": "Shader/pb_TransparentOverlay.shader", + "m_Name": "Hidden/ProBuilder/pb_TransparentOverlay", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "25b8a80cb03994c769145599929a5e97", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/TransparentOverlay.shader", + "m_Name": "Hidden/ProBuilder/TransparentOverlay", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "65b473c2e838416e9eb1a765ccb7b1b0", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_UnlitSolidColor.shader", + "m_Name": "ProBuilder/Unlit Solid Color", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "24f9f312f97bd48dba1a728d58c89842", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/UnlitSolidColor.shader", + "m_Name": "ProBuilder/Unlit Solid Color", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "b7eb90c4fea16d34ab4d7caa19b870a3", + "m_FileId": "4800000", + "m_LocalPath": "Shader/pb_UnlitSolidColor.shader", + "m_Name": "ProBuilder/Unlit Solid Color", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "24f9f312f97bd48dba1a728d58c89842", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/UnlitSolidColor.shader", + "m_Name": "ProBuilder/Unlit Solid Color", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "486870038b9e41e394257af3eb40decd", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_VertexShader.shader", + "m_Name": "Hidden/ProBuilder/pb_VertexShader", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "d6e5744ac426949ff8c0f02936689d4c", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/VertexShader.shader", + "m_Name": "Hidden/ProBuilder/VertexShader", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "f9be32eb523431f43a8462b09a99a767", + "m_FileId": "4800000", + "m_LocalPath": "Shader/pb_VertexShader.shader", + "m_Name": "Hidden/ProBuilder/pb_VertexShader", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "d6e5744ac426949ff8c0f02936689d4c", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/VertexShader.shader", + "m_Name": "Hidden/ProBuilder/VertexShader", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "4f0627da958b4bb78c260446066f065f", + "m_FileId": "-142605913", + "m_LocalPath": "ProBuilder/Classes/ProBuilderCore.dll", + "m_Name": "pb_ColliderBehaviour", + "m_Type": "UnityEditor.MonoScript::ProBuilder.Core.pb_ColliderBehaviour" + }, + "destination": { + "m_Guid": "57444c075000242ea99e263cee940de2", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/ColliderBehaviour.cs", + "m_Name": "ColliderBehaviour", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.ColliderBehaviour" + } + }, + { + "source": { + "m_Guid": "4f0627da958b4bb78c260446066f065f", + "m_FileId": "1771188328", + "m_LocalPath": "ProBuilder/Classes/ProBuilderCore.dll", + "m_Name": "pb_TriggerBehaviour", + "m_Type": "UnityEditor.MonoScript::ProBuilder.Core.pb_TriggerBehaviour" + }, + "destination": { + "m_Guid": "4eb4b507ff52e40f58f68c2065e32636", + "m_FileId": "11500000", + "m_LocalPath": "Runtime/Core/TriggerBehaviour.cs", + "m_Name": "TriggerBehaviour", + "m_Type": "UnityEditor.MonoScript::UnityEngine.ProBuilder.TriggerBehaviour" + } + }, + { + "source": { + "m_Guid": "b74dc1b557ab24957bad9a8b1cf12ace", + "m_FileId": "2100000", + "m_LocalPath": "ProBuilder/Resources/Materials/EdgePicker.mat", + "m_Name": "EdgePicker", + "m_Type": "UnityEngine.Material" + }, + "destination": { + "m_Guid": "4ff996e3a0a5743a3987ab6231160665", + "m_FileId": "2100000", + "m_LocalPath": "Content/Resources/Materials/EdgePicker.mat", + "m_Name": "EdgePicker", + "m_Type": "UnityEngine.Material" + } + }, + { + "source": { + "m_Guid": "f95983c5af5c74a4bacdb0d204ab11b1", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_EdgePicker.shader", + "m_Name": "Hidden/ProBuilder/EdgePicker", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "86212504c7e9f468db2300dc5932dc17", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/EdgePicker.shader", + "m_Name": "Hidden/ProBuilder/EdgePicker", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "ec9adfc7538e4421c8738e23fb4f04e9", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_LineBillboard.shader", + "m_Name": "Hidden/ProBuilder/LineBillboard", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "4293210a3280c4283b9872316017f1f9", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/LineBillboard.shader", + "m_Name": "Hidden/ProBuilder/LineBillboard", + "m_Type": "UnityEngine.Shader" + } + }, + { + "source": { + "m_Guid": "dc84ca98acec549d7bac1b3562ea16e1", + "m_FileId": "4800000", + "m_LocalPath": "ProBuilder/Shader/pb_PointBillboard.shader", + "m_Name": "Hidden/ProBuilder/PointBillboard", + "m_Type": "UnityEngine.Shader" + }, + "destination": { + "m_Guid": "8ca8b34aa013842f3b399b6961e7dc3b", + "m_FileId": "4800000", + "m_LocalPath": "Content/Shader/PointBillboard.shader", + "m_Name": "Hidden/ProBuilder/PointBillboard", + "m_Type": "UnityEngine.Shader" + } + } + ] +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Upgrade/AssetIdRemap-4_0_0.json.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Upgrade/AssetIdRemap-4_0_0.json.meta new file mode 100644 index 0000000000000000000000000000000000000000..2611dcd4576c1d020f7da2b3b8121e6220020467 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Content/Upgrade/AssetIdRemap-4_0_0.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 486ced85f39911d4bb63e583a3e2ef81 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Arch.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Arch.md new file mode 100644 index 0000000000000000000000000000000000000000..b6f164dce97725a98abfe00aa3f1426e561121ca --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Arch.md @@ -0,0 +1,28 @@ +# Arch +The basic arch shape is a curved symmetrical shape (see **A** in the image below). You can customize the basic arch shape to create tunnels, pipes, roofs, and many other objects. + + + + Basic arch shape (default values) + + Tunnel: Arch with increased depth and thickness + + Wheel: Arch with increased number of sides, thickness and degrees (and no end cap) + + Roof: Arch with 2 sides and increased depth + +When you customize an arch shape, keep in mind that when you change the thickness and number of sides, it is relative to the **Radius** and **Arch Degrees** values. For example, two arches with the same thickness (15) but where one arch has twice the radius as the other (3 vs. 6), look very different. The one with the smaller radius appears much smoother than the other. + +You can customize the shape of an arch with these shape properties: + + + + +| **Property:** | **Description:** | +|:-- |:-- | +| __Radius__ | Set the radius (size) of the arch in meters. A change in radius affects the overall height. The default value is 3. | +| __Thickness__ | Set the thickness of the arch in meters. As this value approaches the __Radius__ value, the smaller the _doorway_ becomes. The default value is 0.5. | +| __Depth__ | Set the depth for the arch in meters. The higher the value, the longer the _tunnel_ effect. The default value is 1. | +| __Number of Sides__ | Set the number of sides for the arch. The more sides you use (relative to the size of the __Radius__), the smoother the arch becomes, so the closer you get to a semi-circle. Conversely, if you this value to 2, the arch turns into a peaked roof, regardless of the radius. The efault value is 6. | +| __Arch Degrees__ | Set the circumference of the arch in degrees. For example, an arch of 360 degrees is circular. The default value is 180. | +| __End Caps__ | Enable this option to create faces for the ends of the arch (default). <br />Disable this option if you know the ends are not visible to the camera (this is an [optimization strategy](workflow-edit-tips.md) that reduces the number of polygons that Unity has to render). | diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/CenterPivot.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/CenterPivot.md new file mode 100644 index 0000000000000000000000000000000000000000..c5c7990399154c9221113687c7880b7585bad468 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/CenterPivot.md @@ -0,0 +1,9 @@ +#  Center Pivot + +The __Center Pivot__ tool moves the pivot point for the Mesh to the center of the object’s bounds. For example, if you move a lot of vertices on one side of your Mesh, when you try to rotate the object, it rotates around a point outside of the Mesh. + + + + + +> **Note:** If you have multiple objects selected, each object's new pivot point becomes the center of each object, regardless of the position of any other object. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Cone.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Cone.md new file mode 100644 index 0000000000000000000000000000000000000000..ce67ae05ce5a0a17ca8c0b8cf0ccdefd84403af6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Cone.md @@ -0,0 +1,23 @@ +# Cone +A cone is a shape which tapers from a circular (or roughly circular) base to a point. You can adjust the settings to change the height, width, and smoothness. + + + + Basic cone shape (default values) + + Cone with increased height + + Cone with increased number of sides + + Cone with wide radius + +You can customize the shape of a cone with these shape properties: + + + + +| **Property:** | **Description:** | +|:-- |:-- | +| __Radius__ | Set the radius of the base of the cone in meters. The default value is 1. The minimum value is 0.1. | +| __Height__ | Set the height for the cone in meters. The default value is 2. The minimum value is 0.1. | +| __Number of Sides__ | Set the number of sides for the cone. The more sides you use (relative to the size of the __Radius__ and the __Height__), the smoother the sides of the cone become. The default value is 6. Valid values range from 3 to 32. | diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Cube.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Cube.md new file mode 100644 index 0000000000000000000000000000000000000000..c360bf7c6d627de7262f54128651e6339faf4c0c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Cube.md @@ -0,0 +1,17 @@ +# Cube +A cube is the default shape in ProBuilder. It is a six-sided 3D square. To add a default cube to the Scene, you can use the **Ctrl/Cmd+K** keyboard shortcut. + + + +The blue cube in this image is the default cube in preview mode. + +You can customize the shape of a cube with these shape properties: + + + + +| **Property:** | **Description:** | +|:-- |:-- | +| __X__ | Set the dimensions in the x-axis of the cube (width) in meters. The default value is 1. The minimum value is 0.01. | +| __Y__ | Set the dimensions in the y-axis of the cube (height) in meters. The default value is 1. The minimum value is 0.01. | +| __Z__ | Set the dimensions in the z-axis of the cube (depth) in meters. The default value is 1. The minimum value is 0.01. | diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Custom.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Custom.md new file mode 100644 index 0000000000000000000000000000000000000000..0bb22908a562d5850550d83958d05309e3472eed --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Custom.md @@ -0,0 +1,14 @@ +# Custom +You can define your own custom Mesh. To do this, you need to specify a set of vertices in the __Custom Geometry__ field: + + // Vertical Plane + 0, 0, 0 + 1, 0, 0 + 0, 1, 0 + 1, 1, 0 + +The order to specify vertices is to follow a backwards Z pattern for each face: + + + +Repeat for each adjacent face until you have created the shape you want. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Cylinder.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Cylinder.md new file mode 100644 index 0000000000000000000000000000000000000000..cffcff0efc0f687d7950b59af7d7a5de8580f97c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Cylinder.md @@ -0,0 +1,25 @@ +# Cylinder +A cylinder is a shape with long straight sides and two circular (or roughly circular) ends, like a tube. They have a radius and a height. + + + + Default cylinder shape + + Cylinder without the smoothing + + Cylinder with a height of 3 and 16 sides + + Cylinder with a radius of 4 and 10 subdivisions + +You can customize the shape of a cylinder with these shape properties: + + + + +| **Property:** | **Description:** | +|:-- |:-- | +| __Radius__ | Set the radius (width) of the cylinder in meters. The default value is 0.5. The minimum value is 0.01. | +| __Number of Sides__ | Set the number of sides for the cylinder. The more sides you use (relative to the size of the __Radius__), the smoother the sides of the cylinder become. The default value is 8. Valid values range from 4 to 48. | +| __Height__ | Set the height of the cylinder in meters. The default value is 1. | +| __Height Segments__ | Set the number of divisions to use for the height of the cylinder. For example, a value of 3 produces 4 faces on every side of the cylinder. The default value is 0. Valid values range from 0 to 48. | +| __Smooth__ | Enable this option to smooth the edges of the polygons. This is enabled by default. | diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Door.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Door.md new file mode 100644 index 0000000000000000000000000000000000000000..284a720027b725216cb44418b40595e7ff9a15e6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Door.md @@ -0,0 +1,27 @@ +# Door +The ProBuilder door shape provides a convenient door Mesh that you can set into a level wall. There are no polygons where it meets the wall, so you can place it directly into the wall. + + + + Total Width + + Total Height + + Total Depth + + Door Height + + Leg Width + +You can customize the shape of a door with these shape properties: + + + + +| **Property:** | **Description:** | +|:-- |:-- | +| __Total Width__ | Set the total width of the door in meters. The default value is 4. The minimum value is 1. | +| __Total Height__ | Set the total height of the door in meters. The default value is 4. The minimum value is 1. | +| __Total Depth__ | Set the depth of the wall that separates the two rooms in meters. The default value is 0.5. The minimum value is 0.01. | +| __Door Height__ | Set the height of the top of the door frame in meters. The default value is 1. The minimum value is 0.01. | +| __Leg Width__ | Set the width of the door frame on the sides in meters. The default value is 1. Valid values range from 0.01 to half of the __Total Width__ value. | diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_Bevel.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_Bevel.md new file mode 100644 index 0000000000000000000000000000000000000000..714d048f21118c53e8539fdb97407265d9b8ef73 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_Bevel.md @@ -0,0 +1,14 @@ +#  Bevel Edge + +The __Bevel Edge__ tool splits the selected edge(s) into two edges, with a new face between. + + + + + +## Bevel Options + + + +To change the width of the bevel, change the __Distance__ to move the newly created edge(s) from the position of the original edge(s). This becomes the width of the new face(s). + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_Bridge.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_Bridge.md new file mode 100644 index 0000000000000000000000000000000000000000..51545e68b43516483f7dff7b76b223a9eab7639a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_Bridge.md @@ -0,0 +1,11 @@ +#  Bridge Edges + +The __Bridge Edges__ tool creates a new face between two selected edges. + +By default, this tool can only bridge two open edges (that is, no face on the *open* or *free* side). However, you can override this; to do so, navigate to the Preferences and enable [Allow non-manifold actions](preferences.md#bridge). + + + +> **Tip:** You can also use this tool with the **Alt/Opt+B** hotkey. + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_Connect.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_Connect.md new file mode 100644 index 0000000000000000000000000000000000000000..559ce95974151740903be2272fdc5f09a23a83cd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_Connect.md @@ -0,0 +1,12 @@ +#  Connect Edges + +The __Connect Edges__ tool inserts an edge that connects the centers of each selected edge. + +> **Tip:** You can also use this tool with the **Alt/Opt+E** hotkey. + + + +If you select more than two edges, ProBuilder creates as many new edges as possible without creating bad geometry. + +You can connect across several faces, as long as they share a selected edge. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_Extrude.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_Extrude.md new file mode 100644 index 0000000000000000000000000000000000000000..d31003a34619c2d140995c6e9f20e8dfc137d4b3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_Extrude.md @@ -0,0 +1,34 @@ +#  Extrude Edges + +The __Extrude Edges__ tool pushes a new edge out from each selected edge, connected by a new face for each edge. This tool only works on open edges (that is, an edge that has no connected face on one side). However, you can override this restriction with the **Manifold Edge Extrusion** option. + +Each new face follows the direction of the normals of the face that is adjacent to the selected edge. + + + +You can invoke this tool in either way: + +- Select one or more edge(s) and click **Extrude Edges**. By default, the distance of the extrusion is **0.5**, but you can change that with the **Distance** option. + + > **Tip:** You can also use the **Ctrl/Cmd+E** hotkey instead of the button with this method. + +- Select one or more edge(s) and then hold **Shift** while you move, rotate, or scale the selected edge(s). This method ignores the options but provides greater control, especially with the direction of the extrusion. + + + +## Extrude Edges Options + +These options apply only if you use the **Extrude Edges** button or the **Ctrl/Cmd+E** hotkey. + + + + + +| **Property:** | **Description:** | +| :-------------------------- | :----------------------------------------------------------- | +| **As Group** | Enable this option to keep the sides of extruded edges attached to each other if you select more than one edge to extrude. | +| **Manifold Edge Extrusion** | Enable this option to extrude edges that are not free (that is, edges that are connected to faces on all sides). This option can produce unexpected results, so use with caution. | +| __Distance__ | Distance to extrude the edge(s). <br />Both positive and negative values are valid. | + + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_FillHole.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_FillHole.md new file mode 100644 index 0000000000000000000000000000000000000000..acbe55d6b5a44d695b13d7ceb6fe81f210ae4d05 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_FillHole.md @@ -0,0 +1,15 @@ +#  Fill Hole (Edges) + +The __Fill Hole__ tool creates a new face that fills any holes that touch the selected edges. + + + + + +## Fill Hole Options + + + +Enable the __Fill Entire Hole__ option to fill the entire Mesh opening. This is the default. + +If you disable this option, ProBuilder tries to build a Mesh between the selected open edges. For example, if you have a missing quad, you can select two adjacent edges in order to create a triangular polygon that covers half of the hole. \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_InsertLoop.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_InsertLoop.md new file mode 100644 index 0000000000000000000000000000000000000000..56887e61111debe3c3a3260ebb417db207521d4c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_InsertLoop.md @@ -0,0 +1,14 @@ +#  Insert Edge Loop + +The __Insert Edge Loop__ tool adds a new edge loop from the selected edge(s). An edge loop is a series of edges that are directly connected. They often encircle a 3D object and connect back at the origin point. + +> **Note:** Loops only continue through quads (four-sided polygons), not triangles. + + + +> **Tip:** You can also use this tool with the **Alt/Opt+U** hotkey. + +This creates more geometry than [Connect Edges](Edge_Connect.md) or [Connect Vertices](Vert_Connect.md), but it makes the geometry cleaner. For example, if you insert an edge on a single face of a cube you get a T-junction, but if you insert an edge loop instead, you get the same geometry all around the cube, provided that the loop is only passing through quads. + +You can use **Insert Edge Loop** while you edit your geometry, and then delete the extra unnecessary edges when you're finished to optimize the geometry. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_SetPivot.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_SetPivot.md new file mode 100644 index 0000000000000000000000000000000000000000..378bfba05408ba2b8d32d42302ed7b6a4f0adf2d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_SetPivot.md @@ -0,0 +1,14 @@ +#  Set Pivot (Edges) + +Use the __Set Pivot__ tool to move the pivot point of this Mesh to the average center of the selected edges. + +> **Tip:** You can also use this tool with the **Ctrl/Cmd+J** hotkey. + + + + + +In this example: +* **Left panel**: The pivot point of the door is at its bottom-left corner. +* **Middle panel**: Two edges are selected on the opposite side, so the __Set Pivot__ tool changes the pivot to the center of those top edges. +* **Right panel**: The pivot point is now at the top right, even when in Object editing mode. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_Subdivide.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_Subdivide.md new file mode 100644 index 0000000000000000000000000000000000000000..4d124f4335364207b852b3deaa78348b64511eaf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Edge_Subdivide.md @@ -0,0 +1,18 @@ +#  Subdivide Edge + +The __Subdivide Edge__ tool divides the selected edge(s) into multiple edges. By default, ProBuilder splits the edge in two, but you can set your own number of __Subdivisions__ in the Options window. + +> **Tip:** You can also use this tool with the **Alt/Opt+S** hotkey. + + + + + +## Subdivide Edge Options + + + +To change the number of new edges created, change the __Subdivisions__ option. By default, the number of subdivisions is **1**, which means that ProBuilder splits a single selected edge into two edges. If you change this value to **3**, then a single edge becomes four edges. + +The range of valid values is **1** to **32**. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Entity_Trigger.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Entity_Trigger.md new file mode 100644 index 0000000000000000000000000000000000000000..a102545e3703d5eb7e513b48fc2ff79f0db33cc0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Entity_Trigger.md @@ -0,0 +1,34 @@ +#  Entity type tools + +ProBuilder provides some default *entity* behaviors. These are MonoBehaviours that provide some commonly used functionality. + +> **Note:** These tools are only available from the [The ProBuilder toolbar](toolbar.md) in [text mode](toolbar.md#buttonmode). + + + +## Set Trigger + +The __Set Trigger__ tool assigns the **Trigger Behaviour** script to selected objects, which does the following: + +- If no collider is present, the **Trigger Behaviour** script adds a [MeshCollider](https://docs.unity3d.com/Manual/class-MeshCollider.md) component. +- If the collider is a Mesh Collider, the **Trigger Behaviour** script enables its **Convex** property. +- The **Trigger Behaviour** script enables the collider's **isTrigger** property. +- The **Trigger Behaviour** script sets the [Mesh Renderer](https://docs.unity3d.com/Manual/class-MeshRenderer.md) Material to ProBuilder's **Trigger** Material. +- The **Trigger Behaviour** script automatically disables the Mesh Renderer when you enter **Play Mode** or build your project. + +> **Tip:** You can also use the **T** hotkey to set the selected object(s) as a trigger. If you want to change this hotkey assignment, you can modify it in the ProBuilder Preferences [Shortcut Settings](preferences.md#shortcuts). + + + +<a name="Collider"></a> + +## Set Collider + +The __Set Collider__ tool assigns the **Collider Behaviour** script to selected objects, which does the following: + +- If no collider is present, the **Collider Behaviour** script adds a [MeshCollider](https://docs.unity3d.com/Manual/class-MeshCollider.md) component. +- The **Collider Behaviour** script sets the [MeshRenderer](https://docs.unity3d.com/Manual/class-MeshRenderer.md) Material to ProBuilder's **Collider** Material. +- The **Collider Behaviour** script automatically disables the MeshRenderer when you enter **Play Mode** or build your project. + +> **Tip:** You can also use the **C** hotkey to set the selected object(s) as a collider. If you want to change this hotkey assignment, you can modify it in the ProBuilder Preferences [Shortcut Settings](preferences.md#shortcuts). + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Bevel.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Bevel.md new file mode 100644 index 0000000000000000000000000000000000000000..f955c822c8191ecb6872fdd020bcb73b6a6031ed --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Bevel.md @@ -0,0 +1,16 @@ +#  Bevel (Faces) + +The __Bevel__ tool performs the [Bevel Edge](Edge_Bevel.md) action on all the edges of the selected face(s). + + + + + +## Bevel Options + + + +To change the width of the bevel, change the __Distance__ to move the newly created edge(s) from the position of the original edge(s). This becomes the width of the new face(s). + + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_ConformNormals.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_ConformNormals.md new file mode 100644 index 0000000000000000000000000000000000000000..602d8373aca3220ff60df4db4b7b0a57d1ed2c8e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_ConformNormals.md @@ -0,0 +1,10 @@ +#  Conform Normals (Faces) + +The __Conform Normals__ tool sets all normals on the selected face(s) to the same relative direction. + +ProBuilder uses the direction that most of the *selected* faces on the object are already facing. + + + +In this example, all three selected faces on this cube end up pointing away from the Camera, as the Transform gizmo shows. This is because two out of three of the selected faces are pointing in the opposite direction, even though the majority of the normals are pointing towards the camera. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Delete.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Delete.md new file mode 100644 index 0000000000000000000000000000000000000000..69ff5624a94918ae73a5e3ac0af1186fa8d13bb0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Delete.md @@ -0,0 +1,8 @@ +#  Delete Faces + +The __Delete Faces__ tool deletes the selected face(s). + + + +> **Tip:** You can also use this tool with the **Backspace** hotkey. The **Delete** key deletes the entire Mesh. You can use Undo to reverse it. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Detach.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Detach.md new file mode 100644 index 0000000000000000000000000000000000000000..d8f46f011fdea5871fe03745792a170b63ab32ee --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Detach.md @@ -0,0 +1,25 @@ +#  Detach Faces + +The __Detach Faces__ tool detaches the selected face(s) from the rest of the Mesh. + + + +> **Note:** When you detach a face, the newly separated Mesh remains in place. This image shows the detached Mesh above only to illustrate that the Mesh is now detached from the the rest of the original Mesh. + +By default, ProBuilder creates a new sub-Mesh for the detached face(s). If you want to keep it as a sub-Mesh inside the same GameObject, you can change the **Detach To** option. + + + +## Detach Face Options + + + + + +The __Detach To__ drop-down menu allows you to choose whether you want the detached face(s) to become a separate Mesh (the default), or keep them inside the original Mesh as a new sub-Mesh. + +| **Choice:** | **Result:** | +| :-------------- | :----------------------------------------------------------- | +| **Game Object** | ProBuilder detaches the face(s) to a new, separate Mesh object. | +| **Submesh** | ProBuilder detaches the face(s) to a sub-Mesh within the original Mesh object. | + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Extrude.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Extrude.md new file mode 100644 index 0000000000000000000000000000000000000000..a7ccb1ce5056085d13d478ffc81d1b61b0274cbb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Extrude.md @@ -0,0 +1,34 @@ +#  Extrude Faces + +The __Extrude Faces__ tool creates a new face. To do this, it pulls out the currently selected face, and attaches sides to each edge. + +By default, each new face follows the direction of its vertex normals, but you can change this with the **Extrude By** option. + + + +You can invoke this tool in either way: + +- Select one or more face(s) and click **Extrude Faces**. By default, the distance of the extrusion is **0.5**, but you can change that with the **Distance** option. + + > **Tip:** You can also use the **Ctrl/Cmd+E** hotkey instead of the button with this method. + +- Select one or more face(s) and then hold **Shift** while moving, rotating, or scaling the selected face(s). This method ignores the options but provides greater control, especially with the direction of the extrusion. + + When you use this method with the scaling control, it creates an inset. + + + +## Extrude Faces Options + +These options only apply if you are using the **Extrude Faces** button or the **Ctrl/Cmd+E** hotkey. + + + +| **Property:** | | **Description:** | +| :-------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| **Extrude By** | | Direction for extruding each selected face. | +| |  **Face Normals** | Use the selected face's own surface direction. Adjacent faces remain connected. | +| |  **Vertex Normals** | Use the selected face's Vertex normals. Adjacent faces remain connected. <br />This is the default. | +| |  **Individual Faces** | Use the selected face's own surface direction. However, adjacent faces do *not* remain connected. | +| __Distance__ | | Distance to extrude the faces(s). <br />Both positive and negative values are valid. | + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_FlipNormals.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_FlipNormals.md new file mode 100644 index 0000000000000000000000000000000000000000..9e67ff36f968e61ee5f5193695b5f5603ef4e9e8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_FlipNormals.md @@ -0,0 +1,9 @@ + + +#  Flip Face Normals + +The __Flip Face Normals__ tool flips the normals only on the selected face(s). + + + +This differs from the [Flip Normals](Object_FlipNormals.md) tool, which flips the normals on every single face on the Mesh. \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_FlipTri.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_FlipTri.md new file mode 100644 index 0000000000000000000000000000000000000000..8383385b7f972e9d07ca11dac55c591d67281413 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_FlipTri.md @@ -0,0 +1,13 @@ +#  Flip Face Edge + +The __Flip Face Edge__ tool swaps the triangle orientation on the selected face(s) with four sides. This reverses the direction of the middle edge in a quad. + + + +Use this to smooth ridges in quads with varied height corners. + +> **Note:** This only works on quads. + +This tool is often called **Turn Edges** in other 3D modeling applications. + +<!-- Formerly called **Flip Triangles**; also called **Turn Edges** in other DCCs) --> \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Inset.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Inset.md new file mode 100644 index 0000000000000000000000000000000000000000..ed46326e2fd813616c291fd32687043dc3c70591 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Inset.md @@ -0,0 +1,15 @@ +# Inset + +To create a new face set into the currently selected face, you can use the [Extrude Faces](Face_Extrude.md) tool and scale the extruded face. + + + +Inset faces give you a lot of flexibility for building more sophisticated shapes. For example, you can extrude an inset face inwards to create interior walls, or extrude outwards for a more detailed exterior. + +To create an inset face: + +1. Activate the [Face mode](modes.md). +2. Select the face you want to add the inset to. +3. Activate the [Scale tool](https://docs.unity3d.com/Documentation/Manual/PositioningGameObjects.html). +4. Hold **Shift** and scale along either axis of the face, and let go when you are satisfied. For example, if you want to inset the top face of a cube, you can scale along either the x-axis or the z-axis. +5. Scale along the other axis of the face to complete the inset. For example, if you extruded along the z-axis in step 4, then scale in the x-axis. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Merge.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Merge.md new file mode 100644 index 0000000000000000000000000000000000000000..cadb26d08b870f7b7e3f3db1b96a42507dad6222 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Merge.md @@ -0,0 +1,9 @@ +#  Merge Faces + +The __Merge Faces__ tool merges selected faces into a single face, and removes any dividing edges. + + + +> **Caution:** Be careful when you merge two unconnected faces, because this can produce unexpected results with any texture mapping. This tool can sometimes create unusual geometry artifacts, such as [vertices at T-junctions](workflow-edit-tips.md#tjoint) or [floating (winged) vertices](workflow-edit-tips.md#floatv) (that is, unused vertices sitting on an edge with no other edge passing through it). It is better to merge faces only when really necessary. + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_SetPivot.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_SetPivot.md new file mode 100644 index 0000000000000000000000000000000000000000..ab01188b28a52fa7689f3af04171f807f3b7bb6b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_SetPivot.md @@ -0,0 +1,14 @@ +#  Set Pivot (Faces) + +Use the __Set Pivot__ tool to move the pivot point of this Mesh to the average center of the selected faces. + +> **Tip:** You can also use this tool with the **Ctrl/Cmd+J** hotkey. + + + + + +In this example: +* **Left panel**: The pivot point of the block tower is at the center of the entire Mesh. +* **Middle panel**: The top faces are selected, so the Set Pivot tool changes the pivot to the center of those top faces. +* **Right panel**: The pivot point is now at the top, even when in Object editing mode. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Subdivide.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Subdivide.md new file mode 100644 index 0000000000000000000000000000000000000000..dedea9b8e23dbd50db2bf0e8ac20969bab93c9e3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Subdivide.md @@ -0,0 +1,10 @@ +#  Subdivide Face + +The __Subdivide Face__ tool splits each selected face. To do this, it adds a vertex at the center of each edge and connects them in the center. + +> **Tip:** You can also use this tool with the **Alt/Opt+S** hotkey. + + + +This allows you to add a lot more detail to your geometry. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Triangulate.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Triangulate.md new file mode 100644 index 0000000000000000000000000000000000000000..425fcb84ea740d7afa97418441c7f0060e1ce09e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Face_Triangulate.md @@ -0,0 +1,8 @@ +#  Triangulate Faces + +The __Triangulate Faces__ tool reduces selected faces to their base triangles. This creates a faceted, non-smooth appearance. + + + +> **Tip:** When you triangulate faces, you can smooth the hard edges with the [Smooth Group Editor window](smoothing-groups.md). + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Freeze_Transform.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Freeze_Transform.md new file mode 100644 index 0000000000000000000000000000000000000000..ca10480265db8a7e5d03eac9570390a41498489f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Freeze_Transform.md @@ -0,0 +1,4 @@ +#  Freeze Transform + +The __Freeze Transform__ tool sets the selected object's position, rotation, and scale to world-relative origin (**{0,0,0}**) without changing any vertex positions. That means it resets the pivot location and clears all Transform values, but doesn't change the size, shape, or location of the object in the Scene. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/HandleAlign.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/HandleAlign.md new file mode 100644 index 0000000000000000000000000000000000000000..d4c89cfa7121c65dd98e727aa5c0f78fd7c3984e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/HandleAlign.md @@ -0,0 +1,17 @@ +#  Orientation + +The __Orientation__ tool sets the orientation of Scene handles when you select [objects and elements](modes.md). Click the __Orientation__ button to switch between the three states: __Global__, __Local__, or __Normal__. + + + +Depending whether you are in [text mode or icon mode](toolbar.md#buttonmode), the button displays the following to indicate what state the tool is in: + +| ***Icon mode:*** | *Text mode:* | ***Description:*** | +| :----------------------------------------------------------- | ----------------------- | ------------------------------------------------------------ | +|  | **Orientation: Global** | Similar to a compass, the handle orientation is always the same, regardless of local rotation. | +|  | **Orientation: Local** | Similar to *left vs right*, handle orientation is relative to the object's rotation. | +|  | **Orientation: Normal** | Special mode that aligns the handles to the exact normal direction of the selected face. | + +This tool is available in all [edit modes](modes.md). + +> **Tip:** You can also use this tool with the **P** hotkey. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_ConformNormals.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_ConformNormals.md new file mode 100644 index 0000000000000000000000000000000000000000..97d6d055e8642e290ba12ec52f0eb4e9e7ee623b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_ConformNormals.md @@ -0,0 +1,9 @@ +#  Conform Normals (Objects) + +The __Conform Normals__ tool sets all face normals on the selected object to the same relative direction. + +ProBuilder uses the direction that most of the faces on the object are already facing. + + + +In this example, the majority of the normals on this shape are pointing towards the Camera, so after applying this tool, all normals point in the same direction. \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_Export.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_Export.md new file mode 100644 index 0000000000000000000000000000000000000000..e40e4eb1de4b4930da90e5b6684a11be771b2324 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_Export.md @@ -0,0 +1,72 @@ +#  Export + +The __Export__ tool [exports](workflow-exporting.md#export) the selected ProBuilder object(s) to a 3D Model file. + +For an overview of how to export ProBuilder objects and and re-import the exported files, see [Exporting and re-importing](workflow-exporting.md). + + + +## Export options + + + +Select the [format you want to export to](workflow-exporting.md#formats) from the **Export Format** drop-down menu. The options available depend on which format you choose: + +* [OBJ-specific options](#Obj) +* [STL-specific options](#STL) +* [PLY-specific options](#PLY) +* [Asset-specific options](#Asset) + +The one option that applies to all file format types is the __Include Children__ property, which you can enable to include not only selected Meshes, but also the children of selected objects in the exported Model. + +<a name="Asset"></a> + +### Asset-specific options + + + +For the Asset format type, the __Include Children__ property is the only available option. + + + +<a name="STL"></a> + +### STL-specific options + + + +The STL format type also provides the __STL Format__ option, which allows you to choose whether to use the **ASCII** or **Binary** representation of the STL file specification. + + + +<a name="PLY"></a> + +### PLY-specific options + + + +| ***Property:*** | ***Description:*** | +| :------------------- | :----------------------------------------------------------- | +| __Export as Group__ | Enable this option to combine all selected objects and export them as a single Model file. Otherwise, ProBuilder exports each Mesh separately. | +| __Apply Transforms__ | Enable this option to apply the GameObject transform to the Mesh attributes before ProBuilder exports them. With both this option and **Export as Group** enabled, you can export your whole Scene, edit it, then re-import it with everything exactly where you left it. | +| __Right Handed__ | Enable this option to use right-handed coordinates.<br />Unity's coordinate system is left-handed, but most major 3D modeling software applications use right-handed coordinates. | +| __Quads__ | Enable this option to preserve quads where possible. | + + + +<a name="Obj"></a> + +### OBJ-specific options + + + +| ***Property:*** | ***Description:*** | +| :------------------------ | :----------------------------------------------------------- | +| __Export as Group__ | Enable this option to combine all selected objects and export them as a single Model file. Otherwise, ProBuilder exports each Mesh separately. | +| __Apply Transforms__ | Enable this option to apply the GameObject transform to the Mesh attributes before exporting. With this option and **Export as Group** enabled, you can export your whole Scene, edit, then re-import it with everything exactly where you left it. | +| __Right Handed__ | Enable this option to use right-handed coordinates.<br />Unity's coordinate system is left-handed, but most major 3D modeling software applications use right-handed coordinates. | +| __Copy Textures__ | Enable this option to copy texture maps to the file destination and reference them from local paths in the Material library. <br />Disable it if you want the Material library to reference an absolute path to the Textures instead of copying them. See [Re-importing an exported Mesh](workflow-exporting.md#reimport) for more information. | +| __Vertex Colors__ | Enable this option to write vertex colors with the MeshLab format. Some 3D modeling applications can import vertex colors from an unofficial extension to the OBJ format. <br /><br />**Note:** This can break import in some applications, so use it with caution. | +| __Texture Scale, Offset__ | Enable this option to write import texture scale and offset parameters values to the exported mtlib file. Some 3D modeling applications import texture scale and offset parameters (Blender, for example). <br /><br />**Note:** This can break import in some applications, so use it with caution. | +| **Export Quads** | Enable this option to preserve quads where possible. | + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_FlipNormals.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_FlipNormals.md new file mode 100644 index 0000000000000000000000000000000000000000..87613152d5e367b6e62307dde04c2a960d9fc49b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_FlipNormals.md @@ -0,0 +1,6 @@ +#  Flip Normals + +The __Flip Normals__ tool flips the normals of *all* faces on the selected object(s). This is especially useful if you want to convert an exterior-modeled shape into an interior space. + + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_LightmapUVs.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_LightmapUVs.md new file mode 100644 index 0000000000000000000000000000000000000000..1f4e87bd108c78cd550e54656f89964ee4071791 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_LightmapUVs.md @@ -0,0 +1,8 @@ +#  Lightmap UVs + +Use the __Lightmap UVs__ tool to manually generate any missing lightmap UVs. This works on each Mesh in every open Scene that is missing lightmap UVs. + +> **Tip:** You can edit lightmap generation parameters for specific objects in the [ProBuilderMesh](ProBuilderMesh.md) component on ProBuilder objects. You can also modify the defaults on the [ProBuilder Preferences](preferences.md#autouvs) window. + +There is one option for this tool which you can access like any other [toolbar option](overview-ui.md#pb_options). You can also access it using the menu (**Tools** > **ProBuilder** > **Editors** > **Open Lightmap UV Editor**), because it appears on the [Lightmap UV Editor](lightmap-uv.md) window. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_Merge.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_Merge.md new file mode 100644 index 0000000000000000000000000000000000000000..369e18adf25dab1f87bf1f869c00b003b5f745bf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_Merge.md @@ -0,0 +1,6 @@ +#  Merge Objects + +The __Merge Objects__ tool merges two or more selected ProBuilder GameObjects into a single ProBuilder GameObject. + +> **Warning:** If you merge two objects that intersect, the new object might have overlapping UVs. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_Mirror.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_Mirror.md new file mode 100644 index 0000000000000000000000000000000000000000..d7e005858b63c618b2b24bb37794e38358ec7352 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_Mirror.md @@ -0,0 +1,19 @@ +#  Mirror Objects + +The __Mirror Objects__ tool creates mirrored copies of objects. + +Mirroring is especially useful when you want to create symmetrical items. You can build one half, mirror it, and then [Weld](Vert_Weld.md) the two Meshes together for a perfectly symmetrical result. + + + +## Mirror Objects Options + + + +| **Property:** | **Description:** | +| :-------------- | :----------------------------------------------------------- | +| __X, Y, Z__ | Check each axis you want to mirror on. You can choose one axis only, or multiple axes. | +| __Duplicate__ | Enable this option to create a duplicate object and mirror it, leaving the original unchanged. | + +Set these properties, then click **Mirror**. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_ProBuilderize.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_ProBuilderize.md new file mode 100644 index 0000000000000000000000000000000000000000..01434273877a1d8911c3d5fe1e1975cf603bb9b4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_ProBuilderize.md @@ -0,0 +1,18 @@ +#  ProBuilderize + +The __ProBuilderize__ tool converts the selected object(s) into ProBuilder-editable objects. + + + +## ProBuilderize options + + + + + +| **Property:** | **Description:** | +| :---------------------- | :----------------------------------------------------------- | +| __Import Quads__ | Enable this option to keep Meshes quadrangulated when ProBuilder imports them. <br />Disable it to import the Mesh as triangles. | +| __Import Smoothing__ | Enable this option to use a smoothing angle value to calculate [smoothing groups](smoothing-groups.md). | +| __Smoothing Threshold__ | Set this value to decide which adjacent faces to add to a smoothing group. Use a value that is higher than the difference of any adjoining angle that is adjacent to the face(s) you want to add to a smoothing group. This setting is only available if __Import Smoothing__ is enabled. | + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_Subdivide.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_Subdivide.md new file mode 100644 index 0000000000000000000000000000000000000000..d842cf3a8d74dc94fd821d94dd1b61b1bb0e8026 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_Subdivide.md @@ -0,0 +1,7 @@ +#  Subdivide Object + +The __Subdivide Object__ tool divides every face on selected objects, allowing for greater levels of detail when modeling. + + + +To do this, for each face, it adds a vertex at the center of each edge and connects them in the center of the face. \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_Triangulate.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_Triangulate.md new file mode 100644 index 0000000000000000000000000000000000000000..741ddd40aa9696918842e042862d474b127a5502 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Object_Triangulate.md @@ -0,0 +1,7 @@ +#  Triangulate (Objects) + +The __Triangulate__ tool reduces all polygons to their base triangles. This creates a sharp, faceted appearance. + + + +**Note:** To smooth some of the hard edges, you can [add and remove smoothing groups](workflow-edit-smoothing.md) across the faces of the Mesh. \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Pipe.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Pipe.md new file mode 100644 index 0000000000000000000000000000000000000000..aa81e25b689a752cc10fc91dba823b31822781ca --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Pipe.md @@ -0,0 +1,25 @@ +# Pipe +The pipe shape is similar to the ProBuilder [Cylinder](Cylinder.md), but hollow. It has similar properties, but you can also specify the thickness of the pipe wall. + + + + Basic pipe shape (default values) + + Pipe with increased number of height segments (faces per side) + + Pipe with three sides and increased height + + Pipe with increased number of sides and thickness + +You can customize the shape of a pipe with these shape properties: + + + + +| **Property:** | **Description:** | +|:-- |:-- | +| __Radius__ | Set the radius (width) of the pipe in meters. The default value is 1. Minimum value is 0.1. | +| __Height__ | Set the height of the pipe in meters. The default value is 2. Minimum value is 0.1. | +| __Thickness__ | Set the thickness of the walls of the pipe in meters. When this value approaches the __Radius__ value, the hole becomes smaller. The default value is 0.2. Valid values range from 0.01 to the __Radius__ value minus 0.01. | +| __Number of Sides__ | Set the number of sides for the pipe. The more sides you use (relative to the size of the __Radius__), the smoother the sides of the pipe become. The default value is 6. Valid values range from 3 to 32. | +| __Height Segments__ | Set the number of divisions to use for the height of the pipe. For example, using a value of 3 produces four faces on every side of the pipe. The default value is 1. Valid values range from 0 to 32. | diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Plane.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Plane.md new file mode 100644 index 0000000000000000000000000000000000000000..172c6520e192a38fa7c4e44362349f075ebbd1f8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Plane.md @@ -0,0 +1,29 @@ +# Plane +A plane is a four-sided 2D shape. It can be a square or a rectangle, with two dimensions (width and height) in any orientation. + + + + Default plane: height and width both set to a size of 10 units, and 3 subdivisions + + Square plane with 2 subdivisions along the width and 1 along the length + + Rectangular plane (10 x 2) with no subdivisions + +You can customize the shape of a plane with these shape properties: + + + + +|**Property:** ||**Function:** | +|:---|:---|:---| +| __Axis__ || Choose the starting orientation for the plane. Default value is *Up*. | +||*Right*|Width is along the the z-axis, height is along the the y-axis, normals point towards the X-axis in the positive direction.| +||*Left*|Width is along the the y-axis, height is along the the z-axis, normals point towards the X-axis in the negative direction.| +||*Up*|Width is along the the X-axis, height is along the the z-axis, normals point towards the y-axis in the positive direction.| +||*Down*|Width is along the the z-axis, height is along the the X-axis, normals point towards the y-axis in the negative direction.| +||*Forward*|Width is along the the y-axis, height is along the the X-axis, normals point towards the z-axis in the positive direction.| +||*Backward*|Width is along the the X-axis, height is along the the y-axis, normals point towards the z-axis in the negative direction.| +| __Width__ || Set the width of the plane in meters. The default value is 10. The minimum value is 1. | +| __Length__ || Set the length of the plane in meters. The default value is 10. The minimum value is 1. | +| __Width Segments__ || Set the number of divisions to use for the width of the plane. For example, if you use a value of 3, ProBuilder produces a plane with four "columns". If you specify 3 for both the __Width Segments__ and __Length Segments__, ProBuilder builds a plane with 16 faces. The default value is 3. The minimum value is 0. | +| __Length Segments__ || Set the number of divisions to use for the length of the plane. For example, using a value of 3 produces four "rows". If you specify 2 for both the __Width Segments__ and 1 for the __Length Segments__, ProBuilder builds a plane with six faces. The default value is 3. The minimum value is 0. | diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Prism.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Prism.md new file mode 100644 index 0000000000000000000000000000000000000000..7a5e1a49c7b57c8fe72928075d239ac942f1df63 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Prism.md @@ -0,0 +1,15 @@ +# Prism +A prism is a shape with two identical ends and flat sides. The basic ProBuilder prism is like a three-dimensional triangle, stretched along the z-axis. + + + +You can customize the shape of a prism with these shape properties: + + + + +| **Property:** | **Description:** | +|:-- |:-- | +| __X__ | Set the dimensions in the x-axis of the prism (the base of the triangle) in meters. The default value is 1. The minimum value is 0.01. | +| __Y__ | Set the dimensions in the y-axis of the prism (the height of the prism) in meters. The default value is 1. The minimum value is 0.01. | +| __Z__ | Set the dimensions in the z-axis of the prism (the amount you want to stretch the triangle) in meters. The default value is 1. The minimum value is 0.01. | diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/ProBuilderMesh.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/ProBuilderMesh.md new file mode 100644 index 0000000000000000000000000000000000000000..e44708a0dba53b501ad332227ea45b0a6193a824 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/ProBuilderMesh.md @@ -0,0 +1,18 @@ +# Pro Builder Mesh component + +This component appears on any ProBuilder Mesh GameObject. It displays the **Object Size** of the ProBuilder Mesh in **X**, **Y**, and **Z**. It also allows you to generate lightmap UVs for the Mesh, and customize how ProBuilder generates them. + + + +## Lightmap UVs and their parameters + +To customize and generate lightmap UV parameters for this Mesh, enable the **Lightmap Static** option. A new section appears below the option. + + + + The **Unwrap Parameters** section contains standard UV parameters for [Generating Lightmap UVs](https://docs.unity3d.com/Manual/LightingGiUvs-GeneratingLightmappingUVs.html) on this ProBuilder Mesh. + + Click the **Apply** button to save (or the **Reset** button to discard) the modifications you made to the **Unwrap Parameters** section. + + If your Mesh is missing lightmap UVs, a warning message appears. Click the **Generate Lightmap UVs** button to regenerate the lightmap UVs for this Mesh. The message and the button disappears as soon as ProBuilder regenerates the UVs. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Grow.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Grow.md new file mode 100644 index 0000000000000000000000000000000000000000..fd2c3fb7143e20b8f733851aeac70bfc38bca732 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Grow.md @@ -0,0 +1,21 @@ +#  Grow Selection + +The __Grow Selection__ tool expands the selection outward to adjacent faces, edges, or vertices. + + + +This tool is available in the [vertex, edge, and face modes](modes.md). + +> **Tip:** You can also use this tool with the **Alt/Opt+G** hotkey, or from the ProBuilder menu (**Tools** > **ProBuilder** > **Selection** > **Grow Selection**). + + + +## Grow Selection Options + + + +| **Property:** | **Description:** | +| --------------------- | ------------------------------------------------------------ | +| **Restrict To Angle** | Enable this property to grow the selection only to those faces within a specified angle. | +| **Max Angle** | Set the maximum angle allowed when growing the selection.<br />ProBuilder ignores this property and prevents you from editing it unless the __Restrict to Angle__ property is enabled. | +| **Iterative** | Enable this property to grow the selection one adjacent face at a time, each time you press the **Grow Selection** button.<br />This property is enabled automatically (and is not editable) if the __Restrict to Angle__ property is disabled. | diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Invert.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Invert.md new file mode 100644 index 0000000000000000000000000000000000000000..927b64c15b75e51457022aa5049da4ef2480eee4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Invert.md @@ -0,0 +1,13 @@ +#  Invert Selection + +The __Invert Selection__ tool selects the inverse of the current selection: all unselected elements become selected, while the current selection becomes unselected. + + + +In this example: +* **Left image**: All tiles except the corners are selected. +* **Right image**: the __Invert Selection__ tool changes the selection so that only the corners are selected. + +This tool is available in the [vertex, edge, and face modes](modes.md). + +> **Tip:** You can also use this tool with the **Ctrl/Cmd+Shift+I** hotkey, or from the ProBuilder menu (**Tools** > **ProBuilder** > **Selection** > **Invert Selection**). diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Loop_Edge.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Loop_Edge.md new file mode 100644 index 0000000000000000000000000000000000000000..1c2a8a720e38ca8c4b5c142a7fb9930cee651c89 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Loop_Edge.md @@ -0,0 +1,9 @@ +#  Select Edge Loop + +The __Select Edge Loop__ tool selects an edge loop from each selected edge. An edge loop is a series of edges that are directly connected. + +> **Note:** This tool only works on quads (four-sided polygons), and is only available in [edge mode](modes.md). + + + +> **Tip:** You can also use this tool with the **Alt/Opt+L** hotkey, or from the ProBuilder menu (**Tools** > **ProBuilder** > **Selection** > **Select Loop**). diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Loop_Face.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Loop_Face.md new file mode 100644 index 0000000000000000000000000000000000000000..d019d51417e56d384e5a8019bb315b4bc39217c0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Loop_Face.md @@ -0,0 +1,11 @@ +#  Select Face Loop + +The __Select Face Loop__ selects a face loop from each selected face. + +ProBuilder only considers faces part of a loop if they are quads (contain exactly four sides). Face loops generally run along the Z-axis, while [face rings](Selection_Loop_Ring.md) generally run along the X-axis. + + + +This tool is only available in [face mode](modes.md). + +> ***Tip:*** You can also use this tool with the **Opt/Alt+Shift+L+Double-Click** hotkey, or from the ProBuilder menu (**Tools** > **ProBuilder** > **Selection** > **Select Loop**). diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Rect_Intersect.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Rect_Intersect.md new file mode 100644 index 0000000000000000000000000000000000000000..47ee321892fc072934a225b89866d45fd2cd4184 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Rect_Intersect.md @@ -0,0 +1,18 @@ +#  Rect + +Use the __Rect__ tool to choose whether drag selection should only select elements completely inside the drag rectangle, or also elements that are partially inside the the drag rectangle. + + + +This tool is available only in the [edge and face modes](modes.md). + + + +## Visual cues + +Depending whether you are in [text mode or icon mode](toolbar.md#buttonmode), the button displays the following to indicate what state the tool is in: + +| **Icon mode:** | **Text mode:** | **Description:** | +| :------------------------------------------------------ | ------------------- | ------------------------------------------------------------ | +|  | **Rect: Complete** | Only select elements that are contained entirely within the drag rectangle. | +|  | **Rect: Intersect** | Select elements that are entirely or partially inside the drag-rectangle. | diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Ring_Edge.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Ring_Edge.md new file mode 100644 index 0000000000000000000000000000000000000000..37878aaa827bc30b73960363ef5ac0a5480c4272 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Ring_Edge.md @@ -0,0 +1,11 @@ +#  Select Edge Ring + +The __Select Edge Ring__ tool selects a ring from each selected edge. An edge ring is a series of edges which share faces but are not directly connected. + +> **Note:** This tool only works on quads (four-sided polygons), and is only available in [edge mode](modes.md). + + + +> **Tip:** You can also use this tool with the **Alt/Opt+R** hotkey, or from the ProBuilder menu (**Tools** > **ProBuilder** > **Selection** > **Select Ring**). + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Ring_Face.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Ring_Face.md new file mode 100644 index 0000000000000000000000000000000000000000..be54d53ba9a2bd0abd39898899b4f4446173aafd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Ring_Face.md @@ -0,0 +1,11 @@ +#  Select Face Ring + +Selects a face ring from each selected face. + +ProBuilder only considers faces part of a ring if they are quads (contain exactly four sides). Face rings generally run along the X-axis, whereas [face loops](Selection_Loop_Face.md) generally run along the Z-axis. + + + +This tool is available only in [face mode](modes.md). + +> **Tip:** You can also use this tool with the **Ctrl/Cmd+Shift+L+Double-Click** hotkey, or from the ProBuilder menu (**Tools** > **ProBuilder** > **Selection** > **Select Ring**). diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_SelectByMaterial.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_SelectByMaterial.md new file mode 100644 index 0000000000000000000000000000000000000000..04857bbacd51f71f55f78f06f7924067830b7cef --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_SelectByMaterial.md @@ -0,0 +1,19 @@ +#  Select by Material + +The __Select by Material__ tool selects all faces on this object which have the same Material as the selected face(s). You can also extend the selection to other GameObjects if you disable the **Current Selection** option. + + + +This tool is useful if you want to replace all Materials on a complex object. It is only available in [face mode](modes.md). + +> **Tip:** You can also access this tool from the ProBuilder menu (**Tools** > **ProBuilder** > **Selection** > **Select Material**). + + + +## Select by Material Options + +By default, the **Current Selection** option is enabled. This means that ProBuilder only extends the selection to other faces on the currently selected GameObject. + +Disable this option if you want to select every face that has a matching Material on any GameObject in the Scene. This is particularly useful if you want to replace this Material with another on every GameObject in the Scene at once. + + \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_SelectByVertexColor.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_SelectByVertexColor.md new file mode 100644 index 0000000000000000000000000000000000000000..a5daec912d4ceac588f12c215f35e389d6f693e2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_SelectByVertexColor.md @@ -0,0 +1,22 @@ +#  Select by Colors + +The __Select by Vertex Color__ selects all faces on this object which have the same vertex color as the selected face. You can also extend the selection to other GameObjects if you disable the **Current Selection** option. + +Even if the vertex color isn't currently visible (for example, if it has a Material that doesn't show colors, like the checkerboard Material), the colored faces are still selected. + + + +This tool is useful for grouping out sections of your Mesh with different vertex colors. It is available in the [vertex, edge, and face modes](modes.md). + +> **Tip:** You can also access this tool from the ProBuilder menu (**Tools** > **ProBuilder** > **Selection** > **Select Vertex Color**). + +## Select by Colors Options + +By default, the **Current Selection** option is enabled. This means that ProBuilder only extends the selection to other faces on the currently selected GameObject. + +Disable this option if you want to select every face with the currently selected vertex color on any GameObject in the Scene. + + + + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_SelectHidden.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_SelectHidden.md new file mode 100644 index 0000000000000000000000000000000000000000..eaa50ddd394c7d24b1fe9bd0dc9e96e96d3208d0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_SelectHidden.md @@ -0,0 +1,14 @@ +#  Select Hidden + +Use the __Select Hidden__ tool to determine whether ProBuilder selects or ignores hidden elements when you perform a drag-selection. Clicking the __Select Hidden__ button to switch between the two states: __On__ or __Off__. + + + +Depending whether you are in [text mode or icon mode](toolbar.md#buttonmode), the button displays the following to indicate what state the tool is in: + +| **Icon mode:** | **Text mode:** | **Description:** | +| :----------------------------------------------------------- | --------------- | ------------------------------------------------------------ | +|  | **Hidden: On** | Drag selection selects all [elements](modes.md), regardless of their visibility. | +|  | **Hidden: Off** | Drag selection ignores any [elements](modes.md) that you can't currently see. | + +This tool is available in all [edit modes](modes.md). diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_SelectHole.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_SelectHole.md new file mode 100644 index 0000000000000000000000000000000000000000..99eef6341d207486e1dd6746624227894764e847 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_SelectHole.md @@ -0,0 +1,12 @@ +#  Select Holes + +The __Select Holes__ tool selects all elements along the selected open vertex or edge. A *hole* is like a removed face. This tool is a useful shortcut for selecting all the edges around a missing face. + +If you have no elements selected, this tool automatically selects *all* holes in the selected object. + + + +This tool also tells you how many holes exist in the Mesh. It is only available in the [vertex and edge modes](modes.md). + +> **Tip:** You can also access this tool from the ProBuilder menu (**Tools** > **ProBuilder** > **Selection** > **Select Hole**). + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Shift.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Shift.md new file mode 100644 index 0000000000000000000000000000000000000000..59c9412dfacded7df3083553081874e0638656bc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Shift.md @@ -0,0 +1,17 @@ +#  Shift + +Use the __Shift__ tool to change what happens to the selection when you **Shift+Click** an element or hold **Shift** while drag-selecting. Click the __Shift__ button to switch between the three states: __Add__, __Remove__, or __Difference__. + + + + +Depending whether you are in [text mode or icon mode](toolbar.md#buttonmode), the button displays the following to indicate what state the tool is in: + +| **Icon mode:** | **Text mode:** | **Description:** | +| :----------------------------------------------------------- | --------------------- | ------------------------------------------------------------ | +|  | **Shift: Add** | __Shift+Click__ adds the selected elements to the current selection. | +|  | **Shift: Subtract** | __Shift+Click__ removes the selected elements from the current selection. | +|  | **Shift: Difference** | __Shift+Click__ toggles the selection - so it adds unselected elements, and removes selected elements. | + +This tool is available in the [vertex, edge, and face modes](modes.md). + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Shrink.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Shrink.md new file mode 100644 index 0000000000000000000000000000000000000000..e3c8ed42986f6758834fc8a17315568b27365555 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_Shrink.md @@ -0,0 +1,13 @@ +#  Shrink Selection + +The __Shrink Selection__ tool removes the elements on the perimeter of the current selection. It performs the opposite action of the [Grow Selection](Selection_Grow.md) tool. + + + +In this example: +* **Left image**: Five faces are selected. +* **Right image**: The __Shrink Selection__ reduces the selection down to just the central square. + +This tool is available in the [vertex, edge, and face modes](modes.md). + +> **Tip:** You can also use this tool with the **Alt/Opt+Shift+G** hotkey, or from the ProBuilder menu (**Tools** > **ProBuilder** > **Selection** > **Shrink Selection**). diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_SmoothingGroup.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_SmoothingGroup.md new file mode 100644 index 0000000000000000000000000000000000000000..9e278845539a342eae0e8a24b1be5ccbff2aff9f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Selection_SmoothingGroup.md @@ -0,0 +1,18 @@ +#  Select Smoothing Group + +Use the **Select Smoothing Group** tool inside the [Smooth Group Editor window](smoothing-groups.md) to select faces matching the current smoothing group. + +To use this tool: + +1. Open the **Smooth Group Editor** window. + +2. Click any face with a smoothing group defined. + + > ***Note:*** The tool doesn't shrink the current selection, so it's best to start with as small a selection as possible. + +3. Click the  Select Smoothing Group button. + +> ***Tip:*** You can also access this tool from the ProBuilder menu (**Tools** > **ProBuilder** > **Selection** > **Select Smoothing Group**). + + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Sphere.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Sphere.md new file mode 100644 index 0000000000000000000000000000000000000000..91d93dfb6a2f77e6090272e46be2a0c8af84dbb7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Sphere.md @@ -0,0 +1,24 @@ +# Sphere +A sphere is a perfectly round 3D object. In ProBuilder, a sphere is actually a polygon with 42 vertices, in which five triangles (faces) share each vertex. + + + + Sphere shape with no subdivisions showing five triangles colored. A wireframe of a default sphere is superimposed on that shape (the same radius but with one subdivision). + + Default sphere shape (one subdivision). + + Sphere with two subdivisions. + + Sphere with three subdivisions. + + Sphere with four subdivisions. + +You can customize the shape of a sphere with these shape properties: + + + + +| **Property:** | **Description:** | +|:-- |:-- | +| __Radius__ | Set the radius (size) of the sphere in meters. The default value is 1. Valid values range from 0.01 to 10. | +| __Subdivisions__ | Set the number of times to subdivide each triangle. The default value is 1. Valid values range from 0 to 4.<br /><br />The more subdivisions you create, the smoother the sphere appears. However, remember that each subdivision increases the number of triangles exponentially, which means that it uses a lot more resources to render. | diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Sprite.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Sprite.md new file mode 100644 index 0000000000000000000000000000000000000000..19ad026f61722183e989b1774b59f936397e0af0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Sprite.md @@ -0,0 +1,18 @@ +# Sprite +In ProBuilder, a sprite shape is a [plane](Plane.md) with all values set to 1 unit. + + + +To customize the rotation of the sprite when you first create it, use the __Axis__ property. + + + +|**Property:** ||**Function:** | +|:---|:---|:---| +| __Axis__ || Choose the starting orientation for the plane. Default value is *Up*. | +||*Right*|Width is along the the z-axis, height is along the the y-axis, normals point towards the X-axis in the positive direction.| +||*Left*|Width is along the the y-axis, height is along the the z-axis, normals point towards the X-axis in the negative direction.| +||*Up*|Width is along the the X-axis, height is along the the z-axis, normals point towards the y-axis in the positive direction.| +||*Down*|Width is along the the z-axis, height is along the the X-axis, normals point towards the y-axis in the negative direction.| +||*Forward*|Width is along the the y-axis, height is along the the X-axis, normals point towards the z-axis in the positive direction.| +||*Backward*|Width is along the the X-axis, height is along the the y-axis, normals point towards the z-axis in the negative direction.| diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Stair.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Stair.md new file mode 100644 index 0000000000000000000000000000000000000000..3ee64d0ae5bdc6e7a29099afbbd4c68b6578623c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Stair.md @@ -0,0 +1,18 @@ +# Stair +You can create straight stairs, curved stairs, long stairs, stairs with a lot of steps, wide stairs, and stairs without side polygons. + + + +You can customize the shape of your stairs with these shape properties: + + + + +| **Property:** | **Description:** | +|:-- |:-- | +| __Steps__ | Set the number of steps to define on the stairs. The default value is 6. Valid values range from 2 to 64. | +| __Build Sides__ | Enable this option to draw polygons on the sides of the stairs. This is enabled by default. You can disable this option if the sides of your stairs are not visible to the camera (for example, if your stairs are built into a wall). | +| __Curvature__ | Set the degree of curvature on the stairs in degrees, where 0 makes straight stairs and 360 makes stairs in a complete circle. Keep in mind that you might need to increase the number of stairs to compensate as you increase this value. The default value is 0. Valid values range from 0 to 360. | +| __Width__ or __X__ | Set the width (dimensions in the x-axis) of the stairs in meters. You can use the __Width__ slider or enter an exact value in the __X__ text box. The default value is 2. Valid values range from 0.01 to 10. | +| __Height__ or __Y__ | Set the height (dimensions in the y-axis) of the stairs in meters. You can use the __Height__ slider or enter an exact value in the __Y__ text box. The default value is 2.5. Keep in mind that you may need to increase the number of stairs to compensate as you increase this value. Valid values range from 0.01 to 10. | +| __Depth__ or __Z__ | Set the depth (dimensions in the z-axis) of the stairs in meters. You can use the __Depth__ slider or enter an exact value in the __Z__ text box. Keep in mind that you may need to increase the number of stairs to compensate as you increase this value. The default value is 4. Valid values range from 0.01 to 10. | diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/TableOfContents.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/TableOfContents.md new file mode 100644 index 0000000000000000000000000000000000000000..88bb977e70e2084108ee6d2a9778ead99480b2c8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/TableOfContents.md @@ -0,0 +1,131 @@ +* [About ProBuilder](index) + * [Getting started](overview) + * [Edit modes](modes) + * [Installing ProBuilder](installing) + * [Helpful links](links) +* [Interacting with ProBuilder](overview-ui) + * [The Edit mode toolbar](edit-mode-toolbar) + * [The ProBuilder toolbar](toolbar) + * [Tool panels](tool-panels) + * [Selection tools](selection-tools) + * [Object tools](object-actions) + * [Vertex tools](vertex) + * [Edge tools](edge) + * [Face tools](face) + * [The ProBuilder menu](menu) + * [ProBuilder Window](menu-open) + * [Editors](menu-editors) + * [Dimensions Overlay](menu-dimover) + * [Selection](menu-selection) + * [Interaction](menu-interaction) + * [Object](menu-object) + * [Geometry](menu-geometry) + * [Materials](menu-materials) + * [Vertex Colors](menu-vertexcolors) + * [Experimental](menu-experimental) + * [Repair](menu-repair) + * [Debug](menu-debug) + * [Actions](menu-actions) + * [ProBuilder hotkeys](hotkeys) +* [Creating Meshes](workflow-create) + * [Pre-defined shape](workflow-create-predefined) + * [Polygon shape](workflow-create-polyshape) + * [Bezier shape](workflow-create-bezier) +* [Editing Meshes](workflow-edit) + * [Common editing tasks](workflow-edit-tasks) + * [Modeling tips for novices](workflow-edit-tips) + * [Setting vertex colors](workflow-vertexcolors) +* [Materials, Shaders, Textures, and UVs](workflow-texture-mapping) + * [Creating and applying Materials](workflow-materials) + * [Mapping Textures with UVs](workflow-uvs) + * [Smoothing hard edges](workflow-edit-smoothing) +* [Customizing ProBuilder](customizing) +* [Exporting and re-importing](workflow-exporting) +* [Tool reference](ref_tools) + * [Bevel - Edges](Edge_Bevel) + * [Bevel - Faces](Face_Bevel) + * [Bridge Edges](Edge_Bridge) + * [Center Pivot](CenterPivot) + * [Collapse Vertices](Vert_Collapse) + * [Conform Normals - Faces](Face_ConformNormals) + * [Conform Normals - Objects](Object_ConformNormals) + * [Connect Edges](Edge_Connect) + * [Connect Vertices](Vert_Connect) + * [Delete Faces](Face_Delete) + * [Detach Faces](Face_Detach) + * [Export](Object_Export) + * [Extrude Edges](Edge_Extrude) + * [Extrude Faces](Face_Extrude) + * [Fill Hole - Edges](Edge_FillHole) + * [Fill Hole - Vertices](Vert_FillHole) + * [Flip Face Edge](Face_FlipTri) + * [Flip Face Normals](Face_FlipNormals) + * [Flip Normals - Objects](Object_FlipNormals) + * [Freeze Transform](Freeze_Transform) + * [Grow Selection](Selection_Grow) + * [Insert Edge Loop](Edge_InsertLoop) + * [Inset](Face_Inset) + * [Invert Selection](Selection_Invert) + * [Lightmap UVs](Object_LightmapUVs) + * [Merge Faces](Face_Merge) + * [Merge Objects](Object_Merge) + * [Mirror Objects](Object_Mirror) + * [Orientation](HandleAlign) + * [ProBuilderize](Object_ProBuilderize) + * [Rect](Selection_Rect_Intersect) + * [Select by Colors](Selection_SelectByVertexColor) + * [Select by Material](Selection_SelectByMaterial) + * [Select Edge Loop](Selection_Loop_Edge) + * [Select Edge Ring](Selection_Ring_Edge) + * [Select Face Loop](Selection_Loop_Face) + * [Select Face Ring](Selection_Ring_Face) + * [Select Smoothing Group](Selection_SmoothingGroup) + * [Select Hidden](Selection_SelectHidden) + * [Select Holes](Selection_SelectHole) + * [Set Collider](Entity_Trigger#Collider) + * [Set Pivot - Edges](Edge_SetPivot) + * [Set Pivot - Faces](Face_SetPivot) + * [Set Pivot - Vertices](Vert_SetPivot) + * [Set Trigger](Entity_Trigger) + * [Shift](Selection_Shift) + * [Shrink Selection](Selection_Shrink) + * [Split Vertices](Vert_Split) + * [Subdivide Edges](Edge_Subdivide) + * [Subdivide Faces](Face_Subdivide) + * [Subdivide Object](Object_Subdivide) + * [Triangulate Faces](Face_Triangulate) + * [Triangulate - Objects](Object_Triangulate) + * [Weld Vertices](Vert_Weld) +* [Component and window reference](ref_windows) + * [Lightmap UV Editor window](lightmap-uv) + * [Material Editor window](material-tools) + * [Poly Shape component](polyshape) + * [Positions Editor window](vertex-positions) + * [Pro Builder Mesh component](ProBuilderMesh) + * [ProBuilder Preferences window](preferences) + * [Shape Tool window](shape-tool) + * [Arch](Arch) + * [Cone](Cone) + * [Cube](Cube) + * [Custom](Custom) + * [Cylinder](Cylinder) + * [Door](Door) + * [Pipe](Pipe) + * [Plane](Plane) + * [Prism](Prism) + * [Sphere](Sphere) + * [Sprite](Sprite) + * [Stair](Stair) + * [Torus](Torus) + * [Smooth Group Editor window](smoothing-groups) + * [UV Editor window](uv-editor) + * [UV Editor toolbar](uv-editor-toolbar) + * [UV drop-down menu](uv_dropdown) + * [Actions Panel: Auto UV Mode](auto-uvs-actions) + * [Actions Panel: Manual UV Mode](manual-uvs-actions) + * [Vertex Colors window](vertex-colors) +* [Troubleshooting](faq) +* [Experimental features](experimental) + * [Bezier Shape component](bezier) + * [Boolean window](boolean) +* [Scripting API overview](api) diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Torus.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Torus.md new file mode 100644 index 0000000000000000000000000000000000000000..8094bc6ca7a15658b3aff5eeb4796917504509bb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Torus.md @@ -0,0 +1,31 @@ +# Torus +A torus is a 3D shape formed by a small circle that rotates around a bigger circle. It usually looks like a circular ring, or a donut. + + + + Default torus (smooth) + + Torus with 180-degree horizontal circumference + + Torus with 180-degree vertical circumference + + Torus without smoothing + +You can customize the shape of a torus with these shape properties: + + + + +| **Property:** | **Description:** | +|:-- |:-- | +| __Rows__ | Set the complexity of the Mesh, together with the __Columns__ value. You can enter a value from 3 to 32. The higher the value, the smoother the shape, but at the cost of more polygons to calculate. The default value is 16. | +| __Columns__ | Set the complexity of the Mesh, together with the __Rows__ value. You can enter a value from 3 to 64. The higher the value, the smoother the shape, but at the cost of more polygons (and therefore more computation). The default value is 24. | +| __Define Inner / Out Radius__ | Enable this option if you want to specify the value for the inner radius. Disable this option if you want to specify the value for the radius of the tube instead. <br /><br />When you enable this option, the __Radius__ property becomes the __Outer Radius__ property, and the __Tube Radius__ property becomes the __Inner Radius__ property. | +| __Outer Radius__ | Set the amount of the outer radius in meters. Default value is 1.<br /><br />**Note:** This property is only available when the __Define Inner / Out Radius__ property is enabled. | +| __Inner Radius__ | Set the amount of the inner radius in meters. Valid values range from 0.0009999871 to the __Outer Radius__ value. Default value is 0.4.<br /><br />**Note:** This property is only available when the __Define Inner / Out Radius__ property is enabled. | +| __Radius__ | Set the radius of the entire torus in meters. Default value is 1.<br /><br />**Note:** This property is only available when the __Define Inner / Out Radius__ property is disabled. | +| __Tube Radius__ | Set the radius of the tube itself in meters. Valid values range from 0.01 to the __Radius__ value. The default value is 0.3.<br /><br />**Note:** This property is only available when the __Define Inner / Out Radius__ property is disabled. | +| __Horizontal Circumference__ | Set the degree of the torus's circumference. For example, if you set this value to 180 (as the  image demonstrates), it looks like someone cut half of the torus away (like leaving half of a donut). Default value is 360 (full torus). | +| __Vertical Circumference__ | Set the degree of the tube's circumference. For example, if you set this value to 180 (as the  image demonstrates), it looks like a half-pipe. Default value is 360 (full tube). | +| __Smooth__ | Enable this option to smooth the edges of the polygons (the default). | + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_Collapse.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_Collapse.md new file mode 100644 index 0000000000000000000000000000000000000000..b72dc06d1d8fc9256fc8205312686e6221d627ba --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_Collapse.md @@ -0,0 +1,21 @@ +#  Collapse Vertices + +The __Collapse Vertices__ tool collapses all selected vertices to a single point, regardless of distance. + + + +> **Tip:** You can also use this tool with the **Alt/Opt+C** hotkey. + +ProBuilder uses the **Collapse To First** option to decide whether to collapse the vertices to a central point, or to the first selected vertex. + +## Collapse Vertices Options + + + +The **Collapse Vertices** tool determines where to locate the collapsed vertex in this way: + +- If **Collapse To First** option is enabled, ProBuilder uses the location of the vertex that you selected first. +- Otherwise, ProBuilder calculates the center position between all selected vertices to use as the new location. + +By default, the **Collapse To First** option is disabled, so ProBuilder uses the center position as in the example image above. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_Connect.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_Connect.md new file mode 100644 index 0000000000000000000000000000000000000000..76c4a4c0c8f259c383a48cf945bb5c59f9656745 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_Connect.md @@ -0,0 +1,13 @@ +#  Connect Vertices + +The __Connect Vertices__ tool creates a new edge that connects the selected vertices. + + + + + +> **Tip:** You can also use this tool with the **Alt/Opt+E** hotkey. + +If you select more than two vertices, ProBuilder creates as many new edges as possible, and adds extra vertices where necessary in order to keep the geometry valid. For example, if you connect three vertices around a quad, ProBuilder creates a new vertex in the middle to support the three new edges. + +You can connect across several faces as long as they share a selected vertex. \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_FillHole.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_FillHole.md new file mode 100644 index 0000000000000000000000000000000000000000..cddc843825987366a96321eeeab13abd5906f231 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_FillHole.md @@ -0,0 +1,16 @@ +#  Fill Hole (Vertices) + +The __Fill Hole__ tool creates a new face that fills any holes that touch the selected vertices. + + + + + +## Fill Hole Options + + + +Enable the __Fill Entire Hole__ option to fill the entire Mesh opening. This is enabled by default. + +If you disable this option, ProBuilder tries to build a Mesh between the selected open vertices. For example, if you have a missing quad, you can select any three adjacent vertices in order to create a triangular polygon that covers half of the hole. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_SetPivot.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_SetPivot.md new file mode 100644 index 0000000000000000000000000000000000000000..a78246f4c4bac44e4ca5b339312a06f4018d5659 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_SetPivot.md @@ -0,0 +1,14 @@ +#  Set Pivot (Vertices) + +Use the __Set Pivot__ tool to move the pivot point of this Mesh to the average center of the selected vertices. + +> **Tip:** You can also use this tool with the **Ctrl/Cmd+J** hotkey. + + + + + +In this example: +* **Left panel**: The pivot point of the log is at the end corner of the cylinder. +* **Middle panel**: The vertices on the end are selected, so the Set Pivot tool changes the pivot to the center of those end vertices. +* **Right panel**: The pivot point is now in the center of the cylinder end, even when in Object editing mode. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_Split.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_Split.md new file mode 100644 index 0000000000000000000000000000000000000000..f8667a4e7352ada356ac10e6219494d85938c6e7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_Split.md @@ -0,0 +1,10 @@ +#  Split Vertices + +The __Split Vertices__ tool splits a vertex into individual vertices (one for each adjacent face) so that you can move the faces independently. + + + +> **Note:** When a vertex splits, the newly separated vertices remain in place. This image only shows the vertices apart as a demonstration, to illustrate that the original vertex became four. + +> **Tip:** You can also use this tool with the **Alt/Opt+X** hotkey. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_Weld.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_Weld.md new file mode 100644 index 0000000000000000000000000000000000000000..8ce406f0a8b914f5bc305548113d92ad8f8c2e67 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/Vert_Weld.md @@ -0,0 +1,16 @@ +#  Weld Vertices + +The __Weld Vertices__ tool merges selected vertices within a specific distance of one another. You can set this distance with the **Weld Distance** option. + + + +> **Tip:** You can also use this tool with the **Alt/Opt+V** hotkey. + +## Weld Vertices Options + + + +ProBuilder uses the **Weld Distance** value to determine whether to weld any two vertices together. For example, you can use a very low number (such as the default value, **0.001**) to reduce vertices on a Mesh that are virtually occupying the same space. + +With higher numbers, more vertices fit the criterion of *close enough to weld*. However, if you use a fairly low value, you can select more vertices than you intend to weld and still weld selected vertices that are close together. For example, in the image above, you could select all of the vertices and still achieve the same effect by using a **Weld Distance** of **0.25**. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/api.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/api.md new file mode 100644 index 0000000000000000000000000000000000000000..6829637d6f993770001468bdac2549174bfa0da5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/api.md @@ -0,0 +1,79 @@ +# About the ProBuilder Scripting API + +ProBuilder provides a Scripting API for C# which you can use to extend the ProBuilder tools and windows. It includes these namespaces: + +- [UnityEditor.ProBuilder](../api/UnityEditor.ProBuilder.html) provides classes and enums for Unity editor integration. Use them to extend ProBuilder menus, windows, toolbars, and Mesh operations that are only available through the ProBuilder windows and tools. +- [UnityEngine.ProBuilder](../api/UnityEngine.ProBuilder.html) provides classes, structs, and enums for compiling meshes. Use them to access a lot of core ProBuilder functionality, such as creating Meshes, dealing with events, and some math functions. +- [UnityEngine.ProBuilder.MeshOperations](../api/UnityEngine.ProBuilder.MeshOperations.html) provides classes for Mesh editing. Use them to manipulate ProBuilder Meshes, including topology and I/0 operations. + +All Mesh creation and editing functionality is restricted to the `UnityEngine.ProBuilder` and +`UnityEngine.ProBuilder.MeshOperations` libraries, which are both available at run time. + +ProBuilder stores Mesh data in a component ([ProBuilderMesh](../api/UnityEngine.ProBuilder.ProBuilderMesh.html)) and compiles it to a +[UnityEngine.Mesh](https://docs.unity3d.com/ScriptReference/Mesh.html) object as necessary. + +`ProBuilderMesh` stores the following Mesh information: + +- Positions +- UVs +- Faces + - Triangles + - Material + - Smoothing group + - Auto/Manual UVs + + **Note:** ProBuilder can automatically UV unwrap triangles on a per-face basis. You can toggle this feature with the [Face](../api/UnityEngine.ProBuilder.Face.html) class. In addition, users can unwrap faces manually. + +- Tangent (if user set) +- UV3/4 (if user set) +- Colors +- Shared indices (also called common vertices) + +Normals, tangents, collisions, and UVs are calculated as necessary. + +## Create a Mesh + +This example demonstrates how to build a simple quad with the ProBuilder API (not with the [ShapeGenerator](../api/UnityEngine.ProBuilder.ShapeGenerator.html) class): + +```c# +// Create a new quad facing forward. +ProBuilderMesh quad = ProBuilderMesh.Create( + new Vector3[] { + new Vector3(0f, 0f, 0f), + new Vector3(1f, 0f, 0f), + new Vector3(0f, 1f, 0f), + new Vector3(1f, 1f, 0f) + }, + new Face[] { new Face(new int[] { 0, 1, 2, 1, 3, 2 } ) +} ); +``` + + + +## Modify a Mesh + +Modifying a ProBuilder Mesh is a bit different from modifying a Unity Mesh: instead of working with [MeshFilter.sharedMesh](https://docs.unity3d.com/ScriptReference/MeshFilter-sharedMesh.html) you work with the ProBuilder representation of the Mesh: [ProBuilderMesh](../api/UnityEngine.ProBuilder.ProBuilderMesh.html). + +The basics are the same: Set vertex positions, modify triangles (faces in ProBuilder), then rebuild the mesh. For example, to move the vertices up on that quad from the previous example: + +```c# +// Move vertex positions up +Vertex[] vertices = quad.GetVertices(); +for(int i = 0; i < quad.vertexCount; i++) + vertices[i] += Vector3.one; + +// Rebuild the triangle and submesh arrays, and apply vertex positions & submeshes to `MeshFilter.sharedMesh` +quad.SetVertices(vertices); +quad.Rebuild(); + +// Recalculate UVs, Normals, Tangents, Collisions, then apply to Unity Mesh. +quad.Refresh(); + +// If in editor, generate UV2 and collapse duplicate vertices with +EditorMeshUtility.Optimize(quad, true); + +// If at runtime, collapse duplicate vertices with +MeshUtility.CollapseSharedVertices(quad); +``` + +Note that you should never directly modify the `MeshFilter.sharedMesh`. ProBuilder controls updating the Unity Mesh with [ProBuilderMesh::ToMesh](../api/UnityEngine.ProBuilder.ProBuilderMesh.html#UnityEngine_ProBuilder_ProBuilderMesh_ToMesh_MeshTopology_) and [ProBuilderMesh::Refresh](../api/UnityEngine.ProBuilder.ProBuilderMesh.html#UnityEngine_ProBuilder_ProBuilderMesh_Refresh_UnityEngine_ProBuilder_RefreshMask_) functions. \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/auto-uvs-actions.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/auto-uvs-actions.md new file mode 100644 index 0000000000000000000000000000000000000000..0fc16e07ea2364a2df603ed11e3631d32e1e9a40 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/auto-uvs-actions.md @@ -0,0 +1,140 @@ +# Actions panel: Auto UV Mode + +In Auto mode, the **Actions** panel displays the **UV Mode: Auto** label and the settings for automatic texture mapping. To access this panel, click the **Convert to Auto** button from the [Actions panel in Manual UV Mode](manual-uvs-actions.md). + +The Auto mode provides the following tools to help you with texture mapping: + +* The [Tiling & Alignment](#Alignment) section defines the Texture's basic layout. +* The [Transform](#Transform) tools allow you to set the position, orientation, and scaling in U and V. +* The [Special](#Special) section provides settings for changing UV direction. +* The [Texture Groups](#Groups) section helps you manage tiling across multiple faces using Texture groups. +* Click the **Reset UVs** button when you want to clear any edits you made on the selected face(s). This can be very useful, especially if you are just learning how to use the ProBuilder texture mapping tools. + + + +To switch back to the **Actions** panel in **Manual UV Mode** and convert all selected faces to [use manual UVs](auto-uvs-actions.md), click the **Convert to Manual** button. + +> **Tip:** When you convert from Auto UVs to Manual there is no loss of resolution. However, if you modify vertices or edges individually in Manual mode, those changes don't transfer over to Auto mode. + +These settings are interconnected: if you change a **Transform** setting, it might affect something you previously set under the **Tiling & Alignment** section. For example, the **Anchor** refers to a location on the original UV face that has a **Tiling** value of 1. If you change the **Tiling** (scale) value, you might need to readjust the **Offset** to compensate. + + + +<a name="Alignment"></a> + +## Tiling & Alignment + +Use the **Fill Mode** and **Anchor** properties to define how you want the image to appear across the selected face(s). These are basic guidelines for ProBuilder to be able to manage the Texture projection automatically. For more precise controls, use the [Manual tools](auto-uvs-actions.md) instead. + +### Fill Mode + +The **Fill Mode** defines how to treat the UV image; whether to repeat it (to create a tile effect), stretch it, or fit it along the U or V axis. + + + +|**Value:** |**Function:** | +|:---|:---| +|__Tile__ |Continuously tile (repeat) the UVs across the object. | +|__Fit__ |Uniformly scale UVs to size. | +|__Stretch__ |Expand the selection on all sides to fill space. | + +> **Note:** Certain configurations on the [Transform](#Transform) and [Special](#Special) settings can neutralize the effect of the **Fill Mode**. For example, if you use the **Stretch** mode and you reduce the **Tiling** value (scale up the UV face), the UV might no longer show the entire image. + + + +### Anchor + +Define where on the UV face the texture image appears. ProBuilder projects the image from the selected anchor point, so if you set it to **Lower Left**, the image projects up and to the right. + +By default this is set to **None**, but you can select any of the following points: + + + +| | | | +| ---- | ----- | ------ | +|  __Upper Left__ |  __Upper Center__ |  __Upper Right__ | +| __Middle Left__ | __Middle Center__ | __Middle Right__| +| __Lower Left__ | __Lower Center__ | __Lower Right__ | + + +Anchor points represent a point on the original UV face (before you scale or tile it). + + +<a name="Transform"></a> + +## Transform + +The **Transform** section allows you to set precise values for the 2-dimensional size, rotation, and scale of the UV faces relative to the Texture image. When you modify these values, the changes appear in the UV Viewer. + +Alternatively, you can also manipulate the **Offset**, **Rotation**, and **Tiling** directly in the UV Viewer with the standard Unity Transform controls. + +> **Note:** You can only change transform values for a  face. If you try to switch to the  vertex or  edge [UV editing modes](edit-mode-toolbar.md), the UV Editor changes the Actions panel to [Manual UV Mode](manual-uvs-actions.md). + +### Offset + +Enter exact offset **X** and **Y** values, or drag the input fields to adjust. + +The offset value represents an offset from the **Anchor** position along the U or V axis. + +### Rotation + +Enter exact rotation values here in degrees (0-360), or drag the slider to adjust. + +Don't forget that what you are rotating is the UV face, not the image. As you rotate the UV face to the right in the UV Viewer, the image projected on the Mesh face in the Scene view actually rotates to the left. + +### Tiling + +There are three ways to change the size of a UV face in the UV Editor: + +* Enter exact scale values in the **X** and **Y** properties for each axis. These values represent the size of the UV face relative to the Texture. For example, when you enter a value of 0.5 in **Y**, this halves the height of the UV face on the image, whereas a value of 2 in **X** doubles the width. +* Click the appropriate preset button to set how many times you want the Texture image to appear across the UV face. For example, the **.5** preset only displays half the image: in the viewer, the UV face appears twice as large against the image, but in the Scene view, you can only see half of the image on the Mesh face. Conversely, using the **4** preset results in the image tiling four times across the Mesh face in the Scene view, so the UV face in the Viewer appears to be a quarter the size of the image. +* Click and drag on the scale gizmo to scale the UV face directly in the UV Viewer. + +In all three cases, ProBuilder updates the **X** and **Y** **Tiling** values to reflect any changes. + + + +<a name="Special"></a> + +## Special + +These options help you control the Texture direction. + +### World Space + +Enable this option to align UVs to the World. This ensures Textures on same-angle faces always line up, but UVs do not stay put when you move the object. + +### Flip U + +Enable this option to flip the UVs horizontally. + +### Flip V + +Enable this option to flip the UVs vertically. + +### Swap U/V + +Enable this option to invert the horizontal and vertical UVs. + + + +<a name="Groups"></a> + +## Texture Groups + +Use Texture Groups to keep consistent tiling across several faces as if they were one. Each face in the group must share an edge with at least one other face in the group. + +### Texture Group Number + +Displays the Texture Group ID of the currently selected face, or 0 if the face doesn't belong to a Texture Group. + +You can also assign the currently selected face(s) to an existing group if you already know the group's number. To do this, enter it in the **Texture Group Number** box. + +### Group Selected Faces + +Click the **Group Selected Faces** button to create a new Texture Group from the selected face(s). + +### Select Texture Group + +Click the **Select Texture Group** button to select all faces in the the group. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/bezier.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/bezier.md new file mode 100644 index 0000000000000000000000000000000000000000..d9917ff61044496ebd72d1325e365e96bfa9ade6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/bezier.md @@ -0,0 +1,92 @@ +#  Bezier Shape component + +> **Warning:** Bezier shapes are experimental, meaning that they are still under development, and might reduce ProBuilder's stability. Please use with caution. + +After you [create a Bezier Shape](workflow-create-bezier.md), you can still modify the shape as long as you are in Bezier Shape editing mode. To toggle the Bezier Shape editing mode on and off, use the **Edit(ing) Bezier Shape** button. + + + + [Curve property values](#curve) + + [Tangent modes](#tangent) + + [Shape property values](#shape) + + + +> **Note:** You can modify Mesh elements on the Bezier Shape Mesh with the standard ProBuilder editing tools. However, each time you re-enter Bezier Shape editing mode, you lose any element changes. + + + +## Editing a Bezier Shape + +When you are in Bezier Shape editing mode, the **Bezier Shape** component in the Inspector displays the **Editing Bezier Shape** button. If you are not in Bezier Shape editing mode, the **Edit Bezier Shape** button appears instead. + +To enter the Bezier Shape editing mode, click the **Edit Bezier Shape** button. To exit out of the Bezier Shape editing mode, click the button (**Editing Bezier Shape**) again. + +In Bezier Shape editing mode, you can modify the shape. To do this, perform the following tasks in the Scene view: + +* Click and drag existing control points to move them around. When you select control points, translation and rotation handles appear for more precise control. +* Click existing control points to select them, then use **Backspace** (Windows) or **Delete** (macOS) to remove the points from the shape. +* Click along the bezier path line to add new control points. + +You can also use the controls in the **Bezier Shape** component in the Inspector to: + +- Enter [Curve property values](#curve) (position, rotation, tangent) directly. +- Click the __Clear Points__ button to clear all control points on the Mesh. +- Click the __Add Point__ button to add a new control point at the end of the bezier path. +- Change the [Tangent mode](#tangent) to use for the handles. +- Customize the overall look of the shape by setting the [Shape property values](#shape). + + + +<a name="curve"></a> + +## Curve property values + +Use these property values to set precise values for the curve's position, rotation, and tangent handles. + + + +| **Property:** | **Description:** | +| :-------------- | :----------------------------------------------------------- | +| __Position__ | Enter the local position of the selected control point. | +| __Tan. In__ | Enter the local position of the selected control tangent *in* handle. | +| __Tan. Out__ | Enter the local position of the selected control tangent *out* handle. | +| __Rotation__ | Enter the additional rotation to be applied to the vertices of the extruded tube. | + + + +<a name="tangent"></a> + +## Tangent modes + +Tangent modes change how much control you have over the tangent handles. + +| **Icon** | **Tangent Mode** | **Description** | +| :-------------------------------------- | :----------------- | :----------------------------------------------------------- | +|  | **Free** | Adjusting one tangent does not affect the other. | +|  | **Aligned** | Adjusting one tangent forces the other tangent's magnitude to match. | +|  | **Mirrored** | Locks tangent handles in a straight line. | + + + +<a name="shape"></a> + +## Shape property values + +Use these property values to set some basic characteristics of the Bezier Shape. + + + +| **Property:** | **Description:** | +| :-------------- | :----------------------------------------------------------- | +| __CloseLoop__ | Enable this option to loop the extruded path back around to the start point. | +| __Smooth__ | Enable this option to use soft normals for the extruded pipe faces.<br />Disable it for hard normals. | +| __Radius__ | Enter the radius of the extruded pipe. | +| __Rows__ | Enter the number of segments to insert between control points when extruding the pipe. | +| __Columns__ | Enter the number of vertices that make up the ring around the radius of the pipe. | + + + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/boolean.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/boolean.md new file mode 100644 index 0000000000000000000000000000000000000000..adb3565cfad35d147a1b47db2f32f56d8fd64663 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/boolean.md @@ -0,0 +1,46 @@ +# Boolean (Experimental) window + +> **Warning:** The Boolean Tool is experimental, meaning that it is still under development, and might reduce ProBuilder's stability. Please use with caution. + +The experimental Boolean Tool provides an interface for creating new Meshes from boolean operations. + + + +Each type of operation takes two ProBuilder Mesh objects as the *left* and *right* inputs. ProBuilder combines the two input Meshes to create a new Mesh shape based on the operation you select. + +You can only access this tool from the menu, because it is experimental: + +1. To open the Boolean (Experimental) window, navigate to Unity's top menu and go to **Tools** > **ProBuilder** > **Experimental** > **Boolean (CSG) Tool**. +2. Set references to the ProBuilder meshes just under the preview windows on the left and the right side. +3. Select one of the boolean operation types from the **Operation** drop-down menu: [Intersection](#intersect), [Union](#union), or [Subtraction](#subtract). +4. Click the **Apply** button. ProBuilder performs the selected operation. + + + +<a name="intersect"></a> + +### Intersection + +The new Mesh matches the shape where the two original Meshes intersected in space. + + + + + +<a name="union"></a> + +### Union + +The new Mesh matches both of the original Meshes but as a single Mesh. + + + + + +<a name="subtract"></a> + +### Subtraction + +The new Mesh is like a Union of the two original Meshes, minus the shape where the two shapes occupy the same space. + + \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/customizing.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/customizing.md new file mode 100644 index 0000000000000000000000000000000000000000..e0bb8d94ba0a0f495c783b98adcf8f64cecede53 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/customizing.md @@ -0,0 +1,82 @@ +# Customizing ProBuilder + +There are a number of ways to customize the way you work with ProBuilder. You can set preferences on the [ProBuilder Preferences](preferences.md) window: + +* [Experimental](preferences.md#experimental): Toggle ProBuilder beta features. +* [General](preferences.md#general): This section contains a variety of settings, many of which control what information appears in the Scene view (see [Interaction and display](#toolbar)). +* [Graphics](preferences.md#graphics): Mostly these settings control the look of Unity (see [Interaction and display](#toolbar)). +* [Mesh Editing](preferences.md#mesh-editing): Define behavior specific to editing Meshes. +* [Mesh Settings](preferences.md#mesh-settings): Define defaults for ProBuilder Meshes (such as default Material, collider type, and shadows). +* [Shortcuts](preferences.md#shortcuts): Change the default key mappings for [ProBuilder hotkeys](hotkeys.md). +* [Toolbar](preferences.md#toolbar): Customize how the toolbars appear. See [below](#toolbar) for details. +* [UV Editor](preferences.md#uv-editor): Change the size of the grid on the [UV Editor](uv-editor.md) window. + +In addition, you can limit the types of [messages](#logging) ProBuilder displays in the Console and whether to write them to a file. + + + +<a name="logging"></a> + +## Logging + +You can choose what types of messages ProBuilder should log, and where the messages should appear. For example, you can set up logs to appear in your Unity console, to a log file locally, or both at the same time. You can also limit the log to only error messages, warning messages, debug messages, basic information, or any combination of these messages types. + +For details, see the documentation on the [Debug menu](menu-debug.md). + + + +<a name="toolbar"></a> + +## Interaction and display + +ProBuilder can display information about the Meshes in your Scene. For example, you can see the dimensions of your Mesh with [Dimensions Overlay](menu-dimover.md). You can also enable [Show Scene Info](preferences.md#info_overlay) to see how many vertices, edges, and faces are in the Scene and which are currently selected. ProBuilder can echo the name of the action you are performing if you enable the [Show Action Notifications](preferences.md#general) preference. + +You can use the Unity color scheme, or disable the [Use Unity Colors](preferences.md#unitycolors) preference to set your own colors for the ProBuilder geometry elements. When disabled, a number of other properties appear that allow you to set the colors for the **Wireframe** and the hover color (**Preselection**). You can also define distinct colors for vertices, edges, and faces in both selected and unselected states. You can also change the size of the points that appear for vertices (**Vertex Size**), and the lines that appear for edges or wireframe (__Line Size__). + +In addition, you can customize several things about any of the toolbars that ProBuilder provides: + +* You can [dock the toolbar or let it float](#dock) over the Unity window. +* You can [resize the toolbar](#resize) both horizontally and vertically. + +You can also choose whether to display [text or icons](toolbar.md#buttonmode) on the ProBuilder toolbar. + +<a name="buttons"></a> + +### Text vs Icon mode + +To define whether ProBuilder displays [text or icons](toolbar.md#buttonmode) for each tool: + +1. Right-click on any empty space in the toolbar. + +  + +2. Choose either **Use Text Mode** or **Use Icon Mode** from the context menu. + +> **Note:** You can also use the __Use Icon GUI__ option in the [ProBuilder Preferences](preferences.md#icongui) window. + + + +<a name="dock"></a> + +### Floating vs Dockable + +To change whether the toolbar [docks or floats](https://docs.unity3d.com/Manual/CustomizingYourWorkspace.html) in the Scene view: + +1. Right-click on any empty space in the toolbar. + +  + +2. Choose either **Open As Floating Window** or **Open As Dockable Window** from the **Window** submenu of the context menu. + + + +<a name="resize"></a> + +### Resizing the toolbar + +To resize the ProBuilder toolbar, click and drag the corners and sides of the toolbar until it is at the right size and shape. + +ProBuilder re-orders the icon or text contents to best fit the window size. + + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/edge.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/edge.md new file mode 100644 index 0000000000000000000000000000000000000000..f98f83ae530d2debb593184d2ac59bd544e9c010 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/edge.md @@ -0,0 +1,56 @@ +# Edge Tools + +This section of the ProBuilder toolbar provides access to ProBuilder editing tools that you can use in the [Edge edit mode](modes.md). + + + +> ***Note:*** Some actions also have extra options or custom settings available. These tool buttons have a special indicator in the top right corner. The documentation for each tool includes information about these options. + +##  Bevel + +Use the **Bevel** tool to split the selected edge(s) into two edges, with a new face between. + +For more information, see the [Bevel](Edge_Bevel.md) tool documentation. + +##  Connect Edges + +Use the **Connect Edges** tool to insert a new edge that connects the centers of each existing selected edge. + +For more information, see the [Connect Edges](Edge_Connect.md) tool documentation. + +##  Extrude Edges + +Use the **Extrude Edges** tool to push a new edge out from each selected edge. + +For more information, see the [Extrude Edges](Edge_Extrude.md) tool documentation. + +##  Bridge Edges + +Use the **Bridge Edges** tool to create a new face between two selected edges. + +For more information, see the [Bridge Edges](Edge_Bridge.md) tool documentation. + +##  Insert Edge Loop + +Use the **Insert Edge Loop** tool to add a new edge loop from the selected edge(s). + +For more information, see the [Insert Edge Loop](Edge_InsertLoop.md) tool documentation. + +##  Fill Hole + +Use the **Fill Hole** tool to create a new face that fills any holes that touch the selected edges. + +For more information, see the [Fill Hole](Edge_FillHole.md) tool documentation. + +##  Subdivide Edges + +Use the **Subdivide Edges** tool to divide the selected edge(s) into multiple edges. + +For more information, see the [Subdivide Edges](Edge_Subdivide.md) tool documentation. + +##  Set Pivot + +Use the **Set Pivot** tool to move the pivot point of this Mesh to the average center of the selected edges. + +For more information, see the [Set Pivot](Edge_SetPivot.md) tool documentation. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/edit-mode-toolbar.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/edit-mode-toolbar.md new file mode 100644 index 0000000000000000000000000000000000000000..0b4c864e4ce6234e39a3c077a6238c9a34a6e6b3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/edit-mode-toolbar.md @@ -0,0 +1,27 @@ +# The Edit Mode toolbar + +Use the Edit Mode toolbar to switch between the four [ProBuilder Edit modes](modes.md): + + + +*  **Object** mode: the standard Unity mode for [selecting and manipulating GameObjects](object-actions.md). +*  **Vertex** mode: the element mode for [selecting and manipulating vertices](vertex.md) (points) on a ProBuilder Mesh. +*  **Edge** mode: the element mode for [selecting and manipulating edges](edge.md) (lines) on a ProBuilder Mesh. +*  **Face** mode: the element mode for [selecting and manipulating faces](face.md) (polygons) on a ProBuilder Mesh. + +The Vertex, Edge, and Face modes are also known collectively as the **Element** modes. + +> **Tip:** By default, the Edit mode toolbar appears in the top middle of the Scene view, but you can reposition it with the [Toolbar Location](preferences.md#toolbarloc) preference. + + + +## Edit mode hotkeys + +In addition to the Scene view toolbar, [hotkeys](hotkeys.md) (keyboard shortcuts) are also available: + +- `Escape` switches to **Object** mode from any other mode. +- `G` toggles between the **Object** and **Element** modes. For example, if you are in **Vertex** mode, press `G` once to return to **Object** mode, and press it again to switch back to **Vertex** mode. +- `H` toggles between the **Element** modes (**Vertex**, **Edge**, and **Face**). + +If you prefer to have dedicated keys for each mode, you can enable the [Unique Mode Shortcuts](hotkeys.md#unique_mode) preference. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/experimental.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/experimental.md new file mode 100644 index 0000000000000000000000000000000000000000..00ab4a60846c405b78ab6c81d13d1ca036b6ef03 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/experimental.md @@ -0,0 +1,15 @@ +# Experimental features + +ProBuilder has some experimental features: + +- [Bezier Shape Tool](bezier.md) +- [Boolean (CSG) Tool](boolean.md) + +These features are still under development; they are not fully tested, and might reduce ProBuilder's stability. Use these with caution. + +By default, experimental features are disabled. + +To enable them, enable the [Experimental Features](preferences.html#experimental) preference. + + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/face.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/face.md new file mode 100644 index 0000000000000000000000000000000000000000..ecd5cf634f51f3a314e3971c97ca79f2b0a1fc5f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/face.md @@ -0,0 +1,75 @@ +# Face tools + +This section of the ProBuilder toolbar provides access to ProBuilder editing tools that you can use in the [Face edit mode](modes.md). + + + +> ***Note:*** Some actions also have extra options or custom settings available. These tool buttons have a special indicator in the top right corner. The documentation for each tool includes information about these options. + +##  Bevel + +Use the **Bevel** tool to [bevel](Edge_Bevel.md) every edge on the selected face(s). + +For more information, see the [Bevel](Face_Bevel.md) tool documentation. + +##  Subdivide Faces + +Use the **Subdivide Faces** tool to add a vertex at the center of each edge and connect them in the center. + +For more information, see the [Subdivide Faces](Face_Subdivide.md) tool documentation. + +##  Triangulate Faces + +Use the **Triangulate Faces** tool to reduce selected faces to their base triangles. + +For more information, see the [Triangulate Faces](Face_Triangulate.md) tool documentation. + +##  Detach Faces + +Use the **Detach Faces** tool to detach the selected face(s) from the rest of the Mesh. + +For more information, see the [Detach Faces](Face_Detach.md) tool documentation. + +##  Extrude Faces + +Use the **Extrude Faces** tool to pull out the currently selected face and attach sides to each edge. + +For more information, see the [Extrude Faces](Face_Extrude.md) tool documentation. + +##  Set Pivot + +Use the **Set Pivot** tool to move the pivot point of this Mesh to the average center of the selected faces. + +For more information, see the [Set Pivot](Face_SetPivot.md) tool documentation. + +##  Delete Faces + +Use the **Delete Faces** tool to delete the selected face(s). + +For more information, see the [Delete Faces](Face_Delete.md) tool documentation. + +##  Flip Face Normals + +Use the **Flip Face Normals** tool to flip the normals only on the selected face(s). + +For more information, see the [Flip Face Normals](Face_FlipNormals.md) tool documentation. + +##  Merge Faces + +Use the **Merge Faces** tool to merge selected faces into a single face, and remove any dividing edges. + +For more information, see the [Merge Faces](Face_Merge.md) tool documentation. + +##  Conform Normals + +Use the **Conform Normals** tool to set all selected face normals to the same relative direction. + +For more information, see the [Conform Normals](Face_ConformNormals.md) tool documentation. + +##  Flip Face Edge + +Use the **Flip Face Edge** (**Turn Edges**) tool to swap the triangle orientation on the selected face(s) with four sides. + +For more information, see the [Flip Face Edge](Face_FlipTri.md) tool documentation. + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/faq.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/faq.md new file mode 100644 index 0000000000000000000000000000000000000000..899259af53a98cbbdd69d32ffbc88d18044956cd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/faq.md @@ -0,0 +1,86 @@ +# Troubleshooting + +This section covers the following issues: + +* [Faces not rendering (or appearing black)](#norender) +* [Pink Shaders](#pink) +* [Spotty Textures on Lightmapped GameObjects](#spotty) +* [Missing FbxPrefab or assembly reference error](#fbx) + + + +<a name="norender"></a> + +## Faces not rendering (black) + +If you are editing Mesh elements and suddenly notice that some of your faces have turned black, there are two common causes: * There is a problem with auto-lightmapping. +* You have two edges or two vertices in a single Mesh, and they are sharing the same space. + + + +First, check the **Auto Lightmap UVs** setting on the [Lightmap UV Editor](lightmap-uv.md) window. Sometimes faces appear as black if auto-lightmapping hasn't rendered them yet. This usually happens if there are more rendering jobs than your resources can handle (particularly on older machines). + +To access the **Auto Lightmap UVs** setting: + +1. Open the [Lightmap UV Editor](lightmap-uv.md) window (**Tools** > **ProBuilder** > **Editors** > **Open Lightmap UV Editor**). + +2. Disable the **Auto Lightmap UVs** option. + +  + +If you turn off the automatic lightmapping option and you still see faces that are not rendering, it may be that you have doubled vertices in your Mesh. + +To fix elements that are sharing the same place: + +1. Select the entire Mesh. +2. [Open the **Options** window](workflow-edit.md#edit) for the **Weld Vertices** tool and make sure that the **Weld Distance** value is very low (for example, 0.01 or 0.0001). This ensures the tool doesn't weld vertices that are close but not doubled. +3. Click the **Weld Vertices** button. + +> **Tip:** You can enable the __Show Scene Info__ property in the [ProBuilder Preferences](preferences.md#info_overlay) window while debugging. This displays information about the selected Mesh, including the total number of vertices, edges, and faces, and how many are currently selected in the top left corner of the Scene view. + +<a name="pink"></a> + +## Pink Shaders + +If you are upgrading a project from the Asset Store package make sure to run the [Convert to Package Manager](installing.md#convert-to-package-manager) utility. + +If you are using the new Standard Rendering Pipeline (SRP) you may have issues compiling the ProBuilder default Shader. As a workaround, you can set the [default Material](preferences.md#defmat) preference. + + + +<a name="spotty"></a> + +## Spotty Textures on Lightmapped GameObjects + + + +This happens when the GameObject does not have a UV2 channel. + +To build the UV2 channel: + +1. Select the affected GameObject(s). +2. Run the [Lightmap UVs](Object_LightmapUVs.md) tool. + + + +<a name="fbx"></a> + +## Missing FbxPrefab or assembly reference error + +You may see one or more of these errors if you have imported the **FBX Exporter** package, then later removed it: + +``` +<project-folder>/Addons/Fbx.cs(66,81): error CS0246: The type or namespace name `FbxNode' could not be found. Are you missing an assembly reference? + +<project-folder>/Addons/Fbx.cs(11,19): error CS0234: The type or namespace name `Formats' does not exist in the namespace `UnityEditor'. Are you missing an assembly reference? + +<project-folder>/Addons/Fbx.cs(8,7): error CS0246: The type or namespace name `Autodesk' could not be found. Are you missing an assembly reference? +``` + +To resolve these errors, you can follow either of these fixes: + +* Re-import the **FBX Exporter** package. +* Open **PlayerSettings** (from the top menu: **Edit** > **Project Settings** > **Player**) and remove the **PROBUILDER_FBX_PLUGIN_ENABLED** flag from **Scripting Define Symbols**. + + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/hotkeys.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/hotkeys.md new file mode 100644 index 0000000000000000000000000000000000000000..61d0d3a7d685096552bbb8010e0a50b56318446e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/hotkeys.md @@ -0,0 +1,67 @@ +# ProBuilder hotkeys (keyboard shortcuts) + +You can use **hotkeys** (keyboard shortcuts) to access many of the tools that are available from the toolbar and the menu. The menu items that have associated hotkeys display the key combinations in the menu. + +You can also change the default hotkeys on a few items on the [Shortcut Settings](preferences.md#shortcuts) section on the **ProBuilder Preferences** window. + + + +This page gives an overview of the default ProBuilder keyboard shortcuts. Where a command has **Ctrl/Cmd** as part of the keystroke, use the **Control** key on Windows and the **Command** key on macOS. Similarly, where a command has **Alt/Opt** as part of the keystroke, use the **Alt** key on Windows and either the **Alt** or **Option** key on macOS, depending on your keyboard. + +> **Note:** There are a few rare exceptions where a hotkey uses the **Control** key for both Windows and macOS. These exceptions are clearly indicated on the tool reference page and in the list below. + +| **Key combination:** | **Action:** | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| **Alt/Opt+Click(tool button)** | Open options for any tool on the toolbar. | +| **Alt/Opt+B** | [Create a new face between two selected edges](Edge_Bridge.md). | +| **Alt/Opt+C** | [Collapse the selected vertices](Vert_Collapse.md). | +| **Alt/Opt+E** | Create a new edge that connects either the [selected vertices](Vert_Connect.md) or the [centers of each selected edge](Edge_Connect.md), depending on what editing mode you are in. | +| **Alt/Opt+G** | [Increase the number of items in the selection](Selection_Grow.md). | +| **Alt/Opt+J** | Move the pivot to the [center](CenterPivot.md) of the currently selected vertices, edges, or faces. | +| **Alt/Opt+L** | [Select edge loop](Selection_Loop_Edge.md). | +| **Alt/Opt+Shift+L+Double-Click** | [Select face loop](Selection_Loop_Face.md). | +| **Alt/Opt+R** | [Select edge ring](Selection_Ring_Edge.md). | +| **Ctrl/Cmd+Shift+R+Double-Click** | [Select face ring](Selection_Ring_Face.md). | +| **Alt/Opt+S** | [Divide the selected edges](Edge_Subdivide.md). | +| **Alt/Opt+U** | [Insert edge loop](Edge_InsertLoop.md). | +| **Alt/Opt+V** | [Weld selected vertices](Vert_Weld.md). | +| **Alt/Opt+X** | [Split the selected vertex](Vert_Split.md) into individual vertices (one per adjacent face). | +| **Alt/Opt+#** | [Apply a specific Material](workflow-materials.md) to the selected object(s) or face(s). | +| **Alt/Opt+Shift+G** | [Shrink the selection](Selection_Shrink.md). | +| **Backspace** | Delete the selected [faces](Face_Delete.md) or [Bezier shape points](bezier.md). | +| **Esc** | Enable the _Object_ edit mode. | +| **B** | Set all selected objects to entity type _Brush_. | +| **C** | Set all selected objects to entity type _Collider_. | +| **G** | Toggle between the *Object* and *Element* (geometry) edit modes. | +| **H** | Cycle through _Vertex_, _Edge_, and _Face_ edit modes. | +| **M** | Set all selected objects to entity type _Mover_. | +| **O** | Set all selected objects to entity type _Occluder_. | +| **P** | [Toggle the orientation](HandleAlign.md) of the ProBuilder selection handle. | +| **T** | Set all selected objects to entity type _Trigger_. | +| **Ctrl+Click** | [Align an adjacent face's UV coordinates](manual-uvs-actions.md#continue) to the current selection in the [UV Editor window](uv-editor.md).<br /><br />***Important:*** Unlike many other hotkey combinations involving the **Ctrl** key in Windows and the **Cmd** key in macOS, this tool works with only the **Ctrl** key for both platforms. | +| **Ctrl+Shift+Click** | [Copy one face's UVs to another face](manual-uvs-actions.md#copy-uvs) to the current selection in the Scene view with the [UV Editor window](uv-editor.md) open.<br /><br />**Important:** Unlike many other hotkey combinations involving the **Ctrl** key in Windows and the **Cmd** key in macOS, this tool works with only the **Ctrl** key for both platforms. | +| <a name="uv-snap"></a>**Ctrl/Cmd+Drag** (while moving, rotating, or scaling) | Snap to UV increments in the [UV Editor window](uv-editor.md). | +| **Ctrl/Cmd+E** | Extrude [edges](Edge_Extrude.md) and [faces](Face_Extrude.md) using the default options. | +| **Ctrl/Cmd+J** | Move the pivot to the center of the currently selected elements: <br /> - [Vertices](Vert_SetPivot.md)<br /> - [Edges](Edge_SetPivot.md)<br /> - [Faces](Face_SetPivot.md) | +| **Ctrl/Cmd+K** | Create a [new Mesh cube](Cube.md). | +| **Ctrl/Cmd+Shift+I** | [Invert the selection](Selection_Invert.md). | +| **Ctrl/Cmd+Shift+K** | Open the [Shape tool window](shape-tool). | +| **Shift+Drag** (while moving, rotating, or scaling) | Extrude [edges](Edge_Extrude.md) or [faces](Face_Extrude.md). | +| **Shift+Hover** | Show tooltips when hovering over a tool icon in the ProBuilder toolbar. | + + + +<a name="unique_mode"></a> + +## Unique Mode Shortcuts + +In addition, if you enable the [Unique Mode Shortcuts preference](preferences.md#unique), you can also use these shortcuts: + +| Key combination: | Action: | +| :--------------- | -------------------------- | +| **H** | Enable _Vertex_ edit mode. | +| **J** | Enable _Edge_ edit mode. | +| **K** | Enable _Face_ edit mode. | + +> **Tip:** You can also change these default shortcut assignments in the [Shortcut Settings section](preferences.md#shortcuts) of the Preferences window. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BadLightmapUVs.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BadLightmapUVs.png new file mode 100644 index 0000000000000000000000000000000000000000..2c98aea658d927d0acbb5d7305e4f636c6a466b8 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BadLightmapUVs.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BevelEdges_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BevelEdges_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..3a8d89e399d9690e152275b0953eb86adbf0be18 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BevelEdges_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BevelFace_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BevelFace_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..943e8f04cffae914e3b436287381177c995caca7 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BevelFace_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BezierShape_HeaderImage.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BezierShape_HeaderImage.png new file mode 100644 index 0000000000000000000000000000000000000000..ad2a10fb1fb9194bb4c18edd04c7da3535eef92f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BezierShape_HeaderImage.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Bezier_Aligned.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Bezier_Aligned.png new file mode 100644 index 0000000000000000000000000000000000000000..93cd7046aefc0f8e0c9caaad1d3d9275ccdb16a0 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Bezier_Aligned.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Bezier_Free.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Bezier_Free.png new file mode 100644 index 0000000000000000000000000000000000000000..a5a3ec313dc7d43a23cb5614f9449066f7f7eae9 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Bezier_Free.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Bezier_Mirrored.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Bezier_Mirrored.png new file mode 100644 index 0000000000000000000000000000000000000000..2d0140b43817ce5813cb6cfb23d302445a823c24 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Bezier_Mirrored.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BoxProject_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BoxProject_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..68ceefee141042c483839a2fa927924a466cce19 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BoxProject_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BridgeEdges_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BridgeEdges_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..59f1cda33a73eb8391e025d14da2de9c801b2525 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/BridgeEdges_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/CenterPivot_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/CenterPivot_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..9e4df27ccfb64d7428dd9f492f16fb9a82bcfe33 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/CenterPivot_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/CollapseVerts_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/CollapseVerts_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..78cd4814405a802a363824d7d155f2870446ae07 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/CollapseVerts_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ConnectEdges_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ConnectEdges_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..754e5ded60513bcaf05177a111998879fe50342a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ConnectEdges_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ConnectVerts_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ConnectVerts_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..66006fc12e654f44e7c808f91ac88af4e8d800a2 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ConnectVerts_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/CurvedStair.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/CurvedStair.png new file mode 100644 index 0000000000000000000000000000000000000000..7d7b8a3a11ded52f17fed27db1925c7e48031176 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/CurvedStair.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/DeleteFace_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/DeleteFace_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..54de0da246ab152c5157bc31a9587e61dfc6ba49 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/DeleteFace_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/DetachFace_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/DetachFace_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..9194d4cc8343cc4e9233a6b3f2111044097e65a2 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/DetachFace_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/DragRect_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/DragRect_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..5ef76673810658876483f6eb8e69b4eec318bea6 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/DragRect_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Edge_Bevel_props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Edge_Bevel_props.png new file mode 100644 index 0000000000000000000000000000000000000000..9896dce27615893ceb7dafa622f3926a9fc83d2a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Edge_Bevel_props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Edge_Extrude_props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Edge_Extrude_props.png new file mode 100644 index 0000000000000000000000000000000000000000..d1aa3e26d70f3bbc5d192ba7f29a5e6fa4565f60 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Edge_Extrude_props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Edge_SetPivot.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Edge_SetPivot.png new file mode 100644 index 0000000000000000000000000000000000000000..162b47879a4776fcf0cdde10cd76566f69e0d127 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Edge_SetPivot.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Edge_Subdivide_props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Edge_Subdivide_props.png new file mode 100644 index 0000000000000000000000000000000000000000..ff476a771603a4c1158afd8a5f2b9ad9c1d9a7c2 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Edge_Subdivide_props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ExampleImage_ObjectAndElementEditingModes.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ExampleImage_ObjectAndElementEditingModes.png new file mode 100644 index 0000000000000000000000000000000000000000..deb638a1f25b1a30ed2bd447692fb608b3b10170 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ExampleImage_ObjectAndElementEditingModes.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ExampleImage_Toolbar_ColorCategories.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ExampleImage_Toolbar_ColorCategories.png new file mode 100644 index 0000000000000000000000000000000000000000..18f2efaf9050a936d72cf5e6deb188dd39c26c75 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ExampleImage_Toolbar_ColorCategories.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_FloatingVerts.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_FloatingVerts.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ff2268c9db0f2c10d87a5e112435937d3fecc9 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_FloatingVerts.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_MaterialsOnLevel.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_MaterialsOnLevel.png new file mode 100644 index 0000000000000000000000000000000000000000..baf9c7c7d769d3dc66e06e5f6deb70e517143eb6 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_MaterialsOnLevel.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_SelectByMaterial.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_SelectByMaterial.png new file mode 100644 index 0000000000000000000000000000000000000000..9c08f7b549958232622cefd3da485101947b9095 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_SelectByMaterial.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_SelectByVertexColor.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_SelectByVertexColor.png new file mode 100644 index 0000000000000000000000000000000000000000..3230a7fa8ab23c40c71b70aa77ab9748e1c728e7 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_SelectByVertexColor.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_SelectHole.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_SelectHole.png new file mode 100644 index 0000000000000000000000000000000000000000..980347ede381ac0ff90ed74fc1b21850c5677dcf Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_SelectHole.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_ShapeToolsWithCurvedStair.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_ShapeToolsWithCurvedStair.png new file mode 100644 index 0000000000000000000000000000000000000000..414b6707b431014690bac90f8441b74b51c2769d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_ShapeToolsWithCurvedStair.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_T-Junction.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_T-Junction.png new file mode 100644 index 0000000000000000000000000000000000000000..e480ed26839a486cd3d291e0a12e2b8b2ee69cfe Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_T-Junction.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_levelbuilding.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_levelbuilding.png new file mode 100644 index 0000000000000000000000000000000000000000..60916309e3acf4986d204b4f7f388731be823916 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Example_levelbuilding.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Experimental_BezierInspector.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Experimental_BezierInspector.png new file mode 100644 index 0000000000000000000000000000000000000000..e40a57bdeea9f3928f73191284df72e18df7f192 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Experimental_BezierInspector.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Experimental_BooleanWindow.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Experimental_BooleanWindow.png new file mode 100644 index 0000000000000000000000000000000000000000..cf2ff278e717f19b67203ba505bb0d9998789968 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Experimental_BooleanWindow.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Experimental_PolyShapeInspector.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Experimental_PolyShapeInspector.png new file mode 100644 index 0000000000000000000000000000000000000000..64f27558e495f53b60c660adce554dc98bb4714a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Experimental_PolyShapeInspector.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Experimental_Preferences.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Experimental_Preferences.png new file mode 100644 index 0000000000000000000000000000000000000000..f244e824db5f40c178fd4d9668075878a8b78ab3 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Experimental_Preferences.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ExtrudeEdges_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ExtrudeEdges_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..f1fb3805c4fe4c25393a0668a813779ad0df2296 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ExtrudeEdges_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ExtrudeFace_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ExtrudeFace_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..9baae85ca9923ddf6f474cfecfcac47f0e1d3a37 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ExtrudeFace_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Face_ConformNormals.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Face_ConformNormals.png new file mode 100644 index 0000000000000000000000000000000000000000..8136b1dd6bfbaadb71ebf403b69c83f6cb7d38bc Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Face_ConformNormals.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Face_Detach_props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Face_Detach_props.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec2f4cbac64e674e149c9f502ffaec6694461a0 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Face_Detach_props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Face_Extrude_props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Face_Extrude_props.png new file mode 100644 index 0000000000000000000000000000000000000000..f7faf316ba0cf1c6b1190699a1c0dfd69b8822ac Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Face_Extrude_props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Face_SetPivot.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Face_SetPivot.png new file mode 100644 index 0000000000000000000000000000000000000000..df303e9c6c149f06d68979cad8bff1741d55859b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Face_SetPivot.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/FillHole_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/FillHole_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..e4b9e741ecca4728b87d1be04842f441c087a76f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/FillHole_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/FillHole_props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/FillHole_props.png new file mode 100644 index 0000000000000000000000000000000000000000..3174e34652b9b78ef97b048bdd5816abf827c3e1 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/FillHole_props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/FlipFaceNormals_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/FlipFaceNormals_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..f85f0102484766af5260d46f0387021fa70542df Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/FlipFaceNormals_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/FlipObjectNormals_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/FlipObjectNormals_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..188b9bb4f00326cc2a2bd0b9fb58d859bd750ddc Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/FlipObjectNormals_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/FlipTri_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/FlipTri_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..0a2a6a30578ce7378bc31d6be8435186ce5b0451 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/FlipTri_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/GrowSelection_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/GrowSelection_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..c116ecc98d6e1825ee57c7f3c95a6d942e389561 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/GrowSelection_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/HandleAlign_ExamplesWithTextAndIcons.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/HandleAlign_ExamplesWithTextAndIcons.png new file mode 100644 index 0000000000000000000000000000000000000000..19f7a2c4c4b9f40717fd421c77cc94b8d8b5d15a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/HandleAlign_ExamplesWithTextAndIcons.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/InsertEdgeLoop_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/InsertEdgeLoop_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..684f49951ebffccc5cef9c3dff82d7308bb3aac8 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/InsertEdgeLoop_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/InsetFace_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/InsetFace_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..083e86229f18abd8e813053e494c3928c3409085 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/InsetFace_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/InvertSelection_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/InvertSelection_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..0c046b9f6c37e9f5a34f4d4570f5d1f38ed3b82d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/InvertSelection_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_A.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_A.png new file mode 100644 index 0000000000000000000000000000000000000000..9a3cabdc7a6e683f6b2293f3220bd4bdf7b3a8d7 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_A.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_B.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_B.png new file mode 100644 index 0000000000000000000000000000000000000000..5adaf2635ea97df06bb4edeabb14e407bdf38819 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_B.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_C.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_C.png new file mode 100644 index 0000000000000000000000000000000000000000..b4c0be248b1e950b607c89a598b8b869bdc123cf Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_C.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_D.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_D.png new file mode 100644 index 0000000000000000000000000000000000000000..a6f42a917a9ad534d4035313a10eaf28a02d3251 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_D.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_E.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_E.png new file mode 100644 index 0000000000000000000000000000000000000000..f70445feca115ae6f8aee013d6883efaec33510f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_E.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_F.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_F.png new file mode 100644 index 0000000000000000000000000000000000000000..4dbf1a586ce3c995f39a4b186161271874d7ffc9 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_F.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_G.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_G.png new file mode 100644 index 0000000000000000000000000000000000000000..ce391c5ee972a1b26d113468a236d12249b6728d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_G.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_H.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_H.png new file mode 100644 index 0000000000000000000000000000000000000000..3b8af19bcf77292ff0a2c1ebce88afc202c32466 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_H.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_I.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_I.png new file mode 100644 index 0000000000000000000000000000000000000000..554e6f20f34deb1c4b5203f9abe48a9ee3887ee2 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/LetterCircle_I.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/MaterialTools_WithExample.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/MaterialTools_WithExample.png new file mode 100644 index 0000000000000000000000000000000000000000..e154e04bf98a681f202e432b58879a5e7914930b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/MaterialTools_WithExample.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/MergeFaces_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/MergeFaces_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..6860b0d0d8b786df94c13fa333a4034e8f0a4ad8 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/MergeFaces_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Mirror_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Mirror_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..7bf3234f69327bf2674b6d90e3481c7d4d95d08e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Mirror_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_ConformNormals.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_ConformNormals.png new file mode 100644 index 0000000000000000000000000000000000000000..27320a4ad28843544be38d2c86682b7bfe4b146a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_ConformNormals.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Export_props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Export_props.png new file mode 100644 index 0000000000000000000000000000000000000000..9f2cff7f098be8102f9a20d472f81be115ac634b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Export_props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Export_propsAsset.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Export_propsAsset.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3705cdb7f809b842cff5c4107d25fd9f05c943 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Export_propsAsset.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Export_propsOBJ.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Export_propsOBJ.png new file mode 100644 index 0000000000000000000000000000000000000000..2780433d95ef00096185a2fbd29f76932d94650b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Export_propsOBJ.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Export_propsPLY.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Export_propsPLY.png new file mode 100644 index 0000000000000000000000000000000000000000..87fea8a581103f18a31e5c5185aacd6e7bff4471 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Export_propsPLY.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Export_propsSTL.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Export_propsSTL.png new file mode 100644 index 0000000000000000000000000000000000000000..5c9b83ba03886545bf8416b2cce6c9fc9b15648b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Export_propsSTL.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Mirror_props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Mirror_props.png new file mode 100644 index 0000000000000000000000000000000000000000..cc988d210d5995d4b806e5b194341eb03c4038ee Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_Mirror_props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_ProBuilderize_props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_ProBuilderize_props.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba5883ad0c2236693caea741e7e6d10a14574bd Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Object_ProBuilderize_props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PBvsUnityMeshes.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PBvsUnityMeshes.png new file mode 100644 index 0000000000000000000000000000000000000000..098d16ebd49bca453dd8d2df71cb3175c94ec03a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PBvsUnityMeshes.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PlanarProject_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PlanarProject_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..7d49283af41434f367fc5d79855c99ca70588f42 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PlanarProject_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PolyShape_Draw1.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PolyShape_Draw1.png new file mode 100644 index 0000000000000000000000000000000000000000..42db5b9aa7aa19926d25a88d05865a34963049ba Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PolyShape_Draw1.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PolyShape_Draw2.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PolyShape_Draw2.png new file mode 100644 index 0000000000000000000000000000000000000000..9e720e5dafac08342638520de33c5074877528ac Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PolyShape_Draw2.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PolyShape_Draw3.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PolyShape_Draw3.png new file mode 100644 index 0000000000000000000000000000000000000000..bcf627a3da644aa9b316c0c981f893c1dd3704c2 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PolyShape_Draw3.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PolyShape_HeaderImage.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PolyShape_HeaderImage.png new file mode 100644 index 0000000000000000000000000000000000000000..dd217a72f263512c60a9a4e3f0a74abbe5d319ae Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/PolyShape_HeaderImage.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ProBuilderMesh-lightmapUVs.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ProBuilderMesh-lightmapUVs.png new file mode 100644 index 0000000000000000000000000000000000000000..1d0cba680c41f98bcc611019b6a4fb7e806f7d67 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ProBuilderMesh-lightmapUVs.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ProBuilderMesh.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ProBuilderMesh.png new file mode 100644 index 0000000000000000000000000000000000000000..aff46cf4a3b8f39dc7bf757f20b827e2b0a8fd45 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ProBuilderMesh.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ProBuilderToolbar_GeoActionsArea.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ProBuilderToolbar_GeoActionsArea.png new file mode 100644 index 0000000000000000000000000000000000000000..94bd522d50addeae903919a13eddb38a22c8865c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ProBuilderToolbar_GeoActionsArea.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/RenderUVsPanel.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/RenderUVsPanel.png new file mode 100644 index 0000000000000000000000000000000000000000..6ab8af32a57c898f75ff27dce3de9b0b200094a7 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/RenderUVsPanel.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SelectFaceLoop_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SelectFaceLoop_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..f50f1de3b2d066904a0820cff1d7949b95000400 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SelectFaceLoop_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SelectFaceRing_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SelectFaceRing_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..113edc68bcb2f276241895d2e6c17763cd13e11e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SelectFaceRing_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SelectHidden_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SelectHidden_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..f2a2a6ca37f4ada93f28951db78acb355c4adc4f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SelectHidden_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_Grow_props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_Grow_props.png new file mode 100644 index 0000000000000000000000000000000000000000..4da479c0869192a5077d66ddf82d750650fd9d51 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_Grow_props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_LoopExample.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_LoopExample.png new file mode 100644 index 0000000000000000000000000000000000000000..782f7597f9653097e2334951cc3bac01010d61da Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_LoopExample.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_RingExample.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_RingExample.png new file mode 100644 index 0000000000000000000000000000000000000000..56c64673a33f7e59122b0f8ebf2b4d3f2f885f69 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_RingExample.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_SelectByMaterial.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_SelectByMaterial.png new file mode 100644 index 0000000000000000000000000000000000000000..30d347f8d135838cddc8b58dbf5c6eee33b6fc79 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_SelectByMaterial.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_SelectByMaterial_props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_SelectByMaterial_props.png new file mode 100644 index 0000000000000000000000000000000000000000..30d347f8d135838cddc8b58dbf5c6eee33b6fc79 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_SelectByMaterial_props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_SelectByVertexColor_props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_SelectByVertexColor_props.png new file mode 100644 index 0000000000000000000000000000000000000000..6dde3e51cc901dfa13b98bef2c21376324ceb750 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Selection_SelectByVertexColor_props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ShapeToolTypes.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ShapeToolTypes.png new file mode 100644 index 0000000000000000000000000000000000000000..00bd08536b2c71ac78dcd4ce6a95242b31aa27a6 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ShapeToolTypes.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ShiftModifier_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ShiftModifier_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..cd5d64deb62502488fbd8fc90dda81532f787335 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ShiftModifier_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ShowTexturePreview_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ShowTexturePreview_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..0efc714b0c73c95309ffd7400c3633de9abf9477 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ShowTexturePreview_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ShrinkSelection_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ShrinkSelection_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..58b559e2615322a892cb88497679d84f50211150 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/ShrinkSelection_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c4dd88bab412e00bd3e9f2a1751a327bcc172a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-btnBlue.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-btnBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..41a5d405938d222c2c49efe7e2525474df883250 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-btnBlue.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-btnGray.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-btnGray.png new file mode 100644 index 0000000000000000000000000000000000000000..38afce8a234fa926f55ffae4c029a04a10fddf48 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-btnGray.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-btnWhite.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-btnWhite.png new file mode 100644 index 0000000000000000000000000000000000000000..823db617853f9d77b29a86fcf4cdd535b3ddd4b4 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-btnWhite.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-btnYellow.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-btnYellow.png new file mode 100644 index 0000000000000000000000000000000000000000..44a7b54e559470af74d00f9dc60036b9a58c1a4b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-btnYellow.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-pnlMain.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-pnlMain.png new file mode 100644 index 0000000000000000000000000000000000000000..9759bc1fc648a774a8227aa1d0c23278a12b11bc Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-pnlMain.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-pnlNormals.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-pnlNormals.png new file mode 100644 index 0000000000000000000000000000000000000000..b9433b0995339e417bbdf5df6c5f8c2eee9c7dae Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-pnlNormals.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-pnlOverlay.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-pnlOverlay.png new file mode 100644 index 0000000000000000000000000000000000000000..7fd9c0b8fcee82b13deb168cce95f8cb519613c3 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-pnlOverlay.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-pnlQuickref.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-pnlQuickref.png new file mode 100644 index 0000000000000000000000000000000000000000..5bb2560fb5cd39e0f36b08a6a9fed5676a358c67 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props-pnlQuickref.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props.png new file mode 100644 index 0000000000000000000000000000000000000000..3a2e7d59869db38daeb80d8fa653a12272df5a27 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Smoothing_Editor_props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SplitVerts_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SplitVerts_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..792334b0b08f564fdb6431dfa231c2a5ec2d4a5f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SplitVerts_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SubdivideEdge_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SubdivideEdge_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..9d48c8da314d93fdabaf1a4e01c5776d15c8ad70 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SubdivideEdge_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SubdivideFace_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SubdivideFace_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..9c9da13155db80f58ef68d1887dcf243ffd6d2e9 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SubdivideFace_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SubdivideObject_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SubdivideObject_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..90f125b48575e47245faa19f290b5be1d4b4f20b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/SubdivideObject_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Toolbar_ResizingExample.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Toolbar_ResizingExample.png new file mode 100644 index 0000000000000000000000000000000000000000..10745a9699275458036ec2f7509fd242388477a3 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Toolbar_ResizingExample.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/TriangulateObject_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/TriangulateObject_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..34c89c8c59e9fca2219af66021b3a21aaf9c3b70 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/TriangulateObject_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVEditor_Example-123.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVEditor_Example-123.png new file mode 100644 index 0000000000000000000000000000000000000000..6aebab787d94718f02cd68fc2af013b30858ba39 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVEditor_Example-123.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVEditor_Example-BeforeAfter.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVEditor_Example-BeforeAfter.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e65ae54f04f29f72a76362b171ebb791b8af09 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVEditor_Example-BeforeAfter.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_CollapseUVs.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_CollapseUVs.png new file mode 100644 index 0000000000000000000000000000000000000000..26bc3f052f9f048df2055bc6193a124c7f666ffa Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_CollapseUVs.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_FitUVs.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_FitUVs.png new file mode 100644 index 0000000000000000000000000000000000000000..9e29c4b464e877230f5f383cfbeca8012b5c7de5 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_FitUVs.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_FlipHorizontal.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_FlipHorizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..25c9030fda043f80d6786a0761720e24c37e8b8b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_FlipHorizontal.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_FlipVertical.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_FlipVertical.png new file mode 100644 index 0000000000000000000000000000000000000000..5419cbeb4ac170d357b8758fa8dfb8c4cc5349bc Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_FlipVertical.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_Rotate.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_Rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..89857da3ccab25780d970aa8d514cf32fdd9754c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_Rotate.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_Scale.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_Scale.png new file mode 100644 index 0000000000000000000000000000000000000000..27add595cb2efd569c22ef41fad874a2ea441c4a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_Scale.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_SelectFace.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_SelectFace.png new file mode 100644 index 0000000000000000000000000000000000000000..bd01c5061b51fde4f5dfbf9ffd602c722add78ff Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_SelectFace.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_SelectIsland.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_SelectIsland.png new file mode 100644 index 0000000000000000000000000000000000000000..38ca3ea8f8751edabf6f348f862766514a79933c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_SelectIsland.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_SplitUVs.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_SplitUVs.png new file mode 100644 index 0000000000000000000000000000000000000000..e5fa9936c51f9360420fc5704c32ed95b120eedf Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_SplitUVs.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_Template.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_Template.png new file mode 100644 index 0000000000000000000000000000000000000000..b4de0eb4f721a14faed6c5c499648e0bb5305188 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_Template.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_TextureGroups.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_TextureGroups.png new file mode 100644 index 0000000000000000000000000000000000000000..c21d4b6e4ece9ce8d6d73e93a6dfabb4d2ed18b6 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_TextureGroups.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_Translate.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_Translate.png new file mode 100644 index 0000000000000000000000000000000000000000..c90c9f56599ef145e57a1eb5448c2e827525ba04 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_Translate.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_WeldUVs.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_WeldUVs.png new file mode 100644 index 0000000000000000000000000000000000000000..07783c8d6a8d1cfe491cfe7df70da55f45a4515e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVExamples_WeldUVs.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVGenerationParams.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVGenerationParams.png new file mode 100644 index 0000000000000000000000000000000000000000..2e940d377e316b3382bb56630a266513c4f59487 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVGenerationParams.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVPanel_ActionPanel_NoSelection.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVPanel_ActionPanel_NoSelection.png new file mode 100644 index 0000000000000000000000000000000000000000..e18b82cf48fda9bd769b506774b683c4abfad310 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVPanel_ActionPanel_NoSelection.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVPanel_FullWindow_Letters.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVPanel_FullWindow_Letters.png new file mode 100644 index 0000000000000000000000000000000000000000..70724ad62238061e0ecfce91f0ce6e466784dadb Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVPanel_FullWindow_Letters.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVPanel_ManualActions.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVPanel_ManualActions.png new file mode 100644 index 0000000000000000000000000000000000000000..b8fa6bac7043eb8466d4d9c5bcaa53cd39c73d3c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVPanel_ManualActions.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVPanel_MixedMode.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVPanel_MixedMode.png new file mode 100644 index 0000000000000000000000000000000000000000..a5eaaf1ad02b937af56275a5ef1ecfa850aca9fa Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVPanel_MixedMode.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVToolbar.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVToolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..e73b3b44e080cd0b2b9eec0352d6ceefe6cbf3f2 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UVToolbar.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UV_AutoActions-Anchor.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UV_AutoActions-Anchor.png new file mode 100644 index 0000000000000000000000000000000000000000..fa2bb6b262496c48a2eccb6a13d1405df1ffafbb Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UV_AutoActions-Anchor.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UV_AutoActions.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UV_AutoActions.png new file mode 100644 index 0000000000000000000000000000000000000000..555b1f81d12607e6679f967348b163f413afc869 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UV_AutoActions.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UV_FillModes.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UV_FillModes.png new file mode 100644 index 0000000000000000000000000000000000000000..33a6690f53e97e0f4fc5f5ec1ed1f0e684e3fc9b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UV_FillModes.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UV_InSceneControls.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UV_InSceneControls.png new file mode 100644 index 0000000000000000000000000000000000000000..e4a30dc0019930c1b243d4c9514b13f0eb6a1854 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/UV_InSceneControls.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Vert_Collapse_props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Vert_Collapse_props.png new file mode 100644 index 0000000000000000000000000000000000000000..54af1b3a2f7a3f22fa93da363e1259c95d77f0ad Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Vert_Collapse_props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Vert_SetPivot.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Vert_SetPivot.png new file mode 100644 index 0000000000000000000000000000000000000000..8000ff77eef1a76dacf21bdc9bd06c8942e0877d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Vert_SetPivot.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Vert_Weld_props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Vert_Weld_props.png new file mode 100644 index 0000000000000000000000000000000000000000..49e71b01f8b0bd020aef84efc129f892c89f6253 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/Vert_Weld_props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/VertexColor_WithLevelExample.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/VertexColor_WithLevelExample.png new file mode 100644 index 0000000000000000000000000000000000000000..89d8573ea8db6f5f36c5d3d4b48d96a1ecffcb9f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/VertexColor_WithLevelExample.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/VertexColors.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/VertexColors.png new file mode 100644 index 0000000000000000000000000000000000000000..2ff7008fa00b55a1995c3692444baf83183f1661 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/VertexColors.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/VertexColors_bymodes.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/VertexColors_bymodes.png new file mode 100644 index 0000000000000000000000000000000000000000..9377b42a2c4a06d5e40153f10b31bbcd73bc8030 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/VertexColors_bymodes.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/WeldVerts_Example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/WeldVerts_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..86d6a11a8aa36e469c7df2fc7321d5bb7e4889b8 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/WeldVerts_Example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/bezier_curveprops.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/bezier_curveprops.png new file mode 100644 index 0000000000000000000000000000000000000000..e17a15a6480e03fea121c2462adbeafc7af310fb Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/bezier_curveprops.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/bezier_shapeprops.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/bezier_shapeprops.png new file mode 100644 index 0000000000000000000000000000000000000000..4b77070b5771a90c00e534d4023b6ef63753eda6 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/bezier_shapeprops.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/boolean_intersection.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/boolean_intersection.png new file mode 100644 index 0000000000000000000000000000000000000000..08fece456ed6ee411797f7631e9d3fc1808c1338 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/boolean_intersection.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/boolean_subtraction.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/boolean_subtraction.png new file mode 100644 index 0000000000000000000000000000000000000000..731a9b63470bd7e3e7d9725594a87c1871a578d3 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/boolean_subtraction.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/boolean_union.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/boolean_union.png new file mode 100644 index 0000000000000000000000000000000000000000..271cde1a0dbdeac4c84ebc25b89dd786e7cc10ef Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/boolean_union.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/cus_switchmodes.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/cus_switchmodes.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8ee4c304fc4eb92259e0c69ebbc2cc4a99cc6a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/cus_switchmodes.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/cus_switchwindows.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/cus_switchwindows.png new file mode 100644 index 0000000000000000000000000000000000000000..cbd75c1bfd3d825a1f72841b78c9bca11e0265e6 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/cus_switchwindows.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/custom_vtx_order.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/custom_vtx_order.png new file mode 100644 index 0000000000000000000000000000000000000000..51cae7159a5c0ee031f99e908a7d8b2cb7e18f04 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/custom_vtx_order.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/dimoverlay.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/dimoverlay.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec26b886be30afcc8d35ca31329bcc5d88eadd0 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/dimoverlay.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/faq-norender.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/faq-norender.png new file mode 100644 index 0000000000000000000000000000000000000000..e5fb8891af7480f7d882233f187c76770a60c796 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/faq-norender.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/faq_black.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/faq_black.png new file mode 100644 index 0000000000000000000000000000000000000000..af99ea8d8c908cb5cc97b102bca545590f79f9cd Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/faq_black.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/CenterPivot.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/CenterPivot.png new file mode 100644 index 0000000000000000000000000000000000000000..92576ebd82530363bc355bbf3cf167c4cea4bcfb Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/CenterPivot.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_Bevel.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_Bevel.png new file mode 100644 index 0000000000000000000000000000000000000000..3740f048dd42b608c4facd84f6b6c606395fff8f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_Bevel.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_Bridge.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_Bridge.png new file mode 100644 index 0000000000000000000000000000000000000000..aafa2018b6f2e17e412b2022f2e251493353060e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_Bridge.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_Connect.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_Connect.png new file mode 100644 index 0000000000000000000000000000000000000000..5e602ec7321fd984272f71cb2b6917905c50e761 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_Connect.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_Extrude.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_Extrude.png new file mode 100644 index 0000000000000000000000000000000000000000..a99dd917818590194411b2c978032842b6f0196d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_Extrude.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_InsertLoop.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_InsertLoop.png new file mode 100644 index 0000000000000000000000000000000000000000..ad4e6669e9eebbcdb2ac162f1f566233a750379b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_InsertLoop.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_Subdivide.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_Subdivide.png new file mode 100644 index 0000000000000000000000000000000000000000..b9fd8ae34eaca907ef10a1e615f67c5d44f0bf9d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Edge_Subdivide.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/EditModes_Edge.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/EditModes_Edge.png new file mode 100644 index 0000000000000000000000000000000000000000..e169ba6af6608342672d1e5d5fdfd4a875219f08 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/EditModes_Edge.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/EditModes_Face.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/EditModes_Face.png new file mode 100644 index 0000000000000000000000000000000000000000..24b01f2ba78aee69ce8a23ef3efc93e1045ecbfe Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/EditModes_Face.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/EditModes_Object.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/EditModes_Object.png new file mode 100644 index 0000000000000000000000000000000000000000..9df78bafef4faeb8dc86eca66fa8ef691270d00f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/EditModes_Object.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/EditModes_Vertex.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/EditModes_Vertex.png new file mode 100644 index 0000000000000000000000000000000000000000..229ccb04857032fe9c96fd70a97b1654cb3fd948 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/EditModes_Vertex.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Entity_Trigger.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Entity_Trigger.png new file mode 100644 index 0000000000000000000000000000000000000000..873573fa05dd7b52536fb69ec5f85250a2cd479b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Entity_Trigger.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ExtrudeFace_FaceNormals.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ExtrudeFace_FaceNormals.png new file mode 100644 index 0000000000000000000000000000000000000000..4810e68a04d99551c3fb7e66361ecd54c5264925 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ExtrudeFace_FaceNormals.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ExtrudeFace_Individual.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ExtrudeFace_Individual.png new file mode 100644 index 0000000000000000000000000000000000000000..eef0be1cd1f256137cb65ad0bfe47e4325429d2c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ExtrudeFace_Individual.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ExtrudeFace_VertexNormals.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ExtrudeFace_VertexNormals.png new file mode 100644 index 0000000000000000000000000000000000000000..358de9bcc9b098e480599a5409ee08f49c6bec5f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ExtrudeFace_VertexNormals.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_BreakSmoothing.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_BreakSmoothing.png new file mode 100644 index 0000000000000000000000000000000000000000..d2bab8e0bf0a2cd19fb6e76930735ada81800306 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_BreakSmoothing.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_ConformNormals.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_ConformNormals.png new file mode 100644 index 0000000000000000000000000000000000000000..14e23e00eb0bb5497b6965c095cec30deadaf218 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_ConformNormals.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Delete.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Delete.png new file mode 100644 index 0000000000000000000000000000000000000000..76dd336e4f716e3419b9c1835933a4640049fa73 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Delete.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Detach.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Detach.png new file mode 100644 index 0000000000000000000000000000000000000000..25f38bfd99b88574739e561c9c2cb4b541e4d363 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Detach.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Extrude.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Extrude.png new file mode 100644 index 0000000000000000000000000000000000000000..358de9bcc9b098e480599a5409ee08f49c6bec5f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Extrude.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_FlipNormals.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_FlipNormals.png new file mode 100644 index 0000000000000000000000000000000000000000..ce9271eb6ed989d882ae600b20a591f5010ec77a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_FlipNormals.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_FlipTri.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_FlipTri.png new file mode 100644 index 0000000000000000000000000000000000000000..8b3143850a65dc9eeea6fbd9352acaac862ea94f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_FlipTri.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Merge.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Merge.png new file mode 100644 index 0000000000000000000000000000000000000000..455c0d8c6247bbceb1c7fbc2be3667e1ea158f25 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Merge.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Subdivide.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Subdivide.png new file mode 100644 index 0000000000000000000000000000000000000000..b49409bc5a0f1fa9647ccc8cbfce7918e9fc5ee8 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Subdivide.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Triangulate.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Triangulate.png new file mode 100644 index 0000000000000000000000000000000000000000..440ce49bc3a9d1f37553c92a0ff34a0846a63431 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Face_Triangulate.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/FillHole.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/FillHole.png new file mode 100644 index 0000000000000000000000000000000000000000..39d6343d8820f06031d3a176935706cb6de5c4aa Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/FillHole.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Freeze_Transform.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Freeze_Transform.png new file mode 100644 index 0000000000000000000000000000000000000000..4501e8ab8d4d71f778c7bc6f3e73354cfb8cae58 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Freeze_Transform.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/HandleAlign_Local.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/HandleAlign_Local.png new file mode 100644 index 0000000000000000000000000000000000000000..4bdba40ce457b56a56c90c3c542ae209c6984f00 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/HandleAlign_Local.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/HandleAlign_Plane.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/HandleAlign_Plane.png new file mode 100644 index 0000000000000000000000000000000000000000..17b00808ea0bb9bbc7a65ac6a159e2dc7eebcf5a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/HandleAlign_Plane.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/HandleAlign_World.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/HandleAlign_World.png new file mode 100644 index 0000000000000000000000000000000000000000..74445c74241aacffc04d9723af4e25d8cb45519e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/HandleAlign_World.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/NewBezierSpline.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/NewBezierSpline.png new file mode 100644 index 0000000000000000000000000000000000000000..39fb48883c9b7c834a1f15206819004cbac8f539 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/NewBezierSpline.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/NewPolyShape.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/NewPolyShape.png new file mode 100644 index 0000000000000000000000000000000000000000..7db5d499a8aaf623eff24b5fc10eb143f2c9a00c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/NewPolyShape.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_ConformNormals.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_ConformNormals.png new file mode 100644 index 0000000000000000000000000000000000000000..38c8378dc37270bb0ba670560c6c3e428c18a6e2 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_ConformNormals.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_Export.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_Export.png new file mode 100644 index 0000000000000000000000000000000000000000..0642afd346a1286a7c30e78db6e7e7e0904cb629 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_Export.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_FlipNormals.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_FlipNormals.png new file mode 100644 index 0000000000000000000000000000000000000000..c43593b4f83742c5c59834d7f51abb5f04bf5d9d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_FlipNormals.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_LightmapUVs.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_LightmapUVs.png new file mode 100644 index 0000000000000000000000000000000000000000..77aeeadf5870d73b5c5bbba831c341573bdd37da Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_LightmapUVs.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_Merge.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_Merge.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8ba94ff96a4ceaa849137507137a92c7243e20 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_Merge.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_Mirror.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_Mirror.png new file mode 100644 index 0000000000000000000000000000000000000000..e322fad7770a3cc147fc4d82f69f9048882d6b23 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_Mirror.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_ProBuilderize.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_ProBuilderize.png new file mode 100644 index 0000000000000000000000000000000000000000..a4492d603e7e695db7c109c7ac5c76b07310b600 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_ProBuilderize.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_Subdivide.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_Subdivide.png new file mode 100644 index 0000000000000000000000000000000000000000..05bc093c41f1319ed6202f3935a44b3ca03e0846 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_Subdivide.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_Triangulate.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_Triangulate.png new file mode 100644 index 0000000000000000000000000000000000000000..13af6f5e5f68cf63e0d0eb46a114838b7bd0e73c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Object_Triangulate.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Options.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Options.png new file mode 100644 index 0000000000000000000000000000000000000000..e8a6ea968c8c1fff074fea9fa3dc6d540b7e9c6d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Options.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Panel_Materials.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Panel_Materials.png new file mode 100644 index 0000000000000000000000000000000000000000..de68609cdbdbd548fda897124886abed1fbda372 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Panel_Materials.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Panel_Shapes.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Panel_Shapes.png new file mode 100644 index 0000000000000000000000000000000000000000..5bf4adddb73a4163d61781a719043dc4c29d6f93 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Panel_Shapes.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Panel_Smoothing.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Panel_Smoothing.png new file mode 100644 index 0000000000000000000000000000000000000000..31c7cc28a81e840266290696ce2d3297afa951ff Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Panel_Smoothing.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Panel_UVEditor.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Panel_UVEditor.png new file mode 100644 index 0000000000000000000000000000000000000000..2c0713f6421b83e7e346cba1c40cfc2d076a4602 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Panel_UVEditor.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Panel_VertColors.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Panel_VertColors.png new file mode 100644 index 0000000000000000000000000000000000000000..38c9488d29aec7f9c38b23ec1ea06b6d29118e56 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Panel_VertColors.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ProBuilderGUI_UV_Manip_Off.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ProBuilderGUI_UV_Manip_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..852269a2cdd14eece6e722eb9894a97a4b6d2dcd Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ProBuilderGUI_UV_Manip_Off.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ProBuilderGUI_UV_Manip_On.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ProBuilderGUI_UV_Manip_On.png new file mode 100644 index 0000000000000000000000000000000000000000..7139fec2c77a3422284b3eb09ac25cf24a344996 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ProBuilderGUI_UV_Manip_On.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ProBuilderGUI_UV_RenderUVTemplate.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ProBuilderGUI_UV_RenderUVTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..087e4142960213781f381f951d5303658f15e47a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ProBuilderGUI_UV_RenderUVTemplate.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ProBuilderGUI_UV_ShowTexture_Off.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ProBuilderGUI_UV_ShowTexture_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..f21fb058b20dc4916504331a4811347de80e9697 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ProBuilderGUI_UV_ShowTexture_Off.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ProBuilderGUI_UV_ShowTexture_On.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ProBuilderGUI_UV_ShowTexture_On.png new file mode 100644 index 0000000000000000000000000000000000000000..f061b1150a63f6ee83c65ff5138bade5e83ef4a1 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/ProBuilderGUI_UV_ShowTexture_On.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Grow.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Grow.png new file mode 100644 index 0000000000000000000000000000000000000000..25bb4f3af17bdac09c4b8f2eea385af6cd0949b2 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Grow.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Invert.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Invert.png new file mode 100644 index 0000000000000000000000000000000000000000..94d187c49dd79182d6e0ae79e3d8bd64048000a8 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Invert.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Loop.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Loop.png new file mode 100644 index 0000000000000000000000000000000000000000..30b72d22b58ed1efa161272c0907258842e6a5f3 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Loop.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Loop_Face.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Loop_Face.png new file mode 100644 index 0000000000000000000000000000000000000000..7fb0cb2a42596e3972dc7c2b8ae91ed6c088b27f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Loop_Face.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Rect_Complete.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Rect_Complete.png new file mode 100644 index 0000000000000000000000000000000000000000..5e05aac62934660011ba93d3b101a927c46a541c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Rect_Complete.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Rect_Intersect.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Rect_Intersect.png new file mode 100644 index 0000000000000000000000000000000000000000..de09a8eb1bc8446519577ce6497bc553361e462c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Rect_Intersect.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Ring.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Ring.png new file mode 100644 index 0000000000000000000000000000000000000000..805ee59885889aa3e3e0c925f2396823505ecbfc Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Ring.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Ring_Face.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Ring_Face.png new file mode 100644 index 0000000000000000000000000000000000000000..559793811a08fefe0c4b6219c67ea52909f18a75 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Ring_Face.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectByMaterial.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectByMaterial.png new file mode 100644 index 0000000000000000000000000000000000000000..7717c66498a88130638107ca690f4c70cd86530b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectByMaterial.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectBySmoothingGroup.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectBySmoothingGroup.png new file mode 100644 index 0000000000000000000000000000000000000000..083dbb90456ab40f5cdcb328637ce5a98f7f7938 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectBySmoothingGroup.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectByVertexColor.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectByVertexColor.png new file mode 100644 index 0000000000000000000000000000000000000000..701c02d8128f12c65b817ac3f9920e41831ec397 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectByVertexColor.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectHidden-OFF.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectHidden-OFF.png new file mode 100644 index 0000000000000000000000000000000000000000..a54abd791c572205a7d137c800674a9bb315d4c3 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectHidden-OFF.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectHidden-ON.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectHidden-ON.png new file mode 100644 index 0000000000000000000000000000000000000000..1e2011d18ffa3605e8a1e9e6f501a4d9cb4380f5 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectHidden-ON.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectHole.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectHole.png new file mode 100644 index 0000000000000000000000000000000000000000..7ba824ac63dbf783917aa64f066e7bfd885baa88 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_SelectHole.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_ShiftAdd.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_ShiftAdd.png new file mode 100644 index 0000000000000000000000000000000000000000..b99b49f6c0073bb4ced1a98e21e908132f1f514d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_ShiftAdd.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_ShiftDifference.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_ShiftDifference.png new file mode 100644 index 0000000000000000000000000000000000000000..118b3af905e2d1c389acb6ebe9e9f3a07f9735e1 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_ShiftDifference.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_ShiftSubtract.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_ShiftSubtract.png new file mode 100644 index 0000000000000000000000000000000000000000..178fa7e160d60414e3ee583a6b372522154e38a4 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_ShiftSubtract.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Shrink.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Shrink.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d93770cbbd58e6e699547a4bb7413fc48b4b46 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Selection_Shrink.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/SetPivot.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/SetPivot.png new file mode 100644 index 0000000000000000000000000000000000000000..76e18a04089700fe7d4fd0734979f60b3e076d98 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/SetPivot.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Vert_Collapse.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Vert_Collapse.png new file mode 100644 index 0000000000000000000000000000000000000000..38901b685f52f9042e7eee531597c267291b432e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Vert_Collapse.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Vert_Connect.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Vert_Connect.png new file mode 100644 index 0000000000000000000000000000000000000000..f7a5154dd80c5054af4d81dfb0757305dcea2a01 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Vert_Connect.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Vert_Split.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Vert_Split.png new file mode 100644 index 0000000000000000000000000000000000000000..cc974ebd925f5e4543e34f2e383afdd4640b2774 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Vert_Split.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Vert_Weld.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Vert_Weld.png new file mode 100644 index 0000000000000000000000000000000000000000..250bd03bf8f20c4e8ebd4d74e66c80bb8e2da579 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/icons/Vert_Weld.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/info_overlay.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/info_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..5c09f07784c7d3616ffa9ac5390fafd6a2c11294 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/info_overlay.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/lightmap-uv.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/lightmap-uv.png new file mode 100644 index 0000000000000000000000000000000000000000..892ae30c8f32215b6a43faa5f525f1d10f8b7a7d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/lightmap-uv.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/material-tools-palette.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/material-tools-palette.png new file mode 100644 index 0000000000000000000000000000000000000000..c1df71a632baaeb92229dca3e8dbc8a9f13e714d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/material-tools-palette.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/material-tools-quick.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/material-tools-quick.png new file mode 100644 index 0000000000000000000000000000000000000000..21f49eef18a4ce37a86d7e649dfdcf25ef640aa3 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/material-tools-quick.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/material-tools.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/material-tools.png new file mode 100644 index 0000000000000000000000000000000000000000..cb19db7c58e146b0c775503bb876da365f05ac07 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/material-tools.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-actions.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-actions.png new file mode 100644 index 0000000000000000000000000000000000000000..5258cefe1e67afe71790b3616ac5adc47d831b5d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-actions.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-debug.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-debug.png new file mode 100644 index 0000000000000000000000000000000000000000..2fe7ceeb840ab66fd9d0cf16a6e4c2f0511b9c9e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-debug.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-dimover.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-dimover.png new file mode 100644 index 0000000000000000000000000000000000000000..516d89b159450bed05185749c6a58b60f9a8210b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-dimover.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-editors.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-editors.png new file mode 100644 index 0000000000000000000000000000000000000000..59ede7486c33c172ae491ad83e1fd608f0840662 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-editors.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-experimental.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-experimental.png new file mode 100644 index 0000000000000000000000000000000000000000..0489d73ce2e20f83e1e079f50fd47ed414214015 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-experimental.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-export.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-export.png new file mode 100644 index 0000000000000000000000000000000000000000..56ab5fc9739ab8b888e74af3dd23732d1640411a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-export.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-geometry.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-geometry.png new file mode 100644 index 0000000000000000000000000000000000000000..30a748578f4b40b6845354a50fe8764599bae5a7 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-geometry.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-interaction.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-interaction.png new file mode 100644 index 0000000000000000000000000000000000000000..71801338b7fcf2ffa72a11e9563b328cf46a6c80 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-interaction.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-materials.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-materials.png new file mode 100644 index 0000000000000000000000000000000000000000..f387cbda9ea5692dbb268bdbc341c8c47e817643 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-materials.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-object.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-object.png new file mode 100644 index 0000000000000000000000000000000000000000..90dda76edf494d6c59586efec0889d7aaab8c54f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-object.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-open.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-open.png new file mode 100644 index 0000000000000000000000000000000000000000..3746ff7452ba94f108251b9fee5a01cef7815a51 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-open.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-repair.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-repair.png new file mode 100644 index 0000000000000000000000000000000000000000..eee8ad5e9beb9815069ac3e3391e1931c88c259c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-repair.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-selection.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-selection.png new file mode 100644 index 0000000000000000000000000000000000000000..22fec087c7e05a48f45f6b13e09aac54e88cfcc9 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-selection.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-vertexcolors.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-vertexcolors.png new file mode 100644 index 0000000000000000000000000000000000000000..60a98da3d90dc6eaddaf83bd7c866aae4b837fa7 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/menu-vertexcolors.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/overview-ui.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/overview-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..45fffb81556818e70a9b5e6a8d29ff8eb33e676f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/overview-ui.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_comp.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_comp.png new file mode 100644 index 0000000000000000000000000000000000000000..822a7b6efeb0c4b741339c629a6e68c36dae81ac Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_comp.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_editors.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_editors.png new file mode 100644 index 0000000000000000000000000000000000000000..9942edf15968c4d1be72c441ff40cf0f1ed75d54 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_editors.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_hotkeys.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_hotkeys.png new file mode 100644 index 0000000000000000000000000000000000000000..a570cf0998b6389a03575faa83f3f8ba28701fef Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_hotkeys.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_menu.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..2250d29d8cef8a4cbe068dd5ea81b12cd21198d8 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_menu.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_options.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_options.png new file mode 100644 index 0000000000000000000000000000000000000000..e41ebe568e26ecf83e723ca048465129184696c7 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_options.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_transform.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_transform.png new file mode 100644 index 0000000000000000000000000000000000000000..556d712b8a468c85ca5b4bb647816f3919f81ee1 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/pb_transform.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/preferences.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/preferences.png new file mode 100644 index 0000000000000000000000000000000000000000..ab1564d197d3ee8a9bd1d0839ee95a740f471e5d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/preferences.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_editing.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_editing.png new file mode 100644 index 0000000000000000000000000000000000000000..488192a5a91f459d90a7fdeeaacfc597bec959a3 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_editing.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_experimental.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_experimental.png new file mode 100644 index 0000000000000000000000000000000000000000..15a03bdcc904dd3492e0a4648a7698cc85357409 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_experimental.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_general.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_general.png new file mode 100644 index 0000000000000000000000000000000000000000..aa3396bdd52ca5b767c615a0f1e0dabc2792eb6a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_general.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_graphics.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_graphics.png new file mode 100644 index 0000000000000000000000000000000000000000..18e13c00556ccfa26dc57c2329b131ad5ee3be7a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_graphics.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_settings.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..cea16cc21c01655c64d7f90076352dd59d0daa85 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_settings.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_shortcuts.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_shortcuts.png new file mode 100644 index 0000000000000000000000000000000000000000..5a4d9eab9ddf8d941bbc043862df7de4a4f64d46 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_shortcuts.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_toolbar.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..9c70a5ef8344e2a160bec4810f1dcc966f04f06a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_toolbar.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_uvs.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_uvs.png new file mode 100644 index 0000000000000000000000000000000000000000..ff3194c99691501184d0914c50e47da59a40d1ab Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/prefs_uvs.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/probuilder_unitylogo.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/probuilder_unitylogo.png new file mode 100644 index 0000000000000000000000000000000000000000..2b71e9badd1419fcabb5728aa6f6862bdbe69685 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/probuilder_unitylogo.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool.png new file mode 100644 index 0000000000000000000000000000000000000000..81bd91ed7ac91e2498e5cbb1b8507e62a82548d1 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_arch-props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_arch-props.png new file mode 100644 index 0000000000000000000000000000000000000000..507e50098821492d7edf10ec279eff1f087b659a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_arch-props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_arch.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_arch.png new file mode 100644 index 0000000000000000000000000000000000000000..ef62c5a7a2fa888e4a25612930eab26ea241b303 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_arch.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cone-props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cone-props.png new file mode 100644 index 0000000000000000000000000000000000000000..42cb9e69e63750733425274f0f854884796086b4 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cone-props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cone.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cone.png new file mode 100644 index 0000000000000000000000000000000000000000..c63e0ee21fe20c22928c83d9601d8af7263fd9ab Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cone.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cube-props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cube-props.png new file mode 100644 index 0000000000000000000000000000000000000000..d423a7cc5f67fb65263a2e8935be7c7a17da0e37 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cube-props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cube.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cube.png new file mode 100644 index 0000000000000000000000000000000000000000..67270a1a3b724990855307b41557e0d7c1d129ee Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cube.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cylinder-props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cylinder-props.png new file mode 100644 index 0000000000000000000000000000000000000000..16110d07a3f5b162e9acd6907183c343a103c06c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cylinder-props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cylinder.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cylinder.png new file mode 100644 index 0000000000000000000000000000000000000000..607de98f5cc68d611a35c1ef4b468ebb41d9554b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_cylinder.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_door-props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_door-props.png new file mode 100644 index 0000000000000000000000000000000000000000..2f3da45574daf8356004c9e51e2f71d47ee29edc Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_door-props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_door.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_door.png new file mode 100644 index 0000000000000000000000000000000000000000..f33cde7e684a1273c2977f548af8af58c0fc2f3e Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_door.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_pipe-props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_pipe-props.png new file mode 100644 index 0000000000000000000000000000000000000000..e607075457496f24cabeb4f63e72c6d7b30bc6ff Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_pipe-props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_pipe.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_pipe.png new file mode 100644 index 0000000000000000000000000000000000000000..cc4c5d6386288e661d367f489d90c6cfebb03ab5 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_pipe.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_plane-props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_plane-props.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2e775944929b2a3b875a8a78bf78a3b45fc735 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_plane-props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_plane.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_plane.png new file mode 100644 index 0000000000000000000000000000000000000000..68d1296a9a2db6466f922a80d8ee64494a446e70 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_plane.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_preview.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..90e312ef73d327023d1476a5db6d4a26beed1807 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_preview.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_prism-props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_prism-props.png new file mode 100644 index 0000000000000000000000000000000000000000..6e17646d0c65b7799c17ca8cf2e100aad3e5e14a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_prism-props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_prism.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_prism.png new file mode 100644 index 0000000000000000000000000000000000000000..fb232ce9acef708c959abef5964cb7c2cb4403a4 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_prism.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_sphere-props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_sphere-props.png new file mode 100644 index 0000000000000000000000000000000000000000..c1a3a1f58b9e2332946ddd5a6388ce3209a05720 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_sphere-props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_sphere.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_sphere.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdc28bd3ef092dafd0df8d42d1186ff4900f22b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_sphere.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_sprite-props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_sprite-props.png new file mode 100644 index 0000000000000000000000000000000000000000..ec9f143ea725745f6ce0b3b2a46f676e97e7605f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_sprite-props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_sprite.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..189071c0723f3cefe9bf75cef0c5e808cb0f54f0 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_sprite.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_stair-props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_stair-props.png new file mode 100644 index 0000000000000000000000000000000000000000..8de9089c10af2b63c5c5161c244e4bec9f489817 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_stair-props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_stair.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_stair.png new file mode 100644 index 0000000000000000000000000000000000000000..01285974e0ae63dbc3bd7c6bb066168e0d5b97a4 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_stair.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_torus-props.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_torus-props.png new file mode 100644 index 0000000000000000000000000000000000000000..54f33d49816a7976d1aba9fe787785b9c8d2fb6d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_torus-props.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_torus.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_torus.png new file mode 100644 index 0000000000000000000000000000000000000000..55aa97f611fce9ad97bdaebb115800b0e979db6a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/shape-tool_torus.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/texmat-create.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/texmat-create.png new file mode 100644 index 0000000000000000000000000000000000000000..f3acf51e0439a899996485b62062e93d894b6102 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/texmat-create.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_edges.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_edges.png new file mode 100644 index 0000000000000000000000000000000000000000..21186eaecbb1a68ac3752d9801c1c6caca8c7026 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_edges.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_faces.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_faces.png new file mode 100644 index 0000000000000000000000000000000000000000..27e056718ac3f62d778423cf42b7c8d1b697eb40 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_faces.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_objects.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_objects.png new file mode 100644 index 0000000000000000000000000000000000000000..4f5c5c609241235f025134e4d707050407340b98 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_objects.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_panels.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_panels.png new file mode 100644 index 0000000000000000000000000000000000000000..c56fa44233e3ca8a6d7f280dfac29e50a822c78b Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_panels.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_selection.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_selection.png new file mode 100644 index 0000000000000000000000000000000000000000..f9343de134c5901c33eedc62f0f0519a4a4bcdf4 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_selection.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_vertices.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_vertices.png new file mode 100644 index 0000000000000000000000000000000000000000..86fc0a32abae7a837a81414c5e16bdc1de912ff9 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/tool_vertices.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/toolbar_editmode.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/toolbar_editmode.png new file mode 100644 index 0000000000000000000000000000000000000000..1527dc2315d48103326189e1cd6aed7c4d12b409 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/toolbar_editmode.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/toolbar_main.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/toolbar_main.png new file mode 100644 index 0000000000000000000000000000000000000000..7a2634ebe013fb081dee271bf954082be6c8edfe Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/toolbar_main.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/toolbar_text_v_icon.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/toolbar_text_v_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..92f0ee2f9bd74b75638254ee9a1df5af29ca6252 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/toolbar_text_v_icon.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/vertex-positions.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/vertex-positions.png new file mode 100644 index 0000000000000000000000000000000000000000..be147ca9648cb90ec4902d7163c75bf43c42c8c6 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/vertex-positions.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/vertex-positions_example.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/vertex-positions_example.png new file mode 100644 index 0000000000000000000000000000000000000000..abcc8cae06a904132b657a0a9c804f0d7cc74ce3 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/images/vertex-positions_example.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/index.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/index.md new file mode 100644 index 0000000000000000000000000000000000000000..f612b99ae893b2df4eb2e8dd63bd46a20e00252e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/index.md @@ -0,0 +1,26 @@ +# About ProBuilder + +You can build, edit, and texture custom geometry in Unity with the tools available in the ProBuilder package. You can also use ProBuilder to help with in-scene level design, prototyping, collision Meshes, and play-testing. + +ProBuilder also comes with a [Scripting API](api.md), so that you can write C# scripts to make your own tools and customizations. + + + +Some of the advanced features include: + +* [UV editing and texture mapping](workflow-texture-mapping.md) +* [Applying Vertex Colors](workflow-vertexcolors.md) +* [Creating parametric shapes](workflow-create.md) + +In addition, the ProBuilder package includes a [Model export feature](workflow-exporting.md), which you can use to tweak your levels in any 3D modeling software. + + + +## Document revision history + +| Date | Reason | Version | +|:---|:---|:---| +| December 19, 2018 | Major restructuring, added overviews, verified package documentation to match version number. | 4.0.0 | +| May 15, 2018 | Edited, performed some restructuring. | 3.0.8 | +| Jan 31, 2018 | Installation instructions updated, minor tweaks to wording. | 3.0.0 | +| Nov 9, 2017 | Document created. | 2.9.8 | diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/installing.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/installing.md new file mode 100644 index 0000000000000000000000000000000000000000..827c6e1fb4c75c4ec28d95b36bc64c53869a7306 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/installing.md @@ -0,0 +1,23 @@ +# Installing ProBuilder + +Before you begin the following procedure, make sure that you have no errors in the [Console](https://docs.unity3d.com/Manual/Console.html) window (in red text). + +To install this package: + +1. Open the Package Manager (in Unity's top menu: **Window** > **Package Manager**). + +2. Enter **ProBuilder** in the search box. + +3. Click **ProBuilder** in the package list (left side), then click the **Install** button in the package details (right side). + +4. To verify that ProBuilder is correctly installed, open the ProBuilder toolbar (from Unity's top menu: **Tools** > **ProBuilder** > **ProBuilder Window**). + + If you don't see the **ProBuilder Window** menu item, then ProBuilder did not install correctly. + + + +## Compatibility with Unity versions + +This version of ProBuilder is only compatible with Unity version 2018.3 and later. + +If you are running Unity version 2019.1, you must use the ProBuilder package version 4.0 or later. \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/lightmap-uv.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/lightmap-uv.md new file mode 100644 index 0000000000000000000000000000000000000000..f5be8655cc7e7a53dea03e42027071ce2ba6e1bf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/lightmap-uv.md @@ -0,0 +1,13 @@ +#  Lightmap UV Editor window + +The Lightmap UV Editor window contains the __Auto Lightmap UVs__ setting. Use this to set whether or not you want ProBuilder to automatically rebuild lightmap UVs every time the Mesh changes for this Project. You can also toggle this setting on the [ProBuilder Preferences window](preferences.md#autouvs). + +To open this window, launch the [toolbar option](overview-ui.md#pb_options) on the **Lightmap UVs** button ( ) from the [ProBuilder toolbar](toolbar.md). + +> **Tip:** You can also access this window from the ProBuilder menu (**Tools** > **ProBuilder** > **Editors** > **Open Lightmap UV Editor**). + +This is a very useful setting to enable, because it removes the process of manually building lightmap UVs. However, it can also be very resource-intensive, especially for older or less powerful systems. If __Auto Lightmap UVs__ has a heavy impact on performance, it might be more efficient to disable __Auto Lightmap UVs__ and just use the [Lightmap UVs](Object_LightmapUVs.md) tool ( ) when you need it. + + + +> **Tip:** When one of the Meshes in any open Scene is missing lightmap UVs, the **Lightmap UV Settings** window displays a warning message and the **Build Missing Lightmap UVs** button. As soon as you click the button, ProBuilder builds the lightmap UVs and then hides the button and the message. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/links.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/links.md new file mode 100644 index 0000000000000000000000000000000000000000..3f8bb641568609cf15fae0a8fb3c7b49cf6c5c93 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/links.md @@ -0,0 +1,12 @@ +# Helpful links + +ProBuilder follows many of the same conventions as other 3D modeling software, so if you are an experienced 3D artist, you can read the [ProBuilder toolbar](toolbar.md) section and begin using the ProBuilder tools right away. + +If you are new to 3D modeling, ProBuilder is a great way to learn. You can watch the tutorial videos on the Unity [Youtube playlist](https://www.youtube.com/playlist?list=PLrJfHfcFkLM8PDioWg_5nmUqQycnVmi58) to get started. + +* [Tutorials and documentation](https://docs.unity3d.com/Packages/com.unity.probuilder@4.0/manual/index.html) +* [Support forum](https://forum.unity.com/forums/world-building.146/) +* [Twitter](http://www.twitter.com/probuilder3d) + +<!-- @DEVNOTE: The Tutorials and documentation links to the documentation only. It would be great to create a new ProBuilder YouTube channel where we could promote the most recent videos. --> + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/manual-uvs-actions.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/manual-uvs-actions.md new file mode 100644 index 0000000000000000000000000000000000000000..62d7bea9b83a7966c7ab17e113715b0bcba416e0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/manual-uvs-actions.md @@ -0,0 +1,162 @@ +# Actions panel: Manual UV Mode + +In Manual mode, the **Actions** panel displays the **UV Mode: Manual** label and the manual UV manipulation tools. The Manual mode provides the following tools to help you with texture mapping: + +* The [Project UVs](#Project) section provides different UV projection methods. +* The [Selection](#Selection) section allows you to expand which UV elements are selected. +* The [Edit](#Edit) section provides manipulation tools. + + + +To access this panel, either click the **Convert to Manual** button from the [Actions panel in Auto UV Mode](auto-uvs-actions.md), or click the  **UV Vertex** or  **UV Edge** [edit mode buttons](edit-mode-toolbar.md). + +> **Tip:** If you get to the point where you have been making a lot of edits and something seems wrong but you're not sure how to fix it, you can clear all the edits. To do this, navigate to the **UV Mode: Auto** Actions panel and click the **Reset UVs** button. + +To switch back to the **Actions** panel in **Auto UV Mode** and convert all selected faces to [Auto UVs](auto-uvs-actions), click the **Convert to Auto** button. + +> **Tip:** Before you start to manipulate UVs manually, make sure you delete any faces that you don't need. For example, if you have a box that is sitting against the wall and doesn't move, delete the face pressed up aganst the wall. It is a waste of resources to render faces that aren't visible. + + + +<a name="Project"></a> + +## Project UVs + +Select how you want ProBuilder to project the UVs: using the **Planar** or **Box** projection method. + +### Planar + +Unwraps the selected face(s) using a Planar projection method. + + + +Planar projection draws the texture on an entire image as if it is projected from a single plane. That is, image travels perpendicularly from the virtual projection plane onto the surface. + + +### Box + +Unwraps the selected face(s) using a Box projection method. + + + +Box projection is like applying planar projection from all six planes at once. This type of projection is ideal for boxes and other 3-dimensional flat objects. + + + +<a name="Selection"></a> + +## Selection + +There are two selection helpers you can use to expand which UV elements are selected: **Select Island** and **Select Face**. + + +### Select Island + +With a UV element selected, click this to expand the selection so that it includes all other connected UV elements. + + + + +### Select Face + +With a Vertex or Edge selected, click to select all elements on the same face. + + + + + +<a name="Edit"></a> + +## Edit + +ProBuilder provides a number of manual manipulation tools for working in the UV Editor: [welding](#Weld) vertices; [splitting](#Split) and [collapsing](#Collapse) UVs; flipping UV elements [horizontally](#Horizontal) and [vertically](#Vertical); and [resizing](#Fit) UV elements to match the UV space. + +<a name="Weld"></a> + +### Weld + +**Weld** collapses selected vertices together, but only if they are within a set distance. + +To adjust the distance modifier, click the **+** button on the right side of the **Weld** button. + + + +For example, it is good practice to use a low value, such as 0.01. Then you can select all of the UVs at the same time and use the **Weld** tool to reduce duplicate UV vertices. This is an important step if you are planning on autostitching, because it requires faces to be adjacent, and duplicate edges produce undesired results. + +<a name="Collapse"></a> + +### Collapse UVs + +**Collapse UVs** collapses all selected vertices to a single vertex, regardless of distance. + + + +<a name="Split"></a> + +### Split UVs + +**Split UVs** breaks off the selected UV element(s) from any UV element(s), so that you can manipulate them independently. + + + +<a name="Horizontal"></a> + +### Flip Horizontal + +**Flip Horizontal** flips the selected UV element(s) in the horizontal direction. + + + +<a name="Vertical"></a> + +### Flip Vertical + +**Flip Vertical** flips the selected UV element(s) in the vertical direction. + + + +<a name="Fit"></a> + +### Fit UVs + +Use **Fit UVs** to scale and move the selected UV element(s) to fit them exactly within the UV space. + + + +<a name="continue"></a> + +### Autostitching + +Usually, to unwrap UV faces, you need to manually position each one individually and weld the UV vertices together. **Autostitching** performs this automatically. + +You can autostitch any two adjacent faces together. To do this, follow this procedure: + +1. Select a face in the Scene view. + +2. Open the UV Editor window and switch to UV Face editing mode. + +3. Select a face on the Mesh and then **Ctrl+Click** a face that shares an edge with the current selection. + + > **Important:** Use the **Ctrl** key for both macOS and Windows. + +4. You can continue to **Ctrl+Click** one face at a time as long as it is adjacent to the selected face. + +Autostitching allows you to control how ProBuilder projects the Texture image across the Mesh. It is like building a UV quilt that uses [planar projection](#Project). + + + +<a name="copy-uvs"></a> + +### Copy UVs + +You can copy UVs from one face to another. For example, if you are working on a barrel and you want to copy the UVs from the top face to the bottom, follow these steps: + +1. Open the UV Editor. ProBuilder can only perform UV editing tasks when the UV Editor is open. + +2. In the Scene view, select the face you want to copy from. + +3. **Ctrl+Shift+Click** on the face you want to copy to. + + > **Important:** Use the **Ctrl** key for both macOS and Windows. + +4. You can continue to **Ctrl+Shift+Click** each face you want to copy to. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/material-tools.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/material-tools.md new file mode 100644 index 0000000000000000000000000000000000000000..7f19facf3dafdeb506ccaa8faf273db4e7ceab83 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/material-tools.md @@ -0,0 +1,154 @@ +#  Material Editor window + +Use the **Material Editor** window to apply Materials to objects or faces. + + + + Use the [Quick Material](#quick) section to set up a Material to apply with a button or a hotkey. + + Use the [Material Palette](#palette) section to designate several Materials to use with buttons or hotkeys. You can also save and load new Palettes, and add more slots to use for Materials. + +To open this window, navigate to the [ProBuilder toolbar](toolbar.md) and click the **Material Editor** button (  ). + +> **Tip:** You can also access this tool from the ProBuilder menu (**Tools** > **ProBuilder** > **Editors** > **Open Material Editor**). + +For an overview of working with Materials and texture mapping, see [Materials, Shaders, Textures, and UVs](workflow-texture-mapping.md). + + + +<a name="quick"></a> + +## Quick Material + +The **Quick Material** section allows you to specify a Material to apply with either the hotkey combination or the **Apply** button. + + + + You can [set a reference to the Material](#qset) to use as the *quick* Material. + + ProBuilder shows a preview when you set a quick Material. + +> **Note:** If you are working in Windows, this preview might not appear. + + With a quick Material defined, any time you click **Apply**, ProBuilder [applies the quick Material](#qapply) to the selected faces. Alternatively, you can hold down **Ctrl/Cmd+Shift** and click on a face to apply the quick Material to the clicked face. + + Click **Match Selection** to change the quick Material to match the Material that is already on the selected face. + + + +<a name="qset"></a> + +### Setting a quick Material + +To set a quick Material, set a reference to a Material Asset you want to use as the quick Material. You can drag in the Asset from the Project view or use the object picker next to the reference property. + +If there's a face on a GameObject in the Scene that is already using the Material you want to set as quick, select that face and click the **Match Selection** button. + +<a name="qapply"></a> + +### Applying the quick Material + +To apply the quick Material: + +1. Select the object or face(s) you want to apply the quick Material to. +2. Click the **Apply** button or use the **Ctrl/Cmd+Shift+Click** hotkey combination. + + + +<a name="palette"></a> + +## Material Palette + +A Material Palette is a convenient way to keep several Materials ready to apply, either with the Material Editor or with hotkey combinations. + +You can set up to 10 different Materials on the Palette, or expand the slots in your Palette if you need more. + +You can also save your Palette as a custom Palette and load it in other Scenes or sessions to use it again. + + + + Create a new Material Palette or select a saved Palette to load from the Palette drop-down menu. + + Set a reference to the Material Palette you want to load. + + Use one of the buttons to apply the associated Material to the selected face(s). Alternatively, you can use the hotkey displayed on the button (**Alt/Opt+#**). + + Set a reference to the Material you want to use in this slot of the Material Palette. + + To delete an extra slot, click the red square on the right edge of the button. + + Click **Add** to add a new slot to the Material Palette. + + + +<a name="set"></a> + +### Defining Materials on a Palette + +To set Materials on your Palette, set a reference to a Material Asset you want to use in a specific Material slot. You can drag in the Asset from the Project view or use the object picker next to the reference property. + +<a name="apply"></a> + +### Applying Material from the Palette + +To apply a specific Material from the Palette: + +1. Select the object or face(s) you want to apply the Material to. +2. Click the button to the left of the Material you want to apply. For example, if you want to apply the Material in the third slot, click the button that displays **Alt + 3**. + +> **Tip:** You can find the number of the Material preset on each slot's button. Then you can use that number to apply its Material directly using either of these methods: +> +> * Use the **Alt/Opt+#** hotkey. +> * Select the Material preset from the ProBuilder menu (**Tools** > **ProBuilder** > **Materials** > **Apply Material Preset #**). + + + +<a name="wells"></a> + +### Defining your own Material slots in your Palette + +By default, the Material Palette provides 10 slots (numbered 1 to 0) for your Materials. However, if you need to add more slots to your Palette, you can add any number of extra slots using this procedure: + +1. Click the **Add** button at the bottom of the **Material Editor** window. + + A new slot appears with an **Apply** button on the left and the Material picker on the right. + +2. Pick your new Material to use in the new slot. + +> **Note:** You can't set up new hotkeys for the new slots but you can click their buttons in the Material Editor to apply them. + + + +To remove any extra slots from your Palette: + +* Click the red square on the right side of the **Apply** button. + + + +<a name="save"></a> + +### Saving a custom Palette + +To save the current Palette to an Asset file: + +1. In the **Material Palette** drop-down menu, select **New Material Palette**. + + A new file with the default name of `Material Palette.asset` appears under the `Assets` folder in the **Project** view. + +2. (Optional) Change the filename to something that helps you identify it for future use. + +> **Warning:** As soon as you make a change to your Material Palette, ProBuilder automatically saves it to the Palette. + + + +<a name="load"></a> + +### Loading a custom Palette + +All Material Palette Asset files in the current Project appear as menu items in the **Material Palette** drop-down menu in the **Material Editor** window. + +To load a saved Material Palette from file: + +* Select the saved palette by name from the **Material Palette** drop-down menu. + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-actions.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-actions.md new file mode 100644 index 0000000000000000000000000000000000000000..086716f62d3d9be13ad0478f1de18bc3175a9bfa --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-actions.md @@ -0,0 +1,13 @@ +# Actions + +Use this sub-menu to access editor and component windows. + + + +## Strip All ProBuilder Scripts in Scene + +Removes all ProBuilder scripts from all GameObjects in this Scene, and only leaves the Models. + +## Strip ProBuilder Scripts in Selection + +Removes all ProBuilder scripts from selected GameObjects, and only leaves the Models. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-debug.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-debug.md new file mode 100644 index 0000000000000000000000000000000000000000..22667fb75047dd50b624dda733e2350ad1830a70 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-debug.md @@ -0,0 +1,35 @@ +# Debug + +Use this sub-menu to access the **Log Preferences** window. + + + +Use the **Log Preferences** window to customize how ProBuilder logs messages. The darker color indicates that the setting is enabled (ON); the lighter color indicates that the setting is disabled (OFF). + + [Log Output](#output) defines where ProBuilder writes messages to. + + [Chatty-ness](#chattyness) defines which kind of messages ProBuilder logs. + +<a name="output"></a> + +## Log Output + +__Log Output__ defines where ProBuilder writes messages to: the Unity __Console__ or to a log __File__: + +* Click the __Console__ button to enable writing to the Console. +* Click the __File__ button to enable writing to a file. When the **File** output target is enabled, the **Log Path** widget and the **open** button are enabled. +* To set the __Log Path__, click the __...__ button and select a folder for the log file. This widget is only available if the **File** button is ON. +* Click the **open** button to open the saved __ProBuilderLog.txt__ log file. This button is only available if the **File** button is ON. + +By default, ProBuilder writes messages only to the __Console__. + +<a name="chattyness"></a> + +## Chatty-ness + +The __Chatty-ness__ section defines which kind of messages ProBuilder logs: + +* Toggle whether or not ProBuilder logs messages about the following: **Errors**, **Warnings**, **General information**, **Debug messages**, or everything. By default, ProBuilder logs everything, and these buttons are all ON. +* Click the __Clear Log File__ button to reset the saved log file. This deletes all messages that ProBuilder previously logged. + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-dimover.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-dimover.md new file mode 100644 index 0000000000000000000000000000000000000000..8588cf78a1299f6ea0b964a9a6cd3e6ec92d6cc8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-dimover.md @@ -0,0 +1,7 @@ +# Dimensions Overlay + +Show or hide the dimensions for all three axes. + + + +This overlay appears on all Mesh objects, not just ProBuilder Meshes. \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-editors.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-editors.md new file mode 100644 index 0000000000000000000000000000000000000000..3a5101dbe7de54705da10be15b74cb352309823d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-editors.md @@ -0,0 +1,61 @@ +# Editors + +This sub-menu provides access to editor and component windows. + + + +## New Bezier Shape + +Use the **Bezier Shape** component to define a bezier curve around which ProBuilder extrudes a Mesh. + +> **Warning:** Bezier shapes are experimental, meaning that they are still under development, and might reduce ProBuilder's stability. Use these with caution. + +For more information, see the [Bezier Shape](bezier.md) component documentation. + +## New Poly Shape + +Use the **Shape Tool** window to create new ProBuilder Mesh shapes such as cylinders, arches, and stairs. + +For more information, see the [Shape Tool](shape-tool.md) window documentation. + +## Open Lightmap UV Editor + +Use the **Lightmap UV Editor** window to access the settings for generating light map UVs. + +For more information, see the [Lightmap UV Editor](lightmap-uv.md) window documentation. + +## Open Material Editor + +Use the **Material Editor** window to apply materials to objects or faces. + +For more information, see the [Material Editor](material-tools.md) window documentation. + +## Open Shape Editor Menu Item + +Use the **Shape Tool** window to create new ProBuilder Mesh shapes, such as cylinders, arches, and stairs. + +For more information, see the [Shape Tool](shape-tool.md) window documentation. + +## Open Smoothing Editor + +Use the **Smooth Group Editor** window to create a smooth and rounded look, or sharp and hard cornered. + +For more information, see the [Smooth Group Editor](smoothing-groups.md) window documentation. + +## Open UV Editor + +Use the **UV Editor** window to apply textures to objects or faces. You can also use it to automatically or manually wrap and unwrap textures. + +For more information, see the [UV Editor](uv-editor.md) window documentation. + +## Open Vertex Color Editor + +Use the **Vertex Colors** window to apply or paint vertex colors onto Meshes. + +For more information, see the [Vertex Colors](material-tools.md) window documentation. + +## Open Vertex Position Editor + +Use the **Positions Editor** window to enter specific translation coordinates to modify vertex positions. + +For more information, see the [Positions Editor](vertex-positions.md) window documentation. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-experimental.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-experimental.md new file mode 100644 index 0000000000000000000000000000000000000000..12bb8af6695e3337c13af4d34a14e3338f912718 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-experimental.md @@ -0,0 +1,9 @@ +# Experimental + +This sub-menu provides access to experimental tools. + + + +Experimental tools are tools or functions that aren’t quite ready for public use, but are included for users to try out early, and report issues/feedback. + +For more information, see the [Boolean](boolean.md) tool documentation. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-export.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-export.md new file mode 100644 index 0000000000000000000000000000000000000000..4a24c025cabecd132df7ca71b63c5e4f10c12909 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-export.md @@ -0,0 +1,19 @@ +# Export + + + +## Export Asset + +Saves the selection as Unity Mesh `.asset` files. + +## Export Obj + +Exports the selected object(s) in the OBJ format. + +## Export Stl Ascii + +Exports the selected object(s) in the STL ASCII format. + +## Export Stl Binary + +Export the selected object(s) as STL in Binary format. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-geometry.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-geometry.md new file mode 100644 index 0000000000000000000000000000000000000000..fec34a9fab75568bb1d0a5913dc75a7acf0dad8c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-geometry.md @@ -0,0 +1,120 @@ +# Geometry + +This sub-menu provides access to Vertex, Edge, and Face edit mode tools. + + + +## Bevel Edges + +Use the **Bevel** tool to [bevel](Edge_Bevel.md) every edge on the selected face(s). + +For more information, see the [Bevel](Face_Bevel.md) tool documentation. + +## Bridge Edges + +Use the **Bridge Edges** tool to create a new face between two selected edges. + +For more information, see the [Bridge Edges](Edge_Bridge.md) tool documentation. + +## Collapse Vertices + +Use the **Collapse Vertices** tool to colapse all selected vertices to a single point, regardless of distance. + +For more information, see the [Collapse Vertices](Vert_Collapse.md) tool documentation. + +## Conform Face Normals + +Use the **Conform Normals** tool to set all selected face normals to the same relative direction. + +For more information, see the [Conform Normals](Face_ConformNormals.md) tool documentation. + +## Delete Faces + +Use the **Delete Faces** tool to delete the selected face(s). + +For more information, see the [Delete Faces](Face_Delete.md) tool documentation. + +## Detach Faces + +Use the **Detach Faces** tool to detach the selected face(s) from the rest of the Mesh. + +For more information, see the [Detach Faces](Face_Detach.md) tool documentation. + +## Extrude + +In Edge edit mode, use the **Extrude Edges** tool to push a new edge out from each selected edge. + +In Face edit mode, use the **Extrude Faces** tool to pull out the currently selected face and attach sides to each edge. + +For more information, see the documentation for the [Extrude Edges](Edge_Extrude.md) and the [Extrude Faces](Face_Extrude.md) tools. + +## Fill Hole + +In Vertex and Edge editing modes, use the **Fill Hole** tool to create a new face that fills any holes that touch the selected vertices or edges. + +For more information, see the documentation for the [Fill Hole (vertices)](Vert_FillHole.md) and [Fill Hole (edges)](Edge_FillHole.md) tools. + +## Flip Face Edge + +Use the **Flip Face Edge** (**Turn Edges**) tool to swap the triangle orientation on the selected face(s) with four sides. + +For more information, see the [Flip Face Edge](Face_FlipTri.md) tool documentation. + +## Flip Face Normals + +Use the **Flip Face Normals** tool to flip the normals only on the selected face(s). + +For more information, see the [Flip Face Normals](Face_FlipNormals.md) tool documentation. + +## Insert Edge Loop + +Use the **Insert Edge Loop** tool to add a new edge loop from the selected edge(s). + +For more information, see the [Insert Edge Loop](Edge_InsertLoop.md) tool documentation. + +## Merge Faces + +Use the **Merge Faces** tool to merge selected faces into a single face, and remove any dividing edges. + +For more information, see the [Merge Faces](Face_Merge.md) tool documentation. + +## Set Pivot To Selection + +Use the **Set Pivot** tool to move the pivot point of this Mesh to the average center of the selected faces. + +For more information, see the [Set Pivot](Face_SetPivot.md) tool documentation. + +## Smart Connect + +In Vertex edit mode, use the **Connect Vertices** tool to create a new edge connecting the selected vertices. + +In Edge edit mode, use the **Connect Edges** tool to insert an edge connecting the centers of each selected edge. + +For more information, see the documentation for the [Connect Vertices](Vert_Connect.md) and [Connect Edges](Edge_Connect.md) tools. + +## Smart Subdivide + +In Edge edit mode, use the **Subdivide Edges** tool to divide the selected edge(s) into multiple edges. + +In Face edit mode, use the **Subdivide Faces** tool to add a vertex at the center of each edge and connect them in the center. + +For more information, see the documentation for the [Subdivide Edges](Edge_Subdivide.md) and [Subdivide Faces](Face_Subdivide.md) tools. + +## Split Vertices + +Use the **Split Vertices** tool to split a single vertex into multiple vertices (one per adjacent face). + +For more information, see the [Split Vertices](Vert_Split.md) tool documentation. + +## Triangulate Faces + +Use the **Triangulate Faces** tool to reduce selected faces to their base triangles. + +For more information, see the [Triangulate Faces](Face_Triangulate.md) tool documentation. + +## Weld Vertices + +Use the **Weld Vertices** tool to merge selected vertices within a specific distance of one another. + +For more information, see the [Weld Vertices](Vert_Weld.md) tool documentation. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-interaction.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-interaction.md new file mode 100644 index 0000000000000000000000000000000000000000..3726ecccf6365f1d975a3df73318417f28a988d3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-interaction.md @@ -0,0 +1,24 @@ +# Interaction + +This sub-menu provides access to selection interaction tools. + + + +## Toggle Drag Rect Mode + +Use this to set the **Rect** tool to **Complete**. This means that drag selection only selects elements that are fully inside the drag rectangle. + +For more information, see the [Rect](Selection_Rect_Intersect.md) tool documentation. + +## Toggle Drag Selection Mode + +Use this to set the **Rect** tool to **Intersect**. This means that drag selection selects any elements that intersect with the drag rectangle. + +For more information, see the [Rect](Selection_Rect_Intersect.md) tool documentation. + +## Toggle Select Back Faces + +Use the **Select Hidden** tool to define whether drag selection selects or ignores hidden elements. + +For more information, see the [Select Hidden](Selection_SelectHidden.md) tool documentation. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-materials.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-materials.md new file mode 100644 index 0000000000000000000000000000000000000000..8439bbdc887d14ad0f5855376bf8687240501879 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-materials.md @@ -0,0 +1,8 @@ +# Materials + +Use this sub-menu to apply specific Material presets to the selection. + + + +Select the specific Material preset defined on the [Material Editor window](material-tools.md) to [set the associated Material](workflow-materials.md#apply) on the selected object(s) or element(s). + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-object.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-object.md new file mode 100644 index 0000000000000000000000000000000000000000..278a701b6e3d4fa946627614bf2579414ca8acbe --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-object.md @@ -0,0 +1,71 @@ +# Object + +This sub-menu provides access to Object edit mode tools. + + + +## Center Pivot + +Use the **Center Pivot** tool to move the pivot point for the Mesh to the center of the object’s bounds. + +For more information, see the [Center Pivot](CenterPivot.md) tool documentation. + +## Conform Object Normals + +Use the **Conform Normals** tool to set all face normals to the same relative direction. + +For more information, see the [Conform Normals](Object_ConformNormals.md) tool documentation. + +## Flip Object Normals + +Use the **Flip Normals** tool to flip the normals of **all** faces on the selected object(s). + +For more information, see the [Flip Normals](Object_FlipNormals.md) tool documentation. + +## Freeze Transform + +Use the **Freeze Transform** tool to set the selected object's position, rotation, and scale to world-relative origin. + +For more information, see the [Freeze Transform](Freeze_Transform.md) tool documentation. + +## Merge Objects + +Use the **Merge Objects** tool to merge two or more selected ProBuilder GameObjects. + +For more information, see the [Merge Objects](Object_Merge.md) tool documentation. + +## Mirror Objects + +Use the **Mirror Objects** tool to create mirrored copies of objects. + +For more information, see the [Mirror Objects](Object_Mirror.md) tool documentation. + +## Pro Builderize + +Use the **ProBuilderize** tool to convert the selected object(s) into objects you can edit in ProBuilder. + +For more information, see the [ProBuilderize](Object_ProBuilderize.md) tool documentation. + +## Set Collider + +Use the **Set Collider** tool to assign the **Collider Behaviour** script to selected objects. + +For more information, see the [Set Collider](Entity_Trigger.md#Collider) tool documentation. + +## Set Trigger + +Use the **Set Trigger** tool to assign the **Trigger Behaviour** script to selected objects. + +For more information, see the [Set Trigger](Entity_Trigger.md) tool documentation. + +## Subdivide Object + +Use the **Subdivide Object** tool to divide every face on selected objects. + +For more information, see the [Subdivide Object](Object_Subdivide.md) tool documentation. + +## Triangulate + +Use the **Triangulate** tool to reduce all polygons to their base triangles. + +For more information, see the [Triangulate](Object_Triangulate.md) tool documentation. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-open.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-open.md new file mode 100644 index 0000000000000000000000000000000000000000..ecedd69b372c49c58ad3b0ad317b9d1c28120ee1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-open.md @@ -0,0 +1,7 @@ +# ProBuilder Window + +This opens the [ProBuilder toolbar](toolbar.md) and [Edit mode toolbar](edit-mode-toolbar.md) together. + + + +By default, the Edit mode toolbar appears in the upper center of your Unity workspace, and the ProBuilder toolbar appears on the left side. See [Customizing ProBuilder](customizing.md) for information on how to customize the location and appearance of these toolbars and other ProBuilder windows. \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-repair.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-repair.md new file mode 100644 index 0000000000000000000000000000000000000000..74ebd2e2612469319c10cd761f1f971e3730708e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-repair.md @@ -0,0 +1,21 @@ +# Repair + +Use this sub-menu to access several helper scripts that repair problems with ProBuilder Meshes in the Scene. + + + +## Rebuild All ProBuilder Objects + +Rebuilds Mesh representations from stored ProBuilder data for each GameObject in the Scene. If you have a lot of GameObjects in a Scene, this can take a while. + +## Rebuild Shared Indexes Cache + +Discards all shared vertex position data and rebuilds based on proximity. + +## Remove Degenerate Triangles + +Deletes triangles on a Mesh that are either taking up no space, or are duplicates. + +## Convert to Package Manager + +Use this script if you are upgrading an older ProBuilder project to this version. <!-- See [Upgrading from older versions of ProBuilder](installing.md) for more information. --> diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-selection.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-selection.md new file mode 100644 index 0000000000000000000000000000000000000000..b6f663c288381f50393e461810d32cf2d4c5f873 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-selection.md @@ -0,0 +1,60 @@ +# Selection + +This sub-menu provides access to selection modifiers and tools. + + + +## Grow Selection + +Use the **Grow Selection** tool to expand the selection outward to adjacent faces, edges, or vertices. + +For more information, see the [Grow Selection](Selection_Grow.md) tool documentation. + +## Invert Selection + +Use the **Invert Selection** tool to select the inverse of the current selection. + +For more information, see the [Invert Selection](Selection_Invert.md) tool documentation. + +## Select Hole + +Use the **Select Holes** tool to select all elements along the selected open vertex or edge. + +For more information, see the [Select Holes](Selection_SelectHole.md) tool documentation. + +## Select Loop + +In Edge editing mode, use the [Select Edge Loop](Selection_Loop_Edge.md) tool to select an edge loop from each selected edge. + +In Face editing mode, use the [Select Face Loop](Selection_Loop_Face.md) tool to select a face loop from each selected face. + +## Select Material + +Use the **Select by Material** tool to select all faces which have the same Material as the selected face(s). + +For more information, see the [Select by Material](Selection_SelectByMaterial.md) tool documentation. + +## Select Ring + +In Edge editing mode, use the [Select Edge Ring](Selection_Ring_Edge.md) tool to select a ring from each selected edge. + +In Face editing mode, use the [Select Face Ring](Selection_Ring_Face.md) tool to select a face ring from each selected face. + +## Select Smoothing Group + +Use the **Select Smoothing Group** tool to select all faces which belong to the currently selected [smoothing group](smoothing-groups.md). + +For more information, see the [Select Smoothing Group](Selection_SmoothingGroup.md) tool documentation. + +## Select Vertex Color + +Use the **Select by Colors** tool to select all faces on this object which have the same vertex color as the selected face. + +For more information, see the [Select by Colors](Selection_SelectByVertexColor.md) tool documentation. + +## Shrink Selection + +Use the **Shrink Selection** tool to remove the elements on the perimeter of the current selection ([Grow Selection](Selection_Grow.md) in reverse). + +For more information, see the [Shrink Selection](Selection_Shrink.md) tool documentation. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-vertexcolors.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-vertexcolors.md new file mode 100644 index 0000000000000000000000000000000000000000..b5de71d3c03152ea36f5a969fedf74d9de971ce5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu-vertexcolors.md @@ -0,0 +1,8 @@ +# Vertex Colors + +Use this sub-menu to apply specific Vertex Color presets to the selection. + + + +Select the specific vertex color preset defined on the [Vertex Colors window](vertex-colors.md) to [set the associated color](workflow-vertex.md#apply) on the selected object(s) or element(s). + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu.md new file mode 100644 index 0000000000000000000000000000000000000000..e67894b6038fb83acf8c15a69f300a4463b46ebc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/menu.md @@ -0,0 +1,24 @@ +# The ProBuilder menu + +Use the ProBuilder menu to access most of the ProBuilder editors and tools, and the special tools that are only available through this menu. For example, you can access tools to repair and debug ProBuilder, or access the experimental [Boolean](boolean.md) tool. + + + +The ProBuilder menu items include the following: + +* [ProBuilder Window](menu-open.md) +* [Editors](menu-editors.md) +* [Dimensions Overlay](menu-dimover.md) +* [Selection](menu-selection.md) +* [Interaction](menu-interaction.md) +* [Object](menu-object.md) +* [Geometry](menu-geometry.md) +* [Materials](menu-materials.md) +* [Vertex Colors](menu-vertexcolors.md) +* [Experimental](menu-experimental.md) +* [Repair](menu-repair.md) +* [Export](menu-export.md) +* [Debug](menu-debug.md) +* [Actions](menu-actions.md) + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/modes.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/modes.md new file mode 100644 index 0000000000000000000000000000000000000000..d320e4d1185e3bdad39e90de340bb27ca17c8c6f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/modes.md @@ -0,0 +1,43 @@ +# Edit modes (Object vs Element) + +ProBuilder uses **Edit modes** to define what you are selecting and editing. + + + +The **Object** mode is the standard Unity edit mode: when you make a selection in Object mode, you are selecting the entire Mesh. + +The other three modes are collectively called the **Element** modes. These allow you to select and modify the individual elements of the geometry that make up a Mesh: __Vertices__, __Edges__, and __Faces__. + +* A __Vertex__ is a point where two or more angles meet (for example, on a cube, it's the corner point of each cube). +* An **Edge** is made up of two **Vertices**. +* A **Face** is composed of three or more **Edges**. + +An __Object__ is the sum of all of these parts. + +To change Edit modes, click one of the mode buttons on the [Edit mode toolbar](edit-mode-toolbar.md), or use a [mode shortcut key](hotkeys.md). + + + +## Selecting and manipulating + +Use the ProBuilder Edit modes to access the individual elements of your Mesh, or the Mesh as a whole. + +1. Click the button that matches the object or element mode you'd like to edit in from the [Edit mode toolbar](edit-mode-toolbar.md). + + | **Icon Mode** | **Description** | + | ------------------------------------------------------ | ------------------------------------------------------------ | + |  | Select objects, modify the normals and the pivot, and merge objects together. For a complete list of actions you can perform in this mode, see [Object tools](object-actions.md). | + |  | Select vertices and perform detailed editing such as vertex splitting and connecting. For a complete list of actions you can perform in this mode, see [Vertex tools](vertex.md). | + |  | Select edges and perform semi-complex geometry editing, and edge loop modeling techniques. For a complete list of actions you can perform in this mode, see [Edge tools](edge.md). | + |  | Select faces on an object to perform basic tasks like moving, extruding, or even deleting them. For a complete list of actions you can perform in this mode, see [Face tools](face.md). | + +2. Click or drag to select the element you want to use. + +3. With the object(s) or element(s) selected, you can: + + * Use one of the tools on the [ProBuilder toolbar](toolbar.md) to apply an action to the selected element(s). + * Use one of the tools on the [ProBuilder menu](menu.md) to apply an action to the selected element(s). + * Use one of the [ProBuilder hotkeys](hotkeys.md) to run one of the [ProBuilder tools](ref_tools.md) on the selected element(s). + * Use any of the standard Unity Transform controls to move, rotate, or scale the element(s). + * **Shift+Drag** while using any of the standard Unity Transform controls to extrude or inset the element(s). + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/object-actions.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/object-actions.md new file mode 100644 index 0000000000000000000000000000000000000000..43fcc2aef6e5a5ba05db2cb096e8345ae050ef1a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/object-actions.md @@ -0,0 +1,73 @@ +# Object Actions + +This section of the ProBuilder toolbar provides access to ProBuilder editing tools that you can use in the [Object edit mode](modes.md). + + + +> **Note:** Some actions also have extra options or custom settings available. These tool buttons have a special indicator in the top right corner. The documentation for each tool includes information about these options. + +##  Triangulate + +Use the **Triangulate** tool to reduce all polygons to their base triangles. + +For more information, see the [Triangulate](Object_Triangulate.md) tool documentation. + +##  Conform Normals + +Use the **Conform Normals** tool to set all face normals to the same relative direction. + +For more information, see the [Conform Normals](Object_ConformNormals.md) tool documentation. + +##  Lightmap UVs + +Use the **Lightmap UVs** tool to generate any missing lightmap UVs for Meshes. + +For more information, see the [Lightmap UVs](Object_LightmapUVs.md) tool documentation. + +##  Export + +Use the **Export** tool to [export](workflow-exporting.md#export) the selected ProBuilder object(s) to a 3D Model file. + +For more information, see the [Export](Object_Export.md) tool documentation. + +##  ProBuilderize + +Use the **ProBuilderize** tool to convert the selected object(s) into objects you can edit in ProBuilder. + +For more information, see the [ProBuilderize](Object_ProBuilderize.md) tool documentation. + +##  Center Pivot + +Use the **Center Pivot** tool to move the pivot point for the Mesh to the center of the object’s bounds. + +For more information, see the [Center Pivot](CenterPivot.md) tool documentation. + +##  Mirror Objects + +Use the **Mirror Objects** tool to create mirrored copies of objects. + +For more information, see the [Mirror Objects](Object_Mirror.md) tool documentation. + +##  Merge Objects + +Use the **Merge Objects** tool to merge two or more selected ProBuilder Meshes. + +For more information, see the [Merge Objects](Object_Merge.md) tool documentation. + +##  Flip Normals + +Use the **Flip Normals** tool to flip the normals of **all** faces on the selected object(s). + +For more information, see the [Flip Normals](Object_FlipNormals.md) tool documentation. + +##  Freeze Transform + +Use the **Freeze Transform** tool to set the selected object's position, rotation, and scale to world-relative origin. + +For more information, see the [Freeze Transform](Freeze_Transform.md) tool documentation. + +##  Subdivide Object + +Use the **Subdivide Object** tool to divide every face on selected objects. + +For more information, see the [Subdivide Object](Object_Subdivide.md) tool documentation. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/overview-ui.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/overview-ui.md new file mode 100644 index 0000000000000000000000000000000000000000..349c083d8134c52f9761aaa83c6a0e769ae4a44f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/overview-ui.md @@ -0,0 +1,83 @@ +# Interacting with ProBuilder + + + +ProBuilder provides several ways to interact with the tools: + + The [Scene Information](#sceneinfo) + + The [ProBuilder menu](menu.md) + + [ProBuilder hotkeys](hotkeys.md) + + [Editor windows](#pb_editors) + + The [ProBuilder Preferences](preferences.md) window + + [Transform tools](#pb_transform) for ProBuilder + + The [ProBuilder toolbar](toolbar.md) and the [Edit mode toolbar](edit-mode-toolbar.md) + + [ProBuilder tool options](toolbar.md#pb_options) + + [ProBuilder component](#pb_comp) windows + + + + + +<a name="sceneinfo"></a> + +## Scene Information + + + +**Scene Information** displays information about the Meshes in the Scene, and which elements are selected. + +To toggle this on or off, use the **Show Scene Info** setting in the [Preferences](preferences.md#info_overlay). + + + +<a name="pb_editors"></a> + +## Editor windows + + + +Editor windows provide [tools or features](tool-panels.md) with extended functionality. For example, the UV Editor window (in the example image above) allows you to perform advanced texture manipulations, including texture mapping, UV unwrapping, and tiling. + +To access these windows, use the [Probuilder menu](menu.md), [hotkeys](hotkeys.md), or the tool panel section of the [ProBuilder toolbar](toolbar.md). + + + +<a name="pb_comp"></a> + +## Component windows + + + +There are two component windows in ProBuilder that help define topology: + +* [Poly Shape](polyshape.md) +* [Bezier shape](bezier.md) (Experimental) + +These components provide the ability to re-edit the base shape as many times as necessary. However, using them discards any standard ProBuilder Mesh edits made previously. + +For example, imagine you create a new Poly Shape with five points, and then extrude one of the faces. Next, you decide to remove one of the points, so you enter Poly Shape editing mode again. The extrusion disappears as soon as you re-enter Poly Shape editing mode. + +The [Pro Builder Mesh](ProBuilderMesh.md) component window appears on every ProBuilder object. It allows you to customize lightmap UV parameters for each object. + + + +<a name="pb_transform"></a> + +## Transform tools in ProBuilder + + + +Most of the time, you interact with ProBuilder with translation, rotation, and scaling tools in much the same way that you interact with Unity. However, ProBuilder uses a combination of [Edit modes](modes.md) and special [key combinations](hotkeys.md) to interact at a much deeper level with your Meshes. + +For example, you can use the Shift key with the scaling and translation tools in [Face mode](modes.md) to create [insets](Face_Inset.md) and [extrusions](Face_Extrude.md). This allows you to build complex Meshes easily. + +For an overview of working with ProBuilder, see [Creating Meshes](workflow-create.md), [Editing Meshes](workflow-edit.md), and [Materials, Shaders, Textures, and UVs](workflow-texture-mapping.md). + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/overview.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..0bd3591cee7d7ca3c7fd37fb1be37b93db7cf689 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/overview.md @@ -0,0 +1,38 @@ +# Getting started + +You can access all of ProBuilder's editing tools from the [ProBuilder toolbar](toolbar.md), which dynamically adapts to your [Edit mode](edit-mode-toolbar.md) and your current selection. + + + +Every toolbar button has a tooltip that shows a short summary about its use. Viewing tooltips is a great way to start learning about ProBuilder's functionality. + +## Building and editing complex Meshes + +ProBuilder Meshes act like regular GameObjects in Unity. You can apply Transform values to them and add components to them. They respond to the physics system, and you can animate them and attach scripts to them in order to control them. However, standard Unity Meshes are not the same as ProBuilder Meshes: you can't edit them with ProBuilder tools until you [convert them into ProBuilder objects](Object_ProBuilderize.md). + + + +The most common way to build a ProBuilder Mesh is to [create it](workflow-create.md) and [edit it](workflow-edit.md) entirely with ProBuilder tools. + +## Applying Materials and Vertex Colors + +You can apply any Material to ProBuilder Meshes using the [Material Palette](material-tools.md), either on selected faces in [Element mode](edit-mode-toolbar.md) or across the entire object. + +You can also apply [Vertex Colors](workflow-vertexcolors.md) to your Mesh while you are still building the geometry. This can help easily identify parts of complex Meshes, such as the floor, or provide a little color while you are greyboxing. + +### Editing UVs + +ProBuilder provides [automatic UV unwrapping](auto-uvs-actions.md) and a complete [manual UV editor](manual-uvs-actions.md). + +* __Auto UV__ mode lets you tweak basics like offset, tiling, and rotation, while ProBuilder handles the complex UV work automatically. + +* __Manual UV__ mode gives you complete control of the UVs. With this workflow you can lay out your UV maps precisely. + +You can use whichever you prefer, or a mix of both, even on the same Mesh. + +For more information, see [Materials, Shaders, Textures, and UVs](workflow-texture-mapping.md) + +## Exporting to other formats + +You can also [export your ProBuilder Meshes](workflow-exporting.md) to several file formats, such as `.asset`, `.obj`, and `.stl`. Then you can reimport them into Unity and use them as Prefabs or spawn them. However, as soon as you convert a ProBuilder Mesh to the `.asset` format, it becomes a regular Unity GameObject, and you can't modify it with ProBuilder tools any more. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/polyshape.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/polyshape.md new file mode 100644 index 0000000000000000000000000000000000000000..50b79ff0f3bc044387b98420f7cfe95fd2938454 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/polyshape.md @@ -0,0 +1,32 @@ +#  Poly Shape component + +After you initially [create a Poly Shape](workflow-create-polyshape.md), you can still modify the shape as long as you are in Poly Shape editing mode. You can toggle the Poly Shape editing mode on and off with the **Edit(ing) Poly Shape** button. + + + + + + + +> **Note:** You can modify Mesh elements on the Poly Shape Mesh with the standard ProBuilder editing tools. However, each time you re-enter Poly Shape editing mode, you lose any element changes. + + + +## Editing a Poly Shape + +When you are in Poly Shape editing mode, the **Poly Shape** component in the Inspector displays the **Editing Poly Shape** button. If you are not in Poly Shape editing mode, the **Edit Poly Shape** button appears instead. + +To enter the Poly Shape editing mode, click the **Edit Poly Shape** button. To exit out of the Poly Shape editing mode, click the button (**Editing Poly Shape**) again. + +To modify the shape in Poly Shape editing mode, perform the following tasks in the Scene view: + +- Click and drag existing control points to move them around. +- Click existing control points to select them, then use **Backspace** (Windows) or **Delete** (macOS) to remove the points from the shape. +- Click along the perimeter line to add new control points. +- Click and drag the handle in the center of the Mesh to set the height. + +You can also use the controls in the **Poly Shape** component in the Inspector to: + +- Enter a value to use for the height of the Mesh in the **Extrusion** property. +- Enable or disable the **Flip Normals** option to toggle whether the Camera displays the interior or exterior of the Mesh. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/preferences.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/preferences.md new file mode 100644 index 0000000000000000000000000000000000000000..e28a00338160be8fdca0300a8a91aed5b9c42685 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/preferences.md @@ -0,0 +1,213 @@ +# ProBuilder Preferences window + +To define how you interact with ProBuilder, you can customize the user interface and how the tools work. + + + + + +ProBuilder provides the following preference sections, which you can change to suit your needs: + +- [Experimental](#experimental) +- [General](#general) +- [Graphics](#graphics) +- [Mesh Editing](#editing) +- [Mesh Settings](#settings) +- [Shortcuts](#shortcuts) +- [Toolbar](#toolbar) +- [UV Editor](#uvs) + + + + +<a name="experimental"></a> + +## Experimental + +Use these settings to enable and disable ProBuilder experimental features. + +> **Warning:** Experimental features are untested and might break your Project. + + + +| **Property:** | **Description:** | +| :--------------------------------------------------------- | :----------------------------------------------------------- | +| __Experimental Features Enabled__ | Enable this option to access the [New Bezier Shape](bezier.md) experimental feature in the ProBuilder toolbar, and the __Store Mesh as Asset__ option. <br /><br />**Note:** This setting has no affect on the [Boolean (CSG) Tool](boolean.md), which is always available from the [Experimental menu](menu.md#experimental). | +| __Meshes Are Assets__ | Enable this option to store Mesh information in the Project instead of in each separate Scene level. | + + + +<a name="general"></a> + +## General + +Use these properties to set some basic options for ProBuilder. + + + +|**Property:** |**Description:** | +|:---|:---| +|__Show Action Notifications__ |Enable this option if you want ProBuilder to notify you when performing actions. | +|<a name="autouvs"></a>__Auto Lightmap UVs__ |Enable this option to generate the UV2 channel after every geometry edit. This means you don't have to manually generate them every time the Mesh changes.<br/><br/>UV2 channel generation for Meshes is necessary for lighting, but can be time-consuming. If you are editing objects with large numbers of vertices, disable this to save resources. | +|__Show Missing Lightmap UVs Warning__ |Enable this option to show a warning in the console if ProBuilder shapes are missing a valid UV2 channel when Unity performs a lightmap bake. | +|<a name="info_overlay"></a>__Show Scene Info__ |Enable this option to display the Mesh information overlay in the top left of the Scene view. These details include overall face, vertex and triangle counts, and the number of elements currently selected:<br /> | +|__Script Stripping__ |Enable this option to automatically remove the extra data ProBuilder stores in a Scene. This includes all ProBuilder scripts, so if you are using the runtime API you should disable this feature. | + + + +<a name="graphics"></a> + +## Graphics + +Use these settings to customize the size and color of Mesh elements. + + + +By default, the **Use Unity Colors** option is enabled. However, you can disable this option to set custom colors for a number of elements. + +|**Property:** |**Description:** | +|:---|:---| +| <a name="preselection"></a>__Show Hover Highlight__ | Enable this option to highlight the closest Mesh elements when your cursor moves towards them. <br/>**Tip:** You can also set the color to use for highlighting with the [Preselection](#preselection_color) property. | +|<a name="unitycolors"></a>__Use Unity Colors__ |Enable this property to use the [standard Unity Color preferences](https://docs.unity3d.com/Manual/Preferences.html#colors). By default, this property is enabled.<br />When you disable this option, a number of properties appear below. These allow you to specify your own colors to use instead of the Unity colors. For example, you can specify different colors for selected and unselected faces, edges, and vertices. | +|__Dither Face Overlay__ |Enable this option to use dithering (dotted overlay) when you hover over or select items. If you disable this option, the overlay appears solid instead.<br/>This property is only available when __Use Unity Colors__ is disabled. | +|__Wireframe__ |Pick the color ProBuilder uses to display the Mesh's wireframe.<br/>This property is only available when __Use Unity Colors__ is disabled. | +|<a name="preselection_color"></a>__Preselection__ |Pick the color ProBuilder uses to highlight the closest Mesh element. The [Show Preselection Highlight](#preselection) property must be enabled in order to display highlights.<br/>This property is only available when __Use Unity Colors__ is disabled. | +|__Selected Face Color__ |Pick the color ProBuilder uses to display the selected face(s) in a ProBuilder Mesh.<br/>This property is only available when __Use Unity Colors__ is disabled. | +|__Unselected Edge Color__ |Pick the color ProBuilder uses to display the unselected edges in a ProBuilder Mesh.<br/>This property is only available when __Use Unity Colors__ is disabled. | +|__Selected Edge Color__ |Pick the color ProBuilder uses to display the selected edge(s) in a ProBuilder Mesh.<br/>This property is only available when __Use Unity Colors__ is disabled. | +|__Unselected Vertex Color__ |Pick the color ProBuilder uses to display the unselected vertices in a ProBuilder Mesh.<br/>This property is only available when __Use Unity Colors__ is disabled. | +|__Selected Vertex Color__ |Pick the color ProBuilder uses to display the selected vertex (or vertices) in a ProBuilder Mesh.<br/>This property is only available when __Use Unity Colors__ is disabled. | +|__Depth Test__ | Enable this option to render Vertex, Edge, and Face handles through geometry. | +|__Vertex Size__ |Set the size to render the vertex points on ProBuilder Meshes in the Scene view. | +|__Line Size__ |Set the size to render the edges on ProBuilder Meshes in the Scene view. <br/>**Note:** On macOS, this property is only available if you use [OpenGL](https://www.opengl.org/) instead of Metal.| +|__Wireframe Size__ |Set the size to render the ProBuilder Mesh wireframe in the Scene view. <br/>**Note:** On macOS, this property is only available if you use [OpenGL](https://www.opengl.org/) instead of Metal. | + + + + + +<a name="prefs_editing"></a> + +## Mesh Editing + +Use these settings to customize interacting with Meshes. + + + +| **Property:** | **Description:** | +| :-------------------------------------------------- | :----------------------------------------------------------- | +| __Auto Resize Colliders__ | Enable this option to automatically resize colliders according to Mesh bounds as you edit. | +| <a name="bridge"></a>__Allow non-manifold actions__ | Enable this option if you want to edit your Meshes with advanced techniques, such as [bridging closed edges](Edge_Bridge.md). Note that these complex actions can break your project unless you are familiar with their concepts and how to apply them. <br />By default, this option is disabled. | + + + + + +<a name="settings"></a> + +## Mesh Settings + +Use these settings to establish default behavior for some ProBuilder options. + + + +|**Property:** |**Description:** | +|:---|:---| +| __Static Editor Flags__ |Choose one of the [Unity Static Settings](https://docs.unity3d.com/Manual/StaticObjects.html) as the default for new ProBuilder Meshes. The default value is **Nothing**. | +| <a name="defmat"></a>__Material__ |Set a reference to the default Material you want to use for ProBuilder Meshes. By default, ProBuilder uses the ProBuilderDefault Material when creating new Meshes. | +| __Mesh Collider is Convex__ |Enable this option to set the default convex collider state for new ProBuilder objects. | +| __Pivot Location__ | Choose the default pivot location for new ProBuilder objects. | +|| **First Vertex**<br/>The pivot point of the newly instantiated object coincides with a vertex position. | +|| **Center** <br/>Use the center of the newly instantiated object as the pivot point. | +| __Snap New Shape To Grid__ | Enable this option to snap a newly instantiated object to the nearest grid point (as determined by **ProGrids**). | +|__Shadow Casting Mode__ |Choose how new ProBuilder Meshes cast shadows. The default value is **Two Sided**.<br />See the **Cast Shadows** property on the [Mesh Renderer](https://docs.unity3d.com/Manual/class-MeshRenderer.html) component for more information on this setting. | +|__Collider Type__ |Set the default type of [collision primitive](https://docs.unity3d.com/Manual/CollidersOverview.html) to use for new ProBuilder objects. The default is **Mesh Collider**.| +||**None** <br/>Do not use a collider. | +||**Box Collider** <br/>Use a [basic cube](https://docs.unity3d.com/Manual/class-BoxCollider.html) for the collider. | +||**Mesh Collider** <br/>Use a [custom shape collider](https://docs.unity3d.com/Manual/class-MeshCollider.html) to match the newly created Mesh. This is the default. | +|__Lightmap UV Settings__ |Set defaults for the standard [Lightmap UVs parameters](https://docs.unity3d.com/Manual/LightingGiUvs-GeneratingLightmappingUVs.html). To return to the default settings, click the **Reset** button.| + + + + + +<a name="shortcuts"></a> + +## Shortcuts + +Use these settings to change the key mappings for [ProBuilder hotkeys](hotkeys.md). + + + +To change the key mapping for one of these settings: + +1. Click the setting you want to change (for example, **Set Pivot**) in the list on the left. + + The **Key** and **Modifiers** drop-down menus on the right display the current setting, and the **Description** displays any information about the setting. + +2. Choose a new key value from the **Key** drop-down menu if you want to change the key itself. This can be anything you can press on the keyboard or console. For example, you can select joystick buttons or **Backspace** instead of alphanumeric characters. + +3. Choose a new modifier value from the **Modifiers** drop-down menu if you want to change the modifier. + + > **Caution:** Be careful if you choose the **Everything** value, because this might override another value that uses the same key in a specific context. + +As soon as you change the **Key** or **Modifiers** value, ProBuilder saves the change. There is no Save button to commit the change and Undo does not affect these settings. + +> **Note:** If something goes wrong, you can click the **Reset All Preferences** button at the top of the window to return to the default values. However, this resets *all* ProBuilder preferences to their default, so use this only as a last resort. + + + +|**Setting:** |**Description:** |**Default Key Assignment** | +|:---|:---|:--:| +|__Toggle Geometry Mode__ |Toggle between [the Object and Element selection modes](modes.md). |G| +|__Toggle Selection Mode__ |Toggle between [the three Element selection modes](modes.md) (Vertex, Edge, and Face). If [Unique Mode Shortcuts](#unique) is disabled, this shortcut does not apply. |H| +|__Set Trigger__ |Set all selected objects to entity type Trigger. |T| +|__Set Occluder__ |Set all selected objects to entity type Occluder. |O| +|__Set Collider__ |Set all selected objects to entity type Collider. |C| +|__Set Mover__ |Set all selected objects to entity type Mover. |M| +|__Set Detail__ |Set all selected objects to entity type Brush. |B| +|__Toggle Handle Orientation__ |Toggle the orientation of the ProBuilder selection handle. |P| +|__Set Pivot__ |Center pivot around current selection. |Cmd/Ctrl+J| +|__Delete Face__ |Delete all selected faces. |FN+Backspace| +|__Vertex Mode__ |Enter Vertex editing mode. Automatically swaps to Element level editing. |H| +|__Edge Mode__ |Enter Edge editing mode. Automatically swaps to Element level editing. |J| +|__Face Mode__ |Enter Face editing mode. Automatically swaps to Element level editing. |K| + + + + + + + +<a name="toolbar"></a> + +## Toolbar + +Use these properties to set default behavior for the [ProBuilder toolbar](toolbar). + + + +| **Property:** | **Description:** | +| :--- | :--- | +| __Shift Key Tooltips__ | Enable this option to only show tooltips when the mouse cursor is hovering over a button and you are holding down **Shift**.<br/>By default, tooltips appear when the mouse cursor hovers over a button for more than a second. | +| <a name="icongui"></a>__Icon GUI__ | Enable this option to use toolbar buttons that [display icons only](toolbar.md#buttonmode). <br />Disable this option to use toolbar buttons that [display text only](toolbar.md#buttonmode).<br />**Note:** You can also [use the context menu](customizing.md#buttons) to switch between icons and text. | +| <a name="unique"></a>__Unique Mode Shortcuts__ | Enable this option to assign **G**, **H**, **J**, and **K** to Object, Vertex, Edge, and Face [modes](modes.md) respectively. You can change which keys are mapped to these actions in the [Shortcut Settings](#shortcuts) section.<br/><br/>By default, ProBuilder assigns **G** to toggle between Object mode and the Element modes, and **H** toggles between the different Element modes (Vertex, Edge, and Face). | +| <a name="toolbarloc"></a>__Toolbar Location__ | Choose the location where you want the [Edit Mode toolbar](edit-mode-toolbar.md) to appear in the Scene view. Possible locations are:<br />- **Upper Center**<br />- **Upper Left**<br />- **Upper Right**<br />- **Bottom Center**<br />- **Bottom Left**<br />- **Bottom Right** | +|__Close Shape Window after Build__ |Enable this option to automatically close the [Shape Tool](shape-tool.md) window after it creates a new Mesh object. | + + + + + +<a name="uvs"></a> + +## UV Editor + +Use these settings to customize the [UV Editor window](uv-editor.md). + + + +| **Property:** | **Description:** | +| :-------------- | :----------------------------------------------------------- | +| __Grid Size__ | Size of the grid in the UV Editor, for visual and functional purposes. | + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/ref_tools.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/ref_tools.md new file mode 100644 index 0000000000000000000000000000000000000000..72309390cba8c61857f3db01927d99bf6e53deff --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/ref_tools.md @@ -0,0 +1,62 @@ +# Tool reference + +This table lists all the icons and tool names available in ProBuilder, and indicates which [Edit modes](modes.md) supports it: + +| **Icon** | **Text** |  |  |  |  | +| ---- | ---- | ---- | ---- | ---- | ---- | +|  |[Bevel](Edge_Bevel.md) (Edges) | | | x | | +|  |[Bevel](Face_Bevel.md) (Faces) | | | | x | +|  |[Bridge Edges](Edge_Bridge.md) | | | x | | +|  |[Center Pivot](CenterPivot.md) | x | | | | +|  |[Collapse Vertices](Vert_Collapse.md) | | x | | | +|  |[Conform Normals](Face_ConformNormals.md) (Faces) | | | | x | +|  |[Conform Normals](Object_ConformNormals.md) (Objects) | x | | | | +|  |[Connect Edges](Edge_Connect.md) | | | x | | +|  |[Connect Vertices](Vert_Connect.md) | | x | | | +|  |[Delete Faces](Face_Delete.md) | | | | x | +|  |[Detach Faces](Face_Detach.md) | | | | x | +|  |[Export](Object_Export.md) | x | | | | +|  |[Extrude Edges](Edge_Extrude.md) | | | x | | +|  |[Extrude Faces](Face_Extrude.md) | | | | x | +|  |[Fill Hole](Edge_FillHole.md) (Edges) | | | x | | +|  |[Fill Hole](Vert_FillHole.md) (Vertices) | | x | | | +|  |[Flip Face Edge](Face_FlipTri.md) | | | | x | +|  |[Flip Face Normals](Face_FlipNormals.md) | | | | x | +|  |[Flip Normals](Object_FlipNormals.md) | x | | | | +|  |[Freeze Transform](Freeze_Transform.md) | x | | | | +|  |**Handle** (see [Orientation](HandleAlign.md)) | x | x | x | x | +|  |[Lightmap UVs](Object_LightmapUVs.md) | x | | | | +|  |[Grow Selection](Selection_Grow.md) | | x | x | x | +|  |[Insert Edge Loop](Edge_InsertLoop.md) | | | | | +| |[Inset](Face_Inset.md) | | | | x | +|  |[Invert Selection](Selection_Invert.md) | | x | x | x | +|  |[Merge Faces](Face_Merge.md) | | | | x | +|  |[Merge Objects](Object_Merge.md) | x | | | | +|  |[Mirror Objects](Object_Mirror.md) | x | | | | +|  |[Orientation](HandleAlign.md) | x | x | x | x | +|  |[ProBuilderize](Object_ProBuilderize.md) | x | | | | +|  |[Rect](Selection_Rect_Intersect.md) | | | x | x | +|  |[Select by Colors](Selection_SelectByVertexColor.md) | | x | x | x | +|  |[Select by Material](Selection_SelectByMaterial.md) | | | | x | +|  |[Select Edge Loop](Selection_Loop_Edge.md) | | | x | | +|  |[Select Edge Ring](Selection_Ring_Edge.md) | | | x | | +|  |[Select Face Loop](Selection_Loop_Face.md) | | | | x | +|  |[Select Face Ring](Selection_Ring_Face.md) | | | | x | +|  |[Select Hidden](Selection_SelectHidden.md) | x | x | x | x | +|  |[Select Holes](Selection_SelectHole.md) | | x | x | | +| |[Set Collider](Entity_Trigger#Collider.md) | x | | | | +|  |[Set Pivot](Edge_SetPivot.md) (Edges) | | | x | | +|  |[Set Pivot](Face_SetPivot.md) (Faces) | | | | x | +|  |[Set Pivot](Vert_SetPivot.md) (Vertices) | | x | | | +| |[Set Trigger](Entity_Trigger.md) | x | | | | +|  |[Shift](Selection_Shift.md) | | x | x | x | +|  |[Shrink Selection](Selection_Shrink.md) | | x | x | x | +|  |[Split Vertices](Vert_Split.md) | | x | | | +|  |[Subdivide Edges](Edge_Subdivide.md) | | | x | | +|  |[Subdivide Faces](Face_Subdivide.md) | | | | x | +|  |[Subdivide Object](Object_Subdivide.md) | x | | | | +|  |[Triangulate Faces](Face_Triangulate.md) | | | | x | +|  |[Triangulate](Object_Triangulate.md) (Object) | x | | | | +|  |**Turn Edges** (see [Flip Face Edge](Face_FlipTri.md)) | | | | x | +|  |[Weld Vertices](Vert_Weld.md) | | x | | | + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/ref_windows.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/ref_windows.md new file mode 100644 index 0000000000000000000000000000000000000000..7986c6448707ef494590d5c9f23382436db8bf61 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/ref_windows.md @@ -0,0 +1,18 @@ +# Component and window reference + +This section provides information on the following ProBuilder [windows](overview-ui.md#pb_editors) and [components](overview-ui.md#pb_comp): + +- [Lightmap UV Editor](lightmap-uv.md) +- [Material Editor window](material-tools.md) +- [Poly Shape component](polyshape.md) +- [Positions Editor window](vertex-positions.md) +- [Pro Builder Mesh component](ProBuilderMesh.md) +- [ProBuilder Preferences window](preferences.md) +- [Shape Tool window](shape-tool.md) +- [Smooth Group Editor window](smoothing-groups.md) +- [UV Editor window](uv-editor.md) +- [Vertex Colors window](vertex-colors.md) + + + +> **Note:** For documentation on the [Bezier Shape component](bezier.md) and the [Boolean window](boolean.md), see the [Experimental features](experimental.md) section of the documentation. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/selection-tools.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/selection-tools.md new file mode 100644 index 0000000000000000000000000000000000000000..541310d2998d6b1e32687a25e02022c538bbe977 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/selection-tools.md @@ -0,0 +1,95 @@ +# Selection tools + +This portion of the ProBuilder toolbar provides access to selection modifiers and tools. + + + + + +Depending on whether you have the [Toolbar display mode](toolbar.md#buttonmode) set to **text** mode or **icon** mode, the selection tool button displays the following to indicate what state the tool is in: + +* In **text** mode, the button displays the label text followed by a colon and the name of the state. For example, the [Select Hidden](Selection_SelectHidden.md) tool displays either **Select Hidden: On** or **Select Hidden: Off**. +* In **icon** mode, the icon displays a visual cue that reveals the tool's current state. For example, the [Orientation](HandleAlign.md) tool uses these three icons to indicate the handle alignment states:  (*Local*),  (*Global*), and  (*Normal*). + +The documentation for each tool includes information about these visual indicators. + +> **Note:** Some actions also have extra options or custom settings available. These tool buttons have a special indicator in the top-right corner. The documentation for each tool includes information about these options. + +##  Shift + +Use the **Shift** tool to define how holding the **Shift** key affects selection. + +For more information, see the [Shift](Selection_Shift.md) tool documentation. + +##  Rect + +Use the **Rect** tool to define whether drag selection should only select elements inside the drag-rect, or any intersected elements. + +For more information, see the [Rect](Selection_Rect_Intersect.md) tool documentation. + +##  Select Hidden + +Use the **Select Hidden** tool to define whether hidden elements are selected or ignored when drag-selecting. + +For more information, see the [Select Hidden](Selection_SelectHidden.md) tool documentation. + +##  Select Edge Loop + +Use the **Select Edge Loop** tool to select an edge loop from each selected edge. + +For more information, see the [Select Edge Loop](Selection_Loop_Edge.md) tool documentation. + +##  Select Edge Ring + +Use the **Select Edge Ring** tool to select a ring from each selected edge. + +For more information, see the [Select Edge Ring](Selection_Ring_Edge.md) tool documentation. + +##  Select Face Loop + +Use the **Select Face Loop** tool to select a face loop from each selected face. + +For more information, see the [Select Face Loop](Selection_Loop_Face.md) tool documentation. + +##  Select Face Ring + +Use the **Select Face Ring** tool to select a face ring from each selected face. + +For more information, see the [Select Face Ring](Selection_Ring_Face.md) tool documentation. + +##  Select by Material + +Use the **Select by Material** tool to select all faces which have the same Material. + +For more information, see the [Select by Material](Selection_SelectByMaterial.md) tool documentation. + +##  Select by Colors + +Use the **Select by Colors** tool to select all faces on this object which have the same vertex color. + +For more information, see the [Select by Colors](Selection_SelectByVertexColor) tool documentation. + +##  Select Holes + +Use the **Select Holes** tool to select all elements along the selected open vertex or edge. + +For more information, see the [Select Holes](Selection_SelectHole.md) tool documentation. + +##  Grow Selection + +Use the **Grow Selection** tool to expand the selection outward to adjacent faces, edges, or vertices. + +For more information, see the [Grow Selection](Selection_Grow.md) tool documentation. + +##  Shrink Selection + +Use the **Shrink Selection** tool to remove the elements on the perimeter of the current selection ([Grow Selection](Selection_Grow.md) in reverse). + +For more information, see the [Shrink Selection](Selection_Shrink.md) tool documentation. + +##  Invert Selection + +Use the **Invert Selection** tool to select the inverse of the current selection. + +For more information, see the [Invert Selection](Selection_Invert.md) tool documentation. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/shape-tool.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/shape-tool.md new file mode 100644 index 0000000000000000000000000000000000000000..ee582c98cddbc5b7df950a01196388dcc48e34f3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/shape-tool.md @@ -0,0 +1,50 @@ +#  Shape Tool window + +Use the **Shape Tool** window to create new ProBuilder Mesh shapes, such as cylinders, arches, and stairs. + + + +Each shape has specific properties. You can customize these before you add the shape to your Scene. For example, the *Stair* shape lets you choose items like step height, arc, and which parts of the stairway to build. + + + +ProBuilder Mesh shapes are similar to other GameObjects in Unity in terms of how they interact with other GameObjects and respond to Physics in the Scene. However, you can use [ProBuilder's editing tools](workflow-edit) to customize and deform ProBuilder Meshes after you create them. + +## Creating specific shapes + +To create a new ProBuilder Mesh based on one of the predefined shapes: + +1. In the ProBuilder toolbar, click the **New Shape** tool. + + > **Tip:** You can also use the **Ctrl/Cmd+Shift+K** hotkey to open the **Shape Tool** window, or use the menu (**Tools** > **ProBuilder** > **Editors** > **Open Shape Editor Menu Item**). + +1. Choose the shape you'd like to create (such as *Cube*, *Cylinder* or *Torus*) from the __Shape Selector__ drop-down menu. The properties specific to that shape type apppear in the Shape Tool window. + +1. Set the options (width, height, radius, number of stairs) according to the type of shape. + +1. Move or rotate the preview object within the Scene view until it's in a position you're happy with. + +1. Click **Build** to create the new Mesh. + + Now that you have a ProBuilder Mesh, you can use [ProBuilder's editing tools](workflow-edit) to further define the Mesh. + +## Shape-specific properties + +The following sections describe the shape-specific properties available for these shape types: + +* [Cube](Cube.md) +* [Sprite](Sprite.md) +* [Prism](Prism.md) +* [Stair](Stair.md) +* [Cylinder](Cylinder.md) +* [Door](Door.md) +* [Plane](Plane.md) +* [Pipe](Pipe.md) +* [Cone](Cone.md) +* [Arch](Arch.md) +* [Sphere](Sphere.md) +* [Torus](Torus.md) +* [Custom](Custom.md) + + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/smoothing-groups.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/smoothing-groups.md new file mode 100644 index 0000000000000000000000000000000000000000..6e9aeecdca3631b0d495a84c1e78475bb35bcb5e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/smoothing-groups.md @@ -0,0 +1,103 @@ +#  Smooth Group Editor window + +The **Smooth Group Editor** window allows you to [add and remove smoothing groups](workflow-edit-smoothing.md) across the faces of a ProBuilder Mesh. + + + + The [toggle buttons](#toggle) control the visibility of some areas of the window. + + The [Normals control](#normals) is a visual aid that allows you to change the length of the normals displayed on the Mesh in the Scene view. + + The help button opens up a [quick reference panel](#quickref) for using this window. + + The [overlay controls panel](#overlay) allows you to customize how ProBuilder previews the smoothing group changes on the Mesh in the Scene view. + + The [main button panel](#main-panel) allows you to define up to 23 sets of smoothing groups. + +> **Tip:** You can also access this tool from the ProBuilder menu (**Tools** > **ProBuilder** > **Editors** > **Open Smoothing Editor**). + + + +<a name="toggle"></a> + +## Toggle Panel buttons + +The cluster of buttons in the top left corner of the window hide or display the extra panels: + +* The **Settings** button shows or hides the [overlay controls](#overlay) above the main button panel. +* The **Preview** button shows or hides the color cues for each smoothing group. The color for each defined group appears under the button in the [main button panel](#main-panel), and all the faces in the smoothing group display that color on the Mesh in the Scene view. +* The **Normals** button shows or hides the [Normals control](#normals). + + + +<a name="normals"></a> + +## Normals control + +You can use the Normals slider control to change the length of the normals ProBuilder displays on the Mesh. Viewing the normals allows you to see which vertices are split, therefore affecting the smoothing. + + + +Move the slider position towards the left to shorten the length of the normals, or move them to the right to lengthen them. When the slider is all the way to the left, the normals are no longer visible. + + + +<a name="quickref"></a> + +## Quick reference panel + +The following hints about using the smoothing panels appear when you click the help button in the top right corner of the **Smooth Group Editor** window: + + + +To access the online documentation for Smoothing Groups, click the **Open Documentation** button at the bottom of the panel. + + + +<a name="overlay"></a> + +## Overlay controls + +The overlay controls panel allows you to customize how ProBuilder previews the smoothing group changes on the Mesh in the Scene view. + + + + + +| **Property:** | **Description:** | +| ------------------- | ------------------------------------------------------------ | +| **Preview Opacity** | Increase this value to show more of the color of the applied smoothing group and less of the Mesh's Material. The range of values is **0.001** (smoothing group colors are invisible) to **1** (only smoothing colors are visible). | +| **Preview Dither** | Enable this option to see how ProBuilder applies the smoothing to the Mesh with the dither overlay. | + + + + + +<a name="main-panel"></a> + +## Main button panel + +The main button panel allows you to define up to 23 sets of smoothing groups. + + + +### Buttons + +These buttons in the top right corner help you manage smoothing groups: + +* Click the  __Select Smoothing Group__ button to extend the face selection to all faces in the currently selected smoothing group. For best results, click a single face in the group to start and then click this button. The tool doesn't shrink the current selection, so start with as small a selection as possible. +* Click the  __Clear Smoothing Group__ button to remove all faces from the currently selected smoothing group. + +### Preview colors + +This panel is always visible, but the color under each button only appears in [Preview mode](#toggle). + +Whether or not you are in Preview mode, the button background changes color according to what faces and smoothing group you've selected: + +| **Button color:** | **Description:** | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +|  | No faces are in the selected Smoothing Group yet. | +|  | None of the selected faces are in the selected Smoothing Group. | +|  | All of the faces in the currently selected Smoothing Group are currently selected. | +|  | The current selection includes faces that are in the currently selected Smoothing Group, but it also includes faces that are not in any Smoothing Group. | + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/tool-panels.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/tool-panels.md new file mode 100644 index 0000000000000000000000000000000000000000..982e7f4806703db70dbe15030ee54e961c84c82c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/tool-panels.md @@ -0,0 +1,52 @@ +# Tool panels + +This portion of the ProBuilder toolbar provides access to most of the ProBuilder windows and components. + + + +> ***Note:*** Some actions also have extra options or custom settings available. The tool buttons have a special indicator in the top right corner (shown as a gear icon in the first tool icon in the image above). The documentation for each tool includes information about these options. + +##  New Shape + +Use the **Shape Tool** window to create new ProBuilder Mesh shapes such as cylinders, arches, and stairs. + +For more information, see the [Shape Tool](shape-tool.md) window reference. + +##  New Poly Shape + +Use the **Poly Shape** component to create a custom 2-dimensional shape and then extrude that shape to create a custom 3-dimensional Mesh. + +For more information, see the [Poly Shape](polyshape.md) component reference. + +##  New Bezier Shape + +Use the **Bezier Shape** component to define a bezier curve around which ProBuilder extrudes a Mesh. + +> ***Warning:*** Bezier shapes are experimental, meaning that they are still under development, and might reduce ProBuilder's stability. Please use with caution. + +For more information, see the [Bezier Shape](bezier.md) component reference. + +##  Smoothing + +Use the **Smooth Group Editor** window to create a smooth and rounded look. + +For more information, see the [Smooth Group Editor](smoothing-groups.md) window reference. + +##  Vertex Colors + +Use the **Vertex Colors** window to apply or paint vertex colors onto Meshes. + +For more information, see the [Vertex Colors](material-tools.md) window reference. + +##  Material Editor + +Use the **Material Editor** window to apply Materials to objects or faces. + +For more information, see the [Material Editor](material-tools.md) window reference. + +##  UV Editor + +Use the **UV Editor** window to apply textures to objects or faces. You can also use it to automatically or manually wrap and unwrap textures. + +For more information, see the [UV Editor](uv-editor.md) window reference. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/toolbar.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/toolbar.md new file mode 100644 index 0000000000000000000000000000000000000000..b25f9da1fbcdff9a1077e77f0933da6002231181 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/toolbar.md @@ -0,0 +1,62 @@ +# The ProBuilder toolbar + +You can open the **ProBuilder** toolbar from Unity’s top menu: __Tools__ > __ProBuilder__ > __ProBuilder Window__. + + + +When you open the main **ProBuilder** toolbar, the [Edit mode toolbar](edit-mode-toolbar.md) also opens in the active Scene view, where you can see and change the [current editing mode](modes.md). + +Use this toolbar to access Editor windows, as well as selection, creation, and editing tools for Meshes. + + + + +## Tool categories + +The ProBuilder toolbar is color-coded to help you quickly choose tools by type: + +* **Orange** for [tool panels (windows)](tool-panels.md) +* **Blue** for [selection tools](selection-tools.md) +* **Green** for [Object actions](object-actions.md) +* **Red** for Element actions (on [Vertex](vertex.md), [Edge](edge.md), and [Face](face.md) geometry) + + + +### Dynamic layout + +The ProBuilder window dynamically changes to match your current edit mode and element selection: + +* Buttons only appear if you can use them with your [current edit mode](modes.md). +* Buttons are disabled if you cannot use them on the current selection. + + + +<a name="buttonmode"></a> + +### Toolbar display modes + +The ProBuilder toolbar displays buttons as either text or icons. + + + +> **Tip:** By default, the toolbar appears in Text mode, but you can change switch to Icon mode instead. You can also resize the toolbar and switch between making it floating and dockable. See [Customizing ProBuilder](customizing.md#toolbar) for details. + + + +<a name="pb_options"></a> + +### Options for ProBuilder tools + +Some actions (such as [Extrude](Face_Extrude.md), [Collapse](Vert_Collapse.md), and [Grow Selection](Selection_Grow.md)) also have extra options or custom settings, which can change how ProBuilder performs the action by default. If there are options available for a tool, an indicator appears in the top-right corner of that tool's button which allows you to access the **Options** window: + +* In **Icon Mode**, the gear  indicator appears next to a tool button if there are options available. To open the **Options** window, **Alt+Click** anywhere on the tool button. +* In **Text Mode**, the `+` icon appears on the right side of a tool button if there are options available. To open the **Options** window, click on the tool button's `+` icon. + +> ***Caution:*** When you change one of these options, those changes become the default settings for that tool in the Scene until you change them again. + + + +For example, the [Select by Material](Selection_SelectByMaterial.md) tool allows you to specify whether ProBuilder limits the new selection to match only faces on the currently selected object or faces on any object in the Scene. + +> **Note:** The documentation for each tool includes information about any options. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/uv-editor-toolbar.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/uv-editor-toolbar.md new file mode 100644 index 0000000000000000000000000000000000000000..2f6c48db949190b1c62293cc19601e1d01b0ffb6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/uv-editor-toolbar.md @@ -0,0 +1,64 @@ +# UV Editor toolbar + + + + + + This first group of buttons contains shortcuts to the standard Unity manipulation modes. These have exactly the same effect as the [main Unity toolbar buttons](https://docs.unity3d.com/Manual/PositioningGameObjects.html). + + The second button group contains shortcuts to ProBuilder's [Element Edit modes](edit-mode-toolbar.md). When you use [Manual UV Editing](manual-uvs-actions.md), this allows you to select and manipulate UVs by Vertex, Edge, or Face. + +> **Note:** When you use [Auto UVs](auto-uvs-actions.md), you can only edit UVs by face. If you edit an Edge or Vertex, ProBuilder converts the selected UVs to [Manual UVs](manual-uvs-actions.md). + + The third group of buttons contain buttons to perform the following actions: + +*  __Scope controls__: Control how Unity's standard [transform tools](#Scope) behave. +*  __Texture preview__: Toggle whether the UV Viewer displays the face's [Texture](#Texture). +*  __Save UV image__: Create [UV Templates](#SaveUV) from the current UV mapping. + + + +<a name="Scope"></a> + +##  Scope controls + +When Scope controls are **on** (), you can use Unity's standard Move, Rotate, and Scale tools to directly manipulate UVs in the scene, without affecting geometry. + +When Scope controls are **off** (), the Move, Rotate, and Scale tools return to normal geometry actions. + + + +When you use the Transform tools in the UV Viewer, you can snap to increments with the **Ctrl** (Windows) or **Cmd** (macOS) modifiers. To customize the size of these increment values, set the [UV Snap Increment](preferences.md#uvs) preference. + + + +<a name="Texture"></a> + + +##  Texture preview + +When Texture preview is **on** (), the selected face's Texture appears in the UV Viewer. This preview makes it easier to fit the UV to the Texture. + +When Texture preview is **off** (), the Texture does not appear in the UV Viewer. + + + + + +<a name="SaveUV"></a> + +##  Save UV image + +Click the Camera icon () to open the **Save UV Image** window. You can use this window to render a UV Template for texture map painting, atlasing, and sprite sheets. + + + +|**Property:** |**Function:** | +|:---|:---| +|__Image Size__|Choose the total size for the rendered template. ProBuilder always renders the image as a square.| +|__Hide Grid__|Enable this option to prevent the grid from appearing in the rendered image.| +|__Line Color__|Choose the color that you want ProBuilder to use for rendering the UV lines.| +|__Transparent Background__|Enable this option to render a transparent background.| +|__Background Color__|Choose the color that you want ProBuilder to use for the background. This option is only available when the __Transparent Background__ property is disabled.| + +When you are satisfied with the options on this window, click the __Save UV Template__ button. A file browser opens so you can choose the filename and location where you want to save the file. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/uv-editor.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/uv-editor.md new file mode 100644 index 0000000000000000000000000000000000000000..2339fff9f53e402a711aebc0474bd4607611bfbc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/uv-editor.md @@ -0,0 +1,43 @@ +#  UV Editor window + +Use this window to manage texture mapping on the selected Mesh. + +To open this window, navigate to the [ProBuilder toolbar](toolbar.md) and click the **UV Editor** button (  ). + +> **Tip:** You can also access this tool from the ProBuilder menu (**Tools** > **ProBuilder** > **Editors** > **Open UV Editor**). + + + + The [UV Editor toolbar](uv-editor-toolbar.md) contains general tools and shortcuts for working with UVs. + + The [UV drop-down menu](uv_dropdown.md) allows you to switch between UV channels: +* Choose **UV** to edit the UV mapping for shaders. +* Choose **UV2 (read-only)** to regenerate your baked or realtime lightmaps. + + The **Actions** panel is a dynamic panel, similar to the [ProBuilder toolbar](toolbar.md): +* What kind of UVs you are editing (shader UVs or lightmap UV2s) determine which set of options appear in the panel. +* For shader UV options, you can switch between using manual UV editing or auto-texturing, and these each have their own specific options as well. For more information, see [UV editing modes](#uv-modes). +* Only actions compatible with the selected UV element type (vertex, edge, face) are available. If you are in object selection mode when you open the UV Editor, all options are disabled: you must select one or more faces, edges, or vertices to continue. + +You can use the UV viewer to view and edit the selected object's UV elements directly. + + + +<a name="uv-modes"></a> + +## UV editing modes + +The UV Editor supports two modes when you edit texture mapping: + +* [Automatic](auto-uvs-actions.md) : ProBuilder manages the texture mapping according to the settings in the [Actions panel](auto-uvs-actions.md) automatically, even when you resize the Mesh. This is the default. Use this mode for simple texturing work, especially architectural or hard-surface items. Tiling, Offset, Rotation, and other controls are available, while ProBuilder automatically manages the projection and updates it as you modify the Mesh geometry. + + For example, use automatic tiling to for a brick texture on a wall. This maintains the size and orientation of the brick even if you resize the wall. Textures like brick with a repeating pattern are ideal for automatic mode. + +* [Manual](manual-uvs-actions.md) : Use the UV Editor to precisely unwrap and edit UVs, render UV Templates, project UVs, and more. To modify the texture mapping, you move, rotate, and resize the UV elements against the Texture in the viewer. ProBuilder provides two texture projection methods (**Box** and **Planar**), along with several helper tools in the [Actions panel](manual-uvs-actions.md) to help you select and edit elements. + + For example, you can use a texture image for an element with details like a building where some areas contain windows or doors. Using the Manual mode in these cases is ideal, because you can position the UV elements precisely against the image. + +Each face supports only one mode at a time, but you can use a mixture of the two modes on the same Mesh. This is especially useful when some parts of a Model need to have tiling Textures, while others are unwrapped. If you select several faces at once, and some are in Automatic mode and others are in Manual, the Actions panel displays both buttons: __Convert to Manual__ and __Convert to Auto__. + + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/uv_dropdown.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/uv_dropdown.md new file mode 100644 index 0000000000000000000000000000000000000000..b7dc626412a3c5ac39776ced0d9b0e8465318613 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/uv_dropdown.md @@ -0,0 +1,43 @@ +# UV drop-down menu + +The UV drop-down menu allows you to switch between [UV1](#uv1) and [UV2](#uv2) modes (ProBuilder does not use UV3 and UV4). __UV1__ provides texture mapping tools, and __UV2__ provides options for lightmap UV generation. + +<a name="uv1"></a> + +## UV1 + +When you select **UV1** from the UV drop-down menu, the **Actions** panel displays the default UV mapping. + + + +If you select the object before you open the UV Editor window, the tools in the Actions panel are disabled. To enable them, choose one of these element Edit modes to edit the UVs: + +- Click the [Face Edit Mode button](edit-mode-toolbar.md) and select one or more faces in the UV viewer to edit in either [Auto](auto-uvs-actions.md) or [Manual](manual-uvs-actions.md) UV mode. +- Click the [Edge Edit Mode button](edit-mode-toolbar.md) and select one or more edges in the UV viewer to begin editing in [Manual](manual-uvs-actions.md) UV mode. +- Click the [Vertex Edit Mode button](edit-mode-toolbar.md) and select one or more vertices in the UV viewer to begin editing in [Manual](manual-uvs-actions.md) UV mode. + +To switch between the [Auto](auto-uvs-actions.md) and [Manual](manual-uvs-actions.md) UV modes, click the **Convert to Manual** or **Convert to Auto** button at the top of the **Actions** panel. Both modes provide their own options in the Actions panel. + +> **Note:** When using [Auto UVs](auto-uvs-actions) you may only edit UVs by face. Editing an edge or vertex automatically converts the selected UVs to [Manual UVs](manual-uvs-actions). + + + +<a name="uv2"></a> + +## UV2 (read-only) + +When you select **UV2 (read-only)** from the UV drop-down menu, the **Actions** panel displays the [Lightmap UV Settings](https://docs.unity3d.com/Manual/LightingGiUvs-GeneratingLightmappingUVs.html) and the **Rebuild Selected UV2** button. + + + +Set up the options for lightmap UV generation for the selected UV2s, then click the **Rebuild Selected UV2** button when you are finished. + +> **Note:** This only affects the UV2s that are currently selected. If you want to rebuild the UV2s for the entire scene, use the [Lightmap UVs tool](Object_LightmapUVs.md) instead. + +## UV3 (read-only) + +ProBuilder does not currently use this UV mode. + +## UV4 (read-only) + +ProBuilder does not currently use this UV mode. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/vertex-colors.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/vertex-colors.md new file mode 100644 index 0000000000000000000000000000000000000000..5787843cc2a84853334dbd79f7e31049c5ee68c0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/vertex-colors.md @@ -0,0 +1,19 @@ +#  Vertex Colors window + +Use the **Vertex Colors** window to [apply vertex colors](#apply) onto an entire Mesh or only a portion. + +To open this window, click the **Vertex Colors** button (  ) from the [ProBuilder toolbar](toolbar.md). + +> **Tip:** You can also access this tool from the ProBuilder menu (**Tools** > **ProBuilder** > **Editors** > **Open Vertex Color Editor**). + + + + Click the **Reset** button to return all the colors on the **Color Palette** to their default values. + + You can import your [own swatch library](https://docs.unity3d.com/Manual/PresetLibraries.html) and use its colors instead of the default Unity colors. To do this, set a reference to the swatch library file. + + Click the **Apply** button to [set the associated color](workflow-vertexcolors.md#apply) on the selected object(s) or element(s). + + Use the [standard Unity Color Picker](https://docs.unity3d.com/Manual/EditingValueProperties.html) to pick a custom color for the palette. + + Use the eyedropper tool to match a custom color exactly for the palette. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/vertex-positions.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/vertex-positions.md new file mode 100644 index 0000000000000000000000000000000000000000..367dfc34b791226af82e89e11d26c756ec6d3d53 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/vertex-positions.md @@ -0,0 +1,36 @@ +# Positions Editor window + +Use the **Positions Editor** window to enter specific translation coordinates to modify vertex positions. + + + +> **Tip:** You can access this tool from the ProBuilder menu (**Tools** > **ProBuilder** > **Editors** > **Open Vertex Position Editor**). + +By default, Unity uses absolute coordinates to define positions, but you can click the **World Space** button in the top right corner to use relative coordinates instead (that is, relative to the **Model Space**). + +The index of each vertex appears on the left, followed by the **X**, **Y**, and **Z** values that define its position. You can use this window as an alternative to modifying vertex positions with the transform tools. + +For example, to create a [Custom Shape](Custom.md) and set the vertex positions with this editor: + +1. From the ProBuilder toolbar, **Alt/Opt+click** the **New Shape** () button. + +2. Choose the **Custom** shape from the __Shape Selector__ drop-down menu. + +3. Click the **Build Custom** button and close the **Shape Tool** window. + +4. Click the  [Vertex editing mode](modes.md) button on the Edit modes toolbar. + +5. Select the vertices that you want to modify. + +6. Go to **Tools** > **ProBuilder** > **Editors** and select **Open Vertex Position Editor**. + + You can identify the vertices that appear in the **Positions Editor** by the index number that appears on the shape in the Scene view. + +  + + The vertices appear in the same order as they are defined. They follow a backwards Z pattern for each face. + +7. Set new values for the coordinates you want to modify. ProBuilder immediately updates the positions. + + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/vertex.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/vertex.md new file mode 100644 index 0000000000000000000000000000000000000000..3d9b6db8c8549390f98ce7aa4329e8ec5647684a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/vertex.md @@ -0,0 +1,44 @@ +# Vertex tools + +This section of the ProBuilder toolbar provides access to ProBuilder editing tools that you can use in the [Vertex edit mode](modes.md). + + + +> **Note:** Some actions also have extra options or custom settings available. These tool buttons have a special indicator in the top right corner. The documentation for each tool includes information about these options. + +##  Connect Vertices + +Use the **Connect Vertices** tool to create a new edge connecting the selected vertices. + +For more information, see the [Connect Vertices](Vert_Connect.md) tool documentation. + +##  Fill Hole + +Use the **Fill Hole** tool to create a new face filling any holes that touch the selected vertices. + +For more information, see the [Fill Hole](Vert_FillHole.md) tool documentation. + +##  Split Vertices + +Use the **Split Vertices** tool to split a single vertex into multiple vertices (one per adjacent face). + +For more information, see the [Split Vertices](Vert_Split.md) tool documentation. + +##  Collapse Vertices + +Use the **Collapse Vertices** tool to colapse all selected vertices to a single point, regardless of distance. + +For more information, see the [Collapse Vertices](Vert_Collapse.md) tool documentation. + +##  Weld Vertices + +Use the **Weld Vertices** tool to merge selected vertices within a specific distance of one another. + +For more information, see the [Weld Vertices](Vert_Weld.md) tool documentation. + +##  Set Pivot + +Use the **Set Pivot** tool to move the pivot point of this Mesh to the average center of the selected vertices. + +For more information, see the [Set Pivot](Vert_SetPivot.md) tool documentation. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-create-bezier.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-create-bezier.md new file mode 100644 index 0000000000000000000000000000000000000000..34d6507bd6b6f0b7284e26eaef77c3d2677b9b79 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-create-bezier.md @@ -0,0 +1,9 @@ +# Creating a Mesh with the Bezier Shape tool + +The Bezier Shape tool uses a Bezier spline (curve) and extrudes along it to create a 3D version of the curve. You fine-tune the shape by using the tangent handles on the control points to bend the shape. + + + +To create a Mesh based on a bezier (curve) shape, select  **New Bezier Shape** from the [ProBuilder toolbar](toolbar.md). The initial curve has two control points with tangent handles to control the curve's bend. By default, ProBuilder creates the curve [in editing mode](bezier.md) so you can continue to reshape it. + +> **Tip:** You can access this tool from the ProBuilder menu (**Tools** > **ProBuilder** > **Editors** > **New Bezier Shape**). diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-create-polyshape.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-create-polyshape.md new file mode 100644 index 0000000000000000000000000000000000000000..b89b2657fad9efb0a9b7a902d8ce5a0e88bb2563 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-create-polyshape.md @@ -0,0 +1,36 @@ +# Creating a Mesh with the Polygon Shape tool + +A **Poly Shape** is unlike the [predefined ProBuilder shapes](shape-tool.md), in that it is interactive and you can edit it indefinitely. This is because you can continue to edit the control points and other settings after you create a **Poly Shape**. + +> **Important**: When you modify control points or settings, you lose any changes you made in editing the Mesh. + +To create a custom 3-dimensional Mesh, you can use the [Poly Shape tool](polyshape.md) to create a custom 2-dimensional shape, and then extrude that shape to make it 3D. + + + +To define a custom Mesh: + +1. Open the ProBuilder window (in Unity's top menu: **Tools** > **ProBuilder window**). + + The [Edit Mode toolbar](edit-mode-toolbar.md) and the [ProBuilder toolbar](toolbar.md) appear. + +2. From the ProBuilder toolbar, click **New Poly Shape** (). + + > **Tip:** You can also access this tool from the ProBuilder menu (**Tools** > **ProBuilder** > **Editors** > **New Poly Shape**). + +3. Click in the Scene view to create control points. Control points form the outer bounds of your Mesh. + + You can click directly on another surface to create an outgrowth, even when that surface is on the y-axis. + +  + +4. When you finish placing points, use either **Enter** (Windows), **Return** (macOS), or **Spacebar** to finalize the shape. + +  + +5. Move the mouse up and down to set the Mesh height. This extrudes a 3D Mesh from the 2D shape you defined with your control points. + +6. Click to exit out of create mode. Your new Mesh is now [in editing mode](polyshape.md) so you can continue to modify it. + +  + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-create-predefined.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-create-predefined.md new file mode 100644 index 0000000000000000000000000000000000000000..4adc8a5c903eaf3c7bb42974612691aa039164f9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-create-predefined.md @@ -0,0 +1,33 @@ +# Creating a pre-defined ProBuilder shape + +To create a Mesh from a predefined shape: + +1. Open the ProBuilder window (in Unity's top menu: **Tools** > **ProBuilder window**). + + The [Edit Mode toolbar](overview-ui.md#edit-mode-toolbar) and the [ProBuilder toolbar](toolbar.md) appear. + +2. From the ProBuilder toolbar, **Alt/Opt+click** the **New Shape** () button. + + The [Shape Tool window](shape-tool.md) opens with the cube shape selected by default and a preview image appears in the Scene view. + +  + + > **Note:** If you only want a basic cube, click **New Shape** () without pressing **Alt** or **Opt** to skip displaying this window. You can also use **Ctrl/Cmd+K** to create the default cube without modifications. + +3. Select a predefined shape from the __Shape Selector__ drop-down menu. + +4. Set the shape-specific properties to customize your mesh. Each shape has its own set of properties; for example, for a cube, you can define the X, Y, and Z dimensions, but for a cone, you need to set the radius, height, and number of sides. + + See the [Shape Tool page](shape-tool.md) for a complete list of predefined shapes and their properties. + +5. ProBuilder shows a preview of the final shape in turquoise or blue while you are modifying your Mesh properties. You can move and rotate the Mesh preview object. + +6. When you are satisfied with the look of your Mesh, click the **Build** button. + + The blue preview changes to the default ProBuilder material to indicate your Mesh is ready to use. + +7. Close the Shape Tool window if you do not need to create another Mesh. + + +Now that you have created a Mesh shape, you can use any of the [ProBuilder editing tools](workflow-edit.md) to fine-tune or customize that shape further. For example, you can build a plain cube Mesh and then use the **Extrude Face** and **Delete Face** tools to create windows and doors to make a house. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-create.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-create.md new file mode 100644 index 0000000000000000000000000000000000000000..7b890f65557ac982e115f47dc7e184cf5d8a4b08 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-create.md @@ -0,0 +1,25 @@ +# Creating Meshes + +ProBuilder provides several different tools for creating editable Meshes in Unity. + +The most common approach is to [build a predefined shape](workflow-create-predefined.md) with the [Shape Tool](shape-tool.md), which includes a library of shapes. These predefined shapes include standard geometric shapes, and some more complex shapes which correspond to objects that are common in level-building. For example, the **Shape** tool provides simple cubes, prisms, toruses, and other simple geometry that you can use to create buildings, vehicles, and other objects. It also provides some convenient predefined shapes that are typically found in buildings, such as stairs, arches and doors. + + + +To customize each shape, you can specify initial dimensions and other shape-specific parameters. For example, on the cube shape, you can specify the initial width, height and depth. For the stair shape, you can also set the curvature, the number of steps, and whether to build sides. + + + +> **Tip:** **Ctrl+K** is the shortcut for spawning a basic Mesh cube with the default options. + + + +If you need to make a Mesh shaped unlike any of the predefined shapes, you have several options: + +- You can use the [Poly Shape tool](polyshape.md) to create a custom 2-dimensional shape and then extrude that shape into a 3-dimensional Mesh. This is a good strategy for quickly building an irregular structure, like a medieval church or a star-shaped building. +- You can use the [experimental Bezier tool](bezier.md) to define a bezier curve around which ProBuilder extrudes a Mesh. For example, you can use this tool to create tunnels with lots of twists and turns. +- You can use the [custom Shape tool](Custom.md) to enter a sequence of points (X, Y, Z coordinates) that define whatever Mesh shape you require. The benefit of this approach is that you maintain absolute control over the dimensions of the shape; the drawback is that it can be very difficult to correctly generate the necessary coordinates. +- You can apply a Boolean operation on two or more Mesh objects to create a new object. You can choose to create just the difference between the two (Intersection), or everything but the difference between the two (Subtraction), or one big Mesh that encompasses the two original Meshes plus the space in between them (Union). + +Whichever method you use to create your Mesh, you can edit it using any of the [ProBuilder editing tools](workflow-edit.md), [apply vertex colors](workflow-vertexcolors.md), [smooth its sharp edges](workflow-edit-smoothing.md), and [apply Materials and Textures](workflow-materials.md). + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-edit-smoothing.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-edit-smoothing.md new file mode 100644 index 0000000000000000000000000000000000000000..17fa429d40149b5b32106384f23c620b0e56b2ec --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-edit-smoothing.md @@ -0,0 +1,60 @@ +# Smoothing hard edges on Meshes + +You can define **Smoothing Groups** to create a smooth and rounded look on part or all of your Mesh. If you include only a portion of your Mesh, the rest has more of a sharp and hard-cornered look. + +Smoothing does not subdivide the Mesh: it controls whether vertices are split for hard edges. This often works well for simpler Meshes, so it's great for anything that is isn't simple, chunky geometry. For example, you can use this on cylinders or more organic shapes, on curved walls, or on Mesh terrain chunks. + + + +> **Note:** This produces a fairly subtle smoothing. If you need something that turns sharp edges into smooth curves, you need to either [bevel those edges](Edge_Bevel) or [subdivide the faces](Face_Subdivide) around them for greater control. + +Some of the tasks you can perform include: + +* [Defining a smoothing group](#define) +* [Removing smoothing groups](#clear) +* [Selecting faces in the groups](#select) + + + +<a name="define"></a> + +## Defining a smoothing group + +You can define up to 23 groups per Mesh in order to control the degree of smoothness. + +To smooth a portion of your Mesh: + +1. Select the **Face** editing mode from the [Edit Mode toolbar](edit-mode-toolbar.md). + +2. Select the faces that you want to have smooth adjoining edges. + +3. Click the  **Smoothing** tool from the [The ProBuilder toolbar](toolbar). + +4. Click an unused smooth group number on the [Smooth Group Editor](smoothing-groups.md) window. + + > **Tip:** Smooth groups already in use appear with a light blue highlight on the button. + + The selected faces now appear smoother. + +You can repeat these steps using different number buttons. + + + +<a name="clear"></a> + +## Removing smoothing groups + +To clear selected face smoothing groups: + +1. Select the faces with the group defined. +2. Click the  Clear Smoothing Group button on the [Smooth Group Editor](smoothing-groups.md) window. + + + +<a name="select"></a> + +## Selecting faces in the groups + +To select all faces matching the current smoothing group index: + +* Click the  Select Faces button on the [Smooth Group Editor](smoothing-groups.md) window. \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-edit-tasks.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-edit-tasks.md new file mode 100644 index 0000000000000000000000000000000000000000..baf5cc0c20495ebc7ba1b63f2e6d528ebb45bc0a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-edit-tasks.md @@ -0,0 +1,61 @@ +# Common editing tasks + +This page describes some of the most common ways you can use the ProBuilder tools to create geometry. There any many more possibilities, but these should give you a good place to start developing your own workflow. + +## General modeling tasks + +- **Selecting**: Selecting elements is the first step you take when you want to change your Mesh. ProBuilder provides a whole range of [selection tools](selection-tools.md) that make it easier to target the elements you need to access. As a shortcut, when working in the Face editing mode, you can double-click any face to select all faces on the Mesh. + +- **Transforming:** You can translate, rotate, and scale geometry elements to change the shape of a basic Mesh. For example, if you use the basic Stair shape but you want to give it a crooked look, you could move some edges or vertices. + +- **Extruding:** "Extruding" refers to dragging a face out from the Mesh. To do this, click the  [Face editing mode](modes.md) button on the Edit modes toolbar, select a face, hold Shift, and use the Transform controls. + + Alternatively, you can [extrude edges](Edge_Extrude.md) (for example, if you want to build a ski slope, you could extrude an edge and then [smooth it](smoothing-groups.md)). + +- **Insetting**: "Insetting" refers to dragging the edges of the face inside the Mesh. To do this, select a face, hold Shift, and use the Scale controls. Then drag in the opposite direction without the Shift modifier to complete the [inset](Face_Inset.md). + +- **Subdividing edges**: If you have an irregular shape (for example, a wall with a peaked top) and you need to split it into four faces (for example, to insert windows), you can [insert an edge loop](Edge_InsertLoop.md) to split the whole wall into two mirrored pieces, and then select only those edges along the front and back of the wall. + + [Subdividing](Edge_Subdivide.md) the two selected edges then creates a third vertex, which you can connect up with the vertices at the base of the peaked section to create four perfectly even sections on the front and the back. This approach is much easier than trying to subdivide a five-sided polygon. + +- **Boolean operations**: Some geometry is hard to create just by moving faces, edges, and vertices. The [Boolean](boolean.md) tool allows you to quickly combine two Meshes together to create a new Mesh. The final Mesh is either the addition of the two, the difference between the two, or only the common geometry between them, depending on the mode. + +## Object-specific tasks + +* **Create a coffee mug**: start with a [cylinder](Cylinder.md), [select all faces](Selection_Grow.md) on the top and [merge them](Face_Merge.md). Next, create a slight [inset](Face_Inset.md) on the merged top, and [extrude it](Face_Extrude.md) all the way down. Finally, create a half-[torus](Torus.md), rotate it, move it next to the cylinder for the handle and [merge](Object_Merge.md) the torus and cylinder together. +* **Build a bed**: start with a rectangular [cube](Cube.md) for the mattress. Create smaller rectangles for the legs of the bed, and then [merge](Object_Merge.md) everything together to make one single Mesh. +* **Make a bottle**: start with a a [cylinder](Cylinder.md). [Merge the faces](Face_Merge.md) on the top end, then [extrude the face](Face_Extrude.md) up, scale it to the size of a neck, and extrude it up again. + +## Building-specific tasks + +- **Make a hole** (for a window or door): There are many methods you can use to do this, but some work better depending on what you are working on. For example, in an even and rectangular wall, such as on the first floor of a house, you could use this strategy: + + - Select the wall's two faces (back and front), then **Shift**+**Scale** to create an [inset](Face_Inset.md) horizontally, and **Scale** vertically to make it an even border. + - Press **Backspace** to delete the insets. + + On the other hand, if you are working on an uneven or multi-sided wall, such as a castle or church wall, this strategy is preferable: + + * Use the [Insert Edge Loop](Edge_InsertLoop.md) tool to create two vertical edges. Do the same on the horizontal plane (two for a window, one for a door). + * Adjust the loops so that the resulting hole is the right size and location for a window or a door. + * Select the face of the hole and press **Backspace**. If necessary, from the other side of the wall, [delete the face](Face_Delete.md) on the other side. + + Whichever strategy you start with, you need to weld the newly exposed edges and vertices together: + + * Select all the edges on one side only of the hole and use **Shift**+**Translate** until they connect up with the edge on the other side. + * Then [weld the vertices](Vert_Weld.md) together where the edges meet. + +- **Add a door**: follow the *Make a hole* procedure, but to start, create a [Door shape](Door.md). Fit the hole to match, [merge the two objects](Object_Merge.md), and then [weld the door to the frame](Vert_Weld.md) you created. + +- **Make a tunnel with normals on both the inside and outside**: duplicate the tunnel object and scale it slightly so that you [bridge the edges](Edge_Bridge.md). Next, [flip the normals](Object_FlipNormals.md) on the smaller one. + +- **Make a building with towers**: start with a [cube](Cube.md) and [inset](Face_Inset.md) on the top face, then [extrude](Face_Extrude.md) upward. Repeat this as many times as you like. You could also [subdivide the top face](Face_Subdivide.md) to create multiple extrusions. + +## Finding more inspiration + +Use the Unity ProBuilder channel to find videos that demonstrate how to use the tools effectively: + +* [ProBuilder Simple Objects - Crates and Barrels](https://www.youtube.com/watch?v=lmLG4nC9tm0) +* [ProBuilder Building Structures with Interior and Exterior](https://www.youtube.com/watch?v=CBa_opm3_GM) +* [Prototyping a "Medieval House" in Unity with ProBuilder3D](https://www.youtube.com/watch?v=xEEUhSyrq7M) +* [ProBuilder Greyboxing an Interior FPS Level](https://www.youtube.com/watch?v=dYBOBgfcTgY) +* [Unity at GDC - Rapid worldbuilding with ProBuilder](https://www.youtube.com/watch?v=7k-81UEluyg) \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-edit-tips.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-edit-tips.md new file mode 100644 index 0000000000000000000000000000000000000000..d197a2dd1ba98b521d30774f8abd2d4fdb922bb9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-edit-tips.md @@ -0,0 +1,60 @@ +# Modeling tips for beginners + +To successfully create digital models, you need to find a balance between visual quality and resource requirements. Always bear these two statements in mind: + +- The less geometry you use in your Mesh, the faster your application runs. This is because every vertex, edge, or face requires computing resources. +- The more geometry you use in your Mesh, the more detailed and organic your GameObjects look. This is because more geometry means smaller polygons, which gives you more control over the shape. + +One strategy you can use to find a good balance is to start with major modifications, such as [extruding](Face_Extrude.md) and [insetting](Face_Inset.md), until your Mesh is roughly the right shape. During this phase, make sure that your geometry is minimal and well-structured: use quads (four-sided polygons) or triangles whenever possible. For example, use [Insert Edge Loop](Edge_InsertLoop.md) instead of [Connect Edges](Edge_Connect.md) to keep the edges and faces as symmetrical as possible. + +After you have finished the rough modeling on your Mesh, you can begin to refine it by [subdividing faces](Face_Subdivide.md) as needed. During this phase, you may decide that it is more important to achieve the correct shape quickly than to keep perfect uniformity. + +Finally, when you are satisfied with the look and shape of your Mesh, you can try to remove unnecessary geometry where possible, to simplify the Mesh. You can [merge faces](Face_Merge.md) to reduce the number of edges Unity has to process, and [collapse](Vert_Collapse.md) or [weld](Vert_Weld.md) extra vertices. You can also [remove any faces](Face_Delete.md) that are hidden behind Meshes or simply beyond the reach of the Camera. + + + +# Ideal geometry + +When you create buildings and other architectural structures, you can use a tool like [ProGrids](https://docs.unity3d.com/Packages/com.unity.progrids@latest) to help you stick to right angles and perfect lines. It also makes you less likely to accidentally move vertices past an adjacent vertex, which would create realistically impossible geometry. + +To make it easier to combine pieces of your buildings together later on, only use only 90-degree and 45-degree angles when building, and avoid unusual or unrealistic angles. For example, if you build the shell of a house as one Mesh and a staircase as a second Mesh, it is easier to fit the two together if they are aligned perfectly. + + + +<a name="bad_verts"></a> + +# Structures to avoid + +Try to avoid creating structures that contain vertices in irregular locations: + +- [T-Junctions](#tjoint) +- [Floating vertices](#floatv) + + + +<a name="tjoint"></a> + +## T-Junctions + +If you can avoid vertices at T-junctions, that makes your geometry a lot cleaner: + + + +Notice the edge that splits only the top into two faces and does not continue into the front (the purple face). ProBuilder created the vertices at either end of this edge during a [Connect Edges](Edge_Connect.md) action. + +To avoid this complexity, the [Insert Edge Loop](Edge_InsertLoop.md) action creates edges all the way around the object, so that there are no T-junctions. + + + +<a name="floatv"></a> + +## Floating vertices + +Another structural issue to avoid is a floating (or winged) vertex: + + + +This vertex is only connected to one edge. ProBuilder left it behind after a [Merge Faces](Face_Merge.md) operation. It adds to the complexity of the geometry, but it doesn't define any connections, so ProBuilder isn't using it. + +To fix a floating vertex, select the floating vertex and an adjacent vertex, then run the [Collapse Vertices](Vert_Collapse.md) tool with the **Collapse To First** option enabled. Make sure you select the vertex you want to keep first. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-edit.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-edit.md new file mode 100644 index 0000000000000000000000000000000000000000..5d54a60c1ee3f1794ffacde98a63798d095ae847 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-edit.md @@ -0,0 +1,36 @@ +# Editing Meshes + +ProBuilder provides these ways to edit ProBuilder Meshes: + +- You can [modify the elements](#edit) of any ProBuilder Mesh to change its shape. As you move or extrude faces, edges, or vertices, you are distorting and deforming the Mesh itself. + + Other than basic transformations, ProBuilder also provides tools to fill holes, split vertices, collapse edges, and many more actions. You can use these tools to build up an existing shape or combine it with other shapes, including merging or detaching Meshes. + + You can also modify any regular Unity GameObject with ProBuilder tools, if you [Probuilderize](Object_ProBuilderize.md) it first. + +- In addition to modifying Mesh elements, there are special editing modes for Poly Shapes and Bezier Shapes that allow you to return to the shape you created or last edited: + + - For Poly Shapes, you can [edit the extrusion and the normals](polyshape.md), after you finish [creating it](workflow-create-polyshape.md). + + - For Bezier Shapes, you can [edit the underlying bezier curve](bezier.md); you can delete and move existing points, add new ones, close the loop, and smooth it. + + > **Warning:** Bezier shapes are experimental, meaning that they are still under development, and might reduce ProBuilder's stability. Please use with caution. + + + + +<a name="edit"></a> + +## Modifying objects and elements + +To edit objects and elements, you need to: + +1. Decide which tools can help you achieve the end results. There might be multiple solutions that can all produce the effect you want. This can be a very challenging stage, particularly for new users who don't know what ProBuilder's tools can do. +2. Select the element(s) that you want to modify. Often, the editing tool impacts which elements you need to select and how you need to select them. +3. Depending on which tool you are using, set any options to help customize the outcome or change the default settings. If a tool offers options, an indicator appears on the button in the [ProBuilder toolbar](toolbar.md): + * **Alt/Opt+Click** the gear  indicator that appears in the top right of the button in **Icon** mode. + * **Click** the `+` icon that appears on the right side of the button in **Text** mode. +4. Perform the action. Depending on what you are doing, this may be a simple matter of clicking a button. In some cases, you may be carrying out some intricate procedures. For example, you can click to [extrude edges](Edge_Extrude.md) with the default settings, or you can use the **Shift+Drag** method to control exactly how and where to locate the extruded edge. + +ProBuilder actions create, destroy, join, split, and transform objects and elements. Some actions modify the geometry of the Mesh without changing the overall shape, whereas some actions change both. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-exporting.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-exporting.md new file mode 100644 index 0000000000000000000000000000000000000000..3bcac07cede0e8e52529745911cc2327c23b5af8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-exporting.md @@ -0,0 +1,65 @@ +# Exporting and re-importing + +If you want to use a ProBuilder Mesh in another program, such as a 3D modeling application, you can use the **Export** tool to save it to one of the supported formats. For example, you might be using a ProBuilder Mesh as a placeholder while greyboxing, but eventually want to create or enhance a complex Mesh. + +You can also export your ProBuilder Mesh to the Unity `.asset` format and re-import it to use as a Prefab or spawn it in the Scene. + +> **Caution:** When you export a ProBuilder Mesh to file, remember that if you want to re-import and use ProBuilder tools on it, you need to [ProBuilderize](Object_ProBuilderize.md) first. + +This section provides information on which formats are available, how to export ProBuilder objects to file, and also some tips for re-importing back into Unity. + + + +<a name="formats"></a> + +## Supported formats + +ProBuilder allows you to export GameObjects to the following formats: + +| **Format:** | **Description:** | +| :------------ | :----------------------------------------------------------- | +| `OBJ` | Wavefront OBJ. This is a widely supported model format. It supports multiple Textures and Mesh groups. | +| `STL` | A widely supported format, generally used in CAD software or 3D printing. It only supports Triangle geometry. | +| `PLY` | Stanford PLY. Generally supported and very extensible. It supports quads and vertex colors, but not multiple Materials. | +| `Asset` | Unity Asset format, only readable in Unity. | + + + +<a name="export"></a> + +## Exporting a ProBuilder Mesh + +To export one or more objects to one of the [supported formats](#formats): + +1. Select the object(s) you want to export. + +2. **Alt/Opt+Click** over the **Export** button. + + The [Export Options](Object_Export.md) appear. + +3. Select the [format you want to export to](#export) from the **Export Format** drop-down menu. + + The other Export options change depending on which format you selected. + +  + +4. If you're exporting an OBJ to use in Unity, disable the [Copy Textures](Object_Export.md) option. + + > **Tip:** When you re-import the Mesh, follow the instructions under [Re-importing an exported Mesh](#reimport). + +5. When you are finished setting the Export options, click **Export**. + +6. Use the file browser to save the exported 3D Model. + + + +<a name="reimport"></a> + +## Re-importing an exported Mesh + +When you import the OBJ format, select the 3D Model file from the Project view, and on the [Material tab](https://docs.unity3d.com/Manual/FBXImporter-Materials.html) of the **Model Import Settings** window, set the following options: + +- Choose **Use Embedded Materials** from the **Location** drop-down menu. +- Inside the **Remapped Materials** section, expand the **On Demand Remap** option group. +- Choose **From Model's Material** from the **Naming** drop-down menu. +- Choose **Project-Wide** from the **Search** drop-down menu. \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-materials.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-materials.md new file mode 100644 index 0000000000000000000000000000000000000000..e841d47ee7b52ebb8d0b67b07bf40b0de0c99851 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-materials.md @@ -0,0 +1,37 @@ +# Creating and Applying Materials + +Use the [Material Editor](material-tools.md) to easily manage Materials you are using in the Scene. You can carry out a number of editing tasks, including the following: + +* [Setting a quick Material](material-tools.md#qset) and then using a hotkey to [apply it](material-tools.md#qapply) to the selected face(s). +* [Assigning up to 10 Materials](material-tools.md#set) to hotkeys and buttons in the editor so you can easily [apply multiple Materials to faces](material-tools.md#apply) without having to use the Project view to find them. +* [Defining extra Material slots](material-tools.md#wells) in your Palette so that you can manage extra Materials at once. +* [Saving your Material arrangement](material-tools.md#save) in a new Material Palette so that you can find it easily and re-use it in other Scenes and Projects. +* [Loading](material-tools.md#load) a previously saved Material Palette into the Material Editor. + + + +The Materials you use in the Material Editor are standard Unity Materials. If you want to create your own standard Unity Material, follow the instructions in [Creating and Using Materials](https://docs.unity3d.com/Manual/Materials.html) in the Unity manual. For Texture Materials, follow the instructions in [Creating a Texture Material](#texmat). + + + +<a name="texmat"></a> + +## Creating a Texture Material + +Before you create the Material, make sure you have a 2-dimensional image file (BMP, JPG, PNG, TIF etc.). Then follow these instructions: + +1. Right-click in the Project view, in the folder you want to place the Material file, and select **Create** > **Material** from the context menu. + + Alternatively, you can use the main menu (**Assets** > **Create** > **Material**). + +2. Name the Material file. For example, you could describe the look or use of the Texture, such as "BrickWall" or "CheckeredTile". + + The Shader properties appear in the Inspector. + +3. [Set a reference](https://docs.unity3d.com/Manual/EditingValueProperties.html) to the Texture file you want to use in the **Albedo** property. + +  + + +Now that you have a Texture Material, you can [set it as the quick Material](material-tools.md#qset), [add it to your Material Palette](material-tools.md#palette), and [apply it to a whole object or only specific faces](material-tools.md#apply). + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-texture-mapping.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-texture-mapping.md new file mode 100644 index 0000000000000000000000000000000000000000..e3b0fe9517e034725f82f6650b0183ea2f4b5e2e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-texture-mapping.md @@ -0,0 +1,26 @@ +# Materials, Shaders, Textures, and UVs + +In Unity, [Materials](https://docs.unity3d.com/Manual/class-Material.html) allow you to specify which Shader to use on a Mesh. [Shaders](https://docs.unity3d.com/Manual/Shaders.html) perform a set of calculations that tell Unity how to render (draw) your Meshes based on properties specific to that Shader. + +You can apply Materials to make your floor look like it's made of tile, wood, stone, or anything else that you want. ProBuilder allows you to [apply a Material](workflow-materials.md) to the entire Mesh, or just on selected faces. This allows you to provide more realistic-looking surfaces during game play or while grey-boxing. For example, you might decide to use tiles on the floor, brick on some walls, and stone on others. + + + +Some Materials use [Textures](https://docs.unity3d.com/Manual/Textures.html), which are bitmap images (for example, Unity can import BMP, JPEG, PNG, and most standard 2-dimensional image formats). Unity projects these images on the surfaces of your Mesh to achieve a more realistic result. + +The Mesh stores the texture mapping data as *UVs*. These are basically 2D fold-outs of the actual 3D Mesh, as if you peeled back the skin of an object and laid it out flat, like the image below. + + + +*UV coordinates* (also sometimes called *texture coordinates*) are references to specific locations on the image. They only use two dimensions (u,v). Texture mapping is the list of 2D UV coordinates mapped to their 3D vertex counterparts on the surface in three dimensions (x,y,z). This mapping tells Unity exactly how and where to project the image on the Mesh. + +> **Note:** For more in-depth information on these concepts and the relationship between rendering and GameObjects in Unity, see [Materials, Shaders & Textures](https://docs.unity3d.com/Manual/Shaders.html) in the Unity User Manual. + +The [Smoothing Groups tool](workflow-edit-smoothing.md) smooths the seams on portions of your Meshes and leaves others sharper. This can be very useful when creating organic Meshes, such as terrain objects. + +For [Materials containing Textures](workflow-materials.md#texmat), you can use [ProBuilder's texture mapping tools](workflow-texture-mapping.md) to fine-tune the appearance. For example, if you apply a brick Material to a wall, you can adjust the offset, rotation, and tiling of the object's UVs. + + + +This image shows the Textures before adjustments on the left and after adjustments on the right. On the right, the brick texture is scaled down and tiled on the wall Mesh, and the wooden Texture is rotated to match the alignment of the sign post Mesh, so that the grain appears to be moving in a natural direction. The grass Texture on the right has been repositioned and [smoothed](). + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-uvs.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-uvs.md new file mode 100644 index 0000000000000000000000000000000000000000..a55f711bfeea74f160d262cc0c8d0756188612ed --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-uvs.md @@ -0,0 +1,151 @@ +# Mapping Textures with UVs + +To give your walls, doors, floors, or other objects a realistic look, use a Texture Material, which is just a special Material with a 2-dimensional image defined on it. You can [create it yourself](workflow-materials.md#texmat) or [download one from the Asset Store](https://docs.unity3d.com/Manual/AssetStore.html). + +After you [apply the Texture Material](workflow-materials.md#apply), open the UV Editor to fine-tune the look of the Texture on your Mesh and adjust its appearance. The UV Editor window provides several texture mapping tools to help you get the position, orientation, and size just right. + +> **Tip:** Before you start to manually edit UVs, delete any hidden faces. This helps simplify the UV unwrapping process, because it simplifies the complexity of the UV elements that appear in the UV Editor. + + + +## Manipulating UV elements in the UV Editor + +You can manipulate elements with the [ProBuilder edit modes](edit-mode-toolbar) in the UV Editor, but you are actually moving UI elements rather than geometry. In addition, when the UV Editor window is open, you can still manipulate elements in the Scene view: if you turn on the  Scope control, you are moving geometry; if you turn it off (), you are moving UVs. + +You can [translate, rotate, and scale](https://docs.unity3d.com/Manual/PositioningGameObjects.html) elements to move them into place: + +* **Translating** allows you to align the UVs to the geometry. For example, if you have a wall with a window, you might need to move the Texture image so that the window image appears at the right height on your wall. + +  + +* **Rotating** turns the image being projected on the skin of the Mesh. For example, if you have an object that is made of wood, you need to line up the grain of the wood in the Texture image with the geometry in a way that makes it look natural. + +  + +* **Scaling** changes the size of the projection, so when you scale the UV elements down, a smaller portion of the image appears on the Mesh. For example, you might have a barrel image that contains the sides of the barrel on one half and the lid and bottom on the other half. + +  + + +> **Tip:** If you hold down the **Ctrl/Cmd** key while translating in the UV Editor window, the UV element snaps to the grid. + + + +## Auto UV mode features + +ProBuilder's **Auto UV** mode provides some basic settings and then uses that information to project the Texture image on the Mesh automatically. You can determine how ProBuilder should [treat the image](auto-uvs-actions.md#tiling-amp-alignment): repeat it, enlarge it, or distort it to fill the space. + +You can also use the transformation controls to translate, rotate, and scale UV elements, or [use precise values](auto-uvs-actions.md#Transform) with the **Offset** (**Translate**), **Rotation**, and **Tiling** (**Scale**) values. There are also a couple of shortcuts to [flip the UVs](auto-uvs-actions.md#special). + +> **Tip:** If something goes wrong with your UV mapping, and using Undo a few times doesn't fix the problem, you can always reset the UVs on a specific face and start again. To reset the UVs, select the face(s) you want to fix, navigate to the Auto UV mode **Actions** panel, and click the **Reset UVs** button. + +After you specify these guidelines, ProBuilder keeps the image projections consistent. Even if you change the geometry, you don't have to adjust or reposition the UVs. + +### Continuous tiling + +When you work in Auto UV mode, you can designate several faces as a [Texture Group](auto-uvs-actions.md#Groups). The faces inside a Texture Group behave as if they are one face for tiling. + + + +#### To make a Texture Group + +1. Open the UV Editor. +2. Select the faces you want to group, either from inside the UV Editor or in the Scene view. +3. Click the [Group Selected Faces](auto-uvs-actions.md#Groups) button. In the UV Editor, the UV faces now move as one. + +#### To add a face to an existing group + +This procedure is the only way to add a face to an existing group without having to break the group and reform it from scratch. If you select the group and the new face and click **Group Selected Faces**, ProBuilder creates a new group containing the selection. + +1. Note the [Texture Group](auto-uvs-actions.md#Groups) ID under the **Texture Groups** section. +2. Select the face(s) you want to add to the group. If this face already belongs to a group, a different number appears in the **Texture Group** text box. Otherwise, the default number (0) appears to indicate it is not assigned to any Texture Group. +3. Enter the ID number of the desired group in the **Texture Group** ID text box. + +> **Note**: This does not add the rest of the Texture Group to the selection. + +#### To select all the faces in a Texture Group + +1. Select any of the faces that belongs to the group. +2. Click the [Select Texture Group](auto-uvs-actions.md#Groups) button. + +#### To remove a Texture Group + +This procedure removes any group that any of the selected face(s) belongs to. + +1. Select any of the faces that belongs to the group. +2. Click the [Break Selected Groups](auto-uvs-actions.md#Groups) button. + + + +## Manual UV mode features + +Any time you modify edges or vertices in the UV Editor, you enter the **Manual UV** mode. You can also select the face(s) you want to set as manual, and click the **Convert to Manual** button instead. The Actions panel provides a completely different set of tools, and the UV Editor displays manual faces as yellow or orange in the UV Editor, whereas automatic faces appear turquoise or blue. + +To start manually editing UVs, choose between the [box and planar](manual-uvs-actions.md#Project) projection modes. This difference between these is that **planar** projects the image from a single point across all faces, while the **box** method uses a planar projection for each face. + +When you've done this, you can use the transform tools to move, rotate, and scale UV elements, with the auto-snapping (**Ctrl/Cmd+translate**) hotkey combination where needed. The [Fit UVs tool](manual-uvs-actions.md#fit-uvs) shrinks or grows your UV face uniformly. You can also move faces into place, and then select either the vertices or edges and weld them together to make an [island](manual-uvs-actions.md#Edit). + +If you need to change the shape of the UV face, move the vertices and edges directly. Alternatively, you can use the [auto-stitch](manual-uvs-actions.md#autostitching) method to make ProBuilder build more islands. If you need to break them apart again, select each face you want to break off, then click the [Split UVs](manual-uvs-actions.md#split-uvs) button. Now you can move them around independently. + +You can temporarily change the pivot location; to do this, click and drag it around in the UV Editor. The pivot is the reference point for scaling and rotating. Changing the pivot location is only a temporary change: if you click something else and then re-select it, it snaps back to the center. + +To mirror the UV mapping on a face, you can [flip the UVs](manual-uvs-actions.md#edit) either horizontally or vertically. You can also [copy the UV mapping](manual-uvs-actions.md#copy-uvs) from one face to another. + +> **Tip:** If something goes wrong with your UV mapping and using Undo a few times doesn't help, you can always reset the UVs on a specific face and start again. To reset the UVs, select the face(s) you want to fix, switch to Auto UV mode, navigate to the Auto UV mode **Actions** panel, and click the **Reset UVs** button. + + + +## Common texture mapping tasks + +This section describes some of the most common ways you can use the ProBuilder texture-mapping tools. There any many more possibilities, but these should give you a good place to start developing your own workflow. + +* **Wooden beams**: Select the UV face(s) and [rotate them in Auto UV mode](auto-uvs-actions.md#Transform) until the grain goes down the length of the beam. With the UV Editor open, you can select all faces at once in the Scene view by double-clicking on any face on the object. + +* **Stone or tile pathway**: Depending on the length and crookedness of your pathway, you could: + + * [Autostitch](manual-uvs-actions.md#autostitching) the pieces together to create one large unwrapped UV map and then [apply the stone or tile Material](material-tools.md) with a [Planar projection](manual-uvs-actions.md#planar). + * Select a face, [grow the selection](Selection_Grow.md) until all of the pathway is selected, and then apply the Material. If needed, you can then [tweak the UV alignment](auto-uvs-actions.md#Transform) on the selected UV faces. + + You can also select a group of faces and tweak the placement in either mode to get the final look just right. + +* **Brick or stone walls**: For objects that you want to make continuous, like walls, use the [Auto UV mode](uv-editor.md#uv-editing-modes). Start by selecting one of the faces on the side of the wall and [grow the selection](Selection_Grow.md). Then you can [scale the UV faces](auto-uvs-actions.md#Transform) up so that the pattern tiles more (for smaller bricks), or down to tile less (bigger bricks). + + To tile across adjacent faces perfectly, [group the faces together](auto-uvs-actions.md#texture-groups). Avoid including the corners, because they can create a stretch effect. + + If you prefer to use manual editing, you could use [autostitching](manual-uvs-actions.md#autostitching); start from the sides all around, and then finally add the tops. This makes the tiling around the corners look more natural. However, because this is the Manual UV mode, you have to re-position the UVs if you resize the geometry. + +* **Wooden barrels**: You can use a Texture that uses different portions of the same image file to define the top, bottom, and sides. First, [autostitch](manual-uvs-actions.md#autostitching) all the side faces together. This automatically changes the autostitched faces to use [Manual UV mode](uv-editor.md#uv-editing-modes). + + Next, you can move those faces by translating, and if you hold the **Shift** key while translating, the UVs [snap to the grid](hotkeys.md#uv-snap). Scale up or down to fit the height exactly. You don't have to worry about the width, because the image wraps around the faces that are off the image. + + Finally, you can use the same methods to align and scale the barrel's top and bottom so that it appears exactly in the right place for the barrel image. + +* **Wooden crate**: Add a [heightmap](https://docs.unity3d.com/Manual/StandardShaderMaterialParameterHeightMap.html) to your Texture to give the illusion of extra geometry. You can set up one side and then [copy those UV settings](manual-uvs-actions.md#copy-uvs) over to other faces. The [Manual UV mode](uv-editor.md#uv-editing-modes) is best for objects like these. + +### Finding more inspiration + +Use the Unity ProBuilder channel to find lots of videos that demonstrate how to use the tools effectively: + +* [ProBuilder Simple Objects - Crates and Barrels](https://www.youtube.com/watch?v=lmLG4nC9tm0) +* [Prototyping a "Medieval House" in Unity with ProBuilder3D](https://www.youtube.com/watch?v=xEEUhSyrq7M) +* [ProBuilder Simple Texturing with AutoUVs](https://www.youtube.com/watch?v=bigj13SU1rs) +* [ProBuilder Advanced Texturing with Manual UVs](https://www.youtube.com/watch?v=d3_2h4cN4cY) +* [ProBuilder Tutorial 5: Texturing Part I - Materials and Vertex Colors (v2.3, Unity)](https://www.youtube.com/watch?v=m085rEQmVP8) +* [ProBuilder Tutorial 6: Texturing Part II - UV Editing and Unwrapping (v2.3, Unity)](https://www.youtube.com/watch?v=U_5f8RlciWQ) + + + +## Creating a UV template + +ProBuilder can render out a UV template that allows you to open it in an image editing program and customize your Texture for the shape you need. + +1. Open the UV Editor. +2. Click the Camera icon (). +3. [Save UV Image](uv-editor-toolbar.md#Texture) window pops up +4. You can [customize the appearance](uv-editor-toolbar.md#SaveUV) of the template, such as the color of the template lines or the size of the image file. +5. Click **Save UV Template** and choose where you want it to save the file. ProBuilder creates a PNG file displaying a black background and lines etching the shape of the template. + +Now you can open it in an image editing program and create or refine the Texture image in exactly the right dimensions. + + + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-vertexcolors.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-vertexcolors.md new file mode 100644 index 0000000000000000000000000000000000000000..e58f5accb74e9dbd042d82db2b82a691c6c188ff --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-vertexcolors.md @@ -0,0 +1,46 @@ +# Setting vertex colors + +Applying vertex colors is a great way to colorize levels for prototyping, team layout, zones, and more. You can apply unique vertex colors to faces or objects in order to easily identify where they begin and end. You can also apply vertex colors to vertices and edges for visual effects. + + + + + +> **Warning:** Not all shaders display vertex colors on a Mesh. However, you can see vertex colors on your Meshes as long as you use a Material that supports vertex colors (like the default ProBuilder Material). + + + +## Editing modes + +Depending on what [editing mode](modes.md) you are in and what you select on your Mesh, the vertex colors appear differently. For example, if you select a single vertex or edge, the color you apply is intense on that element and fades outward from it. However, if you select a face or the entire Mesh object, the color covers the face or Mesh evenly: + + + + + +<a name="apply"></a> + +## Applying a color + +To apply a vertex color: + +1. Select the [Editing mode](modes.md) you want from the [Edit mode toolbar](edit-mode-toolbar.md). + +2. Select the object(s) or element(s) that you want to apply a color to. + +3. Click the  **Vertex Colors** tool on the ProBuilder toolbar. + + The [Vertex Colors window](vertex-colors.md) appears. + +4. Click the **Apply** button next to the color you want to apply. + + + +> **Tip:** If you know the number of the color preset, you can apply it directly with either of these methods: +> +> * Use the **Alt/Opt+Shift+#** hotkey. +> * Select the color preset from the ProBuilder menu (**Tools** > **ProBuilder** > **Vertex Colors** > **Set Selected Faces to Preset #**). + + + +> **Note:** To remove a vertex color, apply the white vertex color (**#FFFFFF**). diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-walkthroughs.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-walkthroughs.md new file mode 100644 index 0000000000000000000000000000000000000000..9e72a6f59b657f199aa8e5d985618cb5a8df54de --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflow-walkthroughs.md @@ -0,0 +1,16 @@ +# Level walkthroughs + +Perform a walkthrough of your level frequently while you build it. This allows you to decide whether the rooms are an appropriate size for your character. If not, go back and edit your buildings or start again. + +For example, you should enter Play mode as soon as you put up the basic walls and ceiling and then walk around in your level. By putting yourself in your character's skin, you will make a better game because you know what it feels like to play. + +ProBuilder offers many ways to do similar tasks: it is up to you to decide how you like to work. For example, you can either build structures from shapes like they are building blocks or you can make really big cubes, reverse the normals and treat the inner space as the room inside: + + + + Four separate Meshes stitched together + + Large box with top face extruded down and then deleted + +Large box with flipped normals + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflows.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflows.md new file mode 100644 index 0000000000000000000000000000000000000000..cbf0ada994e41b847bd6dc284fbae5fd74f86d8b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Documentation~/workflows.md @@ -0,0 +1,2 @@ +# ProBuilder workflows + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor.meta new file mode 100644 index 0000000000000000000000000000000000000000..386ea41289199dd00f64c45c56ab86b1aeff318e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d35e819b342bb4d369b4f35599aae75f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore.meta new file mode 100644 index 0000000000000000000000000000000000000000..363b9cf137132dcefd6d40512ce6b9a2e83b0a05 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 73c672377c494b42b2cf29016e7f37eb diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/AssemblyInfo.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..532fc3576ddfc4595481fc7ba91aeef0c1cf892c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/AssemblyInfo.cs @@ -0,0 +1,5 @@ +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Unity.ProBuilder.AddOns.Editor")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Unity.ProBuilder.Tests")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Unity.ProBuilder.Editor.Tests")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Unity.ProBuilder.MenuItems")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Unity.ProBuilder.Debug.Editor")] diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/AssemblyInfo.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/AssemblyInfo.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..288ebf9b5615fe65de78cd16acbc5ffff9ca4a05 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c6624e07ef7bd4f379420666341dd539 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/AutoUVEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/AutoUVEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..f32cdce68857282d25fcd429a52ccb3e09520e0c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/AutoUVEditor.cs @@ -0,0 +1,576 @@ +#pragma warning disable 0414 + +using UnityEngine; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Custom editor for pb_UV type. + /// </summary> + static class AutoUVEditor + { + #region MEMBERS + + static ProBuilderEditor editor + { + get { return ProBuilderEditor.instance; } + } + + static AutoUnwrapSettings s_AutoUVSettings = AutoUnwrapSettings.tile; + static int textureGroup = -1; + static List<AutoUnwrapSettings> s_AutoUVSettingsInSelection = new List<AutoUnwrapSettings>(); + static Dictionary<string, bool> s_AutoUVSettingsDiff = new Dictionary<string, bool>() + { + { "projectionAxis", false }, + { "useWorldSpace", false }, + { "flipU", false }, + { "flipV", false }, + { "swapUV", false }, + { "fill", false }, + { "scalex", false }, + { "scaley", false }, + { "offsetx", false }, + { "offsety", false }, + { "rotation", false }, + { "anchor", false }, + { "manualUV", false }, + { "textureGroup", false } + }; + + public enum Axis2D + { + XY, + X, + Y + } + + static Vector2 s_ScrollPosition; + + #endregion + + #region ONGUI + + public static bool OnGUI(ProBuilderMesh[] selection, float width) + { + UpdateDiffDictionary(selection); + + s_ScrollPosition = EditorGUILayout.BeginScrollView(s_ScrollPosition); + float tempFloat = 0f; + + EditorGUI.BeginChangeCheck(); + + /** + * Set Tile mode + */ + GUILayout.Label("Tiling & Alignment", EditorStyles.boldLabel); + + GUILayout.BeginHorizontal(); + EditorGUI.showMixedValue = s_AutoUVSettingsDiff["fill"]; + GUILayout.Label("Fill Mode", GUILayout.MaxWidth(80), GUILayout.MinWidth(80)); + EditorGUI.BeginChangeCheck(); + s_AutoUVSettings.fill = (AutoUnwrapSettings.Fill)EditorGUILayout.EnumPopup(s_AutoUVSettings.fill); + if (EditorGUI.EndChangeCheck()) + SetFill(s_AutoUVSettings.fill, selection); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + bool enabled = GUI.enabled; + GUI.enabled = !s_AutoUVSettings.useWorldSpace; + EditorGUI.showMixedValue = s_AutoUVSettingsDiff["anchor"]; + EditorGUI.BeginChangeCheck(); + GUILayout.Label("Anchor", GUILayout.MaxWidth(80), GUILayout.MinWidth(80)); + s_AutoUVSettings.anchor = (AutoUnwrapSettings.Anchor)EditorGUILayout.EnumPopup(s_AutoUVSettings.anchor); + if (EditorGUI.EndChangeCheck()) + SetAnchor(s_AutoUVSettings.anchor, selection); + GUI.enabled = enabled; + GUILayout.EndHorizontal(); + + GUI.backgroundColor = PreferenceKeys.proBuilderLightGray; + UI.EditorGUIUtility.DrawSeparator(1); + GUI.backgroundColor = Color.white; + + GUILayout.Label("Transform", EditorStyles.boldLabel); + + /** + * Offset + */ + EditorGUI.showMixedValue = s_AutoUVSettingsDiff["offsetx"] || s_AutoUVSettingsDiff["offsety"]; + var tempVec2 = s_AutoUVSettings.offset; + UnityEngine.GUI.SetNextControlName("offset"); + s_AutoUVSettings.offset = EditorGUILayout.Vector2Field("Offset", s_AutoUVSettings.offset, GUILayout.MaxWidth(width)); + if (tempVec2.x != s_AutoUVSettings.offset.x) { SetOffset(s_AutoUVSettings.offset, Axis2D.X, selection); } + if (tempVec2.y != s_AutoUVSettings.offset.y) { SetOffset(s_AutoUVSettings.offset, Axis2D.Y, selection); } + + /** + * Rotation + */ + tempFloat = s_AutoUVSettings.rotation; + EditorGUI.showMixedValue = s_AutoUVSettingsDiff["rotation"]; + GUILayout.Label(new GUIContent("Rotation", "Rotation around the center of face UV bounds."), GUILayout.MaxWidth(width - 64)); + UnityEngine.GUI.SetNextControlName("rotation"); + EditorGUI.BeginChangeCheck(); + tempFloat = EditorGUILayout.Slider(tempFloat, 0f, 360f, GUILayout.MaxWidth(width)); + if (EditorGUI.EndChangeCheck()) + SetRotation(tempFloat, selection); + + /** + * Scale + */ + EditorGUI.showMixedValue = s_AutoUVSettingsDiff["scalex"] || s_AutoUVSettingsDiff["scaley"]; + tempVec2 = s_AutoUVSettings.scale; + GUI.SetNextControlName("scale"); + EditorGUI.BeginChangeCheck(); + s_AutoUVSettings.scale = EditorGUILayout.Vector2Field("Tiling", s_AutoUVSettings.scale, GUILayout.MaxWidth(width)); + + if (EditorGUI.EndChangeCheck()) + { + if (tempVec2.x != s_AutoUVSettings.scale.x) { SetScale(s_AutoUVSettings.scale, Axis2D.X, selection); } + if (tempVec2.y != s_AutoUVSettings.scale.y) { SetScale(s_AutoUVSettings.scale, Axis2D.Y, selection); } + } + + // Draw tiling shortcuts + GUILayout.BeginHorizontal(); + if (GUILayout.Button(".5", EditorStyles.miniButtonLeft)) SetScale(Vector2.one * 2f, Axis2D.XY, selection); + if (GUILayout.Button("1", EditorStyles.miniButtonMid)) SetScale(Vector2.one, Axis2D.XY, selection); + if (GUILayout.Button("2", EditorStyles.miniButtonMid)) SetScale(Vector2.one * .5f, Axis2D.XY, selection); + if (GUILayout.Button("4", EditorStyles.miniButtonMid)) SetScale(Vector2.one * .25f, Axis2D.XY, selection); + if (GUILayout.Button("8", EditorStyles.miniButtonMid)) SetScale(Vector2.one * .125f, Axis2D.XY, selection); + if (GUILayout.Button("16", EditorStyles.miniButtonRight)) SetScale(Vector2.one * .0625f, Axis2D.XY, selection); + GUILayout.EndHorizontal(); + + GUILayout.Space(4); + + UnityEngine.GUI.backgroundColor = PreferenceKeys.proBuilderLightGray; + UI.EditorGUIUtility.DrawSeparator(1); + UnityEngine.GUI.backgroundColor = Color.white; + + /** + * Special + */ + GUILayout.Label("Special", EditorStyles.boldLabel); + + EditorGUI.showMixedValue = s_AutoUVSettingsDiff["useWorldSpace"]; + EditorGUI.BeginChangeCheck(); + s_AutoUVSettings.useWorldSpace = EditorGUILayout.Toggle("World Space", s_AutoUVSettings.useWorldSpace); + if (EditorGUI.EndChangeCheck()) + SetUseWorldSpace(s_AutoUVSettings.useWorldSpace, selection); + + GUI.backgroundColor = PreferenceKeys.proBuilderLightGray; + UI.EditorGUIUtility.DrawSeparator(1); + GUI.backgroundColor = Color.white; + + + // Flip U + EditorGUI.showMixedValue = s_AutoUVSettingsDiff["flipU"]; + EditorGUI.BeginChangeCheck(); + s_AutoUVSettings.flipU = EditorGUILayout.Toggle("Flip U", s_AutoUVSettings.flipU); + if (EditorGUI.EndChangeCheck()) + SetFlipU(s_AutoUVSettings.flipU, selection); + + // Flip V + EditorGUI.showMixedValue = s_AutoUVSettingsDiff["flipV"]; + EditorGUI.BeginChangeCheck(); + s_AutoUVSettings.flipV = EditorGUILayout.Toggle("Flip V", s_AutoUVSettings.flipV); + if (EditorGUI.EndChangeCheck()) + SetFlipV(s_AutoUVSettings.flipV, selection); + + EditorGUI.showMixedValue = s_AutoUVSettingsDiff["swapUV"]; + EditorGUI.BeginChangeCheck(); + s_AutoUVSettings.swapUV = EditorGUILayout.Toggle("Swap U/V", s_AutoUVSettings.swapUV); + if (EditorGUI.EndChangeCheck()) + SetSwapUV(s_AutoUVSettings.swapUV, selection); + + /** + * Texture Groups + */ + GUILayout.Label("Texture Groups", EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + EditorGUI.showMixedValue = s_AutoUVSettingsDiff["textureGroup"]; + + GUI.SetNextControlName("textureGroup"); + textureGroup = UI.EditorGUIUtility.IntFieldConstrained(new GUIContent("Texture Group", "Faces in a texture group will be UV mapped as a group, just as though you had selected these faces and used the \"Planar Project\" action"), textureGroup, (int)width); + + if (EditorGUI.EndChangeCheck()) + { + SetTextureGroup(selection, textureGroup); + + foreach (var kvp in MeshSelection.selectedFacesInEditZone) + kvp.Key.RefreshUV(kvp.Value); + + SceneView.RepaintAll(); + + s_AutoUVSettingsDiff["textureGroup"] = false; + } + + if (GUILayout.Button(new GUIContent("Group Selected Faces", "This sets all selected faces to share a texture group. What that means is that the UVs on these faces will all be projected as though they are a single plane. Ideal candidates for texture groups are floors with multiple faces, walls with edge loops, flat surfaces, etc."))) + { + for (int i = 0; i < selection.Length; i++) + TextureGroupSelectedFaces(selection[i]); + + ProBuilderEditor.Refresh(); + } + + if (GUILayout.Button(new GUIContent("Break Selected Groups", "This resets all the selected face Texture Groups."))) + { + SetTextureGroup(selection, -1); + + foreach (var kvp in MeshSelection.selectedFacesInEditZone) + { + kvp.Key.ToMesh(); + kvp.Key.Refresh(); + kvp.Key.Optimize(); + } + + SceneView.RepaintAll(); + + s_AutoUVSettingsDiff["textureGroup"] = false; + + ProBuilderEditor.Refresh(); + } + + /* Select all in current texture group */ + if (GUILayout.Button(new GUIContent("Select Texture Group", "Selects all faces contained in this texture group."))) + { + for (int i = 0; i < selection.Length; i++) + selection[i].SetSelectedFaces(System.Array.FindAll(selection[i].facesInternal, x => x.textureGroup == textureGroup)); + + ProBuilderEditor.Refresh(); + } + + if (GUILayout.Button(new GUIContent("Reset UVs", "Reset UV projection parameters."))) + { + UndoUtility.RecordSelection(selection, "Reset UVs"); + + for (int i = 0; i < selection.Length; i++) + { + foreach (Face face in selection[i].GetSelectedFaces()) + { + face.uv = AutoUnwrapSettings.tile; + face.textureGroup = -1; + face.elementGroup = -1; + } + + UVEditing.SplitUVs(selection[i], selection[i].GetSelectedFaces()); + } + + ProBuilderEditor.Refresh(); + } + + GUI.backgroundColor = PreferenceKeys.proBuilderLightGray; + UI.EditorGUIUtility.DrawSeparator(1); + GUI.backgroundColor = Color.white; + + /** + * Clean up + */ + GUILayout.EndScrollView(); + EditorGUI.showMixedValue = false; + + return EditorGUI.EndChangeCheck(); + } + + static void UpdateDiffDictionary(ProBuilderMesh[] selection) + { + s_AutoUVSettingsInSelection.Clear(); + + if (selection == null || selection.Length < 1) + return; + + s_AutoUVSettingsInSelection = selection.SelectMany(x => x.GetSelectedFaces()).Where(x => !x.manualUV).Select(x => x.uv).ToList(); + + // Clear values for each iteration + foreach (string key in s_AutoUVSettingsDiff.Keys.ToList()) + s_AutoUVSettingsDiff[key] = false; + + if (s_AutoUVSettingsInSelection.Count < 1) return; + + s_AutoUVSettings = new AutoUnwrapSettings(s_AutoUVSettingsInSelection[0]); + + foreach (AutoUnwrapSettings u in s_AutoUVSettingsInSelection) + { + // if(u.projectionAxis != m_AutoUVSettings.projectionAxis) + // m_AutoUVSettingsDiff["projectionAxis"] = true; + if (u.useWorldSpace != s_AutoUVSettings.useWorldSpace) + s_AutoUVSettingsDiff["useWorldSpace"] = true; + if (u.flipU != s_AutoUVSettings.flipU) + s_AutoUVSettingsDiff["flipU"] = true; + if (u.flipV != s_AutoUVSettings.flipV) + s_AutoUVSettingsDiff["flipV"] = true; + if (u.swapUV != s_AutoUVSettings.swapUV) + s_AutoUVSettingsDiff["swapUV"] = true; + if (u.fill != s_AutoUVSettings.fill) + s_AutoUVSettingsDiff["fill"] = true; + if (!Math.Approx(u.scale.x, s_AutoUVSettings.scale.x)) + s_AutoUVSettingsDiff["scalex"] = true; + if (!Math.Approx(u.scale.y, s_AutoUVSettings.scale.y)) + s_AutoUVSettingsDiff["scaley"] = true; + if (!Math.Approx(u.offset.x, s_AutoUVSettings.offset.x)) + s_AutoUVSettingsDiff["offsetx"] = true; + if (!Math.Approx(u.offset.y, s_AutoUVSettings.offset.y)) + s_AutoUVSettingsDiff["offsety"] = true; + if (!Math.Approx(u.rotation, s_AutoUVSettings.rotation)) + s_AutoUVSettingsDiff["rotation"] = true; + if (u.anchor != s_AutoUVSettings.anchor) + s_AutoUVSettingsDiff["anchor"] = true; + } + + foreach (ProBuilderMesh pb in selection) + { + if (s_AutoUVSettingsDiff["manualUV"] && s_AutoUVSettingsDiff["textureGroup"]) + break; + + Face[] selFaces = pb.GetSelectedFaces(); + + if (!s_AutoUVSettingsDiff["manualUV"]) + s_AutoUVSettingsDiff["manualUV"] = System.Array.Exists(selFaces, x => x.manualUV); + + List<int> texGroups = selFaces.Select(x => x.textureGroup).Distinct().ToList(); + textureGroup = texGroups.FirstOrDefault(x => x > -1); + + if (!s_AutoUVSettingsDiff["textureGroup"]) + s_AutoUVSettingsDiff["textureGroup"] = texGroups.Count() > 1; + } + } + + #endregion + + #region MODIFY SINGLE PROPERTIES + + private static void SetFlipU(bool flipU, ProBuilderMesh[] sel) + { + UndoUtility.RecordSelection(sel, "Flip U"); + for (int i = 0; i < sel.Length; i++) + { + foreach (Face q in sel[i].GetSelectedFaces()) + { + var uv = q.uv; + uv.flipU = flipU; + q.uv = uv; + sel[i].SetGroupUV(q.uv, q.textureGroup); + } + } + } + + private static void SetFlipV(bool flipV, ProBuilderMesh[] sel) + { + UndoUtility.RecordSelection(sel, "Flip V"); + for (int i = 0; i < sel.Length; i++) + { + foreach (Face q in sel[i].GetSelectedFaces()) + { + var uv = q.uv; + uv.flipV = flipV; + q.uv = uv; + sel[i].SetGroupUV(q.uv, q.textureGroup); + } + } + } + + private static void SetSwapUV(bool swapUV, ProBuilderMesh[] sel) + { + UndoUtility.RecordSelection(sel, "Swap U, V"); + for (int i = 0; i < sel.Length; i++) + { + foreach (Face q in sel[i].GetSelectedFaces()) + { + var uv = q.uv; + uv.swapUV = swapUV; + q.uv = uv; + sel[i].SetGroupUV(q.uv, q.textureGroup); + } + } + } + + private static void SetUseWorldSpace(bool useWorldSpace, ProBuilderMesh[] sel) + { + UndoUtility.RecordSelection(sel, "Use World Space UVs"); + for (int i = 0; i < sel.Length; i++) + { + foreach (Face q in sel[i].GetSelectedFaces()) + { + var uv = q.uv; + uv.useWorldSpace = useWorldSpace; + q.uv = uv; + sel[i].SetGroupUV(q.uv, q.textureGroup); + } + } + } + + private static void SetFill(AutoUnwrapSettings.Fill fill, ProBuilderMesh[] sel) + { + UndoUtility.RecordSelection(sel, "Fill UVs"); + for (int i = 0; i < sel.Length; i++) + { + foreach (Face q in sel[i].GetSelectedFaces()) + { + var uv = q.uv; + uv.fill = fill; + q.uv = uv; + sel[i].SetGroupUV(q.uv, q.textureGroup); + } + } + } + + private static void SetAnchor(AutoUnwrapSettings.Anchor anchor, ProBuilderMesh[] sel) + { + UndoUtility.RecordSelection(sel, "Set UV Anchor"); + + for (int i = 0; i < sel.Length; i++) + { + foreach (Face q in sel[i].GetSelectedFaces()) + { + var uv = q.uv; + uv.anchor = anchor; + q.uv = uv; + sel[i].SetGroupUV(q.uv, q.textureGroup); + } + } + } + + private static void SetOffset(Vector2 offset, Axis2D axis, ProBuilderMesh[] sel) + { + UndoUtility.RecordSelection(sel, "Offset UVs"); + + for (int i = 0; i < sel.Length; i++) + { + foreach (Face q in sel[i].GetSelectedFaces()) + { + switch (axis) + { + case Axis2D.XY: + { + var uv = q.uv; + uv.offset = offset; + q.uv = uv; + break; + } + case Axis2D.X: + { + var uv = q.uv; + uv.offset = new Vector2(offset.x, q.uv.offset.y); + q.uv = uv; + break; + } + case Axis2D.Y: + { + var uv = q.uv; + uv.offset = new Vector2(q.uv.offset.x, offset.y); + q.uv = uv; + break; + } + } + + sel[i].SetGroupUV(q.uv, q.textureGroup); + } + } + } + + private static void SetRotation(float rot, ProBuilderMesh[] sel) + { + UndoUtility.RecordSelection(sel, "Rotate UVs"); + + for (int i = 0; i < sel.Length; i++) + { + foreach (Face q in sel[i].GetSelectedFaces()) + { + var uv = q.uv; + uv.rotation = rot; + if (uv.rotation > 360f) + uv.rotation = uv.rotation % 360f; + else if (uv.rotation < 0f) + uv.rotation = 360f + (uv.rotation % 360f); + q.uv = uv; + sel[i].SetGroupUV(uv, q.textureGroup); + } + } + } + + private static void SetScale(Vector2 scale, Axis2D axis, ProBuilderMesh[] sel) + { + UndoUtility.RecordSelection(sel, "Scale UVs"); + + for (int i = 0; i < sel.Length; i++) + { + foreach (Face q in sel[i].GetSelectedFaces()) + { + switch (axis) + { + case Axis2D.XY: + { + var uv = q.uv; + uv.scale = scale; + q.uv = uv; + break; + } + case Axis2D.X: + { + var uv = q.uv; + uv.scale = new Vector2(scale.x, q.uv.scale.y); + q.uv = uv; + break; + } + case Axis2D.Y: + { + var uv = q.uv; + uv.scale = new Vector2(q.uv.scale.x, scale.y); + q.uv = uv; + break; + } + } + + sel[i].SetGroupUV(q.uv, q.textureGroup); + } + } + } + + #endregion + + #region TEXTURE GROUPS + + private static void SetTextureGroup(ProBuilderMesh[] selection, int tex) + { + UndoUtility.RecordSelection(selection, "Set Texture Group " + textureGroup); + + foreach (ProBuilderMesh pb in selection) + { + if (pb.selectedFaceCount < 1) + continue; + + Face[] faces = pb.GetSelectedFaces(); + AutoUnwrapSettings cuv = faces[0].uv; + + foreach (Face f in faces) + { + f.textureGroup = tex; + f.uv = new AutoUnwrapSettings(cuv); + } + } + } + + private static void TextureGroupSelectedFaces(ProBuilderMesh pb)//, pb_Face face) + { + if (pb.selectedFaceCount < 1) return; + + Face[] faces = pb.GetSelectedFaces(); + + AutoUnwrapSettings cont_uv = faces[0].uv; + + int texGroup = pb.GetUnusedTextureGroup(); + + UndoUtility.RecordSelection(pb, "Create Texture Group" + textureGroup); + + foreach (Face f in faces) + { + f.uv = new AutoUnwrapSettings(cont_uv); + f.textureGroup = texGroup; + } + } + + #endregion + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/AutoUVEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/AutoUVEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9611f3dd641336b62927a26f2020fb4d8e82bfab --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/AutoUVEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 74e7658b6a583464fa496ffe540ef91f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/BezierSplineEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/BezierSplineEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..f3b9899d45a67073d3dc3f8c7de77087fa0c2d6a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/BezierSplineEditor.cs @@ -0,0 +1,720 @@ +using UnityEngine; +using System.Collections.Generic; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + [CustomEditor(typeof(BezierShape))] + sealed class BezierShapeEditor : Editor + { + static GUIContent[] s_TangentModeIcons = new GUIContent[3]; + + const float k_HandleSize = .05f; + + static Vector3 Vector3_Zero = new Vector3(0f, 0f, 0f); + static Vector3 Vector3_Forward = new Vector3(0f, 0f, 1f); + static Vector3 Vector3_Backward = new Vector3(0f, 0f, -1f); + + static Color bezierPositionHandleColor = new Color(.01f, .8f, .99f, 1f); + static Color bezierTangentHandleColor = new Color(.6f, .6f, .6f, .8f); + + static bool s_SnapTangents = true; + + [SerializeField] + BezierHandle m_currentHandle = new BezierHandle(-1, false); + + [SerializeField] + BezierTangentMode m_TangentMode = BezierTangentMode.Mirrored; + + BezierShape m_Target = null; + bool m_IsMoving = false; + List<Vector3> m_ControlPoints; + + ProBuilderMesh m_CurrentObject + { + get + { + if (m_Target.mesh == null) + { + m_Target.mesh = m_Target.gameObject.AddComponent<ProBuilderMesh>(); + EditorUtility.InitObject(m_Target.mesh); + } + + return m_Target.mesh; + } + } + + [System.Serializable] + struct BezierHandle + { + public int index; + public bool isTangent; + public BezierTangentDirection tangent; + + public BezierHandle(int index, bool isTangent, BezierTangentDirection tangent = BezierTangentDirection.In) + { + this.index = index; + this.isTangent = isTangent; + this.tangent = tangent; + } + + public static implicit operator int(BezierHandle handle) + { + return handle.index; + } + + public static explicit operator BezierHandle(int index) + { + return new BezierHandle(index, false); + } + + public static implicit operator BezierTangentDirection(BezierHandle handle) + { + return handle.tangent; + } + + public void SetIndex(int index) + { + this.index = index; + this.isTangent = false; + } + + public void SetIndexAndTangent(int index, BezierTangentDirection dir) + { + this.index = index; + this.isTangent = true; + this.tangent = dir; + } + } + + List<BezierPoint> m_Points + { + get { return m_Target.points; } + set { m_Target.points = value; } + } + + bool m_IsEditing + { + get { return m_Target.isEditing; } + set { m_Target.isEditing = value; } + } + + bool m_CloseLoop + { + get { return m_Target.closeLoop; } + + set + { + if (m_Target.closeLoop != value) + UndoUtility.RecordObject(m_Target, "Set Bezier Shape Close Loop"); + m_Target.closeLoop = value; + } + } + + float m_Radius + { + get { return m_Target.radius; } + + set + { + if (m_Target.radius != value) + UndoUtility.RecordObject(m_Target, "Set Bezier Shape Radius"); + m_Target.radius = value; + } + } + + int m_Rows + { + get { return m_Target.rows; } + + set + { + if (m_Target.rows != value) + UndoUtility.RecordObject(m_Target, "Set Bezier Shape Rows"); + m_Target.rows = value; + } + } + + int m_Columns + { + get { return m_Target.columns; } + + set + { + if (m_Target.columns != value) + UndoUtility.RecordObject(m_Target, "Set Bezier Shape Columns"); + m_Target.columns = value; + } + } + + bool m_Smooth + { + get { return m_Target.smooth; } + + set + { + if (m_Target.smooth != value) + UndoUtility.RecordObject(m_Target, "Set Bezier Shape Smooth"); + m_Target.smooth = value; + } + } + + private GUIStyle _commandStyle = null; + + public GUIStyle commandStyle + { + get + { + if (_commandStyle == null) + { + _commandStyle = new GUIStyle(EditorGUIUtility.GetBuiltinSkin(EditorSkin.Inspector).FindStyle("Command")); + _commandStyle.alignment = TextAnchor.MiddleCenter; + } + + return _commandStyle; + } + } + + void OnEnable() + { + m_Target = target as BezierShape; + + Undo.undoRedoPerformed += this.UndoRedoPerformed; + + s_TangentModeIcons[0] = new GUIContent(IconUtility.GetIcon("Toolbar/Bezier_Free"), "Tangent Mode: Free"); + s_TangentModeIcons[1] = new GUIContent(IconUtility.GetIcon("Toolbar/Bezier_Aligned"), "Tangent Mode: Aligned"); + s_TangentModeIcons[2] = new GUIContent(IconUtility.GetIcon("Toolbar/Bezier_Mirrored"), "Tangent Mode: Mirrored"); + + if (m_Target != null) + SetIsEditing(m_Target.isEditing); + + ProBuilderEditor.selectModeChanged += SelectModeChanged; + } + + void OnDisable() + { + Undo.undoRedoPerformed -= this.UndoRedoPerformed; + ProBuilderEditor.selectModeChanged -= SelectModeChanged; + } + + void SelectModeChanged(SelectMode mode) + { + if (!mode.ContainsFlag(SelectMode.InputTool) && m_IsEditing) + { + SetIsEditing(false); + Repaint(); + } + } + + BezierPoint DoBezierPointGUI(BezierPoint point) + { + Vector3 pos = point.position, tin = point.tangentIn, tout = point.tangentOut; + + bool wasInWideMode = EditorGUIUtility.wideMode; + float labelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.wideMode = true; + EditorGUIUtility.labelWidth = EditorGUIUtility.currentViewWidth / 3f; + + EditorGUI.BeginChangeCheck(); + pos = EditorGUILayout.Vector3Field("Position", pos); + if (EditorGUI.EndChangeCheck()) + point.SetPosition(pos); + + EditorGUI.BeginChangeCheck(); + tin = EditorGUILayout.Vector3Field("Tan. In", tin); + if (EditorGUI.EndChangeCheck()) + point.SetTangentIn(tin, m_TangentMode); + Rect r = GUILayoutUtility.GetLastRect(); + r.x += EditorGUIUtility.labelWidth - 12; + GUI.color = Color.blue; + GUI.Label(r, "\u2022"); + GUI.color = Color.white; + + EditorGUI.BeginChangeCheck(); + tout = EditorGUILayout.Vector3Field("Tan. Out", tout); + if (EditorGUI.EndChangeCheck()) + point.SetTangentOut(tout, m_TangentMode); + r = GUILayoutUtility.GetLastRect(); + r.x += EditorGUIUtility.labelWidth - 12; + GUI.color = Color.red; + GUI.Label(r, "\u2022"); + GUI.color = Color.white; + + Vector3 euler = point.rotation.eulerAngles; + euler = EditorGUILayout.Vector3Field("Rotation", euler); + point.rotation = Quaternion.Euler(euler); + + EditorGUIUtility.labelWidth = labelWidth; + EditorGUIUtility.wideMode = wasInWideMode; + + return point; + } + + void SetIsEditing(bool isEditing) + { + GUIUtility.hotControl = 0; + + if (isEditing && !m_IsEditing) + { + if (ProBuilderEditor.instance != null) + ProBuilderEditor.instance.ClearElementSelection(); + + UndoUtility.RecordObject(m_Target, "Edit Bezier Shape"); + UndoUtility.RecordObject(m_Target.mesh, "Edit Bezier Shape"); + + UpdateMesh(true); + } + + m_Target.isEditing = isEditing; + + if (m_Target.isEditing) + ProBuilderEditor.selectMode |= SelectMode.InputTool; + else + ProBuilderEditor.selectMode &= ~SelectMode.InputTool; + + if (m_Target.isEditing) + { + Tools.current = Tool.None; + UpdateControlPoints(); + } + } + + public override void OnInspectorGUI() + { + if (!m_IsEditing) + { + if (GUILayout.Button("Edit Bezier Shape")) + SetIsEditing(true); + + EditorGUILayout.HelpBox("Editing a Bezier Shape will erase any modifications made to the mesh!\n\nIf you accidentally enter Edit Mode you can Undo to get your changes back.", MessageType.Warning); + + return; + } + + if (GUILayout.Button("Editing Bezier Shape", UI.EditorGUIUtility.GetActiveStyle("Button"))) + SetIsEditing(false); + + Event e = Event.current; + + if (m_IsMoving) + { + if (e.type == EventType.Ignore || + e.type == EventType.MouseUp) + OnFinishVertexModification(); + } + + EditorGUI.BeginChangeCheck(); + + bool handleIsValid = (m_currentHandle > -1 && m_currentHandle < m_Points.Count); + + BezierPoint inspectorPoint = handleIsValid ? + m_Points[m_currentHandle] : + new BezierPoint(Vector3_Zero, Vector3_Backward, Vector3_Forward, Quaternion.identity); + + inspectorPoint = DoBezierPointGUI(inspectorPoint); + + if (handleIsValid && EditorGUI.EndChangeCheck()) + { + if (!m_IsMoving) + OnBeginVertexModification(); + + m_Points[m_currentHandle] = inspectorPoint; + UpdateMesh(false); + } + + EditorGUI.BeginChangeCheck(); + + if (GUILayout.Button("Clear Points")) + { + UndoUtility.RecordObject(m_Target, "Clear Bezier Spline Points"); + m_Points.Clear(); + UpdateMesh(true); + } + + if (GUILayout.Button("Add Point")) + { + UndoUtility.RecordObject(m_Target, "Add Bezier Spline Point"); + + if (m_Points.Count > 0) + { + m_Points.Add(new BezierPoint(m_Points[m_Points.Count - 1].position, + m_Points[m_Points.Count - 1].tangentIn, + m_Points[m_Points.Count - 1].tangentOut, + Quaternion.identity)); + UpdateMesh(true); + } + else + { + m_Target.Init(); + } + + m_currentHandle = (BezierHandle)(m_Points.Count - 1); + + SceneView.RepaintAll(); + } + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + m_TangentMode = (BezierTangentMode)GUILayout.Toolbar((int)m_TangentMode, s_TangentModeIcons, commandStyle); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + m_CloseLoop = EditorGUILayout.Toggle("Close Loop", m_CloseLoop); + m_Smooth = EditorGUILayout.Toggle("Smooth", m_Smooth); + m_Radius = Mathf.Max(.001f, EditorGUILayout.FloatField("Radius", m_Radius)); + m_Rows = Math.Clamp(EditorGUILayout.IntField("Rows", m_Rows), 3, 512); + m_Columns = Math.Clamp(EditorGUILayout.IntField("Columns", m_Columns), 3, 512); + + if (EditorGUI.EndChangeCheck()) + UpdateMesh(true); + + if (ProGridsInterface.GetProGridsType() != null) + s_SnapTangents = EditorGUILayout.Toggle("Snap Tangents", s_SnapTangents); + } + + void UpdateMesh(bool vertexCountChanged) + { + if (m_Target != null) + { + m_Target.Refresh(); + UpdateControlPoints(); + ProBuilderEditor.Refresh(vertexCountChanged); + } + } + + void UpdateControlPoints() + { + m_ControlPoints = Spline.GetControlPoints(m_Points, m_Columns, m_CloseLoop, null); + } + + void OnSceneGUI() + { + Event e = Event.current; + + bool eventHasBeenUsed = false; + + if (m_IsMoving) + { + if (e.type == EventType.Ignore || + e.type == EventType.MouseUp) + { + eventHasBeenUsed = true; + OnFinishVertexModification(); + } + } + + bool sceneViewInUse = EditorHandleUtility.SceneViewInUse(e); + + if (e.type == EventType.KeyDown) + { + if (e.keyCode == KeyCode.Backspace && m_currentHandle > -1 && m_currentHandle < m_Points.Count) + { + UndoUtility.RecordObject(m_Target, "Delete Bezier Point"); + m_Points.RemoveAt(m_currentHandle); + UpdateMesh(true); + } + else if (e.keyCode == KeyCode.Escape) + { + SetIsEditing(false); + } + } + + int count = m_Points.Count; + + Matrix4x4 handleMatrix = Handles.matrix; + Handles.matrix = m_Target.transform.localToWorldMatrix; + + EditorGUI.BeginChangeCheck(); + + for (int index = 0; index < count; index++) + { + if (index < count - 1 || m_CloseLoop) + { + Handles.DrawBezier(m_Points[index].position, + m_Points[(index + 1) % count].position, + m_Points[index].tangentOut, + m_Points[(index + 1) % count].tangentIn, + Color.green, + EditorGUIUtility.whiteTexture, + 1f); + } + + if (!m_IsEditing) + continue; + + // If the index is selected show the full transform gizmo, otherwise use free move handles + if (m_currentHandle == index) + { + BezierPoint point = m_Points[index]; + + if (!m_currentHandle.isTangent) + { + Vector3 prev = point.position; + + prev = Handles.PositionHandle(prev, Quaternion.identity); + + if (!Math.Approx3(prev, point.position)) + { + if (!m_IsMoving) + OnBeginVertexModification(); + + prev = ProGridsInterface.ProGridsSnap(prev); + + Vector3 dir = prev - point.position; + point.position = prev; + point.tangentIn += dir; + point.tangentOut += dir; + } + + // rotation + int prev_index = index > 0 ? index - 1 : (m_CloseLoop ? count - 1 : -1); + int next_index = index < count - 1 ? index + 1 : (m_CloseLoop ? 0 : -1); + Vector3 rd = BezierPoint.GetLookDirection(m_Points, index, prev_index, next_index); + + Quaternion look = Quaternion.LookRotation(rd); + float size = HandleUtility.GetHandleSize(point.position); + Matrix4x4 pm = Handles.matrix; + Handles.matrix = pm * Matrix4x4.TRS(point.position, look, Vector3.one); + point.rotation = Handles.Disc(point.rotation, Vector3.zero, Vector3.forward, size, false, 0f); + Handles.matrix = pm; + } + else + { + Handles.color = bezierTangentHandleColor; + + if (m_currentHandle.tangent == BezierTangentDirection.In && (m_CloseLoop || index > 0)) + { + EditorGUI.BeginChangeCheck(); + point.tangentIn = Handles.PositionHandle(point.tangentIn, Quaternion.identity); + if (EditorGUI.EndChangeCheck()) + { + if (!m_IsMoving) + OnBeginVertexModification(); + + if (s_SnapTangents) + point.tangentIn = ProGridsInterface.ProGridsSnap(point.tangentIn); + + point.EnforceTangentMode(BezierTangentDirection.In, m_TangentMode); + } + Handles.color = Color.blue; + Handles.DrawLine(m_Points[index].position, m_Points[index].tangentIn); + } + + if (m_currentHandle.tangent == BezierTangentDirection.Out && (m_CloseLoop || index < count - 1)) + { + EditorGUI.BeginChangeCheck(); + point.tangentOut = Handles.PositionHandle(point.tangentOut, Quaternion.identity); + if (EditorGUI.EndChangeCheck()) + { + if (!m_IsMoving) + OnBeginVertexModification(); + + if (s_SnapTangents) + point.tangentOut = ProGridsInterface.ProGridsSnap(point.tangentOut); + + point.EnforceTangentMode(BezierTangentDirection.Out, m_TangentMode); + } + Handles.color = Color.red; + Handles.DrawLine(m_Points[index].position, m_Points[index].tangentOut); + } + } + + m_Points[index] = point; + } + } + + if (!m_IsEditing) + return; + + EventType eventType = e.type; + + if (!eventHasBeenUsed) + eventHasBeenUsed = eventType == EventType.Used; + + for (int index = 0; index < count; index++) + { + Vector3 prev; + BezierPoint point = m_Points[index]; + + // Position Handle + float size = HandleUtility.GetHandleSize(point.position) * k_HandleSize; + Handles.color = bezierPositionHandleColor; + + if (m_currentHandle == index && !m_currentHandle.isTangent) + { + Handles.DotHandleCap(0, point.position, Quaternion.identity, size, e.type); + } + else + { + prev = point.position; + prev = Handles.FreeMoveHandle(prev, Quaternion.identity, size, Vector3.zero, Handles.DotHandleCap); + if (!eventHasBeenUsed && eventType == EventType.MouseUp && e.type == EventType.Used) + { + eventHasBeenUsed = true; + m_currentHandle = (BezierHandle)index; + Repaint(); + SceneView.RepaintAll(); + } + else if (!Math.Approx3(prev, point.position)) + { + if (!m_IsMoving) + OnBeginVertexModification(); + + point.SetPosition(ProGridsInterface.ProGridsSnap(prev)); + } + } + + // Tangent handles + Handles.color = bezierTangentHandleColor; + + // Tangent In Handle + if (m_CloseLoop || index > 0) + { + size = HandleUtility.GetHandleSize(point.tangentIn) * k_HandleSize; + Handles.DrawLine(point.position, point.tangentIn); + + if (index == m_currentHandle && m_currentHandle.isTangent && m_currentHandle.tangent == BezierTangentDirection.In) + { + Handles.DotHandleCap(0, point.tangentIn, Quaternion.identity, size, e.type); + } + else + { + prev = point.tangentIn; + prev = Handles.FreeMoveHandle(prev, Quaternion.identity, size, Vector3.zero, Handles.DotHandleCap); + + if (!eventHasBeenUsed && eventType == EventType.MouseUp && e.type == EventType.Used) + { + eventHasBeenUsed = true; + m_currentHandle.SetIndexAndTangent(index, BezierTangentDirection.In); + Repaint(); + SceneView.RepaintAll(); + } + else if (!Math.Approx3(prev, point.tangentIn)) + { + if (!m_IsMoving) + OnBeginVertexModification(); + point.tangentIn = s_SnapTangents ? ProGridsInterface.ProGridsSnap(prev) : prev; + point.EnforceTangentMode(BezierTangentDirection.In, m_TangentMode); + } + } + } + + // Tangent Out + if (m_CloseLoop || index < count - 1) + { + size = HandleUtility.GetHandleSize(point.tangentOut) * k_HandleSize; + Handles.DrawLine(point.position, point.tangentOut); + + if (index == m_currentHandle && m_currentHandle.isTangent && m_currentHandle.tangent == BezierTangentDirection.Out) + { + Handles.DotHandleCap(0, point.tangentOut, Quaternion.identity, size, e.type); + } + else + { + prev = point.tangentOut; + prev = Handles.FreeMoveHandle(prev, Quaternion.identity, size, Vector3.zero, Handles.DotHandleCap); + + if (!eventHasBeenUsed && eventType == EventType.MouseUp && e.type == EventType.Used) + { + eventHasBeenUsed = true; + m_currentHandle.SetIndexAndTangent(index, BezierTangentDirection.Out); + Repaint(); + SceneView.RepaintAll(); + } + else if (!Math.Approx3(prev, point.tangentOut)) + { + if (!m_IsMoving) + OnBeginVertexModification(); + point.tangentOut = s_SnapTangents ? ProGridsInterface.ProGridsSnap(prev) : prev; + point.EnforceTangentMode(BezierTangentDirection.Out, m_TangentMode); + } + } + } + + m_Points[index] = point; + } + + // Do control point insertion + if (!eventHasBeenUsed && m_ControlPoints != null && m_ControlPoints.Count > 1) + { + int index = -1; + float distanceToLine; + + Vector3 p = EditorHandleUtility.ClosestPointToPolyLine(m_ControlPoints, out index, out distanceToLine, false, null); + + if (!IsHoveringHandlePoint(e.mousePosition) && distanceToLine < PreferenceKeys.k_MaxPointDistanceFromControl) + { + Handles.color = Color.green; + Handles.DotHandleCap(-1, p, Quaternion.identity, HandleUtility.GetHandleSize(p) * .05f, e.type); + Handles.color = Color.white; + + if (!eventHasBeenUsed && eventType == EventType.MouseDown && e.button == 0) + { + UndoUtility.RecordObject(m_Target, "Add Point"); + Vector3 dir = m_ControlPoints[(index + 1) % m_ControlPoints.Count] - m_ControlPoints[index]; + m_Points.Insert((index / m_Columns) + 1, new BezierPoint(p, p - dir, p + dir, Quaternion.identity)); + UpdateMesh(true); + e.Use(); + } + + SceneView.RepaintAll(); + } + } + + if (e.type == EventType.MouseUp && !sceneViewInUse) + m_currentHandle.SetIndex(-1); + + Handles.matrix = handleMatrix; + + if (EditorGUI.EndChangeCheck()) + UpdateMesh(false); + } + + bool IsHoveringHandlePoint(Vector2 mpos) + { + if (m_Target == null) + return false; + + int count = m_Points.Count; + + for (int i = 0; i < count; i++) + { + BezierPoint p = m_Points[i]; + + bool ti = m_CloseLoop || i > 0; + bool to = m_CloseLoop || i < (count - 1); + + if (Vector2.Distance(mpos, HandleUtility.WorldToGUIPoint(p.position)) < PreferenceKeys.k_MaxPointDistanceFromControl || + (ti && Vector2.Distance(mpos, HandleUtility.WorldToGUIPoint(p.tangentIn)) < PreferenceKeys.k_MaxPointDistanceFromControl) || + (to && Vector2.Distance(mpos, HandleUtility.WorldToGUIPoint(p.tangentOut)) < PreferenceKeys.k_MaxPointDistanceFromControl)) + return true; + } + + return false; + } + + void UndoRedoPerformed() + { + if (m_Target && m_IsEditing) + { + UpdateControlPoints(); + UpdateMesh(true); + } + } + + void OnBeginVertexModification() + { + m_IsMoving = true; + UndoUtility.RecordObject(m_Target, "Modify Bezier Spline"); + Lightmapping.PushGIWorkflowMode(); + } + + void OnFinishVertexModification() + { + m_IsMoving = false; + Lightmapping.PopGIWorkflowMode(); + m_CurrentObject.Optimize(); + ProBuilderEditor.Refresh(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/BezierSplineEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/BezierSplineEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..badb8080e1a42f01933cd4b528f92c915171612f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/BezierSplineEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e95f50cd644f90741bb903cb56bcd67e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/BooleanEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/BooleanEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..c342b087020cf44c6281dad36f5cd567993a015f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/BooleanEditor.cs @@ -0,0 +1,384 @@ +#if PROBUILDER_EXPERIMENTAL_FEATURES +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.Csg; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Editor window for accessing boolean functionality. + /// </summary> + sealed class BooleanEditor : ConfigurableWindow + { + enum BooleanOp + { + Intersection, + Union, + Subtraction + } + + const int k_Padding = 6; + const int k_PreviewInset = 2; + + GameObject m_LeftGameObject, m_RightGameObject; + int m_PreviewHeight, m_PreviewWidth; + + Rect m_LeftObjectField = new Rect(k_Padding + k_PreviewInset, k_Padding + k_PreviewInset, 0f, 0f); + Rect m_RightObjectField = new Rect(0f, k_Padding + k_PreviewInset, 0f, 0f); + Rect m_ReverseOperationOrderRect = new Rect(0f, 0f, 42f, 42f); + + static GUIStyle previewBackground; + static GUIStyle unicodeIconStyle; + + Color backgroundColor = new Color(.15625f, .15625f, .15625f, 1f); + Texture2D backgroundTexture; + Editor m_LeftPreviewEditor, m_RightPreviewEditor; + BooleanOp operation = BooleanOp.Intersection; + bool mouseClickedSwapRect = false; + Vector2Int screen = Vector2Int.zero; + static readonly string k_ReverseArrowsIcon = ((char)8644).ToString(); + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Experimental/Boolean (CSG) Tool", false, PreferenceKeys.menuMisc)] + public static void MenuOpenBooleanTool() + { + GetWindow<BooleanEditor>(true, "Boolean (Experimental)", true).Show(); + } + + void OnEnable() + { + minSize = new Vector2(200f, 135f); + + var meshes = Selection.transforms.GetComponents<ProBuilderMesh>(); + + if (meshes.Length == 2) + { + m_LeftGameObject = meshes[0].gameObject; + m_RightGameObject = meshes[1].gameObject; + } + + previewBackground = new GUIStyle(); + + backgroundTexture = new Texture2D(2, 2); + + backgroundTexture.SetPixels(new Color[] { + backgroundColor, + backgroundColor, + backgroundColor, + backgroundColor + }); + + backgroundTexture.Apply(); + + previewBackground.normal.background = backgroundTexture; + + unicodeIconStyle = new GUIStyle(); + unicodeIconStyle.fontSize = 32; + unicodeIconStyle.normal.textColor = Color.white; + unicodeIconStyle.alignment = TextAnchor.MiddleCenter; + + var arrowSize = unicodeIconStyle.CalcSize(UI.EditorGUIUtility.TempContent(k_ReverseArrowsIcon)); + m_ReverseOperationOrderRect.width = arrowSize.x; + m_ReverseOperationOrderRect.width = arrowSize.y; + } + + void OnDisable() + { + if (backgroundTexture != null) + { + DestroyImmediate(backgroundTexture); + } + } + + void OnGUI() + { + DoContextMenu(); + + Event e = Event.current; + screen.x = (int)position.width; + screen.y = (int)position.height; + + // Since image wells eat mouse clicks, listen for a mouse up when hovering over 'reverse operation order' button + switch (e.type) + { + case EventType.MouseDown: + if (m_ReverseOperationOrderRect.Contains(e.mousePosition)) + { + mouseClickedSwapRect = true; + e.Use(); + } + break; + + case EventType.MouseUp: + if (mouseClickedSwapRect && m_ReverseOperationOrderRect.Contains(Event.current.mousePosition)) + { + ReverseOperationOrder(); + e.Use(); + } + mouseClickedSwapRect = false; + break; + + case EventType.Ignore: + mouseClickedSwapRect = false; + break; + } + + DrawPreviewWells(); + + if (ListenForDragAndDrop()) + return; + + GUILayout.BeginHorizontal(); + ProBuilderMesh lpb = m_LeftGameObject != null ? m_LeftGameObject.GetComponent<ProBuilderMesh>() : null; + ProBuilderMesh rpb = m_RightGameObject != null ? m_RightGameObject.GetComponent<ProBuilderMesh>() : null; + + EditorGUI.BeginChangeCheck(); + + lpb = (ProBuilderMesh) EditorGUILayout.ObjectField(lpb, typeof(ProBuilderMesh), true); + rpb = (ProBuilderMesh) EditorGUILayout.ObjectField(rpb, typeof(ProBuilderMesh), true); + + if (EditorGUI.EndChangeCheck()) + { + DestroyImmediate(m_LeftPreviewEditor); + DestroyImmediate(m_RightPreviewEditor); + } + + m_LeftGameObject = lpb != null ? lpb.gameObject : null; + m_RightGameObject = rpb != null ? rpb.gameObject : null; + GUILayout.EndHorizontal(); + + // Boolean controls + GUILayout.Space(4); + + GUI.backgroundColor = PreferenceKeys.proBuilderDarkGray; + UI.EditorGUIUtility.DrawSeparator(2); + GUI.backgroundColor = Color.white; + + operation = (BooleanOp) EditorGUILayout.EnumPopup("Operation", operation); + + if (GUILayout.Button("Apply")) + { + switch (operation) + { + case BooleanOp.Union: + MenuUnion(m_LeftGameObject.GetComponent<ProBuilderMesh>(), m_RightGameObject.GetComponent<ProBuilderMesh>()); + break; + + case BooleanOp.Intersection: + MenuIntersect(m_LeftGameObject.GetComponent<ProBuilderMesh>(), m_RightGameObject.GetComponent<ProBuilderMesh>()); + break; + + case BooleanOp.Subtraction: + MenuSubtract(m_LeftGameObject.GetComponent<ProBuilderMesh>(), m_RightGameObject.GetComponent<ProBuilderMesh>()); + break; + } + } + } + + void ReverseOperationOrder() + { + GameObject tmp = m_LeftGameObject; + m_LeftGameObject = m_RightGameObject; + m_RightGameObject = tmp; + m_LeftPreviewEditor = null; + m_RightPreviewEditor = null; + } + + // Draw the mesh previews + void DrawPreviewWells() + { + GUILayout.BeginHorizontal(); + m_LeftObjectField = GUILayoutUtility.GetRect(GUIContent.none, UI.EditorStyles.sceneTextBox, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); + m_RightObjectField = GUILayoutUtility.GetRect(GUIContent.none, UI.EditorStyles.sceneTextBox, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); + + GUILayout.EndHorizontal(); + + GUI.Box(m_LeftObjectField, GUIContent.none, UI.EditorStyles.sceneTextBox); + GUI.Box(m_RightObjectField, GUIContent.none, UI.EditorStyles.sceneTextBox); + + m_ReverseOperationOrderRect.x = (screen.x / 2f) - (m_ReverseOperationOrderRect.width / 2f); + m_ReverseOperationOrderRect.y = m_LeftObjectField.y + m_LeftObjectField.height * .5f - m_ReverseOperationOrderRect.height * .5f; + + m_LeftObjectField = InsetRect(m_LeftObjectField, k_PreviewInset); + m_RightObjectField = InsetRect(m_RightObjectField, k_PreviewInset); + + if (m_LeftGameObject != null) + { + if (m_LeftPreviewEditor == null) + m_LeftPreviewEditor = UnityEditor.Editor.CreateEditor(m_LeftGameObject); + m_LeftPreviewEditor.OnPreviewGUI(m_LeftObjectField, previewBackground); + } + else + { + GUI.Label(m_LeftObjectField, "Drag GameObject Here", EditorStyles.centeredGreyMiniLabel); + } + + if (m_RightGameObject != null) + { + if (m_RightPreviewEditor == null) + m_RightPreviewEditor = UnityEditor.Editor.CreateEditor(m_RightGameObject); + + m_RightPreviewEditor.OnPreviewGUI(m_RightObjectField, previewBackground); + } + else + { + GUI.Label(m_RightObjectField, "Drag GameObject Here", EditorStyles.centeredGreyMiniLabel); + } + + // Show text summary + if (m_LeftGameObject && m_RightGameObject) + { + var title = UI.EditorGUIUtility.TempContent( + operation == BooleanOp.Intersection + ? m_LeftGameObject.name + " Intersects " + m_RightGameObject.name + : operation == BooleanOp.Union + ? m_LeftGameObject.name + " Union " + m_RightGameObject.name + : m_LeftGameObject.name + " Subtracts " + m_RightGameObject.name); + + var size = EditorStyles.boldLabel.CalcSize(title); + + GUI.Label(new Rect(k_Padding + 2, k_Padding + 2, screen.x, size.y), title, EditorStyles.boldLabel); + } + + // http://xahlee.info/comp/unicode_arrows.html + if (GUI.Button(m_ReverseOperationOrderRect, k_ReverseArrowsIcon, unicodeIconStyle)) + ReverseOperationOrder(); + } + + static Rect InsetRect(Rect rect, int pad) + { + return new Rect(rect.x + pad, rect.y + pad, rect.width - pad * 2, rect.height - pad * 2); + } + + /** + * Accept drags into window. + * MUST BE CALLED AFTER PREVIEW WELL RECTS ARE CALCULATED + */ + bool ListenForDragAndDrop() + { + Vector2 mPos = Event.current.mousePosition; + + bool inLeft = m_LeftObjectField.Contains(mPos); + + if (!inLeft && !m_RightObjectField.Contains(mPos)) + return false; + + if ((Event.current.type == EventType.DragUpdated || Event.current.type == EventType.DragPerform) && DragAndDrop.objectReferences.Length > 0) + { + DragAndDrop.visualMode = DragAndDropVisualMode.Copy; + + if (Event.current.type == EventType.DragPerform) + { + DragAndDrop.AcceptDrag(); + + foreach (Object pb in DragAndDrop.objectReferences) + { + if ((pb is GameObject && ((GameObject)pb).GetComponent<ProBuilderMesh>()) || pb is ProBuilderMesh) + { + if (pb == m_LeftGameObject || pb == m_RightGameObject) continue; + + if (inLeft) + { + m_LeftGameObject = (GameObject)pb; + + if (m_LeftPreviewEditor != null) + { + DestroyImmediate(m_LeftPreviewEditor); + m_LeftPreviewEditor = null; + } + } + else + { + m_RightGameObject = (GameObject)pb; + + if (m_RightPreviewEditor != null) + { + DestroyImmediate(m_RightPreviewEditor); + m_RightPreviewEditor = null; + } + } + + return true; + } + } + } + + Repaint(); + } + return false; + } + + enum BooleanOperation + { + Union, + Subtract, + Intersect + } + + static ActionResult MenuBooleanOperation(BooleanOperation operation, ProBuilderMesh lhs, ProBuilderMesh rhs) + { + if (lhs == null || rhs == null) + return new ActionResult(ActionResult.Status.Failure, "Must Select 2 Objects"); + + string op_string = operation == BooleanOperation.Union ? "Union" : (operation == BooleanOperation.Subtract ? "Subtract" : "Intersect"); + + ProBuilderMesh[] sel = new ProBuilderMesh[] { lhs, rhs }; + + UndoUtility.RecordSelection(sel, op_string); + + UnityEngine.ProBuilder.Csg.Model result; + + switch (operation) + { + case BooleanOperation.Union: + result = Boolean.Union(lhs.gameObject, rhs.gameObject); + break; + + case BooleanOperation.Subtract: + result = Boolean.Subtract(lhs.gameObject, rhs.gameObject); + break; + + default: + result = Boolean.Intersect(lhs.gameObject, rhs.gameObject); + break; + } + + var materials = result.materials.ToArray(); + ProBuilderMesh pb = ProBuilderMesh.Create(); + pb.GetComponent<MeshFilter>().sharedMesh = (Mesh) result; + pb.GetComponent<MeshRenderer>().sharedMaterials = materials; + MeshImporter importer = new MeshImporter(pb.gameObject); + importer.Import(new MeshImportSettings() { quads = true, smoothing = true, smoothingAngle = 1f }); + pb.Rebuild(); + pb.CenterPivot(null); + Selection.objects = new Object[] { pb.gameObject }; + + return new ActionResult(ActionResult.Status.Success, op_string); + } + + /** + * Union operation between two ProBuilder objects. + */ + public static ActionResult MenuUnion(ProBuilderMesh lhs, ProBuilderMesh rhs) + { + return MenuBooleanOperation(BooleanOperation.Union, lhs, rhs); + } + + /** + * Subtract boolean operation between two pb_Objects. + */ + public static ActionResult MenuSubtract(ProBuilderMesh lhs, ProBuilderMesh rhs) + { + return MenuBooleanOperation(BooleanOperation.Subtract, lhs, rhs); + } + + /** + * Intersect boolean operation between two pb_Objects. + */ + public static ActionResult MenuIntersect(ProBuilderMesh lhs, ProBuilderMesh rhs) + { + return MenuBooleanOperation(BooleanOperation.Intersect, lhs, rhs); + } + } +} +#endif diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/BooleanEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/BooleanEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..293127850ecb9c4fc623e8348973943128c1a5f3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/BooleanEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff4f787bd1deaee4d82db29948ed6099 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ConfigurableWindow.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ConfigurableWindow.cs new file mode 100644 index 0000000000000000000000000000000000000000..eacf93505431eb44e0722cf770ce1a3c036046eb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ConfigurableWindow.cs @@ -0,0 +1,70 @@ +using UnityEngine; + +namespace UnityEditor.ProBuilder +{ + abstract class ConfigurableWindow : EditorWindow, IHasCustomMenu + { + protected virtual bool defaultIsUtilityWindow + { + get { return false; } + } + + string utilityWindowKey + { + get { return GetType().ToString() + "-isUtilityWindow"; } + } + + protected static bool IsUtilityWindow<T>(bool defaultIsUtility = false) where T : ConfigurableWindow + { + return ProBuilderSettings.Get<bool>(typeof(T).ToString() + "-isUtilityWindow", SettingsScope.Project, defaultIsUtility); + } + + public static new T GetWindow<T>(string title, bool focus = true) where T : ConfigurableWindow + { + return EditorWindow.GetWindow<T>(IsUtilityWindow<T>(), title, focus); + } + + /// <summary> + /// Get or create an instance of EditorWindow. Note that `utility` may be overridden by user set preference. + /// </summary> + public static new T GetWindow<T>(bool utility, string title, bool focus) where T : ConfigurableWindow + { + return EditorWindow.GetWindow<T>(IsUtilityWindow<T>(utility), title, focus); + } + + public virtual void AddItemsToMenu(GenericMenu menu) + { + bool floating = ProBuilderSettings.Get<bool>(utilityWindowKey, SettingsScope.Project, false); + + if (menu.GetItemCount() > 1) + menu.AddSeparator(""); + + menu.AddItem(new GUIContent("Open as Floating Window", ""), floating, () => SetIsUtilityWindow(true)); + menu.AddItem(new GUIContent("Open as Dockable Window", ""), !floating, () => SetIsUtilityWindow(false)); + + menu.AddSeparator(""); + } + + protected void DoContextMenu() + { + var e = Event.current; + + if (e.type == EventType.ContextClick) + { + var menu = new GenericMenu(); + AddItemsToMenu(menu); + menu.ShowAsContext(); + } + } + + void SetIsUtilityWindow(bool isUtilityWindow) + { + ProBuilderSettings.Set<bool>(utilityWindowKey, isUtilityWindow, SettingsScope.Project); + ProBuilderSettings.Save(); + var title = titleContent; + Close(); + var res = GetWindow(GetType(), isUtilityWindow); + res.titleContent = title; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ConfigurableWindow.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ConfigurableWindow.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..59881ff50c5453e07e5f33fa9e4b876802fcbff9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ConfigurableWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3ab6033657acd04e93e395ba82570ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/DestroyListener.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/DestroyListener.cs new file mode 100644 index 0000000000000000000000000000000000000000..102bf775b35e26fbfd2a01728c6ff8c0b5179986 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/DestroyListener.cs @@ -0,0 +1,62 @@ +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Listens for pb_Object::OnDestroy events and deletes or ignores meshes depending on whether or not the mesh is an asset. + /// </summary> + [InitializeOnLoad] + static class DestroyListener + { + static DestroyListener() + { + ProBuilderMesh.meshWillBeDestroyed -= OnDestroyObject; + ProBuilderMesh.meshWillBeDestroyed += OnDestroyObject; + } + + static void OnDestroyObject(ProBuilderMesh mesh) + { + if (Experimental.meshesAreAssets) + { + if (EditorUtility.IsPrefab(mesh)) + { + // Debug.Log("will not destroy prefab mesh"); + } + else + { + string cache_path; + Mesh cache_mesh; + + // if it is cached but not a prefab instance or root, destroy the mesh in the cache + // otherwise go ahead and destroy as usual + if (EditorMeshUtility.GetCachedMesh(mesh, out cache_path, out cache_mesh)) + { + // on entering / exiting play mode unity instances everything and destroys the scene, + // which nukes the mesh cache. don't do this. + bool isPlaying = EditorApplication.isPlaying; + bool orWillPlay = EditorApplication.isPlayingOrWillChangePlaymode; + + if (isPlaying || orWillPlay) + return; + + SelectionUtility.Remove(mesh); + AssetDatabase.DeleteAsset(cache_path); + } + else + { + Object.DestroyImmediate(mesh.mesh); + } + } + } + else + { + string path = AssetDatabase.GetAssetPath(mesh.mesh); + + // If the pb_Object is backed by a Mesh asset don't destroy it. + if (string.IsNullOrEmpty(path)) + Object.DestroyImmediate(mesh.mesh); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/DestroyListener.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/DestroyListener.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1dd53985514380f3ca87591f07c04e46f907c482 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/DestroyListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2197ea2611109104aa25635ed7b59bcb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/DimensionsEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/DimensionsEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..a185cbb33bd2702f0c645f36fea859377d58742d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/DimensionsEditor.cs @@ -0,0 +1,585 @@ +#if UNITY_2019_1_OR_NEWER +#define SHORTCUT_MANAGER +#endif + +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor.SettingsManagement; +using UnityEditor.ShortcutManagement; +using UnityEngine; +using UnityEngine.ProBuilder; +using Object = UnityEngine.Object; + +namespace UnityEditor.ProBuilder +{ + sealed class DimensionsEditor : ScriptableObject + { + struct Trs : IEquatable<Trs> + { + public Vector3 position { get; set; } + public Quaternion rotation { get; set; } + public Vector3 scale { get; set; } + + public Trs(Transform t) + { + position = t.position; + rotation = t.rotation; + scale = t.localScale; + } + + public bool Equals(Trs other) + { + return position.Equals(other.position) && rotation.Equals(other.rotation) && scale.Equals(other.scale); + } + + public override bool Equals(object obj) + { + return obj is Trs other && Equals(other); + } + + public static explicit operator Trs(Transform trs) + { + return new Trs(trs); + } + + public override int GetHashCode() + { + unchecked + { + var hashCode = position.GetHashCode(); + hashCode = (hashCode * 397) ^ rotation.GetHashCode(); + hashCode = (hashCode * 397) ^ scale.GetHashCode(); + return hashCode; + } + } + } + + static DimensionsEditor s_Instance; + bool m_HasBounds; + Bounds m_Bounds; + Dictionary<Transform, Trs> m_Selected = new Dictionary<Transform, Trs>(); + // When ProBuilder is modifying a mesh, it doesn't recalculate the mesh bounds. This lets our bounds encapsulation + // function know that Renderer.bounds is not to be trusted. + static bool s_RecalculateMeshBounds; + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Dimensions Overlay/Hide", true, PreferenceKeys.menuEditor + 30)] + static bool HideVerify() + { + return s_Instance != null; + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Dimensions Overlay/Hide", false, PreferenceKeys.menuEditor + 30)] + static void Hide() + { + if (s_Instance != null) + Object.DestroyImmediate(s_Instance); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Dimensions Overlay/Show", true, PreferenceKeys.menuEditor + 30)] + static bool InitVerify() + { + return s_Instance == null; + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Dimensions Overlay/Show", false, PreferenceKeys.menuEditor + 30)] + static void Init() + { + CreateInstance<DimensionsEditor>(); + } + + enum BoundsDisplay + { + Object = 1, + Element = 2 + } + + [UserSetting("Dimensions Overlay", "Bounds Display", "Sets what content is considered when calculating the selected" + + "bounds.\nObject displays the world space bounds of the selection.\nElement displays the world space bounds" + + "of the selected mesh elements (vertices, faces, edges).")] + static Pref<BoundsDisplay> s_BoundsDisplay = new Pref<BoundsDisplay>("s_BoundsDisplay", BoundsDisplay.Object, SettingsScope.User); + +#if SHORTCUT_MANAGER + [Shortcut("ProBuilder/Dimensions Overlay/Toggle Overlay", typeof(SceneView))] + static void ToggleUseElementBounds() + { + // toggle between { Off, Visible Object, Visible Selection } + if (s_Instance != null) + { + var display = s_BoundsDisplay.value; + + // Visible Object -> Visible Selection + if (display == BoundsDisplay.Object) + s_BoundsDisplay.SetValue(BoundsDisplay.Element, true); + // Visible Selection -> Off + else + DestroyImmediate(s_Instance); + } + else + { + // Off -> Visible Object + s_BoundsDisplay.SetValue(BoundsDisplay.Object, true); + Init(); + } + + if (s_Instance != null) + { + s_Instance.RebuildBounds(); + EditorUtility.ShowNotification("Dimensions Overlay\n" + s_BoundsDisplay.value.ToString()); + } + else + { + EditorUtility.ShowNotification("Dimensions Overlay\nOff"); + } + + SceneView.RepaintAll(); + } +#endif + + void OnEnable() + { + s_Instance = this; + m_DisplayMesh = new Mesh(); + m_DisplayMaterial = new Material(Shader.Find("ProBuilder/UnlitVertexColor")); + m_DisplayMesh.hideFlags = HideFlags.DontSave; + m_DisplayMaterial.hideFlags = HideFlags.DontSave; +#if UNITY_2019_1_OR_NEWER + SceneView.duringSceneGui += OnSceneGUI; +#else + SceneView.onSceneGUIDelegate += OnSceneGUI; +#endif + MeshSelection.objectSelectionChanged += OnObjectSelectionChanged; + ProBuilderMesh.elementSelectionChanged += OnElementSelectionChanged; + ProBuilderEditor.selectionUpdated += OnEditingMeshSelection; + VertexManipulationTool.beforeMeshModification += OnBeginMeshModification; + VertexManipulationTool.afterMeshModification += OnFinishMeshModification; + + RebuildBounds(); + } + + void OnDisable() + { + MeshSelection.objectSelectionChanged -= OnObjectSelectionChanged; + ProBuilderMesh.elementSelectionChanged -= OnElementSelectionChanged; + ProBuilderEditor.selectionUpdated -= OnEditingMeshSelection; + VertexManipulationTool.beforeMeshModification -= OnBeginMeshModification; + VertexManipulationTool.afterMeshModification -= OnFinishMeshModification; + +#if UNITY_2019_1_OR_NEWER + SceneView.duringSceneGui -= OnSceneGUI; +#else + SceneView.onSceneGUIDelegate -= OnSceneGUI; +#endif + DestroyImmediate(m_DisplayMesh); + DestroyImmediate(m_DisplayMaterial); + } + + static void OnBeginMeshModification(IEnumerable<ProBuilderMesh> meshes) + { + s_RecalculateMeshBounds = true; + } + + static void OnFinishMeshModification(IEnumerable<ProBuilderMesh> meshes) + { + s_RecalculateMeshBounds = false; + } + + static bool GetElementBounds(IEnumerable<ProBuilderMesh> meshes, SelectMode mode, out Bounds bounds) + { + bool initialized = false; + bounds = new Bounds(); + + foreach (var mesh in meshes) + { + var positions = mesh.positionsInternal; + var trs = mesh.transform; + + switch (mode) + { + case SelectMode.Face: + case SelectMode.TextureFace: + { + var faces = mesh.facesInternal; + + foreach (var face in mesh.selectedFaceIndicesInternal) + { + foreach (var index in faces[face].distinctIndexesInternal) + { + var position = trs.TransformPoint(positions[index]); + + if (!initialized) + { + bounds = new Bounds(position, Vector3.zero); + initialized = true; + } + else + { + bounds.Encapsulate(position); + } + } + } + break; + } + + case SelectMode.Edge: + case SelectMode.TextureEdge: + { + foreach (var edge in mesh.selectedEdgesInternal) + { + var a = trs.TransformPoint(positions[edge.a]); + var b = trs.TransformPoint(positions[edge.b]); + + if (!initialized) + { + bounds = new Bounds(a, Vector3.zero); + initialized = true; + } + else + { + bounds.Encapsulate(a); + } + + bounds.Encapsulate(b); + } + + break; + } + + case SelectMode.Vertex: + case SelectMode.TextureVertex: + { + foreach (var index in mesh.selectedIndexesInternal) + { + var position = trs.TransformPoint(positions[index]); + + if (!initialized) + { + bounds = new Bounds(position, Vector3.zero); + initialized = true; + } + else + { + bounds.Encapsulate(position); + } + } + break; + } + } + } + + return initialized; + } + + bool GetSelectedBounds(out Bounds bounds) + { + m_Selected.Clear(); + + var selectMode = ProBuilderEditor.selectMode; + + if (s_BoundsDisplay.value == BoundsDisplay.Element && ProBuilderEditor.selectMode.IsMeshElementMode()) + { + foreach (var m in MeshSelection.topInternal) + m_Selected.Add(m.transform, new Trs(m.transform)); + + return GetElementBounds(MeshSelection.topInternal, selectMode, out bounds); + } + + foreach (var m in Selection.transforms) + m_Selected.Add(m.transform, new Trs(m.transform)); + + if (s_RecalculateMeshBounds) + { + foreach(var mesh in MeshSelection.topInternal) + mesh.mesh.RecalculateBounds(); + } + + var renderers = Selection.transforms + .Where(x => x.GetComponent<MeshRenderer>() != null) + .Select(x => x.GetComponent<MeshRenderer>()); + + if (!renderers.Any()) + { + bounds = new Bounds(); + return false; + } + + bounds = renderers.First().bounds; + + foreach (var ren in renderers) + bounds.Encapsulate(ren.bounds); + + return true; + } + + void OnObjectSelectionChanged() + { + RebuildBounds(); + } + + void OnElementSelectionChanged(ProBuilderMesh mesh) + { + RebuildBounds(); + } + + void OnEditingMeshSelection(IEnumerable<ProBuilderMesh> meshes) + { + RebuildBounds(); + } + + void RebuildBounds() + { + m_HasBounds = GetSelectedBounds(out m_Bounds); + SceneView.RepaintAll(); + } + + void OnSceneGUI(SceneView scnview) + { +#if UNITY_2019_1_OR_NEWER + if (Selection.count > 0 && m_HasBounds) +#else + if(Selection.objects.Length > 0 && m_HasBounds) +#endif + { + foreach (var m in m_Selected) + { + if (!((Trs)m.Key).Equals(m.Value)) + { + RebuildBounds(); + break; + } + } + + RenderBounds(m_Bounds); + } + } + + Mesh m_DisplayMesh; + Material m_DisplayMaterial; + + // readonly Color wirecolor = new Color(.9f, .9f, .9f, .6f); + readonly Color k_LightWhite = new Color(.6f, .6f, .6f, .5f); + + /// <summary> + /// Render an axis aligned bounding box in world space. + /// </summary> + /// <param name="bounds">aabb</param> + void RenderBounds(Bounds bounds) + { + if (!m_DisplayMesh) + return; + + // show labels + DrawHeight(bounds.center, bounds.extents); + DrawWidth(bounds.center, bounds.extents); + DrawDepth(bounds.center, bounds.extents); + } + + const float DISTANCE_LINE_OFFSET = .2f; + + static float LineDistance() + { + return HandleUtility.GetHandleSize(Selection.activeTransform.position) * DISTANCE_LINE_OFFSET; + } + + Transform cam { get { return SceneView.lastActiveSceneView.camera.transform; } } + + void DrawHeight(Vector3 cen, Vector3 ext) + { + // positibilities + Vector3[] edges = new Vector3[8] + { + // front left + new Vector3(cen.x - ext.x, cen.y - ext.y, cen.z - ext.z), + new Vector3(cen.x - ext.x, cen.y + ext.y, cen.z - ext.z), + + // front right + new Vector3(cen.x + ext.x, cen.y - ext.y, cen.z - ext.z), + new Vector3(cen.x + ext.x, cen.y + ext.y, cen.z - ext.z), + + // back left + new Vector3(cen.x - ext.x, cen.y - ext.y, cen.z + ext.z), + new Vector3(cen.x - ext.x, cen.y + ext.y, cen.z + ext.z), + + // back right + new Vector3(cen.x + ext.x, cen.y - ext.y, cen.z + ext.z), + new Vector3(cen.x + ext.x, cen.y + ext.y, cen.z + ext.z) + }; + + // figure leftmost height boundary + Vector2 pos = Vector2.right * 20000f; + Vector3 a = Vector3.zero, b = Vector3.zero; + + for (int i = 0; i < edges.Length; i += 2) + { + Vector2 screen = HandleUtility.WorldToGUIPoint((edges[i] + edges[i + 1]) * .5f); + + if (screen.x < pos.x) + { + pos = screen; + a = edges[i + 0]; + b = edges[i + 1]; + } + } + + float dist = Vector3.Distance(a, b); + + if (dist < Mathf.Epsilon) + return; + + Vector3 left = Vector3.Cross(cam.forward, Vector3.up).normalized * LineDistance(); + + Handles.color = k_LightWhite; + Handles.DrawLine(a + left * .1f, a + left); + Handles.DrawLine(b + left * .1f, b + left); + Handles.color = Color.green; + Handles.DrawLine(a + left, b + left); + + a += left; + b += left; + + Handles.BeginGUI(); + pos.x -= UI.EditorStyles.sceneTextBox.CalcSize(gc).x * 2f; + DrawSceneLabel(dist.ToString("F2"), pos); + Handles.EndGUI(); + } + + void DrawDepth(Vector3 cen, Vector3 ext) + { + // positibilities + Vector3[] edges = new Vector3[8] + { + // bottom right + new Vector3(cen.x + ext.x, cen.y - ext.y, cen.z + ext.z), + new Vector3(cen.x + ext.x, cen.y - ext.y, cen.z - ext.z), + + // top right + new Vector3(cen.x + ext.x, cen.y + ext.y, cen.z + ext.z), + new Vector3(cen.x + ext.x, cen.y + ext.y, cen.z - ext.z), + + // bottom left + new Vector3(cen.x - ext.x, cen.y - ext.y, cen.z + ext.z), + new Vector3(cen.x - ext.x, cen.y - ext.y, cen.z - ext.z), + + // top left + new Vector3(cen.x - ext.x, cen.y + ext.y, cen.z + ext.z), + new Vector3(cen.x - ext.x, cen.y + ext.y, cen.z - ext.z), + }; + + // figure leftmost height boundary + Vector2 pos = Vector2.up * -20000f; + Vector3 a = Vector3.zero, b = Vector3.zero; + + for (int i = 0; i < edges.Length; i += 2) + { + Vector2 screen = HandleUtility.WorldToGUIPoint((edges[i] + edges[i + 1]) * .5f); + + if (screen.y > pos.y) + { + pos = screen; + a = edges[i + 0]; + b = edges[i + 1]; + } + } + + float dist = Vector3.Distance(a, b); + + if (dist < Mathf.Epsilon) + return; + + float dot = Vector3.Dot(cam.transform.forward, Vector3.right); + float sign = dot < 0f ? -1f : 1f; + Vector3 offset = -(Vector3.up + (Vector3.right * sign)).normalized * LineDistance(); + + Handles.color = k_LightWhite; + Handles.DrawLine(a + offset * .1f, a + offset); + Handles.DrawLine(b + offset * .1f, b + offset); + + a += offset; + b += offset; + + Handles.color = Color.blue; + Handles.DrawLine(a, b); + + Handles.BeginGUI(); + pos.y += UI.EditorStyles.sceneTextBox.CalcHeight(gc, 20000); + DrawSceneLabel(dist.ToString("F2"), pos); + + Handles.EndGUI(); + } + + void DrawWidth(Vector3 cen, Vector3 extents) + { + Vector3 ext = extents;// + extents.normalized * .2f; + + // positibilities + Vector3[] edges = new Vector3[8] + { + // bottom front + new Vector3(cen.x - ext.x, cen.y - ext.y, cen.z - ext.z), + new Vector3(cen.x + ext.x, cen.y - ext.y, cen.z - ext.z), + + // bottom back + new Vector3(cen.x - ext.x, cen.y - ext.y, cen.z + ext.z), + new Vector3(cen.x + ext.x, cen.y - ext.y, cen.z + ext.z), + + // top front + new Vector3(cen.x - ext.x, cen.y + ext.y, cen.z - ext.z), + new Vector3(cen.x + ext.x, cen.y + ext.y, cen.z - ext.z), + + // top back + new Vector3(cen.x - ext.x, cen.y + ext.y, cen.z + ext.z), + new Vector3(cen.x + ext.x, cen.y + ext.y, cen.z + ext.z) + }; + + // figure leftmost height boundary + Vector2 pos = Vector2.up * -20000f; + Vector3 a = Vector3.zero, b = Vector3.zero; + + for (int i = 0; i < edges.Length; i += 2) + { + Vector2 screen = HandleUtility.WorldToGUIPoint((edges[i] + edges[i + 1]) * .5f); + + if (screen.y > pos.y) + { + pos = screen; + a = edges[i + 0]; + b = edges[i + 1]; + } + } + + float dist = Vector3.Distance(a, b); + + if (dist < Mathf.Epsilon) + return; + // Vector3 offset = -Vector3.up; + // offset = -Vector3.Cross(Vector3.Cross(cam.forward, Vector3.up), cam.forward).normalized * LineDistance(); + + float dot = Vector3.Dot(cam.transform.forward, Vector3.forward); + float sign = dot < 0f ? -1f : 1f; + Vector3 offset = -(Vector3.up + (Vector3.forward * sign)).normalized * LineDistance(); + + Handles.color = k_LightWhite; + Handles.DrawLine(a + offset * .1f, a + offset); + Handles.DrawLine(b + offset * .1f, b + offset); + + a += offset; + b += offset; + + Handles.color = Color.red; + Handles.DrawLine(a, b); + Handles.BeginGUI(); + DrawSceneLabel(dist.ToString("F2"), HandleUtility.WorldToGUIPoint((a + b) * .5f)); + Handles.EndGUI(); + } + + GUIContent gc = new GUIContent("", ""); + + void DrawSceneLabel(string content, Vector2 position) + { + gc.text = content; + float width = UI.EditorStyles.sceneTextBox.CalcSize(gc).x; + float height = UI.EditorStyles.sceneTextBox.CalcHeight(gc, width); + GUI.Label(new Rect(position.x, position.y, width, height), gc, UI.EditorStyles.sceneTextBox); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/DimensionsEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/DimensionsEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6ad2962e17ad310ad982af4d23defd11a6e6709a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/DimensionsEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ececafedc41a4b4bb1be308a1512857 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorEnum.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorEnum.cs new file mode 100644 index 0000000000000000000000000000000000000000..5981dce444086051211a1bbce70a53a0dc077e9d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorEnum.cs @@ -0,0 +1,29 @@ +using System; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Where the sceneview toolbar sits in relation the scene view rect. + /// </summary> + enum SceneToolbarLocation + { + UpperCenter, + UpperLeft, + UpperRight, + BottomCenter, + BottomLeft, + BottomRight + } + + /// <summary> + /// How should Unity represent selected objects? + /// </summary> + /// <remarks>Editor only.</remarks> + [System.Flags] + enum SelectionRenderState + { + None = 0x0, + Wireframe = 0x1, + Outline = 0x2 + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorEnum.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorEnum.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..13037a822dc47a06844dc3d0fcfb12101b31994b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorEnum.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2f90915a295ab524097b6e004b64d015 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorGUILayout.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorGUILayout.cs new file mode 100644 index 0000000000000000000000000000000000000000..e1ce0bea24b5ebd558a39b38be592ff42f1bf7e6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorGUILayout.cs @@ -0,0 +1,300 @@ +#if UNITY_2019_1_OR_NEWER +#define UNITY_INTERNALS_VISIBLE +#endif + +using System; +using System.Linq; +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder; +using System.Collections.Generic; +using UnityEngine.Assertions; +#if !UNITY_INTERNALS_VISIBLE +using System.Reflection; +#endif + +namespace UnityEditor.ProBuilder.UI +{ + /// <summary> + /// Additional GUI functions for Editor use. + /// </summary> + static class EditorGUILayout + { +#if !UNITY_INTERNALS_VISIBLE + static readonly object[] s_GetSliderRectParams = new object[2]; + static readonly MethodInfo s_GetSliderRectMethod; + + static EditorGUILayout() + { + s_GetSliderRectMethod = typeof(UnityEditor.EditorGUILayout).GetMethod( + "GetSliderRect", + BindingFlags.Static | BindingFlags.NonPublic, + null, CallingConventions.Any, new [] { typeof(bool), typeof(GUILayoutOption[])}, null); + + Assert.IsNotNull(s_GetSliderRectMethod, "Couldn't find internal method EditorGUILayout.GetSliderRect(bool, GUILayoutOption) in UnityEditor namespace"); + } +#endif + + static bool s_RowToggle = true; + static readonly Color s_RowOddColor = new Color(.45f, .45f, .45f, .2f); + static readonly Color s_RowEvenColor = new Color(.30f, .30f, .30f, .2f); + + public static void BeginRow(int index = -1) + { + if (index > -1) + s_RowToggle = index % 2 == 0; + + EditorGUIUtility.PushBackgroundColor(s_RowToggle ? s_RowEvenColor : s_RowOddColor); + GUILayout.BeginHorizontal(EditorStyles.rowStyle); + s_RowToggle = !s_RowToggle; + EditorGUIUtility.PopBackgroundColor(); + } + + public static void EndRow() + { + GUILayout.EndHorizontal(); + } + + /// <summary> + /// An automatically laid out toolbar that returns the index of the selected button. Optionally allows no selection. + /// </summary> + /// <param name="index"></param> + /// <param name="content"></param> + /// <param name="style"></param> + /// <param name="allowNoSelection"></param> + /// <param name="addlParams"></param> + /// <returns></returns> + public static int Toolbar(int index, GUIContent[] content, GUIStyle style, bool allowNoSelection = false, params GUILayoutOption[] addlParams) + { + return Toolbar(index, content, style, style, style, allowNoSelection, addlParams); + } + + public static int Toolbar(int index, GUIContent[] content, GUIStyle left, GUIStyle mid, GUIStyle right, bool allowNoSelection = false, params GUILayoutOption[] addlParams) + { + GUILayout.BeginHorizontal(); + + for (int i = 0; i < content.Length; i++) + { + GUIStyle m_Style = i < 1 ? left : (i >= content.Length - 1 ? right : mid); + + if (index == i) + m_Style = EditorGUIUtility.GetOnStyle(m_Style); + + if (GUILayout.Button(content[i], m_Style, addlParams)) + { + if (index == i && allowNoSelection) + index = -1; + else + index = i; + } + } + + GUILayout.EndHorizontal(); + + return index; + } + + /** + * An automatically laid out toolbar that toggles flags. Content corresponds to the bits starting at 1 - ex: + * - content[0] = 0x1 + * - content[1] = 0x2 + * - content[2] = 0x4 + */ + public static int FlagToolbar(int index, GUIContent[] content, GUIStyle style, bool allowNoSelection = false, bool allowMultipleSelected = true, params GUILayoutOption[] addlParams) + { + return FlagToolbar(index, content, style, style, style, allowNoSelection, allowMultipleSelected, addlParams); + } + + public static int FlagToolbar(int index, GUIContent[] content, bool allowNoSelection = false, bool allowMultipleSelected = true, params GUILayoutOption[] addlParams) + { + return FlagToolbar(index, content, UnityEditor.EditorStyles.miniButtonLeft, UnityEditor.EditorStyles.miniButtonMid, UnityEditor.EditorStyles.miniButtonRight, allowNoSelection, allowMultipleSelected, addlParams); + } + + public static int FlagToolbar(int index, GUIContent[] content, GUIStyle left, GUIStyle mid, GUIStyle right, bool allowNoSelection = false, bool allowMultipleSelected = true, params GUILayoutOption[] addlParams) + { + GUILayout.BeginHorizontal(); + + for (int i = 0; i < content.Length; i++) + { + GUIStyle m_Style = i < 1 ? left : (i >= content.Length - 1 ? right : mid); + + if ((index & (0x1 << i)) > 0) + m_Style = EditorGUIUtility.GetOnStyle(m_Style); + + if (GUILayout.Button(content[i], m_Style, addlParams)) + { + if (!allowMultipleSelected) + index = (index & (0x1 << i)); + + index ^= (0x1 << i); + + if (!allowNoSelection && index == 0x0) + index = 0x1 << i; + } + } + + GUILayout.EndHorizontal(); + + return index; + } + + class ResizeHandleState + { + public Vector2 origin; + public Rect startingRect; + } + + delegate Rect ComputeResize(Rect currentRect, ResizeHandleState handleState, Event currentEvent, int minimumWidth, int minimumHeight); + + static KeyValuePair<int, Tuple<Rect, ComputeResize>> CreateResizeHandleControl(Rect activeRect, String suffix, Rect parentWindowRect, UnityEditor.MouseCursor cursor, ComputeResize resizeDelegate) + { + int id = GUIUtility.GetControlID(("ProBuilderWindowResize" + suffix).GetHashCode(), FocusType.Passive, parentWindowRect); + HandleUtility.AddControl(id, Vector2.Distance(activeRect.center, Event.current.mousePosition)); + UnityEditor.EditorGUIUtility.AddCursorRect(activeRect, cursor); + return new KeyValuePair<int, Tuple<Rect, ComputeResize>>(id, new Tuple<Rect, ComputeResize>(activeRect, resizeDelegate)); + } + + static Rect ResizeBottomRight(Rect currentRect, ResizeHandleState handleState, Event currentEvent, int minimumWidth, int minimumHeight) + { + currentRect.width = handleState.startingRect.width + (currentEvent.mousePosition.x - handleState.origin.x); + currentRect.height = handleState.startingRect.height + (currentEvent.mousePosition.y - handleState.origin.y); + return currentRect; + } + + static Rect ResizeBottomLeft(Rect currentRect, ResizeHandleState handleState, Event currentEvent, int minimumWidth, int minimumHeight) + { + currentRect.width = currentRect.width - (currentEvent.mousePosition.x - handleState.origin.x); + currentRect.width = Mathf.Max(currentRect.width, minimumWidth); + currentRect.x = handleState.startingRect.xMax - currentRect.width; + currentRect.height = handleState.startingRect.height + (currentEvent.mousePosition.y - handleState.origin.y); + return currentRect; + } + + static Rect ResizeBottom(Rect currentRect, ResizeHandleState handleState, Event currentEvent, int minimumWidth, int minimumHeight) + { + currentRect.height = handleState.startingRect.height + (currentEvent.mousePosition.y - handleState.origin.y); + return currentRect; + } + + static Rect ResizeTop(Rect currentRect, ResizeHandleState handleState, Event currentEvent, int minimumWidth, int minimumHeight) + { + currentRect.height = currentRect.height - (currentEvent.mousePosition.y - handleState.origin.y); + currentRect.height = Mathf.Max(currentRect.height, minimumHeight); + currentRect.y = handleState.startingRect.yMax - currentRect.height; + return currentRect; + } + + static Rect ResizeLeft(Rect currentRect, ResizeHandleState handleState, Event currentEvent, int minimumWidth, int minimumHeight) + { + currentRect.width = currentRect.width - (currentEvent.mousePosition.x - handleState.origin.x); + currentRect.width = Mathf.Max(currentRect.width, minimumWidth); + currentRect.x = handleState.startingRect.xMax - currentRect.width; + return currentRect; + } + + static Rect ResizeRight(Rect currentRect, ResizeHandleState handleState, Event currentEvent, int minimumWidth, int minimumHeight) + { + currentRect.width = handleState.startingRect.width + (currentEvent.mousePosition.x - handleState.origin.x); + return currentRect; + } + + static Rect ResizeTopLeft(Rect currentRect, ResizeHandleState handleState, Event currentEvent, int minimumWidth, int minimumHeight) + { + currentRect.height = currentRect.height - (currentEvent.mousePosition.y - handleState.origin.y); + currentRect.height = Mathf.Max(currentRect.height, minimumHeight); + currentRect.y = handleState.startingRect.yMax - currentRect.height; + currentRect.width = currentRect.width - (currentEvent.mousePosition.x - handleState.origin.x); + currentRect.width = Mathf.Max(currentRect.width, minimumWidth); + currentRect.x = handleState.startingRect.xMax - currentRect.width; + return currentRect; + } + + static Rect ResizeTopRight(Rect currentRect, ResizeHandleState handleState, Event currentEvent, int minimumWidth, int minimumHeight) + { + currentRect.height = currentRect.height - (currentEvent.mousePosition.y - handleState.origin.y); + currentRect.height = Mathf.Max(currentRect.height, minimumHeight); + currentRect.y = handleState.startingRect.yMax - currentRect.height; + currentRect.width = handleState.startingRect.width + (currentEvent.mousePosition.x - handleState.origin.x); + return currentRect; + } + + static int s_ResizeHandleAreaDimension = 6; + static int s_MoveWindowAreaHeight = 30; + + public static Rect DoResizeHandle(Rect rect, int minimumWidth, int minimumHeight) + { + var evt = Event.current; + if (evt.type == EventType.Used) + { + return rect; + } + IDictionary<int, Tuple<Rect, ComputeResize>> resizeHandles = new Dictionary<int, Tuple<Rect, ComputeResize>>(); + resizeHandles.Add(CreateResizeHandleControl(new Rect(rect.width - s_ResizeHandleAreaDimension, rect.height - s_ResizeHandleAreaDimension, s_ResizeHandleAreaDimension, s_ResizeHandleAreaDimension), "BottomRight", rect, MouseCursor.ResizeUpLeft, ResizeBottomRight)); + resizeHandles.Add(CreateResizeHandleControl(new Rect(0, rect.height - s_ResizeHandleAreaDimension, s_ResizeHandleAreaDimension, s_ResizeHandleAreaDimension), "BottomLeft", rect, MouseCursor.ResizeUpRight, ResizeBottomLeft)); + resizeHandles.Add(CreateResizeHandleControl(new Rect(s_ResizeHandleAreaDimension, rect.height - s_ResizeHandleAreaDimension, rect.width - 2*s_ResizeHandleAreaDimension, s_ResizeHandleAreaDimension), "Bottom", rect, MouseCursor.ResizeVertical, ResizeBottom)); + resizeHandles.Add(CreateResizeHandleControl(new Rect(s_ResizeHandleAreaDimension, 0, rect.width - 2* s_ResizeHandleAreaDimension, s_ResizeHandleAreaDimension), "Top", rect, MouseCursor.ResizeVertical, ResizeTop)); + resizeHandles.Add(CreateResizeHandleControl(new Rect(0, s_MoveWindowAreaHeight, s_ResizeHandleAreaDimension, rect.height - (s_MoveWindowAreaHeight + s_ResizeHandleAreaDimension)), "Left", rect, MouseCursor.ResizeHorizontal, ResizeLeft)); + resizeHandles.Add(CreateResizeHandleControl(new Rect(rect.width - s_ResizeHandleAreaDimension, s_MoveWindowAreaHeight, s_ResizeHandleAreaDimension, rect.height - (s_MoveWindowAreaHeight + s_ResizeHandleAreaDimension)), "Right", rect, MouseCursor.ResizeHorizontal, ResizeRight)); + resizeHandles.Add(CreateResizeHandleControl(new Rect(0, 0, s_ResizeHandleAreaDimension, s_ResizeHandleAreaDimension), "TopLeft", rect, MouseCursor.ResizeUpLeft, ResizeTopLeft)); + resizeHandles.Add(CreateResizeHandleControl(new Rect(rect.width - s_ResizeHandleAreaDimension, 0, s_ResizeHandleAreaDimension, s_ResizeHandleAreaDimension), "TopRight", rect, MouseCursor.ResizeUpRight, ResizeTopRight)); + + if (evt.type == EventType.MouseDown) + { + bool initializedControl = false; + foreach (KeyValuePair<int, Tuple<Rect,ComputeResize>> kvp in resizeHandles) + { + if (kvp.Value.Item1.Contains(evt.mousePosition)) + { + GUIUtility.hotControl = kvp.Key; + initializedControl = true; + break; + } + } + + if (!initializedControl) + { + return rect; + } + GUI.changed = true; + var state = (ResizeHandleState)GUIUtility.GetStateObject(typeof(ResizeHandleState), GUIUtility.hotControl); + state.origin = evt.mousePosition; + state.startingRect = rect; + evt.Use(); + } + else if (!resizeHandles.ContainsKey(GUIUtility.hotControl)) + { + return rect; + } + if (evt.type == EventType.MouseUp) + { + GUIUtility.hotControl = 0; + GUI.changed = true; + evt.Use(); + } + else if (evt.type == EventType.MouseDrag) + { + var state = (ResizeHandleState)GUIUtility.GetStateObject(typeof(ResizeHandleState), GUIUtility.hotControl); + rect = resizeHandles[GUIUtility.hotControl].Item2(rect, state, evt, minimumWidth, minimumHeight); + + GUI.changed = true; + evt.Use(); + } + + return rect; + } + + public static Rect GetSliderRect(bool hasLabel, params GUILayoutOption[] options) + { +#if UNITY_INTERNALS_VISIBLE + return UnityEditor.EditorGUILayout.GetSliderRect(hasLabel, options); +#else + if (s_GetSliderRectMethod == null) + return Rect.zero; + + s_GetSliderRectParams[0] = hasLabel; + s_GetSliderRectParams[1] = options; + return (Rect)s_GetSliderRectMethod.Invoke(null, s_GetSliderRectParams); +#endif + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorGUILayout.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorGUILayout.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6375e231735658870b674ee38bc8aaf2a6ddeeb7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorGUILayout.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4891ddee861208843a4495ed6e404a57 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorGUIUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorGUIUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..167c40d819ed5f7bacf7657d647760b5c6b94f48 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorGUIUtility.cs @@ -0,0 +1,544 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; + +namespace UnityEditor.ProBuilder.UI +{ + /// <summary> + /// Generic GUI utility methods used in ProBuilder windows. + /// </summary> + static class EditorGUIUtility + { + static class Styles + { + static bool s_Initialized; + + public static GUIStyle command = "command"; + public static GUIContent[] selectModeIcons; + + public static void Init() + { + if (s_Initialized) + return; + + s_Initialized = true; + + var object_Graphic_off = IconUtility.GetIcon("Modes/Mode_Object"); + var face_Graphic_off = IconUtility.GetIcon("Modes/Mode_Face"); + var vertex_Graphic_off = IconUtility.GetIcon("Modes/Mode_Vertex"); + var edge_Graphic_off = IconUtility.GetIcon("Modes/Mode_Edge"); + + selectModeIcons = new GUIContent[] + { + object_Graphic_off != null + ? new GUIContent(object_Graphic_off, "Object Selection") + : new GUIContent("OBJ", "Object Selection"), + vertex_Graphic_off != null + ? new GUIContent(vertex_Graphic_off, "Vertex Selection") + : new GUIContent("VRT", "Vertex Selection"), + edge_Graphic_off != null + ? new GUIContent(edge_Graphic_off, "Edge Selection") + : new GUIContent("EDG", "Edge Selection"), + face_Graphic_off != null + ? new GUIContent(face_Graphic_off, "Face Selection") + : new GUIContent("FCE", "Face Selection"), + }; + } + } + + static readonly Color TOOL_SETTINGS_COLOR = UnityEditor.EditorGUIUtility.isProSkin + ? Color.green + : new Color(.2f, .2f, .2f, .2f); + + static GUIStyle _splitStyle; + static GUIStyle SplitStyle + { + get + { + if (_splitStyle == null) + { + _splitStyle = new GUIStyle(); + _splitStyle.normal.background = UnityEditor.EditorGUIUtility.whiteTexture; + _splitStyle.margin = new RectOffset(6, 6, 0, 0); + } + return _splitStyle; + } + } + + static GUIStyle _centeredGreyMiniLabel; + public static GUIStyle CenteredGreyMiniLabel + { + get + { + if (_centeredGreyMiniLabel == null) + { + _centeredGreyMiniLabel = new GUIStyle(UnityEditor.EditorStyles.label); + _centeredGreyMiniLabel.normal.textColor = Color.gray; + _centeredGreyMiniLabel.alignment = TextAnchor.MiddleCenter; + } + return _centeredGreyMiniLabel; + } + } + + static GUIStyle _solidBackgroundStyle; + public static GUIStyle solidBackgroundStyle + { + get + { + if (_solidBackgroundStyle == null) + { + _solidBackgroundStyle = new GUIStyle(); + _solidBackgroundStyle.normal.background = UnityEditor.EditorGUIUtility.whiteTexture; + } + return _solidBackgroundStyle; + } + } + + static GUIStyle _buttonNoBackgroundSmallMarginStyle = null; + public static GUIStyle ButtonNoBackgroundSmallMarginStyle + { + get + { + if (_buttonNoBackgroundSmallMarginStyle == null) + { + _buttonNoBackgroundSmallMarginStyle = new GUIStyle(); + _buttonNoBackgroundSmallMarginStyle.margin = new RectOffset(0, 0, 0, 0); + _buttonNoBackgroundSmallMarginStyle.alignment = TextAnchor.MiddleCenter; + _buttonNoBackgroundSmallMarginStyle.padding = new RectOffset(2, 2, 2, 2); + } + return _buttonNoBackgroundSmallMarginStyle; + } + } + + static GUIContent _guiContent = null; + + public static GUIContent TempContent(string label, string tooltip = null, Texture2D icon = null) + { + if (_guiContent == null) + _guiContent = new GUIContent(); + + _guiContent.text = label; + _guiContent.tooltip = tooltip; + _guiContent.image = icon; + + return _guiContent; + } + + static Stack<bool> s_GuiEnabled = new Stack<bool>(); + static Stack<Color> s_ContentColor = new Stack<Color>(); + static Stack<Color> s_BackgroundColor = new Stack<Color>(); + + public static void PushGUIEnabled(bool enabled) + { + s_GuiEnabled.Push(GUI.enabled); + GUI.enabled = enabled; + } + + public static void PopGUIEnabled() + { + GUI.enabled = s_GuiEnabled.Pop(); + } + + public static void PushGUIContentColor(Color color) + { + s_ContentColor.Push(GUI.color); + GUI.contentColor = color; + } + + public static void PopGUIContentColor() + { + GUI.contentColor = s_ContentColor.Pop(); + } + + public static void PushBackgroundColor(Color color) + { + s_BackgroundColor.Push(GUI.backgroundColor); + GUI.backgroundColor = color; + } + + public static void PopBackgroundColor() + { + GUI.backgroundColor = s_BackgroundColor.Pop(); + } + + /** + * Draws a horizontal line and inserts a GUILayout.Space(2). + * @param lines How many lines to draw. Typically 1 or 2 suffice. + */ + public static void DrawSeparator(int lines, Color color) + { + Color old = UnityEngine.GUI.backgroundColor; + UnityEngine.GUI.backgroundColor = color; + DrawSeparator(lines); + UnityEngine.GUI.backgroundColor = old; + } + + public static void DrawSeparator(int lines) + { + GUILayout.Box("", SplitStyle, GUILayout.MaxHeight(2)); + + for (int i = 1; i < lines; i++) + { + GUILayout.Space(2); + GUILayout.Box("", SplitStyle, GUILayout.MaxHeight(2)); + } + } + + static Dictionary<GUIStyle, GUIStyle> onStyles = new Dictionary<GUIStyle, GUIStyle>(); + + public static GUIStyle GetOnStyle(GUIStyle style) + { + GUIStyle on; + + if (onStyles.TryGetValue(style, out on)) + return on; + + on = new GUIStyle(style); + on.normal.textColor = on.onNormal.textColor; + on.normal.background = on.onNormal.background; + onStyles.Add(style, on); + return on; + } + + static Dictionary<GUIStyle, GUIStyle> activeStyles = new Dictionary<GUIStyle, GUIStyle>(); + + public static GUIStyle GetActiveStyle(GUIStyle style) + { + GUIStyle activeStyle; + + if (activeStyles.TryGetValue(style, out activeStyle)) + return activeStyle; + + activeStyle = new GUIStyle(style); + activeStyle.normal.textColor = activeStyle.active.textColor; + activeStyle.normal.background = activeStyle.active.background; + activeStyles.Add(style, activeStyle); + return activeStyle; + } + + /** + * Draw a solid color block at rect. + */ + public static void DrawSolidColor(Rect rect, Color col) + { + Color old = UnityEngine.GUI.backgroundColor; + UnityEngine.GUI.backgroundColor = col; + + UnityEngine.GUI.Box(rect, "", SplitStyle); + + UnityEngine.GUI.backgroundColor = old; + } + + const int FieldBoxWidth = 64; + + public static float FloatFieldConstrained(GUIContent content, float value, int width) + { + GUILayout.BeginHorizontal(); + GUILayout.Label(content, GUILayout.MaxWidth(width - FieldBoxWidth)); + value = UnityEditor.EditorGUILayout.FloatField("", value, GUILayout.MaxWidth(FieldBoxWidth - 4)); + GUILayout.EndHorizontal(); + + return value; + } + + public static int IntFieldConstrained(GUIContent content, int value, int width) + { + GUILayout.BeginHorizontal(); + GUILayout.Label(content, GUILayout.MaxWidth(width - FieldBoxWidth)); + value = UnityEditor.EditorGUILayout.IntField("", value, GUILayout.MaxWidth(FieldBoxWidth - 4)); + GUILayout.EndHorizontal(); + + return value; + } + + static GUIContent slider_guicontent = new GUIContent("", ""); + + public static float FreeSlider(string content, float value, float min, float max) + { + slider_guicontent.text = content; + return FreeSlider(slider_guicontent, value, min, max); + } + + /** + * Similar to EditorGUILayoutUtility.Slider, except this allows for values outside of the min/max bounds via the float field. + */ + public static float FreeSlider(GUIContent content, float value, float min, float max) + { + float pixelsPerPoint = 1f; + + pixelsPerPoint = UnityEditor.EditorGUIUtility.pixelsPerPoint; + + float PAD = 8f / pixelsPerPoint; + float sliderHeight = UnityEditor.EditorGUIUtility.singleLineHeight; + const float MIN_LABEL_WIDTH = 0f; + const float MAX_LABEL_WIDTH = 128f; + const float MIN_FIELD_WIDTH = 48f; + + Rect rect = EditorGUILayout.GetSliderRect(true); + float y = rect.y; + + float labelWidth = content != null ? Mathf.Max(MIN_LABEL_WIDTH, Mathf.Min(GUI.skin.label.CalcSize(content).x + PAD, MAX_LABEL_WIDTH)) : 0f; + float remaining = ((Screen.width / pixelsPerPoint) - (PAD * 2f)) - labelWidth; + float sliderWidth = remaining - (MIN_FIELD_WIDTH + PAD); + float floatWidth = MIN_FIELD_WIDTH; + + Rect labelRect = new Rect(PAD, y + 2f, labelWidth, sliderHeight); + Rect sliderRect = new Rect(labelRect.x + labelWidth, y + 1f, sliderWidth, sliderHeight); + Rect floatRect = new Rect(sliderRect.x + sliderRect.width + PAD, y + 1f, floatWidth, sliderHeight); + + if (content != null) + GUI.Label(labelRect, content); + + EditorGUI.BeginChangeCheck(); + + int controlID = GUIUtility.GetControlID(FocusType.Passive, sliderRect); + float tmp = value; + tmp = GUI.Slider(sliderRect, tmp, 0f, min, max, GUI.skin.horizontalSlider, (!EditorGUI.showMixedValue) ? GUI.skin.horizontalSliderThumb : "SliderMixed", true, controlID); + + if (EditorGUI.EndChangeCheck()) + value = Event.current.control ? 1f * Mathf.Round(tmp / 1f) : tmp; + + value = EditorGUI.FloatField(floatRect, value); + + return value; + } + + public static int FreeSliderWithRange(string content, int value, int min, int max, ref int uiMin, ref int uiMax, ref bool expanded) + { + slider_guicontent.text = content; + return FreeSliderWithRange(slider_guicontent, value, min, max, ref uiMin, ref uiMax, ref expanded); + } + + /** + * Similar to EditorGUILayoutUtility.Slider, except this allows for values outside of the uiMin/uiMax bounds via the int field. + * Contrary to the FreeSlider however it has a hard range defined with min and max. + */ + public static int FreeSliderWithRange(GUIContent content, int value, int min, int max, ref int uiMin, ref int uiMax, ref bool expanded) + { + float pixelsPerPoint = 1f; + + pixelsPerPoint = UnityEditor.EditorGUIUtility.pixelsPerPoint; + + float PAD = 6f / pixelsPerPoint; + const float SLIDER_HEIGHT = 16f; + const float MIN_LABEL_WIDTH = 0f; + const float MAX_LABEL_WIDTH = 128f; + const float MIN_FIELD_WIDTH = 48f; + + GUILayoutUtility.GetRect(UnityEditor.EditorGUIUtility.currentViewWidth / pixelsPerPoint, 18); + + Rect previousRect = GUILayoutUtility.GetLastRect(); + float y = previousRect.y; + + float labelWidth = content != null ? Mathf.Max(MIN_LABEL_WIDTH, Mathf.Min(GUI.skin.label.CalcSize(content).x + PAD, MAX_LABEL_WIDTH)) : 0f; + float remaining = ((Screen.width / pixelsPerPoint) - (PAD * 4f)) - labelWidth; + float sliderWidth = remaining - (MIN_FIELD_WIDTH + PAD); + float intWidth = MIN_FIELD_WIDTH; + float indentOffset = EditorGUI.indentLevel * 15f; + + Rect labelRect = new Rect(PAD, y + 2f, labelWidth, SLIDER_HEIGHT); + Rect sliderRect = new Rect(labelRect.x + labelWidth + 2*PAD, y + 1f, sliderWidth, SLIDER_HEIGHT); + Rect intRect = new Rect(sliderRect.x + sliderRect.width + PAD, y + 1f, intWidth, SLIDER_HEIGHT); + + Rect totalRect = GUILayoutUtility.GetRect(1, UnityEditor.EditorGUIUtility.singleLineHeight); + Rect foldoutRect = new Rect(labelRect.xMax - PAD, labelRect.y, 15, totalRect.height); + + if (content != null) + GUI.Label(labelRect, content); + + EditorGUI.BeginChangeCheck(); + + int controlID = GUIUtility.GetControlID(FocusType.Passive, sliderRect); + float tmp = value; + float tmpUIMin = uiMin; + float tmpUIMax = uiMax; + tmp = GUI.Slider(sliderRect, tmp, 0f, tmpUIMin, tmpUIMax, GUI.skin.horizontalSlider, (!EditorGUI.showMixedValue) ? GUI.skin.horizontalSliderThumb : "SliderMixed", true, controlID); + + if (EditorGUI.EndChangeCheck()) + value = (int) (Event.current.control ? 1 * Mathf.Round(tmp / 1f) : tmp); + + value = EditorGUI.DelayedIntField(intRect, value); + + if (value > uiMax) + uiMax = value; + + if (value < uiMin) + uiMin = value; + + expanded = EditorGUI.Foldout(foldoutRect, expanded, GUIContent.none); + if (expanded) + { + Rect rangeLabelRect = new Rect(sliderRect.x, sliderRect.yMax, sliderRect.width / 2, intRect.height); + Rect minRect = new Rect(intRect.x - (intRect.width + indentOffset + PAD), sliderRect.yMax + 2f, intRect.width, intRect.height); + Rect maxRect = new Rect(intRect.x, sliderRect.yMax + 2f, intRect.width, intRect.height); + + EditorGUI.PrefixLabel(rangeLabelRect, new GUIContent("Range:")); + uiMin = UnityEditor.EditorGUI.DelayedIntField(minRect, uiMin); + uiMin = UnityEngine.ProBuilder.Math.Clamp(uiMin, min, uiMax); + if (value < uiMin) + value = uiMin; + uiMax = UnityEditor.EditorGUI.DelayedIntField(maxRect, uiMax); + uiMax = UnityEngine.ProBuilder.Math.Clamp(uiMax, uiMin + 1, max); + if (value > uiMax) + value = uiMax; + } + + return UnityEngine.ProBuilder.Math.Clamp(value, min, max); + } + + public static bool ToolSettingsGUI(string text, + string description, + bool showSettings, + Func<ProBuilderMesh[], ActionResult> action, + Action gui, + ProBuilderMesh[] selection) + { + return ToolSettingsGUI(text, description, showSettings, action, gui, true, selection); + } + + public static bool ToolSettingsGUI(string text, + string description, + bool showSettings, + Func<ProBuilderMesh[], ActionResult> action, + Action gui, + bool enabled, + ProBuilderMesh[] selection) + { + if (enabled) + { + GUILayout.BeginHorizontal(); + + if (GUILayout.Button(new GUIContent(text, description), UnityEditor.EditorStyles.miniButtonLeft)) + action(selection); + + if (GUILayout.Button(showSettings ? "-" : "+", UnityEditor.EditorStyles.miniButtonRight, GUILayout.MaxWidth(24))) + showSettings = !showSettings; + GUILayout.EndHorizontal(); + + if (showSettings) + { + GUILayout.BeginVertical(EditorStyles.sceneTextBox); + gui(); + GUILayout.EndVertical(); + GUILayout.Space(4); + } + } + else + { + if (GUILayout.Button(new GUIContent(text, description), UnityEditor.EditorStyles.miniButton)) + action(selection); + } + + return showSettings; + } + + /** + * Similar to EditorGUILayout.Slider, except that this won't return clamped values + * unless the user modifies the value. + */ + public static float Slider(GUIContent content, float value, float min, float max) + { + float tmp = value; + + EditorGUI.BeginChangeCheck(); + + tmp = UnityEditor.EditorGUILayout.Slider(content, value, min, max); + + if (EditorGUI.EndChangeCheck()) + return tmp; + else + return value; + } + + static Rect sceneLabelRect = new Rect(0f, 0f, 0f, 0f); + static Color SceneLabelBackgroundColor = new Color(.12f, .12f, .12f, 1f); + + static GUIStyle sceneBoldLabel + { + get + { + if (_sceneBoldLabel == null) + { + _sceneBoldLabel = new GUIStyle(UnityEditor.EditorStyles.boldLabel); + _sceneBoldLabel.normal.textColor = Color.white; + } + return _sceneBoldLabel; + } + } + + static GUIStyle _sceneBoldLabel = null; + + /** + * Draw a label in the scene view with a solid color background. + */ + public static void SceneLabel(string text, Vector2 position) + { + GUIContent gc = EditorGUIUtility.TempContent(text); + + float width = UnityEditor.EditorStyles.boldLabel.CalcSize(gc).x; + float height = UnityEditor.EditorStyles.label.CalcHeight(gc, width) + 4; + + sceneLabelRect.x = position.x - width * .5f; + sceneLabelRect.y = position.y - height * .5f; + sceneLabelRect.width = width; + sceneLabelRect.height = height; + + EditorGUIUtility.DrawSolidColor(sceneLabelRect, SceneLabelBackgroundColor); + + GUI.Label(sceneLabelRect, gc, sceneBoldLabel); + } + + public static SelectMode DoElementModeToolbar(Rect rect, SelectMode mode) + { + Styles.Init(); + + EditorGUI.BeginChangeCheck(); + + var textureMode = mode.ContainsFlag(SelectMode.TextureVertex | SelectMode.TextureEdge | SelectMode.TextureFace); + + int currentSelectionMode = -1; + + switch (mode) + { + case SelectMode.Object: + currentSelectionMode = 0; + break; + case SelectMode.Vertex: + case SelectMode.TextureVertex: + currentSelectionMode = 1; + break; + case SelectMode.Edge: + case SelectMode.TextureEdge: + currentSelectionMode = 2; + break; + case SelectMode.Face: + case SelectMode.TextureFace: + currentSelectionMode = 3; + break; + default: + currentSelectionMode = -1; + break; + } + + currentSelectionMode = GUI.Toolbar(rect, currentSelectionMode, Styles.selectModeIcons, Styles.command); + + if (EditorGUI.EndChangeCheck()) + { + if (currentSelectionMode == 0) + mode = SelectMode.Object; + else if (currentSelectionMode == 1) + mode = textureMode ? SelectMode.TextureVertex : SelectMode.Vertex; + else if (currentSelectionMode == 2) + mode = textureMode ? SelectMode.TextureEdge : SelectMode.Edge; + else if (currentSelectionMode == 3) + mode = textureMode ? SelectMode.TextureFace : SelectMode.Face; + } + + return mode; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorGUIUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorGUIUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c2e86644032e620c03ad9b45a4ea19d09ad97744 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorGUIUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a931ba2bdb160804eb3438f28aa0def3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleDrawing.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleDrawing.cs new file mode 100644 index 0000000000000000000000000000000000000000..3eb8b5a22497d3ffdfc42b8fe435ab869e2c67b3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleDrawing.cs @@ -0,0 +1,425 @@ +using System; +using UnityEngine; +using UObject = UnityEngine.Object; +using UnityEngine.ProBuilder; +using System.Collections.Generic; +using UnityEngine.Rendering; +using UnityEditor.SettingsManagement; +#if !UNITY_2019_1_OR_NEWER +using System.Reflection; +#endif +using UnityObject = UnityEngine.Object; + +namespace UnityEditor.ProBuilder +{ + static partial class EditorHandleDrawing + { + const HideFlags k_ResourceHideFlags = HideFlags.HideAndDontSave; + const float k_MinLineWidthForGeometryShader = .01f; + + static bool s_Initialized; + + static ObjectPool<Mesh> m_MeshPool2; + + static Dictionary<ProBuilderMesh, MeshHandle> m_WireHandles; + static Dictionary<ProBuilderMesh, MeshHandle> m_VertexHandles; + static Dictionary<ProBuilderMesh, MeshHandle> m_SelectedFaceHandles; + static Dictionary<ProBuilderMesh, MeshHandle> m_SelectedVertexHandles; + static Dictionary<ProBuilderMesh, MeshHandle> m_SelectedEdgeHandles; + + // Edge, vert, wire, and line materials Can be either point to a geometry shader or an alternative for devices + // without geometry shader support + static Material m_EdgeMaterial; + static Material m_VertMaterial; + static Material m_WireMaterial; + static Material m_LineMaterial; + static Material m_FaceMaterial; + static Material m_GlWireMaterial; + + static Material edgeMaterial { get { Init(); return m_EdgeMaterial; } } + static Material vertMaterial { get { Init(); return m_VertMaterial; } } + static Material wireMaterial { get { Init(); return m_WireMaterial; } } + static Material lineMaterial { get { Init(); return m_LineMaterial; } } + static Material faceMaterial { get { Init(); return m_FaceMaterial; } } + static Material glWireMaterial { get { Init(); return m_GlWireMaterial; } } + + static ObjectPool<Mesh> meshPool { get { Init(); return m_MeshPool2; } } + static Dictionary<ProBuilderMesh, MeshHandle> wireHandles { get { Init(); return m_WireHandles; } } + static Dictionary<ProBuilderMesh, MeshHandle> vertexHandles { get { Init(); return m_VertexHandles; } } + static Dictionary<ProBuilderMesh, MeshHandle> selectedFaceHandles { get { Init(); return m_SelectedFaceHandles; } } + static Dictionary<ProBuilderMesh, MeshHandle> selectedVertexHandles { get { Init(); return m_SelectedVertexHandles; } } + static Dictionary<ProBuilderMesh, MeshHandle> selectedEdgeHandles { get { Init(); return m_SelectedEdgeHandles; } } + + static Color wireframeColor { get { return s_UseUnityColors ? k_WireframeDefault : s_WireframeColorPref; } } + static Color faceSelectedColor { get { return s_UseUnityColors ? Handles.selectedColor : s_SelectedFaceColorPref; } } + static Color preselectionColor { get { return s_UseUnityColors ? Handles.preselectionColor : s_PreselectionColorPref; } } + static Color edgeSelectedColor { get { return s_UseUnityColors ? Handles.selectedColor : s_SelectedEdgeColorPref; } } + static Color edgeUnselectedColor { get { return s_UseUnityColors ? k_WireframeDefault : s_UnselectedEdgeColorPref; } } + static Color vertexSelectedColor { get { return s_UseUnityColors ? Handles.selectedColor : s_SelectedVertexColorPref; } } + static Color vertexUnselectedColor { get { return s_UseUnityColors ? k_VertexUnselectedDefault : s_UnselectedVertexColorPref; } } + + // Force line rendering to use GL.LINE without geometry shader billboards. This is set by the + // EnsureResourcesLoaded function based on available graphics API + static bool m_ForceEdgeLinesGL; + static bool m_ForceWireframeLinesGL; + + static readonly Color k_VertexUnselectedDefault = new Color(.7f, .7f, .7f, 1f); + static readonly Color k_WireframeDefault = new Color(94.0f / 255.0f, 119.0f / 255.0f, 155.0f / 255.0f, 1f); + + [UserSetting] + static Pref<bool> s_UseUnityColors = new Pref<bool>("graphics.handlesUseUnityColors", true, SettingsScope.User); + [UserSetting] + static Pref<bool> s_DitherFaceHandle = new Pref<bool>("graphics.ditherFaceHandles", true, SettingsScope.User); + [UserSetting] + static Pref<Color> s_SelectedFaceColorPref = new Pref<Color>("graphics.userSelectedFaceColor", new Color(0f, 210f / 255f, 239f / 255f, 1f), SettingsScope.User); + [UserSetting] + static Pref<Color> s_WireframeColorPref = new Pref<Color>("graphics.userWireframeColor", new Color(125f / 255f, 155f / 255f, 185f / 255f, 1f), SettingsScope.User); + [UserSetting] + static Pref<Color> s_UnselectedEdgeColorPref = new Pref<Color>("graphics.userUnselectedEdgeColor", new Color(44f / 255f, 44f / 255f, 44f / 255f, 1f), SettingsScope.User); + [UserSetting] + static Pref<Color> s_SelectedEdgeColorPref = new Pref<Color>("graphics.userSelectedEdgeColor", new Color(0f, 210f / 255f, 239f / 255f, 1f), SettingsScope.User); + [UserSetting] + static Pref<Color> s_UnselectedVertexColorPref = new Pref<Color>("graphics.userUnselectedVertexColor", new Color(44f / 255f, 44f / 255f, 44f / 255f, 1f), SettingsScope.User); + [UserSetting] + static Pref<Color> s_SelectedVertexColorPref = new Pref<Color>("graphics.userSelectedVertexColor", new Color(0f, 210f / 255f, 239f / 255f, 1f), SettingsScope.User); + [UserSetting] + static Pref<Color> s_PreselectionColorPref = new Pref<Color>("graphics.userPreselectionColor", new Color(179f / 255f, 246f / 255f, 255f / 255f, 1f), SettingsScope.User); + + [UserSetting] + static Pref<float> s_WireframeLineSize = new Pref<float>("graphics.wireframeLineSize", .5f, SettingsScope.User); + [UserSetting] + static Pref<float> s_EdgeLineSize = new Pref<float>("graphics.edgeLineSize", 1f, SettingsScope.User); + [UserSetting] + static Pref<float> s_VertexPointSize = new Pref<float>("graphics.vertexPointSize", 3f, SettingsScope.User); + + [UserSetting] + static Pref<bool> s_DepthTestHandles = new Pref<bool>("graphics.handleZTest", true, SettingsScope.User); + + [UserSettingBlock("Graphics")] + static void HandleColorPreferences(string searchContext) + { + EditorGUI.BeginChangeCheck(); + + s_UseUnityColors.value = SettingsGUILayout.SettingsToggle("Use Unity Colors", s_UseUnityColors, searchContext); + + if (!s_UseUnityColors.value) + { + using (new SettingsGUILayout.IndentedGroup()) + { + s_DitherFaceHandle.value = SettingsGUILayout.SettingsToggle("Dither Face Overlay", s_DitherFaceHandle, searchContext); + s_WireframeColorPref.value = SettingsGUILayout.SettingsColorField("Wireframe", s_WireframeColorPref, searchContext); + s_PreselectionColorPref.value = SettingsGUILayout.SettingsColorField("Preselection", s_PreselectionColorPref, searchContext); + s_SelectedFaceColorPref.value = SettingsGUILayout.SettingsColorField("Selected Face Color", s_SelectedFaceColorPref, searchContext); + s_UnselectedEdgeColorPref.value = SettingsGUILayout.SettingsColorField("Unselected Edge Color", s_UnselectedEdgeColorPref, searchContext); + s_SelectedEdgeColorPref.value = SettingsGUILayout.SettingsColorField("Selected Edge Color", s_SelectedEdgeColorPref, searchContext); + s_UnselectedVertexColorPref.value = SettingsGUILayout.SettingsColorField("Unselected Vertex Color", s_UnselectedVertexColorPref, searchContext); + s_SelectedVertexColorPref.value = SettingsGUILayout.SettingsColorField("Selected Vertex Color", s_SelectedVertexColorPref, searchContext); + } + } + + s_DepthTestHandles.value = SettingsGUILayout.SettingsToggle("Depth Test", s_DepthTestHandles, searchContext); + s_VertexPointSize.value = SettingsGUILayout.SettingsSlider("Vertex Size", s_VertexPointSize, 1f, 10f, searchContext); + s_EdgeLineSize.value = SettingsGUILayout.SettingsSlider("Line Size", s_EdgeLineSize, 0f, 10f, searchContext); + s_WireframeLineSize.value = SettingsGUILayout.SettingsSlider("Wireframe Size", s_WireframeLineSize, 0f, 10f, searchContext); + + if(EditorGUI.EndChangeCheck()) + ProBuilderEditor.UpdateMeshHandles(true); + } + + internal static float dotCapSize + { + get { return s_VertexPointSize * .0125f; } + } + + static void Init() + { + if (s_Initialized) + return; + + s_Initialized = true; + + ReleaseResources(); + + m_MeshPool2 = new ObjectPool<Mesh>(0, 8, CreateMesh, DestroyMesh); + m_WireHandles = new Dictionary<ProBuilderMesh, MeshHandle>(); + m_VertexHandles = new Dictionary<ProBuilderMesh, MeshHandle>(); + m_SelectedFaceHandles = new Dictionary<ProBuilderMesh, MeshHandle>(); + m_SelectedEdgeHandles = new Dictionary<ProBuilderMesh, MeshHandle>(); + m_SelectedVertexHandles = new Dictionary<ProBuilderMesh, MeshHandle>(); + + var lineShader = BuiltinMaterials.geometryShadersSupported ? BuiltinMaterials.lineShader : BuiltinMaterials.lineShaderMetal; + var vertShader = BuiltinMaterials.geometryShadersSupported ? BuiltinMaterials.pointShader : BuiltinMaterials.dotShader; + + m_EdgeMaterial = CreateMaterial(Shader.Find(lineShader), "ProBuilder::LineMaterial"); + m_WireMaterial = CreateMaterial(Shader.Find(lineShader), "ProBuilder::WireMaterial"); + m_LineMaterial = CreateMaterial(Shader.Find(lineShader), "ProBuilder::GeneralUseLineMaterial"); + m_VertMaterial = CreateMaterial(Shader.Find(vertShader), "ProBuilder::VertexMaterial"); + m_GlWireMaterial = CreateMaterial(Shader.Find(BuiltinMaterials.faceShader), "ProBuilder::GLWire"); + m_FaceMaterial = CreateMaterial(Shader.Find(BuiltinMaterials.faceShader), "ProBuilder::FaceMaterial"); + + ResetPreferences(); + } + + internal static void ReleaseResources() + { + ClearHandles(); + if(m_MeshPool2 != null) + m_MeshPool2.Dispose(); + if(m_EdgeMaterial != null) UnityObject.DestroyImmediate(m_EdgeMaterial); + if(m_WireMaterial != null) UnityObject.DestroyImmediate(m_WireMaterial); + if(m_LineMaterial != null) UnityObject.DestroyImmediate(m_LineMaterial); + if(m_VertMaterial != null) UnityObject.DestroyImmediate(m_VertMaterial); + if(m_GlWireMaterial != null) UnityObject.DestroyImmediate(m_GlWireMaterial); + if(m_FaceMaterial != null) UnityObject.DestroyImmediate(m_FaceMaterial); + } + + internal static void ResetPreferences() + { + faceMaterial.SetFloat("_Dither", (s_UseUnityColors || s_DitherFaceHandle) ? 1f : 0f); + + m_ForceEdgeLinesGL = s_EdgeLineSize.value < k_MinLineWidthForGeometryShader; + m_ForceWireframeLinesGL = s_WireframeLineSize.value < k_MinLineWidthForGeometryShader; + + wireMaterial.SetColor("_Color", wireframeColor); + wireMaterial.SetInt("_HandleZTest", (int)CompareFunction.LessEqual); + + SetMaterialsScaleAttribute(); + } + + static Material CreateMaterial(Shader shader, string materialName) + { + if (shader == null) + shader = BuiltinMaterials.defaultMaterial.shader; + + Material mat = new Material(shader); + mat.name = materialName; + mat.hideFlags = k_ResourceHideFlags; + return mat; + } + + static Mesh CreateMesh() + { + var mesh = new Mesh(); + mesh.name = "EditorMeshHandles.MeshHandle" + mesh.GetInstanceID(); + mesh.hideFlags = HideFlags.HideAndDontSave; + return mesh; + } + + static void DestroyMesh(Mesh mesh) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + UObject.DestroyImmediate(mesh); + } + +#if !UNITY_2019_1_OR_NEWER + static MethodInfo s_ApplyWireMaterial = null; + + static object[] s_ApplyWireMaterialArgs = new object[] + { + CompareFunction.Always + }; +#endif + + public static void DrawSceneSelection(SceneSelection selection) + { + var mesh = selection.mesh; + + if (mesh == null) + return; + + var positions = mesh.positionsInternal; + + // Draw nearest edge + using (new TriangleDrawingScope(preselectionColor)) + { + GL.MultMatrix(mesh.transform.localToWorldMatrix); + foreach (var face in selection.faces) + { + var ind = face.indexes; + + for (int i = 0, c = ind.Count; i < c; i += 3) + { + GL.Vertex(positions[ind[i]]); + GL.Vertex(positions[ind[i + 1]]); + GL.Vertex(positions[ind[i + 2]]); + } + } + } + using (var drawingScope = new LineDrawingScope(preselectionColor, mesh.transform.localToWorldMatrix, -1f, CompareFunction.Always)) + { + foreach (var edge in selection.edges) + { + drawingScope.DrawLine(positions[edge.a], positions[edge.b]); + } + } + using (var drawingScope = new PointDrawingScope(preselectionColor, CompareFunction.Always) { matrix = mesh.transform.localToWorldMatrix }) + { + foreach (var vertex in selection.vertexes) + { + drawingScope.Draw(positions[vertex]); + } + } + } + + public static void DrawSceneHandles(SelectMode mode) + { + if (Event.current.type != EventType.Repaint) + return; + + // Update the scale based on EditorGUIUtility.pixelsPerPoints in case the DPI would have changed. + SetMaterialsScaleAttribute(); + + switch (mode) + { + case SelectMode.Edge: + case SelectMode.TextureEdge: + { + // When in Edge mode, use the same material for wireframe + Render(wireHandles, m_ForceEdgeLinesGL ? glWireMaterial : edgeMaterial, edgeUnselectedColor, CompareFunction.LessEqual, false); + Render(selectedEdgeHandles, m_ForceEdgeLinesGL ? glWireMaterial : edgeMaterial, edgeSelectedColor, s_DepthTestHandles ? CompareFunction.LessEqual : CompareFunction.Always, true); + break; + } + case SelectMode.Face: + case SelectMode.TextureFace: + { + Render(wireHandles, m_ForceWireframeLinesGL ? glWireMaterial : wireMaterial, wireframeColor, CompareFunction.LessEqual, false); + Render(selectedFaceHandles, faceMaterial, faceSelectedColor, s_DepthTestHandles); + break; + } + case SelectMode.Vertex: + case SelectMode.TextureVertex: + { + Render(wireHandles, m_ForceWireframeLinesGL ? glWireMaterial : wireMaterial, wireframeColor, CompareFunction.LessEqual, false); + Render(vertexHandles, vertMaterial, vertexUnselectedColor, CompareFunction.LessEqual, false); + Render(selectedVertexHandles, vertMaterial, vertexSelectedColor, s_DepthTestHandles); + break; + } + default: + { + Render(wireHandles, m_ForceWireframeLinesGL ? glWireMaterial : wireMaterial, wireframeColor, CompareFunction.LessEqual, false); + break; + } + } + } + + static void Render(Dictionary<ProBuilderMesh, MeshHandle> handles, Material material, Color color, bool depthTest = true) + { + Render(handles, material, color, depthTest ? CompareFunction.LessEqual : CompareFunction.Always, true); + } + + static void Render(Dictionary<ProBuilderMesh, MeshHandle> handles, Material material, Color color, CompareFunction func, bool zWrite) + { + material.SetInt("_HandleZTest", (int) func); + material.SetInt("_HandleZWrite", zWrite ? 1 : 0); + material.SetColor("_Color", color); + + if (material.SetPass(0)) + { + foreach (var kvp in handles) + kvp.Value.DrawMeshNow(0); + } + } + + public static void ClearHandles() + { + if(m_WireHandles != null) + ClearHandlesInternal(wireHandles); + if(m_VertexHandles != null) + ClearHandlesInternal(m_VertexHandles); + if(selectedFaceHandles != null) + ClearHandlesInternal(m_SelectedFaceHandles); + if(m_SelectedEdgeHandles != null) + ClearHandlesInternal(m_SelectedEdgeHandles); + if(m_SelectedVertexHandles != null) + ClearHandlesInternal(m_SelectedVertexHandles); + } + + public static void RebuildSelectedHandles(IEnumerable<ProBuilderMesh> meshes, SelectMode selectionMode) + { + ClearHandles(); + + foreach (var mesh in meshes) + { + switch (selectionMode) + { + case SelectMode.Vertex: + case SelectMode.TextureVertex: + { + RebuildMeshHandle(mesh, vertexHandles, MeshHandles.CreateVertexMesh); + var handle = GetMeshHandle(mesh, selectedVertexHandles); + MeshHandles.CreateVertexMesh(mesh, handle.mesh, mesh.selectedIndexesInternal); + goto default; + } + + case SelectMode.Edge: + case SelectMode.TextureEdge: + { + if(m_ForceEdgeLinesGL || BuiltinMaterials.geometryShadersSupported) + RebuildMeshHandle(mesh, wireHandles, MeshHandles.CreateEdgeMesh); + else + RebuildMeshHandle(mesh, wireHandles, MeshHandles.CreateEdgeBillboardMesh); + + var handle = GetMeshHandle(mesh, selectedEdgeHandles); + + if(m_ForceEdgeLinesGL || BuiltinMaterials.geometryShadersSupported) + MeshHandles.CreateEdgeMesh(mesh, handle.mesh, mesh.selectedEdgesInternal); + else + MeshHandles.CreateEdgeBillboardMesh(mesh, handle.mesh, mesh.selectedEdgesInternal); + + break; + } + + case SelectMode.Face: + case SelectMode.TextureFace: + { + RebuildMeshHandle(mesh, selectedFaceHandles, MeshHandles.CreateFaceMesh); + goto default; + } + + default: + if(m_ForceWireframeLinesGL || BuiltinMaterials.geometryShadersSupported) + RebuildMeshHandle(mesh, wireHandles, MeshHandles.CreateEdgeMesh); + else + RebuildMeshHandle(mesh, wireHandles, MeshHandles.CreateEdgeBillboardMesh); + break; + } + } + } + + static MeshHandle GetMeshHandle(ProBuilderMesh mesh, Dictionary<ProBuilderMesh, MeshHandle> cache) + { + MeshHandle handle; + + if (!cache.TryGetValue(mesh, out handle)) + { + var m = meshPool.Dequeue(); + handle = new MeshHandle(mesh.transform, m); + cache.Add(mesh, handle); + } + + return handle; + } + + static void RebuildMeshHandle(ProBuilderMesh mesh, Dictionary<ProBuilderMesh, MeshHandle> list, Action<ProBuilderMesh, Mesh> ctor) + { + var handle = GetMeshHandle(mesh, list); + ctor(mesh, handle.mesh); + } + + static void ClearHandlesInternal(Dictionary<ProBuilderMesh, MeshHandle> handles) + { + foreach (var kvp in handles) + meshPool.Enqueue(kvp.Value.mesh); + handles.Clear(); + } + + static void SetMaterialsScaleAttribute() + { + vertMaterial.SetFloat("_Scale", s_VertexPointSize * EditorGUIUtility.pixelsPerPoint); + wireMaterial.SetFloat("_Scale", s_WireframeLineSize * EditorGUIUtility.pixelsPerPoint); + edgeMaterial.SetFloat("_Scale", s_EdgeLineSize * EditorGUIUtility.pixelsPerPoint); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleDrawing.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleDrawing.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..70618157b2e599294b846dbd75d52ff2429f8950 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleDrawing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5abceb5fc06c0954682d5b5addb0c3d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleDrawingScopes.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleDrawingScopes.cs new file mode 100644 index 0000000000000000000000000000000000000000..38f59c38bf31d502d0674800e7539da2a5793fc5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleDrawingScopes.cs @@ -0,0 +1,400 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UObject = UnityEngine.Object; +using UnityEngine.ProBuilder; +using UnityEngine.Rendering; + +namespace UnityEditor.ProBuilder +{ + static partial class EditorHandleDrawing + { + const float k_DefaultGizmoSize = .2f; + + internal static void DrawGizmo(Vector3 position, Quaternion rotation, float size = -1f) + { + var p = position; + size = HandleUtility.GetHandleSize(p) * size < 0f ? .5f : size; + + using (var lineDrawer = new LineDrawingScope(Color.green, -1f, CompareFunction.Always)) + { + lineDrawer.DrawLine(p, p + rotation * Vector3.up * size); + lineDrawer.SetColor(Color.red); + lineDrawer.DrawLine(p, p + rotation * Vector3.right * size); + lineDrawer.SetColor(Color.blue); + lineDrawer.DrawLine(p, p + rotation * Vector3.forward * size); + } + } + + internal static void DrawGizmo(Vector3 position, Matrix4x4 matrix, float size = -1f) + { + var p = matrix.MultiplyPoint3x4(position); + size = HandleUtility.GetHandleSize(p) * size < 0f ? k_DefaultGizmoSize : size; + + using (var lineDrawer = new LineDrawingScope(Color.green, -1f, CompareFunction.Always)) + { + lineDrawer.DrawLine(p, p + matrix.MultiplyVector(Vector3.up) * size); + lineDrawer.SetColor(Color.red); + lineDrawer.DrawLine(p, p + matrix.MultiplyVector(Vector3.right) * size); + lineDrawer.SetColor(Color.blue); + lineDrawer.DrawLine(p, p + matrix.MultiplyVector(Vector3.forward) * size); + } + } + + internal static void DrawTransformOriginGizmo(Matrix4x4 matrix, Vector3 direction, float size = -1f) + { + var p = matrix.MultiplyPoint(Vector3.zero); + var s = HandleUtility.GetHandleSize(p); + var d = size < 0f ? k_DefaultGizmoSize : size; + var e = Event.current.type; + + Handles.color = Color.gray; + Handles.DotHandleCap(0, p, Quaternion.identity, s * dotCapSize, e); + Handles.DotHandleCap(0, p + matrix.MultiplyVector(direction) * d, Quaternion.identity, s * dotCapSize, e); + Handles.DrawLine(p, p + matrix.MultiplyVector(direction) * d); + Handles.color = Color.white; + } + + public struct PointDrawingScope : IDisposable + { + Color m_Color; + CompareFunction m_ZTest; + bool m_IsDisposed; + Mesh m_Mesh; + List<Vector3> m_Points; + List<int> m_Indices; + Matrix4x4 m_Matrix; + + public Color color + { + get { return m_Color; } + set + { + End(); + m_Color = value; + Begin(); + } + } + + public CompareFunction zTest + { + get { return m_ZTest; } + + set + { + End(); + m_ZTest = value; + Begin(); + } + } + + public Matrix4x4 matrix + { + get { return m_Matrix; } + set { m_Matrix = value; } + } + + public PointDrawingScope(Color color, CompareFunction zTest = CompareFunction.LessEqual) + { + m_Color = color; + m_ZTest = zTest; + m_IsDisposed = false; + m_Mesh = meshPool.Dequeue(); + m_Points = new List<Vector3>(64); + m_Indices = new List<int>(64); + m_Matrix = Matrix4x4.identity; + Begin(); + } + + void Begin() + { + vertMaterial.SetColor("_Color", color); + vertMaterial.SetInt("_HandleZTest", (int)zTest); + + if (!vertMaterial.SetPass(0)) + throw new Exception("Failed initializing vertex material."); + + m_Points.Clear(); + } + + void End() + { + m_Mesh.Clear(); + + if (BuiltinMaterials.geometryShadersSupported) + { + for (int i = 0, c = m_Points.Count; i < c; ++i) + m_Indices.Add(i); + + m_Mesh.SetVertices(m_Points); + +#if UNITY_2019_3_OR_NEWER + m_Mesh.SetIndices(m_Indices, MeshTopology.Points, 0, false); +#else + m_Mesh.SetIndices(m_Indices.ToArray(), MeshTopology.Points, 0, false); +#endif + } + else + { + MeshHandles.CreatePointBillboardMesh(m_Points, m_Mesh); + } + + Graphics.DrawMeshNow(m_Mesh, m_Matrix, 0); + } + + public void Dispose() + { + if (m_IsDisposed) + return; + + m_IsDisposed = true; + + End(); + + if(m_Mesh != null) + meshPool.Enqueue(m_Mesh); + } + + public void Draw(Vector3 point) + { + m_Points.Add(point); + } + } + + public struct LineDrawingScope : IDisposable + { + bool m_Wire; + bool m_LineTopology; + Color m_Color; + float m_Thickness; + CompareFunction m_ZTest; + Matrix4x4 m_Matrix; + bool m_IsDisposed; + + Mesh m_LineMesh; + List<Vector3> m_Positions; + List<Vector4> m_Tangents; + List<Color> m_Colors; + List<int> m_Indices; + + public Color color + { + get { return m_Color; } + } + + public void SetColor(Color color) + { + if (!m_Wire) + End(); + m_Color = color; + if (!m_Wire) + Begin(); + } + + public float thickness + { + get { return m_Thickness; } + } + + public CompareFunction zTest + { + get { return m_ZTest; } + } + + public LineDrawingScope(Color color, float thickness = -1f, CompareFunction zTest = CompareFunction.LessEqual) + : this(color, Matrix4x4.identity, thickness, zTest) { } + + public LineDrawingScope(Color color, Matrix4x4 matrix, float thickness = -1f, CompareFunction zTest = CompareFunction.LessEqual) + { + m_LineMesh = meshPool.Dequeue(); + m_IsDisposed = false; + m_Matrix = matrix; + m_Color = color; + m_Thickness = thickness < 0f ? s_EdgeLineSize : thickness; + m_ZTest = zTest; + + m_Positions = new List<Vector3>(4); + m_Tangents = new List<Vector4>(4); + m_Colors = new List<Color>(4); + m_Indices = new List<int>(4); + + m_Wire = m_Thickness < k_MinLineWidthForGeometryShader || lineMaterial == null; + m_LineTopology = m_Wire || BuiltinMaterials.geometryShadersSupported; + + Begin(); + } + + void Begin() + { + if (!m_Wire) + { + lineMaterial.SetColor("_Color", color); + lineMaterial.SetFloat("_Scale", thickness * EditorGUIUtility.pixelsPerPoint); + lineMaterial.SetInt("_HandleZTest", (int)zTest); + } + + if (m_Wire || !lineMaterial.SetPass(0)) + { +#if UNITY_2019_1_OR_NEWER + HandleUtility.ApplyWireMaterial(zTest); +#else + if (s_ApplyWireMaterial == null) + { + s_ApplyWireMaterial = typeof(HandleUtility).GetMethod( + "ApplyWireMaterial", + System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic, + null, + new System.Type[] { typeof(CompareFunction) }, + null); + + if (s_ApplyWireMaterial == null) + throw new Exception("Failed to find wire material, stopping draw lines."); + } + + s_ApplyWireMaterialArgs[0] = zTest; + s_ApplyWireMaterial.Invoke(null, s_ApplyWireMaterialArgs); +#endif + } + } + + void End() + { + m_LineMesh.Clear(); + m_LineMesh.SetVertices(m_Positions); + if(m_Wire) + m_LineMesh.SetColors(m_Colors); + else + m_LineMesh.SetTangents(m_Tangents); + m_LineMesh.subMeshCount = 1; +#if UNITY_2019_3_OR_NEWER + m_LineMesh.SetIndices(m_Indices, m_LineTopology ? MeshTopology.Lines : MeshTopology.Quads, 0); +#else + m_LineMesh.SetIndices(m_Indices.ToArray(), m_LineTopology ? MeshTopology.Lines : MeshTopology.Quads, 0); +#endif + + Graphics.DrawMeshNow(m_LineMesh, m_Matrix); + + m_Positions.Clear(); + m_Tangents.Clear(); + m_Colors.Clear(); + m_Indices.Clear(); + } + + public void DrawLine(Vector3 a, Vector3 b) + { + var count = m_Positions.Count; + + if (!m_Wire && !m_LineTopology) + { + Vector3 c = b + (b - a); + + m_Tangents.Add(new Vector4(b.x, b.y, b.z, 1f)); + m_Positions.Add(a); + m_Indices.Add(count + 0); + + m_Tangents.Add(new Vector4(b.x, b.y, b.z, -1f)); + m_Positions.Add(a); + m_Indices.Add(count + 1); + + m_Tangents.Add(new Vector4(c.x, c.y, c.z, -1f)); + m_Positions.Add(b); + m_Indices.Add(count + 2); + + m_Tangents.Add(new Vector4(c.x, c.y, c.z, 1f)); + m_Positions.Add(b); + m_Indices.Add(count + 3); + } + else + { + m_Colors.Add(color); + m_Positions.Add(a); + m_Indices.Add(count + 0); + + m_Colors.Add(color); + m_Positions.Add(b); + m_Indices.Add(count + 1); + } + } + + public void Dispose() + { + if (m_IsDisposed) + return; + m_IsDisposed = true; + End(); + if(m_LineMesh != null) + meshPool.Enqueue(m_LineMesh); + } + } + + internal class TriangleDrawingScope : IDisposable + { + Color m_Color; + CompareFunction m_ZTest; + bool m_IsDisposed; + + public Color color + { + get { return m_Color; } + set + { + End(); + m_Color = value; + Begin(); + } + } + + public CompareFunction zTest + { + get { return m_ZTest; } + + set + { + End(); + m_ZTest = value; + Begin(); + } + } + + public TriangleDrawingScope(Color color, CompareFunction zTest = CompareFunction.LessEqual) + { + m_Color = color; + m_ZTest = zTest; + Begin(); + } + + void Begin() + { + faceMaterial.SetColor("_Color", color); + faceMaterial.SetInt("_HandleZTest", (int)zTest); + + if (!faceMaterial.SetPass(0)) + throw new Exception("Failed initializing face material."); + + GL.PushMatrix(); + GL.Begin(GL.TRIANGLES); + } + + void End() + { + GL.End(); + GL.PopMatrix(); + } + + public void Dispose() + { + if (m_IsDisposed) + return; + m_IsDisposed = true; + End(); + } + + public void Draw(Vector3 a, Vector3 b, Vector3 c) + { + GL.Vertex(a); + GL.Vertex(b); + GL.Vertex(c); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleDrawingScopes.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleDrawingScopes.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b313078797cf3f2377305636fae8c72c56ad06d3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleDrawingScopes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50a4f82d9b25145fb91d03a7bef21d24 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..cda1aa2d6a9a6f3a8ec1e49ee72d3ab3c0d18e68 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleUtility.cs @@ -0,0 +1,671 @@ +using UnityEngine; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; +using RaycastHit = UnityEngine.ProBuilder.RaycastHit; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Utilities for creating and manipulating Handles and points in GUI space. + /// </summary> + static class EditorHandleUtility + { + static Stack<Matrix4x4> s_HandleMatrix = new Stack<Matrix4x4>(); + + public static bool SceneViewInUse(Event e) + { + return e.alt + || Tools.current == Tool.View + || (e.isMouse && e.button > 0) + || Tools.viewTool == ViewTool.FPS + || Tools.viewTool == ViewTool.Orbit; + } + + public static bool IsAppendModifier(EventModifiers em) + { + return (em & EventModifiers.Shift) == EventModifiers.Shift || + (em & EventModifiers.Control) == EventModifiers.Control || + (em & EventModifiers.Alt) == EventModifiers.Alt || + (em & EventModifiers.Command) == EventModifiers.Command; + } + + public static bool IsSelectionAddModifier(EventModifiers em) + { + return (em & EventModifiers.Shift) == EventModifiers.Shift; + } + + public static bool IsSelectionPathModifier(EventModifiers em) + { + return (em & EventModifiers.Shift) == EventModifiers.Shift && + ((em & EventModifiers.Control) == EventModifiers.Control || + (em & EventModifiers.Command) == EventModifiers.Command); + } + + public static bool IsSelectionAppendOrRemoveIfPresentModifier(EventModifiers em) + { + return (((Application.platform == RuntimePlatform.OSXEditor) && (em & EventModifiers.Command) == EventModifiers.Command) || + ((Application.platform != RuntimePlatform.OSXEditor) && (em & EventModifiers.Control) == EventModifiers.Control)); + } + + const int HANDLE_PADDING = 8; + const int LEFT_MOUSE_BUTTON = 0; + const int MIDDLE_MOUSE_BUTTON = 2; + + static readonly Quaternion QuaternionUp = Quaternion.Euler(Vector3.right * 90f); + static readonly Quaternion QuaternionRight = Quaternion.Euler(Vector3.up * 90f); + static readonly Vector3 ConeDepth = new Vector3(0f, 0f, 16f); + + static readonly Color k_HandleColorUp = new Color(0f, .7f, 0f, .8f); + static readonly Color k_HandleColorRight = new Color(0f, 0f, .7f, .8f); + static readonly Color k_HandleColorRotate = new Color(0f, .7f, 0f, .8f); + static readonly Color k_HandleColorScale = new Color(.7f, .7f, .7f, .8f); + + static Material s_HandleMaterial = null; + + public static Material handleMaterial + { + get + { + if (s_HandleMaterial == null) + s_HandleMaterial = (Material)EditorGUIUtility.LoadRequired("SceneView/2DHandleLines.mat"); + + return s_HandleMaterial; + } + } + + public static int CurrentID { get { return currentId; } } + static int currentId = -1; + + static Vector2 handleOffset = Vector2.zero; + static Vector2 initialMousePosition = Vector2.zero; + + static HandleConstraint2D axisConstraint = new HandleConstraint2D(0, 0); // Multiply this value by input to mask axis movement. + public static HandleConstraint2D CurrentAxisConstraint { get { return axisConstraint; } } + + public static bool limitToLeftButton = true; + + /** + * A 2D GUI view position handle. + * @param id The Handle id. + * @param position The position in GUI coordinates. + * @param size How large in pixels to draw this handle. + */ + public static Vector2 PositionHandle2d(int id, Vector2 position, int size) + { + int width = size / 4; + var evt = Event.current; + + Rect handleRectUp = new Rect(position.x - width / 2, position.y - size - HANDLE_PADDING, width, size + HANDLE_PADDING); + Rect handleRectRight = new Rect(position.x, position.y - width / 2, size, width + HANDLE_PADDING); + + if (evt.type == EventType.Repaint) + { + Handles.color = Color.yellow; + Handles.CircleHandleCap(id, position, Quaternion.identity, width / 2f, evt.type); + Handles.color = k_HandleColorUp; + + // Y Line + Handles.DrawLine(position, position - Vector2.up * size); + + // Y Cone + if (position.y - size > 0f) + Handles.ConeHandleCap(id, ((Vector3) ((position - Vector2.up * size))) - ConeDepth, QuaternionUp, + width / 2, evt.type); + + Handles.color = k_HandleColorRight; + + // X Line + Handles.DrawLine(position, position + Vector2.right * size); + + // X Cap + if (position.y > 0f) + Handles.ConeHandleCap(id, ((Vector3) ((position + Vector2.right * size))) - ConeDepth, + QuaternionRight, width / 2, evt.type); + } + + // If a Tool already is engaged and it's not this one, bail. + if (currentId >= 0 && currentId != id) + return position; + + Vector2 mousePosition = evt.mousePosition; + Vector2 newPosition = position; + + if (currentId == id) + { + switch (evt.type) + { + case EventType.MouseDrag: + newPosition = axisConstraint.Mask(mousePosition + handleOffset) + axisConstraint.InverseMask(position); + break; + + case EventType.MouseUp: + case EventType.Ignore: + currentId = -1; + break; + } + } + else + { + if (evt.type == EventType.MouseDown && ((!limitToLeftButton && evt.button != MIDDLE_MOUSE_BUTTON) || evt.button == LEFT_MOUSE_BUTTON)) + { + if (Vector2.Distance(mousePosition, position) < width / 2f) + { + currentId = id; + handleOffset = position - mousePosition; + axisConstraint = new HandleConstraint2D(1, 1); + } + else if (handleRectRight.Contains(mousePosition)) + { + currentId = id; + handleOffset = position - mousePosition; + axisConstraint = new HandleConstraint2D(1, 0); + } + else if (handleRectUp.Contains(mousePosition)) + { + currentId = id; + handleOffset = position - mousePosition; + axisConstraint = new HandleConstraint2D(0, 1); + } + } + } + + return newPosition; + } + + static Vector2 s_InitialDirection; + + /// <summary> + /// A 2D rotation handle. Behaves like HandleUtility.RotationHandle + /// </summary> + /// <param name="id"></param> + /// <param name="position"></param> + /// <param name="rotation"></param> + /// <param name="radius"></param> + /// <returns></returns> + public static float RotationHandle2d(int id, Vector2 position, float rotation, int radius) + { + Event evt = Event.current; + Vector2 mousePosition = evt.mousePosition; + float newRotation = rotation; + + Vector2 currentDirection = (mousePosition - position).normalized; + + // Draw gizmos + Handles.color = k_HandleColorRotate; + Handles.CircleHandleCap(-1, position, Quaternion.identity, radius, evt.type); + + if (currentId == id) + { + Handles.color = Color.gray; + Handles.DrawLine(position, position + (mousePosition - position).normalized * radius); + GUI.Label(new Rect(position.x, position.y, 90f, 30f), newRotation.ToString("F2") + PreferenceKeys.DEGREE_SYMBOL); + } + + // If a Tool already is engaged and it's not this one, bail. + if (currentId >= 0 && currentId != id) + return rotation; + + if (currentId == id) + { + switch (evt.type) + { + case EventType.MouseDrag: + + newRotation = Vector2.Angle(s_InitialDirection, currentDirection); + + if (Vector2.Dot(new Vector2(-s_InitialDirection.y, s_InitialDirection.x), currentDirection) < 0) + newRotation = 360f - newRotation; + break; + + case EventType.MouseUp: + case EventType.Ignore: + currentId = -1; + break; + } + } + else + { + if (evt.type == EventType.MouseDown && ((!limitToLeftButton && evt.button != MIDDLE_MOUSE_BUTTON) || evt.button == LEFT_MOUSE_BUTTON)) + { + if (Mathf.Abs(Vector2.Distance(mousePosition, position) - radius) < 8) + { + currentId = id; + initialMousePosition = mousePosition; + s_InitialDirection = (initialMousePosition - position).normalized; + handleOffset = position - mousePosition; + } + } + } + + return newRotation; + } + + /// <summary> + /// Scale handle in 2d space. + /// </summary> + /// <param name="id"></param> + /// <param name="position"></param> + /// <param name="scale"></param> + /// <param name="size"></param> + /// <returns></returns> + public static Vector2 ScaleHandle2d(int id, Vector2 position, Vector2 scale, int size) + { + Event evt = Event.current; + Vector2 mousePosition = evt.mousePosition; + int width = size / 4; + + if (evt.type == EventType.Repaint) + { + Handles.color = k_HandleColorUp; + Handles.DrawLine(position, position - Vector2.up * size * scale.y); + + if (position.y - size > 0f) + Handles.CubeHandleCap(0, + ((Vector3) ((position - Vector2.up * scale.y * size))) - Vector3.forward * 16, QuaternionUp, + width / 3, evt.type); + + Handles.color = k_HandleColorRight; + Handles.DrawLine(position, position + Vector2.right * size * scale.x); + + if (position.y > 0f) + Handles.CubeHandleCap(0, + ((Vector3) ((position + Vector2.right * scale.x * size))) - Vector3.forward * 16, + Quaternion.Euler(Vector3.up * 90f), + width / 3f, + evt.type); + + Handles.color = k_HandleColorScale; + + Handles.CubeHandleCap(0, + ((Vector3) position) - Vector3.forward * 16, + QuaternionUp, + width / 2f, + evt.type); + } + + // If a Tool already is engaged and it's not this one, bail. + if (currentId >= 0 && currentId != id) + return scale; + + Rect handleRectUp = new Rect(position.x - width / 2f, position.y - size - HANDLE_PADDING, width, size + HANDLE_PADDING); + Rect handleRectRight = new Rect(position.x, position.y - width / 2f, size + 8, width); + Rect handleRectCenter = new Rect(position.x - width / 2f, position.y - width / 2f, width, width); + + if (currentId == id) + { + switch (evt.type) + { + case EventType.MouseDrag: + Vector2 diff = axisConstraint.Mask(mousePosition - initialMousePosition); + diff.x += size; + diff.y = -diff.y; // gui space Y is opposite-world + diff.y += size; + scale = diff / size; + if (axisConstraint == HandleConstraint2D.None) + { + scale.x = Mathf.Min(scale.x, scale.y); + scale.y = Mathf.Min(scale.x, scale.y); + } + break; + + case EventType.MouseUp: + case EventType.Ignore: + currentId = -1; + break; + } + } + else + { + if (evt.type == EventType.MouseDown && ((!limitToLeftButton && evt.button != MIDDLE_MOUSE_BUTTON) || evt.button == LEFT_MOUSE_BUTTON)) + { + if (handleRectCenter.Contains(mousePosition)) + { + currentId = id; + handleOffset = position - mousePosition; + initialMousePosition = mousePosition; + axisConstraint = new HandleConstraint2D(1, 1); + } + else if (handleRectRight.Contains(mousePosition)) + { + currentId = id; + handleOffset = position - mousePosition; + initialMousePosition = mousePosition; + axisConstraint = new HandleConstraint2D(1, 0); + } + else if (handleRectUp.Contains(mousePosition)) + { + currentId = id; + handleOffset = position - mousePosition; + initialMousePosition = mousePosition; + axisConstraint = new HandleConstraint2D(0, 1); + } + } + } + + return scale; + } + + internal static void GetAllOverlapping(Vector2 mousePosition, List<GameObject> list) + { + list.Clear(); + + GameObject nearestGameObject = null; + + do + { + nearestGameObject = HandleUtility.PickGameObject(mousePosition, false, list.ToArray()); + + if (nearestGameObject != null) + list.Add(nearestGameObject); + else + break; + } + while (nearestGameObject != null); + } + + internal static void GetHovered(Vector2 mousePosition, List<GameObject> list) + { + list.Clear(); + var go = HandleUtility.PickGameObject(mousePosition, false); + if (go != null) + list.Add(go); + } + + /** + * Given two Vector2[] arrays, find the nearest two points within maxDelta and return the difference in offset. + * @param points First Vector2[] array. + * @param compare The Vector2[] array to compare @c points againts. + * @mask If mask is not null, any index in mask will not be used in the compare array. + * @param maxDelta The maximum distance for two points to be apart to be considered for nearness. + * @notes This should probably use a divide and conquer algorithm instead of the O(n^2) approach (http://www.geeksforgeeks.org/closest-pair-of-points/) + + */ + public static bool NearestPointDelta(Vector2[] points, Vector2[] compare, int[] mask, float maxDelta, out Vector2 offset) + { + float dist = 0f; + float minDist = maxDelta; + bool foundMatch = false; + offset = Vector2.zero; + + for (int i = 0; i < points.Length; i++) + { + for (int n = 0; n < compare.Length; n++) + { + if (points[i] == compare[n]) continue; + + dist = Vector2.Distance(points[i], compare[n]); + + if (dist < minDist) + { + if (mask != null && System.Array.IndexOf(mask, n) > -1) + continue; + + minDist = dist; + offset = compare[n] - points[i]; + foundMatch = true; + } + } + } + + return foundMatch; + } + + /** + * Returns the index of the nearest point in the points array, or -1 if no point is within maxDelta range. + */ + public static int NearestPoint(Vector2 point, Vector2[] points, float maxDelta) + { + float dist = 0f; + float minDist = maxDelta; + int index = -1; + + for (int i = 0; i < points.Length; i++) + { + if (point == points[i]) continue; + + dist = Vector2.Distance(point, points[i]); + + if (dist < minDist) + { + minDist = dist; + index = i; + } + } + + return index; + } + + /// <summary> + /// Pick the closest point on a world space set of line segments. + /// Similar to UnityEditor.HandleUtility version except this also + /// returns the index of the segment that best matched (source modified + /// from UnityEngine.HandleUtility class). + /// </summary> + /// <param name="vertices"></param> + /// <param name="index"></param> + /// <param name="distanceToLine"></param> + /// <param name="closeLoop"></param> + /// <param name="trs"></param> + /// <returns></returns> + public static Vector3 ClosestPointToPolyLine(List<Vector3> vertices, out int index, out float distanceToLine, bool closeLoop = false, Transform trs = null) + { + distanceToLine = Mathf.Infinity; + + if (trs != null) + distanceToLine = HandleUtility.DistanceToLine(trs.TransformPoint(vertices[0]), trs.TransformPoint(vertices[1])); + else + distanceToLine = HandleUtility.DistanceToLine(vertices[0], vertices[1]); + + index = 0; + int count = vertices.Count; + + for (int i = 2; i < (closeLoop ? count + 1 : count); i++) + { + var distance = 0f; + + if (trs != null) + distance = HandleUtility.DistanceToLine(trs.TransformPoint(vertices[i - 1]), trs.TransformPoint(vertices[i % count])); + else + distance = HandleUtility.DistanceToLine(vertices[i - 1], vertices[i % count]); + + if (distance < distanceToLine) + { + distanceToLine = distance; + index = i - 1; + } + } + + Vector3 point_a = trs != null ? trs.TransformPoint(vertices[index]) : vertices[index]; + Vector3 point_b = trs != null ? trs.TransformPoint(vertices[(index + 1) % count]) : vertices[index + 1]; + + index++; + + Vector2 gui_a = Event.current.mousePosition - HandleUtility.WorldToGUIPoint(point_a); + Vector2 gui_b = HandleUtility.WorldToGUIPoint(point_b) - HandleUtility.WorldToGUIPoint(point_a); + + float magnitude = gui_b.magnitude; + float travel = Vector3.Dot(gui_b, gui_a); + + if (magnitude > 1E-06f) + travel /= magnitude * magnitude; + + Vector3 p = Vector3.Lerp(point_a, point_b, Mathf.Clamp01(travel)); + + return trs != null ? trs.InverseTransformPoint(p) : p; + } + + internal static void PushMatrix() + { + s_HandleMatrix.Push(Handles.matrix); + } + + internal static void PopMatrix() + { + Handles.matrix = s_HandleMatrix.Pop(); + } + + /// <summary> + /// Get a plane suitable for mouse input in a scene view. + /// </summary> + /// <param name="mousePosition"></param> + /// <returns></returns> + internal static Plane FindBestPlane(Vector2 mousePosition) + { + // Priority in finding the "best" plane for input from a mouse position: + // 1. Take the plane from the first hit mesh. + // 2. If ProGrids is drawing a grid, use the plane normal and raycast for position + // 3. Use the nearest matching plane based on the scene camera direction + + Plane plane; + + if (GetPlaneFromPickedObject(mousePosition, out plane)) + return plane; + + if(GetPlaneFromProGridsAxis(mousePosition, out plane)) + return plane; + + return GetPlaneFromCameraDirection(); + } + + static bool GetPlaneFromPickedObject(Vector2 mousePosition, out Plane plane) + { + GameObject go = null; + var ignorePicking = new List<GameObject>(); + + do + { + if (go != null) + ignorePicking.Add(go); + + go = HandleUtility.PickGameObject(mousePosition, false, ignorePicking.ToArray()); + } while (go != null && (go.GetComponent<MeshFilter>() == null && go.GetComponent<Terrain>() == null)); + + if (go != null) + { + if (go.GetComponent<MeshFilter>() != null && go.GetComponent<MeshFilter>().sharedMesh != null) + { + RaycastHit hit; + if (UnityEngine.ProBuilder.HandleUtility.MeshRaycast( + HandleUtility.GUIPointToWorldRay(mousePosition), + go, + out hit)) + { + plane = new Plane( + go.transform.TransformDirection(hit.normal), + go.transform.TransformPoint(hit.point)); + return true; + } + } + else if (go.GetComponent<Terrain>() != null) + { + UnityEngine.RaycastHit hit; + if (Physics.Raycast(HandleUtility.GUIPointToWorldRay(mousePosition), out hit)) + { + plane = new Plane(hit.normal,hit.point); + return true; + } + } + } + + plane = default(Plane); + return false; + } + + static bool GetPlaneFromProGridsAxis(Vector2 mousePosition, out Plane plane) + { + if (!ProGridsInterface.IsActive() || !ProGridsInterface.GridVisible()) + { + plane = default(Plane); + return false; + } + + Vector3 point = SceneView.lastActiveSceneView.pivot; + Vector3 progridsPivot; + if(ProGridsInterface.GetPivot(out progridsPivot)) + point = progridsPivot; + Vector3 normal = Vector3.up; + + if (ProGridsInterface.IsFullGridEnabled()) + { + var ray = HandleUtility.GUIPointToWorldRay(mousePosition); + + Plane[] planes = new Plane[3] + { + new Plane(Vector3.right, point), + new Plane(Vector3.up, point), + new Plane(Vector3.forward, point) + }; + + float closestDistance = Mathf.Infinity; + Plane closestPlane = default(Plane); + + for (int i = 0; i < planes.Length; ++i) + { + float distance; + + if (planes[i].Raycast(ray, out distance)) + { + if (distance < closestDistance) + { + closestDistance = distance; + closestPlane = planes[i]; + } + } + } + + plane = new Plane(closestPlane.normal, point); + } + else + { + + var axis = ProGridsInterface.GetActiveGridAxis(); + float offset = ProGridsInterface.GetActiveGridOffset(); + + switch (axis) + { + case HandleAxis.X: + point.x += offset; + normal = Vector3.right; + break; + + case HandleAxis.Y: + point.y += offset; + normal = Vector3.up; + break; + case HandleAxis.Z: + point.z += offset; + normal = Vector3.forward; + break; + } + + plane = new Plane(normal, point); + } + + return true; + } + + static Plane GetPlaneFromCameraDirection() + { + var sceneView = SceneView.lastActiveSceneView; + var cameraDirection = sceneView.camera.transform.forward; + + float pitch = Mathf.Abs(Vector3.Dot(cameraDirection, Vector3.up)); + float right = Mathf.Abs(Vector3.Dot(cameraDirection, Vector3.right)); + float forward = Mathf.Abs(Vector3.Dot(cameraDirection, Vector3.forward)); + + ProjectionAxis axis = ProjectionAxis.Y; + + // Orthographic view, use X or Z + if (pitch < .02f) + { + if (right > forward) + axis = ProjectionAxis.X; + else + axis = ProjectionAxis.Z; + } + + return new Plane(Projection.ProjectionAxisToVector(axis), SceneView.lastActiveSceneView.pivot); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1b84f75a476bbd83ea835ae042c37a6d863df589 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorHandleUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31b2d23ee6bb16a42bdc704a0b1df42c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorMaterialUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorMaterialUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..7fdd58f0e98ded7b42ff3344b8c2a667c8c71b61 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorMaterialUtility.cs @@ -0,0 +1,139 @@ +using UnityEditor.SettingsManagement; +using UnityEngine; +using UObject = UnityEngine.Object; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + static class EditorMaterialUtility + { + static readonly string[] k_StandardRenderPipelineDefaultMaterials = new string[] + { + "ProBuilder Default URP", + "ProBuilder Default LWRP", + "ProBuilder Default HDRP" + }; + + static bool s_Initialized; + + static Material s_EditorDefaultMaterial; + static Material s_ShapePreviewMaterial; + + internal static readonly Color previewColor = new Color(.5f, .9f, 1f, .56f); + + [UserSetting("Mesh Settings", "Material", "The default material to be applied to newly created shapes.")] + static Pref<Material> s_DefaultMaterial = new Pref<Material>("mesh.userMaterial", null); + + static void Init() + { + if (s_Initialized) + return; + + s_Initialized = true; + s_EditorDefaultMaterial = null; + + for (int i = 0, c = k_StandardRenderPipelineDefaultMaterials.Length; i < c && s_EditorDefaultMaterial == null; i++) + { + string search = k_StandardRenderPipelineDefaultMaterials[i] + " t:Material"; + string[] materials = AssetDatabase.FindAssets(search, new[] { "Assets", "Packages" }); + + foreach (var asset in materials) + { + var mat = AssetDatabase.LoadAssetAtPath<Material>(AssetDatabase.GUIDToAssetPath(asset)); + + if (mat != null && mat.shader != null && mat.shader.isSupported) + { + s_EditorDefaultMaterial = mat; + break; + } + } + } + + if (s_EditorDefaultMaterial == null) + s_EditorDefaultMaterial = BuiltinMaterials.defaultMaterial; + + s_ShapePreviewMaterial = new Material(s_EditorDefaultMaterial.shader); + s_ShapePreviewMaterial.hideFlags = HideFlags.HideAndDontSave; + + if (s_ShapePreviewMaterial.HasProperty("_MainTex")) + s_ShapePreviewMaterial.mainTexture = (Texture2D)Resources.Load("Textures/GridBox_Default"); + + if (s_ShapePreviewMaterial.HasProperty("_Color")) + s_ShapePreviewMaterial.SetColor("_Color", previewColor); + } + + internal static Texture2D GetPreviewTexture(Material material) + { + if (material == null || material.shader == null) + return null; + + Texture2D best = null; + + for (int i = 0; i < ShaderUtil.GetPropertyCount(material.shader); i++) + { + if (ShaderUtil.GetPropertyType(material.shader, i) == ShaderUtil.ShaderPropertyType.TexEnv) + { + string propertyName = ShaderUtil.GetPropertyName(material.shader, i); + + Texture2D tex = material.GetTexture(propertyName) as Texture2D; + + if (tex != null) + { + if (propertyName.Contains("_MainTex") || propertyName.Contains("Albedo")) + return tex; + else if (best == null) + best = tex; + } + } + } + + return best; + } + + /// <summary> + /// Get the material best matching the active mesh selection. + /// </summary> + internal static Material GetActiveSelection() + { + var mesh = MeshSelection.activeMesh; + + if (mesh != null) + { + var face = MeshSelection.activeFace; + + if (face == null) + return mesh.renderer.sharedMaterial; + + var sharedMaterials = mesh.renderer.sharedMaterials; + + if (sharedMaterials != null) + { + var length = sharedMaterials.Length; + return sharedMaterials[System.Math.Min(face.submeshIndex, length - 1)]; + } + } + + return null; + } + + internal static Material GetUserMaterial() + { + var mat = (Material)s_DefaultMaterial; + if (mat != null) + return mat; + return GetSrpDefaultMaterial(); + } + + internal static Material GetSrpDefaultMaterial() + { + Init(); + return s_EditorDefaultMaterial; + } + + internal static Material GetShapePreviewMaterial() + { + Init(); + return s_ShapePreviewMaterial; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorMaterialUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorMaterialUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3a16f5410f5490eb54b5fda97aefcb24c45465c7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorMaterialUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6832442ae76f440d9a8a532b98ebfc57 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorMeshUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorMeshUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..0c28938225bd8325b77c4bce4a011bf0bcee6f72 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorMeshUtility.cs @@ -0,0 +1,268 @@ +using UnityEngine; +using System; +using System.IO; +using System.Linq; +using UnityEditor.SettingsManagement; +using UnityEngine.ProBuilder; +using Math = UnityEngine.ProBuilder.Math; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Mesh editing helper functions that are only available in the Editor. + /// </summary> + public static class EditorMeshUtility + { + const string k_MeshCacheDirectoryName = "ProBuilderMeshCache"; + static string k_MeshCacheDirectory = "Assets/ProBuilder Data/ProBuilderMeshCache"; + + [UserSetting("Mesh Editing", "Auto Resize Colliders", "Automatically resize colliders with mesh bounds as you edit.")] + static Pref<bool> s_AutoResizeCollisions = new Pref<bool>("editor.autoRecalculateCollisions", false, SettingsScope.Project); + + /// <value> + /// This callback is raised after a ProBuilderMesh has been successfully optimized. + /// </value> + /// <seealso cref="Optimize"/> + public static event Action<ProBuilderMesh, Mesh> meshOptimized = null; + + /// <summary> + /// Optmizes the mesh geometry, and generates a UV2 channel (if object is marked as LightmapStatic, or generateLightmapUVs is true). + /// </summary> + /// <remarks>This is only applicable to meshes with triangle topology. Quad meshes are not affected by this function.</remarks> + /// <param name="mesh">The ProBuilder mesh component to be optimized.</param> + /// <param name="generateLightmapUVs">If the Auto UV2 preference is disabled this parameter can be used to force UV2s to be built.</param> + public static void Optimize(this ProBuilderMesh mesh, bool generateLightmapUVs = false) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + Mesh umesh = mesh.mesh; + + if (umesh == null || umesh.vertexCount < 1) + return; + + bool skipMeshProcessing = false; + + // @todo Support mesh compression for topologies other than Triangles. + for (int i = 0; !skipMeshProcessing && i < umesh.subMeshCount; i++) + if (umesh.GetTopology(i) != MeshTopology.Triangles) + skipMeshProcessing = true; + + if (!skipMeshProcessing) + { + bool autoLightmap = Lightmapping.autoUnwrapLightmapUV; + +#if UNITY_2019_2_OR_NEWER + bool lightmapUVs = generateLightmapUVs || (autoLightmap && mesh.gameObject.HasStaticFlag(StaticEditorFlags.ContributeGI)); +#else + bool lightmapUVs = generateLightmapUVs || (autoLightmap && mesh.gameObject.HasStaticFlag(StaticEditorFlags.LightmapStatic)); +#endif + + // if generating UV2, the process is to manually split the mesh into individual triangles, + // generate uv2, then re-assemble with vertex collapsing where possible. + // if not generating uv2, just collapse vertices. + if (lightmapUVs) + { + Vertex[] vertices = UnityEngine.ProBuilder.MeshUtility.GeneratePerTriangleMesh(umesh); + + float time = Time.realtimeSinceStartup; + + UnwrapParam unwrap = Lightmapping.GetUnwrapParam(mesh.unwrapParameters); + + Vector2[] uv2 = Unwrapping.GeneratePerTriangleUV(umesh, unwrap); + + // If GenerateUV2() takes longer than 3 seconds (!), show a warning prompting user to disable auto-uv2 generation. + if ((Time.realtimeSinceStartup - time) > 3f) + Log.Warning(string.Format("Generate UV2 for \"{0}\" took {1} seconds! You may want to consider disabling Auto-UV2 generation in the `Preferences > ProBuilder` tab.", mesh.name, (Time.realtimeSinceStartup - time).ToString("F2"))); + + if (uv2.Length == vertices.Length) + { + for (int i = 0; i < uv2.Length; i++) + vertices[i].uv2 = uv2[i]; + } + else + { + Log.Warning("Generate UV2 failed. The returned size of UV2 array != mesh.vertexCount"); + } + + UnityEngine.ProBuilder.MeshUtility.CollapseSharedVertices(umesh, vertices); + } + else + { + UnityEngine.ProBuilder.MeshUtility.CollapseSharedVertices(umesh); + } + } + + if (s_AutoResizeCollisions) + RebuildColliders(mesh); + + if (meshOptimized != null) + meshOptimized(mesh, umesh); + + if (Experimental.meshesAreAssets) + TryCacheMesh(mesh); + + UnityEditor.EditorUtility.SetDirty(mesh); + } + + internal static void TryCacheMesh(ProBuilderMesh pb) + { + Mesh mesh = pb.mesh; + + // check for an existing mesh in the mesh cache and update or create a new one so + // as not to clutter the scene yaml. + string meshAssetPath = AssetDatabase.GetAssetPath(mesh); + + // if mesh is already an asset any changes will already have been applied since + // pb_Object is directly modifying the mesh asset + if (string.IsNullOrEmpty(meshAssetPath)) + { + // at the moment the asset_guid is only used to name the mesh something unique + string guid = pb.assetGuid; + + if (string.IsNullOrEmpty(guid)) + { + guid = Guid.NewGuid().ToString("N"); + pb.assetGuid = guid; + } + + string meshCacheDirectory = GetMeshCacheDirectory(true); + + string path = string.Format("{0}/{1}.asset", meshCacheDirectory, guid); + + Mesh m = AssetDatabase.LoadAssetAtPath<Mesh>(path); + + // a mesh already exists in the cache for this pb_Object + if (m != null) + { + if (mesh != m) + { + // prefab instances should always point to the same mesh + if (EditorUtility.IsPrefabInstance(pb.gameObject) || EditorUtility.IsPrefabAsset(pb.gameObject)) + { + // Debug.Log("reconnect prefab to mesh"); + + // use the most recent mesh iteration (when undoing for example) + UnityEngine.ProBuilder.MeshUtility.CopyTo(mesh, m); + + UnityEngine.Object.DestroyImmediate(mesh); + pb.gameObject.GetComponent<MeshFilter>().sharedMesh = m; + + // also set the MeshCollider if it exists + pb.Refresh(RefreshMask.Collisions); + + return; + } + else + { + // duplicate mesh + // Debug.Log("create new mesh in cache from disconnect"); + pb.assetGuid = Guid.NewGuid().ToString("N"); + path = string.Format("{0}/{1}.asset", meshCacheDirectory, pb.assetGuid); + } + } + else + { + Debug.LogWarning("Mesh found in cache and scene mesh references match, but pb.asset_guid doesn't point to asset. Please report the circumstances leading to this event to Karl."); + } + } + + AssetDatabase.CreateAsset(mesh, path); + } + } + + internal static bool GetCachedMesh(ProBuilderMesh pb, out string path, out Mesh mesh) + { + if (pb.mesh != null) + { + string meshPath = AssetDatabase.GetAssetPath(pb.mesh); + + if (!string.IsNullOrEmpty(meshPath)) + { + path = meshPath; + mesh = pb.mesh; + + return true; + } + } + + string meshCacheDirectory = GetMeshCacheDirectory(false); + string guid = pb.assetGuid; + + path = string.Format("{0}/{1}.asset", meshCacheDirectory, guid); + mesh = AssetDatabase.LoadAssetAtPath<Mesh>(path); + + return mesh != null; + } + + static string GetMeshCacheDirectory(bool initializeIfMissing = false) + { + if (Directory.Exists(k_MeshCacheDirectory)) + return k_MeshCacheDirectory; + + string[] results = Directory.GetDirectories("Assets", k_MeshCacheDirectoryName, SearchOption.AllDirectories); + + if (results.Length < 1) + { + if (initializeIfMissing) + { + k_MeshCacheDirectory = FileUtility.GetLocalDataDirectory() + "/" + k_MeshCacheDirectoryName; + Directory.CreateDirectory(k_MeshCacheDirectory); + } + else + { + k_MeshCacheDirectory = null; + } + } + else + { + k_MeshCacheDirectory = results.First(); + } + + return k_MeshCacheDirectory; + } + + /// <summary> + /// Resize any collider components on this mesh to match the size of the mesh bounds. + /// </summary> + /// <param name="mesh">The mesh target to rebuild collider volumes for.</param> + public static void RebuildColliders(this ProBuilderMesh mesh) + { + mesh.mesh.RecalculateBounds(); + + var bounds = mesh.mesh.bounds; + + foreach (var collider in mesh.GetComponents<Collider>()) + { + Type t = collider.GetType(); + + if (t == typeof(BoxCollider)) + { + ((BoxCollider)collider).center = bounds.center; + ((BoxCollider)collider).size = bounds.size; + } + else if (t == typeof(SphereCollider)) + { + ((SphereCollider)collider).center = bounds.center; + ((SphereCollider)collider).radius = Math.LargestValue(bounds.extents); + } + else if (t == typeof(CapsuleCollider)) + { + ((CapsuleCollider)collider).center = bounds.center; + Vector2 xy = new Vector2(bounds.extents.x, bounds.extents.z); + ((CapsuleCollider)collider).radius = Math.LargestValue(xy); + ((CapsuleCollider)collider).height = bounds.size.y; + } + else if (t == typeof(WheelCollider)) + { + ((WheelCollider)collider).center = bounds.center; + ((WheelCollider)collider).radius = Math.LargestValue(bounds.extents); + } + else if (t == typeof(MeshCollider)) + { + mesh.Refresh(RefreshMask.Collisions); + } + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorMeshUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorMeshUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..97f868f9f3126ff4b38068c3c353e48ea3be22f2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorMeshUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3adccdd46845df47a5d11429dac1f82 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorSceneViewPicker.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorSceneViewPicker.cs new file mode 100644 index 0000000000000000000000000000000000000000..a9981c6e4d27c96333bd92fee8fd8e0874fca9ac --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorSceneViewPicker.cs @@ -0,0 +1,795 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.ProBuilder; +using PHandleUtility = UnityEngine.ProBuilder.HandleUtility; +using UHandleUtility = UnityEditor.HandleUtility; +using RaycastHit = UnityEngine.ProBuilder.RaycastHit; + +namespace UnityEditor.ProBuilder +{ + struct ScenePickerPreferences + { + public const float maxPointerDistance = 40f; + public const float offPointerMultiplier = 1.2f; + + public CullingMode cullMode; + public SelectionModifierBehavior selectionModifierBehavior; + public RectSelectMode rectSelectMode; + } + + static class EditorSceneViewPicker + { + static int s_DeepSelectionPrevious = 0x0; + static bool s_AppendModifierPreviousState = false; + static SceneSelection s_Selection = new SceneSelection(); + static List<VertexPickerEntry> s_NearestVertices = new List<VertexPickerEntry>(); + static List<GameObject> s_OverlappingGameObjects = new List<GameObject>(); + static readonly List<int> s_IndexBuffer = new List<int>(16); + static List<Edge> s_EdgeBuffer = new List<Edge>(32); + + // When enabled, a mouse click on an unselected mesh will select both the GameObject and the mesh element picked. + const bool k_AllowUnselected = true; + + public static void DoMouseHover(SceneSelection selection) + { + if (selection.faces.Count == 0) + return; + var mesh = selection.mesh; + var face = selection.faces[0]; + var activeFace = mesh.GetActiveFace(); + if (activeFace == null || activeFace == face) + return; + + var faces = mesh.facesInternal; + var pathFaces = SelectPathFaces.GetPath(mesh, Array.IndexOf<Face>(faces, activeFace), Array.IndexOf<Face>(faces, face)); + + if (pathFaces != null) + { + foreach (var path in pathFaces) + selection.faces.Add(faces[path]); + } + } + + public static ProBuilderMesh DoMouseClick(Event evt, SelectMode selectionMode, ScenePickerPreferences pickerPreferences) + { + bool appendModifier = EditorHandleUtility.IsAppendModifier(evt.modifiers); + bool addToSelectionModifier = EditorHandleUtility.IsSelectionAddModifier(evt.modifiers); + bool addOrRemoveIfPresentFromSelectionModifier = EditorHandleUtility.IsSelectionAppendOrRemoveIfPresentModifier(evt.modifiers); + bool pathSelectionModifier = EditorHandleUtility.IsSelectionPathModifier(evt.modifiers); + + float pickedElementDistance; + + if (selectionMode.ContainsFlag(SelectMode.Edge | SelectMode.TextureEdge)) + pickedElementDistance = EdgeRaycast(evt.mousePosition, pickerPreferences, k_AllowUnselected, s_Selection); + else if (selectionMode.ContainsFlag(SelectMode.Vertex | SelectMode.TextureVertex)) + pickedElementDistance = VertexRaycast(evt.mousePosition, pickerPreferences, k_AllowUnselected, s_Selection); + else + pickedElementDistance = FaceRaycast(evt.mousePosition, pickerPreferences, k_AllowUnselected, s_Selection, evt.clickCount > 1 ? -1 : 0, false); + + evt.Use(); + + if (!appendModifier) + { + if(s_Selection.mesh != null) + s_Selection.mesh.ClearSelection(); + MeshSelection.SetSelection((GameObject)null); + } + + if (pickedElementDistance > ScenePickerPreferences.maxPointerDistance) + { + if (appendModifier && Selection.gameObjects.Contains(s_Selection.gameObject)) + MeshSelection.RemoveFromSelection(s_Selection.gameObject); + else + MeshSelection.AddToSelection(s_Selection.gameObject); + + return null; + } + + GameObject candidateNewActiveObject = s_Selection.gameObject; + bool activeObjectSelectionChanged = Selection.gameObjects.Contains(s_Selection.gameObject) && s_Selection.gameObject != Selection.activeGameObject; + + if (s_Selection.mesh != null) + { + var mesh = s_Selection.mesh; + + foreach (var face in s_Selection.faces) + { + // Check for other editor mouse shortcuts first (todo proper event handling for mouse shortcuts) + MaterialEditor matEditor = MaterialEditor.instance; + + if (matEditor != null && matEditor.ClickShortcutCheck(Event.current.modifiers, mesh, face)) + return null; + + UVEditor uvEditor = UVEditor.instance; + + if (uvEditor != null && uvEditor.ClickShortcutCheck(mesh, face)) + return null; + + var faces = mesh.faces as Face[] ?? mesh.faces.ToArray(); + var ind = Array.IndexOf<Face>(faces, face); + var sel = mesh.selectedFaceIndexes.IndexOf(ind); + + UndoUtility.RecordSelection(mesh, "Select Face"); + + if (sel > -1) + { + if (!appendModifier || addOrRemoveIfPresentFromSelectionModifier || + (addToSelectionModifier && face == mesh.GetActiveFace() && !activeObjectSelectionChanged)) + { + mesh.RemoveFromFaceSelectionAtIndex(sel); + + if (addOrRemoveIfPresentFromSelectionModifier && activeObjectSelectionChanged) + { + candidateNewActiveObject = Selection.activeGameObject; + } + else if (mesh.selectedFaceCount == 0) + { + for (var i = MeshSelection.topInternal.Count - 1; i >= 0; i--) + { + if (MeshSelection.topInternal[i].selectedFaceCount > 0) + { + candidateNewActiveObject = MeshSelection.topInternal[i].gameObject; + activeObjectSelectionChanged = true; + break; + } + } + } + } + else + { + mesh.selectedFaceIndicesInternal = mesh.selectedFaceIndicesInternal.Remove(ind); + mesh.SetSelectedFaces(mesh.selectedFaceIndicesInternal.Add(ind)); + } + } + else if (pathSelectionModifier && mesh.GetActiveFace() != null) + { + var pathFaces = SelectPathFaces.GetPath(mesh, Array.IndexOf<Face>(faces, mesh.GetActiveFace()), + Array.IndexOf<Face>(faces, face)); + foreach (var pathFace in pathFaces) + { + mesh.AddToFaceSelection(pathFace); + } + } + else + mesh.AddToFaceSelection(ind); + } + + foreach(var edge in s_Selection.edges) + { + int ind = mesh.IndexOf(mesh.selectedEdges, edge); + + UndoUtility.RecordSelection(mesh, "Select Edge"); + + if (ind > -1) + { + if (!appendModifier || addOrRemoveIfPresentFromSelectionModifier || + (addToSelectionModifier && edge == mesh.GetActiveEdge() && !activeObjectSelectionChanged)) + { + mesh.SetSelectedEdges(mesh.selectedEdges.ToArray().RemoveAt(ind)); + + if (addOrRemoveIfPresentFromSelectionModifier && activeObjectSelectionChanged) + { + candidateNewActiveObject = Selection.activeGameObject; + } + else if (mesh.selectedEdgeCount == 0) + { + for (var i = MeshSelection.topInternal.Count - 1; i >= 0; i--) + { + if (MeshSelection.topInternal[i].selectedEdgeCount > 0) + { + candidateNewActiveObject = MeshSelection.topInternal[i].gameObject; + activeObjectSelectionChanged = true; + break; + } + } + } + } + else + { + mesh.selectedEdgesInternal = mesh.selectedEdgesInternal.Remove(edge); + mesh.SetSelectedEdges(mesh.selectedEdgesInternal.Add(edge)); + } + } + else + mesh.SetSelectedEdges(mesh.selectedEdges.ToArray().Add(edge)); + } + foreach(var vertex in s_Selection.vertexes) + { + int ind = Array.IndexOf(mesh.selectedIndexesInternal, vertex); + + UndoUtility.RecordSelection(mesh, "Select Vertex"); + + if (ind > -1) + { + var sharedIndex = mesh.sharedVertexLookup[vertex]; + var sharedVertex = mesh.sharedVerticesInternal[sharedIndex]; + s_IndexBuffer.Clear(); + foreach (var sVertex in sharedVertex) + { + var index = Array.IndexOf(mesh.selectedIndexesInternal, sVertex); + if (index < 0) + continue; + + s_IndexBuffer.Add(index); + } + s_IndexBuffer.Sort(); + + if (!appendModifier || addOrRemoveIfPresentFromSelectionModifier || + (addToSelectionModifier && vertex == mesh.GetActiveVertex() && !activeObjectSelectionChanged)) + { + mesh.selectedIndexesInternal = mesh.selectedIndexesInternal.SortedRemoveAt(s_IndexBuffer); + mesh.SetSelectedVertices(mesh.selectedIndexesInternal); + + if (addOrRemoveIfPresentFromSelectionModifier && activeObjectSelectionChanged) + { + candidateNewActiveObject = Selection.activeGameObject; + } + else if (mesh.selectedIndexesInternal.Length == 0) + { + for (var i = MeshSelection.topInternal.Count - 1; i >= 0; i--) + { + if (MeshSelection.topInternal[i].selectedIndexesInternal.Length > 0) + { + candidateNewActiveObject = MeshSelection.topInternal[i].gameObject; + activeObjectSelectionChanged = true; + break; + } + } + } + } + else + { + mesh.selectedIndexesInternal = mesh.selectedIndexesInternal.SortedRemoveAt(s_IndexBuffer); + mesh.SetSelectedVertices(mesh.selectedIndexesInternal.Add(vertex)); + } + + } + else + mesh.SetSelectedVertices(mesh.selectedIndexesInternal.Add(vertex)); + } + + if(activeObjectSelectionChanged) + MeshSelection.MakeActiveObject(candidateNewActiveObject); + else + MeshSelection.AddToSelection(candidateNewActiveObject); + + return mesh; + } + + return null; + } + + public static void DoMouseDrag(Rect mouseDragRect, SelectMode selectionMode, ScenePickerPreferences scenePickerPreferences) + { + var pickingOptions = new PickerOptions() + { + depthTest = scenePickerPreferences.cullMode == CullingMode.Back, + rectSelectMode = scenePickerPreferences.rectSelectMode + }; + + UndoUtility.RecordSelection("Drag Select"); + bool isAppendModifier = EditorHandleUtility.IsAppendModifier(Event.current.modifiers); + + if (!isAppendModifier) + MeshSelection.ClearElementSelection(); + + bool elementsInDragRect = false; + + switch (selectionMode) + { + case SelectMode.Vertex: + case SelectMode.TextureVertex: + { + Dictionary<ProBuilderMesh, HashSet<int>> selected = SelectionPicker.PickVerticesInRect( + SceneView.lastActiveSceneView.camera, + mouseDragRect, + MeshSelection.topInternal, + pickingOptions, + EditorGUIUtility.pixelsPerPoint); + + foreach (var kvp in selected) + { + var mesh = kvp.Key; + SharedVertex[] sharedIndexes = mesh.sharedVerticesInternal; + HashSet<int> common; + + if (isAppendModifier) + { + common = mesh.GetSharedVertexHandles(mesh.selectedIndexesInternal); + + if (scenePickerPreferences.selectionModifierBehavior == SelectionModifierBehavior.Add) + common.UnionWith(kvp.Value); + else if (scenePickerPreferences.selectionModifierBehavior == SelectionModifierBehavior.Subtract) + common.RemoveWhere(x => kvp.Value.Contains(x)); + else if (scenePickerPreferences.selectionModifierBehavior == SelectionModifierBehavior.Difference) + common.SymmetricExceptWith(kvp.Value); + } + else + { + common = kvp.Value; + } + + elementsInDragRect |= kvp.Value.Any(); + mesh.SetSelectedVertices(common.SelectMany(x => sharedIndexes[x])); + } + + break; + } + + case SelectMode.Face: + case SelectMode.TextureFace: + { + Dictionary<ProBuilderMesh, HashSet<Face>> selected = SelectionPicker.PickFacesInRect( + SceneView.lastActiveSceneView.camera, + mouseDragRect, + MeshSelection.topInternal, + pickingOptions, + EditorGUIUtility.pixelsPerPoint); + + foreach (var kvp in selected) + { + HashSet<Face> current; + + if (isAppendModifier) + { + current = new HashSet<Face>(kvp.Key.selectedFacesInternal); + + if (scenePickerPreferences.selectionModifierBehavior == SelectionModifierBehavior.Add) + current.UnionWith(kvp.Value); + else if (scenePickerPreferences.selectionModifierBehavior == SelectionModifierBehavior.Subtract) + current.RemoveWhere(x => kvp.Value.Contains(x)); + else if (scenePickerPreferences.selectionModifierBehavior == SelectionModifierBehavior.Difference) + current.SymmetricExceptWith(kvp.Value); + } + else + { + current = kvp.Value; + } + + elementsInDragRect |= kvp.Value.Any(); + kvp.Key.SetSelectedFaces(current); + } + + break; + } + + case SelectMode.Edge: + case SelectMode.TextureEdge: + { + var selected = SelectionPicker.PickEdgesInRect( + SceneView.lastActiveSceneView.camera, + mouseDragRect, + MeshSelection.topInternal, + pickingOptions, + EditorGUIUtility.pixelsPerPoint); + + foreach (var kvp in selected) + { + ProBuilderMesh mesh = kvp.Key; + Dictionary<int, int> common = mesh.sharedVertexLookup; + HashSet<EdgeLookup> selectedEdges = EdgeLookup.GetEdgeLookupHashSet(kvp.Value, common); + HashSet<EdgeLookup> current; + + if (isAppendModifier) + { + current = EdgeLookup.GetEdgeLookupHashSet(mesh.selectedEdges, common); + + if (scenePickerPreferences.selectionModifierBehavior == SelectionModifierBehavior.Add) + current.UnionWith(selectedEdges); + else if (scenePickerPreferences.selectionModifierBehavior == SelectionModifierBehavior.Subtract) + current.RemoveWhere(x => selectedEdges.Contains(x)); + else if (scenePickerPreferences.selectionModifierBehavior == SelectionModifierBehavior.Difference) + current.SymmetricExceptWith(selectedEdges); + } + else + { + current = selectedEdges; + } + + elementsInDragRect |= kvp.Value.Any(); + mesh.SetSelectedEdges(current.Select(x => x.local)); + } + + break; + } + } + + // if nothing was selected in the drag rect, clear the object selection too + if (!elementsInDragRect && !isAppendModifier) + MeshSelection.ClearElementAndObjectSelection(); + + ProBuilderEditor.Refresh(); + SceneView.RepaintAll(); + } + + // Get the object & mesh selection that the mouse is currently nearest. + // A ProBuilderMesh is returned because double click actions need to know what the last selected pb_Object was. + // If deepClickOffset is specified, the object + deepClickOffset in the deep select stack will be returned (instead of next). + internal static float MouseRayHitTest( + Vector3 mousePosition, + SelectMode selectionMode, + ScenePickerPreferences pickerOptions, + SceneSelection selection, + bool allowUnselected = false) + { + if (selectionMode.ContainsFlag(SelectMode.Edge | SelectMode.TextureEdge)) + return EdgeRaycast(mousePosition, pickerOptions, allowUnselected, selection); + + if (selectionMode.ContainsFlag(SelectMode.Vertex | SelectMode.TextureVertex)) + return VertexRaycast(mousePosition, pickerOptions, allowUnselected, selection); + + return FaceRaycast(mousePosition, pickerOptions, allowUnselected, selection, 0, true); + } + + static float FaceRaycast(Vector3 mousePosition, + ScenePickerPreferences pickerOptions, + bool allowUnselected, + SceneSelection selection, + int deepClickOffset = 0, + bool isPreview = true) + { + GameObject pickedGo = null; + ProBuilderMesh pickedPb = null; + Face pickedFace = null; + + int newHash = 0; + + // If any event modifiers are engaged don't cycle the deep click + EventModifiers em = Event.current.modifiers; + + // Reset cycle if we used an event modifier previously. + // Move state back to single selection. + if ((em != EventModifiers.None) != s_AppendModifierPreviousState) + { + s_AppendModifierPreviousState = (em != EventModifiers.None); + s_DeepSelectionPrevious = newHash; + } + + if (isPreview || em != EventModifiers.None) + EditorHandleUtility.GetHovered(mousePosition, s_OverlappingGameObjects); + else + EditorHandleUtility.GetAllOverlapping(mousePosition, s_OverlappingGameObjects); + + selection.Clear(); + + float distance = Mathf.Infinity; + + for (int i = 0, next = 0, pickedCount = s_OverlappingGameObjects.Count; i < pickedCount; i++) + { + var go = s_OverlappingGameObjects[i]; + var mesh = go.GetComponent<ProBuilderMesh>(); + Face face = null; + + if (mesh != null && (allowUnselected || MeshSelection.topInternal.Contains(mesh))) + { + Ray ray = UHandleUtility.GUIPointToWorldRay(mousePosition); + RaycastHit hit; + + if (UnityEngine.ProBuilder.HandleUtility.FaceRaycast(ray, + mesh, + out hit, + Mathf.Infinity, + pickerOptions.cullMode)) + { + face = mesh.facesInternal[hit.face]; + distance = Vector2.SqrMagnitude(((Vector2)mousePosition) - HandleUtility.WorldToGUIPoint(mesh.transform.TransformPoint(hit.point))); + } + } + + // pb_Face doesn't define GetHashCode, meaning it falls to object.GetHashCode (reference comparison) + int hash = face == null ? go.GetHashCode() : face.GetHashCode(); + + if (s_DeepSelectionPrevious == hash) + next = (i + (1 + deepClickOffset)) % pickedCount; + + if (next == i) + { + pickedGo = go; + pickedPb = mesh; + pickedFace = face; + + newHash = hash; + + // a prior hash was matched, this is the next. if + // it's just the first iteration don't break (but do + // set the default). + if (next != 0) + break; + } + } + + if (!isPreview) + s_DeepSelectionPrevious = newHash; + + if (pickedGo != null) + { + Event.current.Use(); + + if (pickedPb != null) + { + if (pickedPb.selectable) + { + selection.gameObject = pickedGo; + selection.mesh = pickedPb; + selection.SetSingleFace(pickedFace); + + return Mathf.Sqrt(distance); + } + } + + // If clicked off a pb_Object but onto another gameobject, set the selection + // and dip out. + selection.gameObject = pickedGo; + return Mathf.Sqrt(distance); + } + + return distance; + } + + static float VertexRaycast(Vector3 mousePosition, ScenePickerPreferences pickerOptions, bool allowUnselected, SceneSelection selection) + { + Camera cam = SceneView.lastActiveSceneView.camera; + selection.Clear(); + s_NearestVertices.Clear(); + selection.gameObject = HandleUtility.PickGameObject(mousePosition, false); + float maxDistance = ScenePickerPreferences.maxPointerDistance * ScenePickerPreferences.maxPointerDistance; + ProBuilderMesh hoveredMesh = selection.gameObject != null ? selection.gameObject.GetComponent<ProBuilderMesh>() : null; + + if (allowUnselected && selection.gameObject != null) + { + if (hoveredMesh != null && hoveredMesh.selectable && !MeshSelection.Contains(hoveredMesh)) + { + GetNearestVertices(hoveredMesh, mousePosition, s_NearestVertices, maxDistance, 1); + } + } + + if (selection.mesh == null) + { + foreach (var mesh in MeshSelection.topInternal) + { + if (!mesh.selectable) + continue; + + GetNearestVertices(mesh, mousePosition, s_NearestVertices, maxDistance, hoveredMesh == mesh || hoveredMesh == null ? 1.0f : ScenePickerPreferences.offPointerMultiplier); + } + } + + s_NearestVertices.Sort((x, y) => x.screenDistance.CompareTo(y.screenDistance)); + + for (int i = 0; i < s_NearestVertices.Count; i++) + { + if (!UnityEngine.ProBuilder.HandleUtility.PointIsOccluded(cam, s_NearestVertices[i].mesh, s_NearestVertices[i].worldPosition)) + { + selection.gameObject = s_NearestVertices[i].mesh.gameObject; + selection.mesh = s_NearestVertices[i].mesh; + selection.SetSingleVertex(s_NearestVertices[i].vertex); + + return Mathf.Sqrt(s_NearestVertices[i].screenDistance); + } + } + + return Mathf.Infinity; + } + + static int GetNearestVertices(ProBuilderMesh mesh, Vector3 mousePosition, List<VertexPickerEntry> list, float maxDistance, float distModifier) + { + var positions = mesh.positionsInternal; + var common = mesh.sharedVerticesInternal; + var matches = 0; + + for (int n = 0, c = common.Length; n < c; n++) + { + int index = common[n][0]; + Vector3 v = mesh.transform.TransformPoint(positions[index]); + Vector3 p = UHandleUtility.WorldToGUIPoint(v); + + float dist = (p - mousePosition).sqrMagnitude * distModifier; + + if (dist < maxDistance) + { + list.Add(new VertexPickerEntry() + { + mesh = mesh, + screenDistance = dist, + worldPosition = v, + vertex = index + }); + + matches++; + } + } + + return matches; + } + + /// <summary> + /// Get the nearest <see cref="Edge"/> to a screen position. + /// </summary> + /// <returns> + /// Distance is returned as the screen distance to mesh, not edge. + /// </returns> + static float EdgeRaycast(Vector3 mousePosition, ScenePickerPreferences pickerPrefs, bool allowUnselected, SceneSelection selection) + { + selection.Clear(); + selection.gameObject = UHandleUtility.PickGameObject(mousePosition, false); + var hoveredMesh = selection.gameObject != null ? selection.gameObject.GetComponent<ProBuilderMesh>() : null; + + float bestDistance = Mathf.Infinity; + bool hoveredIsInSelection = MeshSelection.topInternal.Contains(hoveredMesh); + + if (hoveredMesh != null && (allowUnselected || hoveredIsInSelection)) + { + var tup = GetNearestEdgeOnMesh(hoveredMesh, mousePosition); + + if (tup.edge.IsValid()) + { + selection.gameObject = hoveredMesh.gameObject; + selection.mesh = hoveredMesh; + selection.SetSingleEdge(tup.edge); + bestDistance = tup.distance; + + // If the nearest edge was acquired by a raycast, then the distance to mesh is 0f. + if (hoveredIsInSelection) + return tup.distance; + } + } + + foreach (var mesh in MeshSelection.topInternal) + { + var trs = mesh.transform; + var positions = mesh.positionsInternal; + s_EdgeBuffer.Clear(); + + // When the pointer is over another object, apply a modifier to the distance to prefer picking the + // object hovered over the currently selected + var distMultiplier = (hoveredMesh == mesh || hoveredMesh == null) + ? 1.0f + : ScenePickerPreferences.offPointerMultiplier; + + foreach (var face in mesh.facesInternal) + { + foreach (var edge in face.edges) + { + int x = edge.a; + int y = edge.b; + + float d = UHandleUtility.DistanceToLine( + trs.TransformPoint(positions[x]), + trs.TransformPoint(positions[y])); + + d *= distMultiplier; + + // best distance isn't set to maxPointerDistance because we want to preserve an unselected + // gameobject over a selected gameobject with an out of bounds edge. + if (d > ScenePickerPreferences.maxPointerDistance) + continue; + + // account for stacked edges + if (Mathf.Approximately(d, bestDistance)) + { + s_EdgeBuffer.Add(new Edge(x, y)); + } + else if (d < bestDistance) + { + s_EdgeBuffer.Clear(); + s_EdgeBuffer.Add(new Edge(x, y)); + + selection.gameObject = mesh.gameObject; + selection.mesh = mesh; + selection.SetSingleEdge(new Edge(x, y)); + bestDistance = d; + } + } + } + + // If more than 1 edge is closest, the closest is one of the vertex. + // Get closest edge to the camera. + if (s_EdgeBuffer.Count > 1) + selection.SetSingleEdge(GetClosestEdgeToCamera(positions, s_EdgeBuffer)); + } + + return selection.gameObject != null ? bestDistance : Mathf.Infinity; + } + + static Edge GetClosestEdgeToCamera(Vector3[] positions, IEnumerable<Edge> edges) + { + var camPos = SceneView.lastActiveSceneView.camera.transform.position; + var closestDistToScreen = Mathf.Infinity; + Edge closest = default(Edge); + + foreach (var edge in edges) + { + var a = positions[edge.a]; + var b = positions[edge.b]; + var dir = (b - a).normalized * 0.01f; + + //Use a point that is close to the vertex on the edge but not on it, + //otherwise we will have the same issue with every edge having the same distance to screen + float dToScreen = Mathf.Min( + Vector3.Distance(camPos, a + dir), + Vector3.Distance(camPos, b - dir)); + + if (dToScreen < closestDistToScreen) + { + closestDistToScreen = dToScreen; + closest = edge; + } + } + + return closest; + } + + struct EdgeAndDistance + { + public Edge edge; + public float distance; + } + + /// <summary> + /// Get the nearest edge to a screen position. + /// </summary> + static EdgeAndDistance GetNearestEdgeOnMesh(ProBuilderMesh mesh, Vector3 mousePosition) + { + Ray ray = UHandleUtility.GUIPointToWorldRay(mousePosition); + + var res = new EdgeAndDistance() + { + edge = Edge.Empty, + distance = Mathf.Infinity + }; + + SimpleTuple<Face, Vector3> s_DualCullModeRaycastBackFace = new SimpleTuple<Face, Vector3>(); + SimpleTuple<Face, Vector3> s_DualCullModeRaycastFrontFace = new SimpleTuple<Face, Vector3>(); + + // get the nearest hit face and point for both cull mode front and back, then prefer the result that is nearest the camera. + if (PHandleUtility.FaceRaycastBothCullModes(ray, mesh, ref s_DualCullModeRaycastBackFace, ref s_DualCullModeRaycastFrontFace)) + { + Vector3[] v = mesh.positionsInternal; + + if (s_DualCullModeRaycastBackFace.item1 != null) + { + foreach (var edge in s_DualCullModeRaycastBackFace.item1.edgesInternal) + { + float d = UHandleUtility.DistancePointLine(s_DualCullModeRaycastBackFace.item2, v[edge.a], v[edge.b]); + + if (d < res.distance) + { + res.edge = edge; + res.distance = d; + } + } + } + + if (s_DualCullModeRaycastFrontFace.item1 != null) + { + var a = mesh.transform.TransformPoint(s_DualCullModeRaycastBackFace.item2); + var b = mesh.transform.TransformPoint(s_DualCullModeRaycastFrontFace.item2); + var c = SceneView.lastActiveSceneView.camera.transform.position; + + if (Vector3.Distance(c, b) < Vector3.Distance(c, a)) + { + foreach (var edge in s_DualCullModeRaycastFrontFace.item1.edgesInternal) + { + float d = UHandleUtility.DistancePointLine(s_DualCullModeRaycastFrontFace.item2, v[edge.a], v[edge.b]); + + if (d < res.distance) + { + res.edge = edge; + res.distance = d; + } + } + } + } + + if (res.edge.IsValid()) + res.distance = UHandleUtility.DistanceToLine( + mesh.transform.TransformPoint(v[res.edge.a]), + mesh.transform.TransformPoint(v[res.edge.b])); + } + + return res; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorSceneViewPicker.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorSceneViewPicker.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c979b426f86b8886071d54a8488fb201b603d080 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorSceneViewPicker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6420831531bc2054281143153f7d6659 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorStyles.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorStyles.cs new file mode 100644 index 0000000000000000000000000000000000000000..06ba6740c99f23418a38bc22a1c056bb47650e49 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorStyles.cs @@ -0,0 +1,138 @@ +using System; +using UnityEngine; + +namespace UnityEditor.ProBuilder.UI +{ + /// <summary> + /// Collection of commonly used styles in the editor. + /// </summary> + static class EditorStyles + { + const string k_FontAsap = "About/Font/Asap-Regular.otf"; + + const string k_ButtonBackgroundNormal = "Toolbar/Background/RoundedRect_Normal"; + const string k_ButtonBackgroundHover = "Toolbar/Background/RoundedRect_Hover"; + const string k_ButtonBackgroundPressed = "Toolbar/Background/RoundedRect_Pressed"; + const string k_SettingsBackgroundNormal = "Toolbar/RoundedBorder"; + const string k_SceneTextBoxBackgroundNormal = "Scene/TextBackground"; + + static readonly Color k_TextColorWhiteNormal = new Color(0.7f, 0.7f, 0.7f, 1f); + static readonly Color k_TextColorWhiteHover = new Color(0.7f, 0.7f, 0.7f, 1f); + static readonly Color k_TextColorWhiteActive = new Color(0.5f, 0.5f, 0.5f, 1f); + + static bool s_Initialized; + static GUIStyle s_ButtonStyle; + static GUIStyle s_ToolbarHelpIcon; + static GUIStyle s_SettingsGroup; + static GUIStyle s_RowStyle; + static GUIStyle s_HeaderLabel; + static GUIStyle s_SceneTextBox; + + public static GUIStyle buttonStyle { get { Init(); return s_ButtonStyle; } } + public static GUIStyle toolbarHelpIcon { get { Init(); return s_ToolbarHelpIcon; } } + public static GUIStyle settingsGroup { get { Init(); return s_SettingsGroup; } } + public static GUIStyle rowStyle { get { Init(); return s_RowStyle; } } + public static GUIStyle headerLabel { get { Init(); return s_HeaderLabel; } } + public static GUIStyle sceneTextBox { get { Init(); return s_SceneTextBox; } } + + static void Init() + { + if (s_Initialized) + return; + + s_Initialized = true; + + s_ButtonStyle = new GUIStyle() + { + normal = new GUIStyleState() + { + background = IconUtility.GetIcon(k_ButtonBackgroundNormal), + textColor = UnityEditor.EditorGUIUtility.isProSkin ? k_TextColorWhiteNormal : Color.black + }, + hover = new GUIStyleState() + { + background = IconUtility.GetIcon(k_ButtonBackgroundHover), + textColor = UnityEditor.EditorGUIUtility.isProSkin ? k_TextColorWhiteHover : Color.black, + }, + active = new GUIStyleState() + { + background = IconUtility.GetIcon(k_ButtonBackgroundPressed), + textColor = UnityEditor.EditorGUIUtility.isProSkin ? k_TextColorWhiteActive : Color.black, + }, + alignment = ProBuilderEditor.s_IsIconGui ? TextAnchor.MiddleCenter : TextAnchor.MiddleLeft, + border = new RectOffset(3, 3, 3, 3), + stretchWidth = true, + stretchHeight = false, + margin = new RectOffset(4, 4, 4, 4), + padding = new RectOffset(4, 4, 4, 4) + }; + + s_ToolbarHelpIcon = new GUIStyle() + { + margin = new RectOffset(0, 0, 0, 0), + padding = new RectOffset(0, 0, 0, 0), + alignment = TextAnchor.MiddleCenter, + fixedWidth = 18, + fixedHeight = 18 + }; + + s_SettingsGroup = new GUIStyle() + { + normal = new GUIStyleState() + { + background = IconUtility.GetIcon(k_SettingsBackgroundNormal) + }, + hover = new GUIStyleState() + { + background = IconUtility.GetIcon(k_SettingsBackgroundNormal) + }, + active = new GUIStyleState() + { + background = IconUtility.GetIcon(k_SettingsBackgroundNormal) + }, + border = new RectOffset(3, 3, 3, 3), + stretchWidth = true, + stretchHeight = false, + margin = new RectOffset(4, 4, 4, 4), + padding = new RectOffset(4, 4, 4, 6) + }; + + s_RowStyle = new GUIStyle() + { + normal = new GUIStyleState() { background = UnityEditor.EditorGUIUtility.whiteTexture }, + stretchWidth = true, + stretchHeight = false, + margin = new RectOffset(4, 4, 4, 4), + padding = new RectOffset(4, 4, 4, 4) + }; + + s_HeaderLabel = new GUIStyle(UnityEditor.EditorStyles.boldLabel) + { + alignment = TextAnchor.LowerLeft, + fontSize = 18, + stretchWidth = true, + stretchHeight = false + }; + + Font asap = FileUtility.LoadInternalAsset<Font>(k_FontAsap); + if (asap != null) + s_HeaderLabel.font = asap; + + s_SceneTextBox = new GUIStyle(GUI.skin.box) + { + wordWrap = false, + richText = true, + stretchWidth = false, + stretchHeight = false, + border = new RectOffset(2, 2, 2, 2), + padding = new RectOffset(4, 4, 4, 4), + alignment = TextAnchor.UpperLeft, + normal = new GUIStyleState() + { + textColor = k_TextColorWhiteNormal, + background = IconUtility.GetIcon(k_SceneTextBoxBackgroundNormal) + } + }; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorStyles.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorStyles.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..612c0f1dfad4dd168b9921ac46273ef0bb76cb02 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorStyles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a08405bf933b15f4882645f9cb359193 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbar.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbar.cs new file mode 100644 index 0000000000000000000000000000000000000000..180bdf078e6717f4c892bad2054a4d4dda6c391c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbar.cs @@ -0,0 +1,452 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.SettingsManagement; + +namespace UnityEditor.ProBuilder +{ + [System.Serializable] + sealed class EditorToolbar : ScriptableObject + { + EditorToolbar() {} + + Pref<Vector2> m_Scroll = new Pref<Vector2>("editor.scrollPosition", Vector2.zero, SettingsScope.User); + public EditorWindow window; + + bool isFloating { get { return ProBuilderEditor.instance != null && ProBuilderEditor.instance.isFloatingWindow; } } + internal bool isIconMode = true; + + [UserSetting("Toolbar", "Shift Key Tooltips", "Tooltips will only show when the Shift key is held")] + internal static Pref<bool> s_ShiftOnlyTooltips = new Pref<bool>("editor.shiftOnlyTooltips", false, SettingsScope.User); + + SimpleTuple<string, double> tooltipTimer = new SimpleTuple<string, double>("", 0.0); + // the element currently being hovered + string hoveringTooltipName = ""; + // the mouse has hovered > tooltipTimerRefresh + bool showTooltipTimer = false; + // how long a tooltip will wait before showing + float tooltipTimerRefresh = 1f; + + Texture2D scrollIconUp = null, + scrollIconDown = null, + scrollIconRight = null, + scrollIconLeft = null; + + [SerializeField] List<MenuAction> m_Actions; + [SerializeField] int m_ActionsLength = 0; + + public void InitWindowProperties(EditorWindow win) + { + win.wantsMouseMove = true; + win.autoRepaintOnSceneChange = true; + this.window = win; + } + + void OnEnable() + { + m_Actions = EditorToolbarLoader.GetActions(true); + m_ActionsLength = m_Actions.Count(); + + ProBuilderEditor.selectionUpdated -= OnElementSelectionChange; + ProBuilderEditor.selectionUpdated += OnElementSelectionChange; + + EditorApplication.update -= Update; + EditorApplication.update += Update; + + tooltipTimer.item1 = ""; + tooltipTimer.item2 = 0.0; + showTooltipTimer = false; + scrollIconUp = IconUtility.GetIcon("Toolbar/ShowNextPage_Up"); + scrollIconDown = IconUtility.GetIcon("Toolbar/ShowNextPage_Down"); + scrollIconRight = IconUtility.GetIcon("Toolbar/ShowNextPage_Right"); + scrollIconLeft = IconUtility.GetIcon("Toolbar/ShowNextPage_Left"); + + isIconMode = ProBuilderEditor.s_IsIconGui; + this.window = ProBuilderEditor.instance; + CalculateMaxIconSize(); + } + + void OnDisable() + { + // don't unsubscribe here because on exiting playmode OnEnable/OnDisable + // is called. no clue why. + // EditorApplication.update -= Update; + ProBuilderEditor.selectionUpdated -= OnElementSelectionChange; + } + + void OnDestroy() + { + // store the scroll in both disable & destroy because there are + // situations where one gets updated over the other and it's all + // screwy. script reloads in particular? + MenuActionStyles.ResetStyles(); + } + + void OnElementSelectionChange(IEnumerable<ProBuilderMesh> selection) + { + if (!window) + DestroyImmediate(this); + else + window.Repaint(); + } + + void ShowTooltip(Rect rect, string content, Vector2 scrollOffset) + { + TooltipContent c = TooltipContent.TempContent; + c.summary = content; + ShowTooltip(rect, c, scrollOffset); + } + + void ShowTooltip(Rect rect, TooltipContent content, Vector2 scrollOffset) + { + Rect buttonRect = new Rect( + (window.position.x + rect.x) - scrollOffset.x, + (window.position.y + rect.y) - scrollOffset.y, + rect.width, + rect.height); + + TooltipEditor.Show(buttonRect, content); + } + + void Update() + { + if (!window) + return; + + if (!s_ShiftOnlyTooltips) + { + if (!tooltipTimer.item1.Equals(hoveringTooltipName)) + { + tooltipTimer.item1 = hoveringTooltipName; + tooltipTimer.item2 = EditorApplication.timeSinceStartup; + } + + if (!string.IsNullOrEmpty(tooltipTimer.item1)) + { + if (EditorApplication.timeSinceStartup - tooltipTimer.item2 > tooltipTimerRefresh) + { + if (!showTooltipTimer) + { + showTooltipTimer = true; + RepaintIfFocused(); + } + } + else + { + showTooltipTimer = false; + } + } + } + + // do scroll animations + if (doAnimateScroll) + { + double scrollTimer = EditorApplication.timeSinceStartup - scrollStartTime; + m_Scroll.value = Vector2.Lerp(scrollOrigin, scrollTarget, (float)scrollTimer / scrollTotalTime); + + if (scrollTimer >= scrollTotalTime) + doAnimateScroll = false; + + RepaintIfFocused(); + } + } + + void CalculateMaxIconSize() + { + if (!window) return; + + m_IsHorizontalMenu = window.position.width > window.position.height; + + Vector2 iconSize = m_Actions[0].GetSize(m_IsHorizontalMenu); + + m_ContentWidth = (int)iconSize.x + 4; + m_ContentHeight = (int)iconSize.y + 4; + + // if not in icon mode, we have to iterate all buttons to figure out what the maximum size is + if (!isIconMode) + { + for (int i = 1; i < m_Actions.Count; i++) + { + iconSize = m_Actions[i].GetSize(m_IsHorizontalMenu); + m_ContentWidth = System.Math.Max(m_ContentWidth, (int)iconSize.x); + m_ContentHeight = System.Math.Max(m_ContentHeight, (int)iconSize.y); + } + + m_ContentWidth += 4; + m_ContentHeight += 4; + } + + window.minSize = new Vector2(m_ContentWidth + 6, m_ContentHeight + 4); + window.Repaint(); + } + + // animated scrolling vars + bool doAnimateScroll = false; + Vector2 scrollOrigin = Vector2.zero; + Vector2 scrollTarget = Vector2.zero; + double scrollStartTime = 0; + float scrollTotalTime = 0f; + const float SCROLL_PIXELS_PER_SECOND = 1250f; + + void StartScrollAnimation(float x, float y) + { + scrollOrigin = m_Scroll; + scrollTarget.x = x; + scrollTarget.y = y; + scrollStartTime = EditorApplication.timeSinceStartup; + scrollTotalTime = Vector2.Distance(scrollOrigin, scrollTarget) / SCROLL_PIXELS_PER_SECOND; + doAnimateScroll = true; + } + + int SCROLL_BTN_SIZE { get { return isFloating ? 12 : 11; } } + int windowWidth { get { return (int)Mathf.Ceil(window.position.width); } } + int windowHeight { get { return (int)Mathf.Ceil(window.position.height); } } + + bool m_ShowScrollButtons = false; + bool m_IsHorizontalMenu = false; + int m_ContentWidth = 1, m_ContentHeight = 1; + + int m_Columns; + int m_Rows; + + bool m_WantsRepaint; + + bool IsActionValid(MenuAction action) + { + return !action.hidden && (!isIconMode || action.icon != null); + } + + public void OnGUI() + { + Event evt = Event.current; + Vector2 mpos = evt.mousePosition; + + // if icon mode and no actions are found, that probably means icons failed to load. revert to text mode. + int menuActionsCount = 0; + + for (int i = 0; i < m_Actions.Count; i++) + if (IsActionValid(m_Actions[i])) + menuActionsCount++; + + if (isIconMode && menuActionsCount < 1) + { + isIconMode = false; + ProBuilderEditor.s_IsIconGui.value = isIconMode; + CalculateMaxIconSize(); + Debug.LogWarning("ProBuilder: Toolbar icons failed to load, reverting to text mode. Please ensure that the ProBuilder folder contents are unmodified. If the menu is still not visible, try closing and re-opening the Editor Window."); + return; + } + + int availableWidth = windowWidth; + int availableHeight = windowHeight; + bool isHorizontal = windowWidth > windowHeight * 2; + + if (m_IsHorizontalMenu != isHorizontal || m_Rows < 1 || m_Columns < 1) + CalculateMaxIconSize(); + + if (evt.type == EventType.Layout) + { + if (isHorizontal) + { + m_Rows = ((windowHeight - 4) / m_ContentHeight); + m_Columns = System.Math.Max(windowWidth / m_ContentWidth, (menuActionsCount / m_Rows) + (menuActionsCount % m_Rows != 0 ? 1 : 0)); + } + else + { + m_Columns = System.Math.Max((windowWidth - 4) / m_ContentWidth, 1); + m_Rows = (menuActionsCount / m_Columns) + (menuActionsCount % m_Columns != 0 ? 1 : 0); + } + } + + // happens when maximizing/unmaximizing the window + if (m_Rows < 1 || m_Columns < 1) + return; + + int contentWidth = (menuActionsCount / m_Rows) * m_ContentWidth + 4; + int contentHeight = m_Rows * m_ContentHeight + 4; + + bool showScrollButtons = isHorizontal ? contentWidth > availableWidth : contentHeight > availableHeight; + + if (showScrollButtons) + { + availableHeight -= SCROLL_BTN_SIZE * 2; + availableWidth -= SCROLL_BTN_SIZE * 2; + } + + if (isHorizontal && evt.type == EventType.ScrollWheel && evt.delta.sqrMagnitude > .001f) + { + m_Scroll.value = new Vector2(m_Scroll.value.x + evt.delta.y * 10f, m_Scroll.value.y); + ScheduleRepaint(); + } + + // the math for matching layout group width for icons is easy enough, but text + // is a lot more complex. so for horizontal text toolbars always show the horizontal + // scroll buttons. + int maxHorizontalScroll = !isIconMode ? 10000 : contentWidth - availableWidth; + int maxVerticalScroll = contentHeight - availableHeight; + + // only change before a layout event + if (m_ShowScrollButtons != showScrollButtons && evt.type == EventType.Layout) + m_ShowScrollButtons = showScrollButtons; + + if (m_ShowScrollButtons) + { + if (isHorizontal) + { + GUILayout.BeginHorizontal(); + + GUI.enabled = ((Vector2)m_Scroll).x > 0; + + if (GUILayout.Button(scrollIconLeft, UI.EditorGUIUtility.ButtonNoBackgroundSmallMarginStyle, GUILayout.ExpandHeight(true))) + StartScrollAnimation(Mathf.Max(((Vector2)m_Scroll).x - availableWidth, 0f), 0f); + + GUI.enabled = true; + } + else + { + GUI.enabled = ((Vector2)m_Scroll).y > 0; + + if (GUILayout.Button(scrollIconUp, UI.EditorGUIUtility.ButtonNoBackgroundSmallMarginStyle)) + StartScrollAnimation(0f, Mathf.Max(((Vector2)m_Scroll).y - availableHeight, 0f)); + + GUI.enabled = true; + } + } + + m_Scroll.value = GUILayout.BeginScrollView(m_Scroll.value, false, false, GUIStyle.none, GUIStyle.none, GUIStyle.none); + + bool tooltipShown = false, + hovering = false; + + Rect optionRect = new Rect(0f, 0f, 0f, 0f); + + GUILayout.BeginHorizontal(); + + // e.mousePosition != mpos at this point - @todo figure out why + bool windowContainsMouse = window == EditorWindow.mouseOverWindow + && mpos.x > 0 && mpos.x < window.position.width && + mpos.y > 0 && mpos.y < window.position.height; + + int columnCount = 0; + + for (int actionIndex = 0; actionIndex < m_ActionsLength; actionIndex++) + { + MenuAction action = m_Actions[actionIndex]; + + if (!IsActionValid(action)) + continue; + + if (isIconMode) + { + if (action.DoButton(isHorizontal, evt.alt, ref optionRect, GUILayout.MaxHeight(m_ContentHeight + 12)) && !evt.shift) + { + // test for alt click / hover + optionRect.x -= m_Scroll.value.x; + optionRect.y -= m_Scroll.value.y; + + if (windowContainsMouse && + evt.type != EventType.Layout && + optionRect.Contains(evt.mousePosition)) + { + hoveringTooltipName = action.tooltip.title + "_alt"; + tooltipTimerRefresh = .5f; + hovering = true; + + if (showTooltipTimer) + { + tooltipShown = true; + ShowTooltip(optionRect, "Alt + Click for Options ", m_Scroll); + } + } + } + } + else + { + if (m_Columns < 2) + action.DoButton(isHorizontal, evt.alt, ref optionRect); + else + action.DoButton(isHorizontal, evt.alt, ref optionRect, GUILayout.MinWidth(m_ContentWidth)); + } + + Rect buttonRect = GUILayoutUtility.GetLastRect(); + + if (windowContainsMouse && + evt.type != EventType.Layout && + !hovering && + buttonRect.Contains(evt.mousePosition)) + { + hoveringTooltipName = action.tooltip.title; + tooltipTimerRefresh = 1f; + + if (evt.shift || showTooltipTimer) + { + tooltipShown = true; + ShowTooltip(buttonRect, action.tooltip, m_Scroll); + } + + hovering = true; + } + + if (++columnCount >= m_Columns) + { + columnCount = 0; + + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + } + } + + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + GUILayout.EndScrollView(); + + if (m_ShowScrollButtons) + { + if (isHorizontal) + { + GUI.enabled = m_Scroll.value.x < maxHorizontalScroll - 2; + if (GUILayout.Button(scrollIconRight, UI.EditorGUIUtility.ButtonNoBackgroundSmallMarginStyle, GUILayout.ExpandHeight(true))) + StartScrollAnimation(Mathf.Min(m_Scroll.value.x + availableWidth + 2, maxHorizontalScroll), 0f); + GUI.enabled = true; + + GUILayout.EndHorizontal(); + } + else + { + GUI.enabled = m_Scroll.value.y < maxVerticalScroll - 2; + if (GUILayout.Button(scrollIconDown, UI.EditorGUIUtility.ButtonNoBackgroundSmallMarginStyle)) + StartScrollAnimation(0f, Mathf.Min(m_Scroll.value.y + availableHeight + 2, maxVerticalScroll)); + GUI.enabled = true; + } + } + + if ((evt.type == EventType.Repaint || evt.type == EventType.MouseMove) && !tooltipShown) + TooltipEditor.Hide(); + + if (evt.type != EventType.Layout && !hovering) + tooltipTimer.item1 = ""; + + m_WantsRepaint |= EditorWindow.mouseOverWindow == window && evt.type == EventType.MouseMove; + + if (Application.isFocused && m_WantsRepaint) + window.Repaint(); + + m_WantsRepaint = false; + } + + void ScheduleRepaint() + { + m_WantsRepaint = true; + } + + void RepaintIfFocused() + { + if(Application.isFocused) + window.Repaint(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbar.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbar.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..cb95b61b335205b03a1c3f3ad5bb9773f5c799df --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbar.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50cd975dde7f63e4780b557b46379820 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbarLoader.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbarLoader.cs new file mode 100644 index 0000000000000000000000000000000000000000..19be569cff100267640fd51785614b90c5e4b4d2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbarLoader.cs @@ -0,0 +1,173 @@ +using System; +using UnityEngine; +using System.Collections.Generic; +using UnityEngine.ProBuilder; +using System.Linq; +using System.Reflection; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Responsible for loading menu actions in to the pb_Toolbar. + /// </summary> + static class EditorToolbarLoader + { + static List<MenuAction> s_LoadedMenuActions; + + public static T GetInstance<T>() where T : MenuAction, new() + { + T instance = (T)GetActions().FirstOrDefault(x => x is T); + + if (instance == null) + { + instance = new T(); + if (s_LoadedMenuActions != null) + s_LoadedMenuActions.Add(instance); + else + s_LoadedMenuActions = new List<MenuAction>() { instance }; + } + + return instance; + } + + internal static List<MenuAction> GetActions(bool forceReload = false) + { + if (s_LoadedMenuActions != null && !forceReload) + return s_LoadedMenuActions; + + s_LoadedMenuActions = new List<MenuAction>() + { + // tools + new Actions.OpenShapeEditor(), + new Actions.NewBezierShape(), + new Actions.NewPolyShape(), + new Actions.OpenMaterialEditor(), + new Actions.OpenUVEditor(), + new Actions.OpenVertexColorEditor(), + new Actions.OpenSmoothingEditor(), + + new Actions.ToggleSelectBackFaces(), + new Actions.ToggleHandleOrientation(), + new Actions.ToggleDragSelectionMode(), + new Actions.ToggleDragRectMode(), + + // selection + new Actions.GrowSelection(), + new Actions.ShrinkSelection(), + new Actions.SelectEdgeLoop(), + new Actions.SelectEdgeRing(), + new Actions.SelectFaceLoop(), + new Actions.SelectFaceRing(), + new Actions.SelectHole(), + new Actions.SelectVertexColor(), + new Actions.SelectMaterial(), + new Actions.SelectSmoothingGroup(), + + // object + new Actions.MergeObjects(), + new Actions.MirrorObjects(), + new Actions.FlipObjectNormals(), + new Actions.SubdivideObject(), + new Actions.FreezeTransform(), + new Actions.CenterPivot(), + new Actions.ConformObjectNormals(), + new Actions.TriangulateObject(), + new Actions.GenerateUV2(), + new Actions.ProBuilderize(), + new Actions.Export(), + // new Actions.ExportFbx(), + new Actions.ExportObj(), + new Actions.ExportAsset(), + new Actions.ExportPly(), + new Actions.ExportStlAscii(), + new Actions.ExportStlBinary(), + + // All + new Actions.SetPivotToSelection(), + new Actions.OffsetElements(), + + // Faces (All) + new Actions.DeleteFaces(), + new Actions.DetachFaces(), + new Actions.DuplicateFaces(), + new Actions.ExtrudeFaces(), + + // Face + new Actions.ConformFaceNormals(), + new Actions.FlipFaceEdge(), + new Actions.FlipFaceNormals(), + new Actions.MergeFaces(), + new Actions.SubdivideFaces(), + new Actions.TriangulateFaces(), + + // Edge + new Actions.BridgeEdges(), + new Actions.BevelEdges(), + new Actions.ConnectEdges(), + new Actions.ExtrudeEdges(), + new Actions.InsertEdgeLoop(), + new Actions.SubdivideEdges(), + + // Vertex + new Actions.CollapseVertices(), + new Actions.WeldVertices(), + new Actions.ConnectVertices(), + new Actions.FillHole(), + // new Actions.CreatePolygon(), + new Actions.SplitVertices(), + + // Entity +#if ENABLE_ENTITY_TYPES + new Actions.SetEntityType_Detail(), + new Actions.SetEntityType_Mover(), + new Actions.SetEntityType_Collider(), + new Actions.SetEntityType_Trigger(), +#endif + new Actions.SetTrigger(), + new Actions.SetCollider(), + }; + + SearchForMenuAttributes(s_LoadedMenuActions); + + s_LoadedMenuActions.Sort(MenuAction.CompareActionsByGroupAndPriority); + + return s_LoadedMenuActions; + } + + static void SearchForMenuAttributes(List<MenuAction> list) + { + foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) + { + try + { + var menuActionTypes = assembly.GetTypes().Where(x => + { + if (!typeof(MenuAction).IsAssignableFrom(x) + || x.IsAbstract + || !Attribute.IsDefined(x, typeof(ProBuilderMenuActionAttribute))) + return false; + + var constructors = x.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); + + if (!constructors.Any(y => y.GetParameters().Length < 1)) + { + Log.Error("{0} type does not contain a parameterless constructor. Only parameterless constructors are invoked with creating MenuItem instances.", x.ToString()); + return false; + } + + if (constructors.Any(z => z.GetParameters().Length > 0)) + Log.Warning("{0} type contains a non-parameterless constructor. Only parameterless constructors are invoked with creating MenuItem instances.", x.ToString()); + + return true; + }); + + list.AddRange(menuActionTypes.Select(x => (MenuAction)Activator.CreateInstance(x))); + } + catch + { + // some assemblies cannot be reflected (jetbrains plugin, for example) + } + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbarLoader.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbarLoader.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..efb85a6f805f137497f3791f9ab88b74c9c47cf8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbarLoader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff8eab1edc549c8489031e8b952c1b56 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbarMenuItems.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbarMenuItems.cs new file mode 100644 index 0000000000000000000000000000000000000000..a3b73e110928049696f90c3932531b824fe9fb06 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbarMenuItems.cs @@ -0,0 +1,886 @@ +/** + * IMPORTANT + * + * This is a generated file. Any changes will be overwritten. + * See Debug/GenerateMenuItems to make modifications. + */ +#if UNITY_2019_1_OR_NEWER +#define SHORTCUT_MANAGER +#endif + +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder.Actions; +#if SHORTCUT_MANAGER +using UnityEditor.ShortcutManagement; +#endif + +namespace UnityEditor.ProBuilder +{ + static class EditorToolbarMenuItem + { + const string k_MenuPrefix = "Tools/ProBuilder/"; + const string k_ShortcutPrefix = "ProBuilder/"; + + [MenuItem(k_MenuPrefix + "Editors/New Bezier Shape", true, PreferenceKeys.menuEditor + 1)] + static bool MenuVerify_NewBezierShape() + { + var instance = EditorToolbarLoader.GetInstance<NewBezierShape>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Editors/New Bezier Shape", false, PreferenceKeys.menuEditor + 1)] + static void MenuPerform_NewBezierShape() + { + var instance = EditorToolbarLoader.GetInstance<NewBezierShape>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Editors/New Poly Shape", true, PreferenceKeys.menuEditor + 1)] + static bool MenuVerify_NewPolyShape() + { + var instance = EditorToolbarLoader.GetInstance<NewPolyShape>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Editors/New Poly Shape", false, PreferenceKeys.menuEditor + 1)] + static void MenuPerform_NewPolyShape() + { + var instance = EditorToolbarLoader.GetInstance<NewPolyShape>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Editors/Open Lightmap UV Editor", true, PreferenceKeys.menuEditor + 1)] + static bool MenuVerify_OpenLightmapUVEditor() + { + var instance = EditorToolbarLoader.GetInstance<OpenLightmapUVEditor>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Editors/Open Lightmap UV Editor", false, PreferenceKeys.menuEditor + 1)] + static void MenuPerform_OpenLightmapUVEditor() + { + var instance = EditorToolbarLoader.GetInstance<OpenLightmapUVEditor>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Editors/Open Material Editor", true, PreferenceKeys.menuEditor + 1)] + static bool MenuVerify_OpenMaterialEditor() + { + var instance = EditorToolbarLoader.GetInstance<OpenMaterialEditor>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Editors/Open Material Editor", false, PreferenceKeys.menuEditor + 1)] + static void MenuPerform_OpenMaterialEditor() + { + var instance = EditorToolbarLoader.GetInstance<OpenMaterialEditor>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Editors/Open Shape Editor Menu Item %#k", true, PreferenceKeys.menuEditor + 1)] + static bool MenuVerify_OpenShapeEditorMenuItem() + { + var instance = EditorToolbarLoader.GetInstance<OpenShapeEditorMenuItem>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Editors/Open Shape Editor Menu Item %#k", false, PreferenceKeys.menuEditor + 1)] + static void MenuPerform_OpenShapeEditorMenuItem() + { + var instance = EditorToolbarLoader.GetInstance<OpenShapeEditorMenuItem>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Editors/Open Smoothing Editor", true, PreferenceKeys.menuEditor + 1)] + static bool MenuVerify_OpenSmoothingEditor() + { + var instance = EditorToolbarLoader.GetInstance<OpenSmoothingEditor>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Editors/Open Smoothing Editor", false, PreferenceKeys.menuEditor + 1)] + static void MenuPerform_OpenSmoothingEditor() + { + var instance = EditorToolbarLoader.GetInstance<OpenSmoothingEditor>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Editors/Open UV Editor", true, PreferenceKeys.menuEditor + 1)] + static bool MenuVerify_OpenUVEditor() + { + var instance = EditorToolbarLoader.GetInstance<OpenUVEditor>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Editors/Open UV Editor", false, PreferenceKeys.menuEditor + 1)] + static void MenuPerform_OpenUVEditor() + { + var instance = EditorToolbarLoader.GetInstance<OpenUVEditor>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Editors/Open Vertex Color Editor", true, PreferenceKeys.menuEditor + 1)] + static bool MenuVerify_OpenVertexColorEditor() + { + var instance = EditorToolbarLoader.GetInstance<OpenVertexColorEditor>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Editors/Open Vertex Color Editor", false, PreferenceKeys.menuEditor + 1)] + static void MenuPerform_OpenVertexColorEditor() + { + var instance = EditorToolbarLoader.GetInstance<OpenVertexColorEditor>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Editors/Open Vertex Position Editor", true, PreferenceKeys.menuEditor + 1)] + static bool MenuVerify_OpenVertexPositionEditor() + { + var instance = EditorToolbarLoader.GetInstance<OpenVertexPositionEditor>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Editors/Open Vertex Position Editor", false, PreferenceKeys.menuEditor + 1)] + static void MenuPerform_OpenVertexPositionEditor() + { + var instance = EditorToolbarLoader.GetInstance<OpenVertexPositionEditor>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Export/Export Asset", true, PreferenceKeys.menuExport + 0)] + static bool MenuVerify_ExportAsset() + { + var instance = EditorToolbarLoader.GetInstance<ExportAsset>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Export/Export Asset", false, PreferenceKeys.menuExport + 0)] + static void MenuPerform_ExportAsset() + { + var instance = EditorToolbarLoader.GetInstance<ExportAsset>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Export/Export Obj", true, PreferenceKeys.menuExport + 0)] + static bool MenuVerify_ExportObj() + { + var instance = EditorToolbarLoader.GetInstance<ExportObj>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Export/Export Obj", false, PreferenceKeys.menuExport + 0)] + static void MenuPerform_ExportObj() + { + var instance = EditorToolbarLoader.GetInstance<ExportObj>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Export/Export Ply", true, PreferenceKeys.menuExport + 0)] + static bool MenuVerify_ExportPly() + { + var instance = EditorToolbarLoader.GetInstance<ExportPly>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Export/Export Ply", false, PreferenceKeys.menuExport + 0)] + static void MenuPerform_ExportPly() + { + var instance = EditorToolbarLoader.GetInstance<ExportPly>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Export/Export Stl Ascii", true, PreferenceKeys.menuExport + 0)] + static bool MenuVerify_ExportStlAscii() + { + var instance = EditorToolbarLoader.GetInstance<ExportStlAscii>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Export/Export Stl Ascii", false, PreferenceKeys.menuExport + 0)] + static void MenuPerform_ExportStlAscii() + { + var instance = EditorToolbarLoader.GetInstance<ExportStlAscii>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Export/Export Stl Binary", true, PreferenceKeys.menuExport + 0)] + static bool MenuVerify_ExportStlBinary() + { + var instance = EditorToolbarLoader.GetInstance<ExportStlBinary>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Export/Export Stl Binary", false, PreferenceKeys.menuExport + 0)] + static void MenuPerform_ExportStlBinary() + { + var instance = EditorToolbarLoader.GetInstance<ExportStlBinary>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Bevel Edges", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_BevelEdges() + { + var instance = EditorToolbarLoader.GetInstance<BevelEdges>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Bevel Edges", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_BevelEdges() + { + var instance = EditorToolbarLoader.GetInstance<BevelEdges>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Bridge Edges &b", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_BridgeEdges() + { + var instance = EditorToolbarLoader.GetInstance<BridgeEdges>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Bridge Edges &b", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_BridgeEdges() + { + var instance = EditorToolbarLoader.GetInstance<BridgeEdges>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Collapse Vertices &c", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_CollapseVertices() + { + var instance = EditorToolbarLoader.GetInstance<CollapseVertices>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Collapse Vertices &c", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_CollapseVertices() + { + var instance = EditorToolbarLoader.GetInstance<CollapseVertices>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Conform Face Normals", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_ConformFaceNormals() + { + var instance = EditorToolbarLoader.GetInstance<ConformFaceNormals>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Conform Face Normals", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_ConformFaceNormals() + { + var instance = EditorToolbarLoader.GetInstance<ConformFaceNormals>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Delete Faces [backspace]", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_DeleteFaces() + { + var instance = EditorToolbarLoader.GetInstance<DeleteFaces>(); + return instance != null && instance.enabled; + } + +#if SHORTCUT_MANAGER + [Shortcut(k_ShortcutPrefix + "Geometry/Delete Faces", typeof(UnityEditor.SceneView), (KeyCode) 8, (ShortcutModifiers) 0)] +#endif + [MenuItem(k_MenuPrefix + "Geometry/Delete Faces [backspace]", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_DeleteFaces() + { + var instance = EditorToolbarLoader.GetInstance<DeleteFaces>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Detach Faces", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_DetachFaces() + { + var instance = EditorToolbarLoader.GetInstance<DetachFaces>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Detach Faces", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_DetachFaces() + { + var instance = EditorToolbarLoader.GetInstance<DetachFaces>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Duplicate Faces", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_DuplicateFaces() + { + var instance = EditorToolbarLoader.GetInstance<DuplicateFaces>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Duplicate Faces", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_DuplicateFaces() + { + var instance = EditorToolbarLoader.GetInstance<DuplicateFaces>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Extrude %e", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_Extrude() + { + var instance = EditorToolbarLoader.GetInstance<Extrude>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Extrude %e", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_Extrude() + { + var instance = EditorToolbarLoader.GetInstance<Extrude>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Fill Hole", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_FillHole() + { + var instance = EditorToolbarLoader.GetInstance<FillHole>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Fill Hole", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_FillHole() + { + var instance = EditorToolbarLoader.GetInstance<FillHole>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Flip Face Edge", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_FlipFaceEdge() + { + var instance = EditorToolbarLoader.GetInstance<FlipFaceEdge>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Flip Face Edge", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_FlipFaceEdge() + { + var instance = EditorToolbarLoader.GetInstance<FlipFaceEdge>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Flip Face Normals &n", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_FlipFaceNormals() + { + var instance = EditorToolbarLoader.GetInstance<FlipFaceNormals>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Flip Face Normals &n", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_FlipFaceNormals() + { + var instance = EditorToolbarLoader.GetInstance<FlipFaceNormals>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Insert Edge Loop &u", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_InsertEdgeLoop() + { + var instance = EditorToolbarLoader.GetInstance<InsertEdgeLoop>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Insert Edge Loop &u", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_InsertEdgeLoop() + { + var instance = EditorToolbarLoader.GetInstance<InsertEdgeLoop>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Merge Faces", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_MergeFaces() + { + var instance = EditorToolbarLoader.GetInstance<MergeFaces>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Merge Faces", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_MergeFaces() + { + var instance = EditorToolbarLoader.GetInstance<MergeFaces>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Offset Elements", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_OffsetElements() + { + var instance = EditorToolbarLoader.GetInstance<OffsetElements>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Offset Elements", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_OffsetElements() + { + var instance = EditorToolbarLoader.GetInstance<OffsetElements>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Set Pivot To Selection %j", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_SetPivotToSelection() + { + var instance = EditorToolbarLoader.GetInstance<SetPivotToSelection>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Set Pivot To Selection %j", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_SetPivotToSelection() + { + var instance = EditorToolbarLoader.GetInstance<SetPivotToSelection>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Smart Connect &e", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_SmartConnect() + { + var instance = EditorToolbarLoader.GetInstance<SmartConnect>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Smart Connect &e", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_SmartConnect() + { + var instance = EditorToolbarLoader.GetInstance<SmartConnect>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Smart Subdivide &s", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_SmartSubdivide() + { + var instance = EditorToolbarLoader.GetInstance<SmartSubdivide>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Smart Subdivide &s", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_SmartSubdivide() + { + var instance = EditorToolbarLoader.GetInstance<SmartSubdivide>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Split Vertices &x", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_SplitVertices() + { + var instance = EditorToolbarLoader.GetInstance<SplitVertices>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Split Vertices &x", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_SplitVertices() + { + var instance = EditorToolbarLoader.GetInstance<SplitVertices>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Triangulate Faces", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_TriangulateFaces() + { + var instance = EditorToolbarLoader.GetInstance<TriangulateFaces>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Triangulate Faces", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_TriangulateFaces() + { + var instance = EditorToolbarLoader.GetInstance<TriangulateFaces>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Geometry/Weld Vertices &v", true, PreferenceKeys.menuGeometry + 3)] + static bool MenuVerify_WeldVertices() + { + var instance = EditorToolbarLoader.GetInstance<WeldVertices>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Geometry/Weld Vertices &v", false, PreferenceKeys.menuGeometry + 3)] + static void MenuPerform_WeldVertices() + { + var instance = EditorToolbarLoader.GetInstance<WeldVertices>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Interaction/Toggle Drag Rect Mode", true, PreferenceKeys.menuSelection + 1)] + static bool MenuVerify_ToggleDragRectMode() + { + var instance = EditorToolbarLoader.GetInstance<ToggleDragRectMode>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Interaction/Toggle Drag Rect Mode", false, PreferenceKeys.menuSelection + 1)] + static void MenuPerform_ToggleDragRectMode() + { + var instance = EditorToolbarLoader.GetInstance<ToggleDragRectMode>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Interaction/Toggle Drag Selection Mode", true, PreferenceKeys.menuSelection + 1)] + static bool MenuVerify_ToggleDragSelectionMode() + { + var instance = EditorToolbarLoader.GetInstance<ToggleDragSelectionMode>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Interaction/Toggle Drag Selection Mode", false, PreferenceKeys.menuSelection + 1)] + static void MenuPerform_ToggleDragSelectionMode() + { + var instance = EditorToolbarLoader.GetInstance<ToggleDragSelectionMode>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Interaction/Toggle Handle Orientation [p]", true, PreferenceKeys.menuSelection + 1)] + static bool MenuVerify_ToggleHandleOrientation() + { + var instance = EditorToolbarLoader.GetInstance<ToggleHandleOrientation>(); + return instance != null && instance.enabled; + } + +#if SHORTCUT_MANAGER + [Shortcut(k_ShortcutPrefix + "Interaction/Toggle Handle Orientation", typeof(UnityEditor.SceneView), (KeyCode) 112, (ShortcutModifiers) 0)] +#endif + [MenuItem(k_MenuPrefix + "Interaction/Toggle Handle Orientation [p]", false, PreferenceKeys.menuSelection + 1)] + static void MenuPerform_ToggleHandleOrientation() + { + var instance = EditorToolbarLoader.GetInstance<ToggleHandleOrientation>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Interaction/Toggle Select Back Faces", true, PreferenceKeys.menuSelection + 1)] + static bool MenuVerify_ToggleSelectBackFaces() + { + var instance = EditorToolbarLoader.GetInstance<ToggleSelectBackFaces>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Interaction/Toggle Select Back Faces", false, PreferenceKeys.menuSelection + 1)] + static void MenuPerform_ToggleSelectBackFaces() + { + var instance = EditorToolbarLoader.GetInstance<ToggleSelectBackFaces>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Object/Center Pivot", true, PreferenceKeys.menuGeometry + 2)] + static bool MenuVerify_CenterPivot() + { + var instance = EditorToolbarLoader.GetInstance<CenterPivot>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Object/Center Pivot", false, PreferenceKeys.menuGeometry + 2)] + static void MenuPerform_CenterPivot() + { + var instance = EditorToolbarLoader.GetInstance<CenterPivot>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Object/Conform Object Normals", true, PreferenceKeys.menuGeometry + 2)] + static bool MenuVerify_ConformObjectNormals() + { + var instance = EditorToolbarLoader.GetInstance<ConformObjectNormals>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Object/Conform Object Normals", false, PreferenceKeys.menuGeometry + 2)] + static void MenuPerform_ConformObjectNormals() + { + var instance = EditorToolbarLoader.GetInstance<ConformObjectNormals>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Object/Flip Object Normals", true, PreferenceKeys.menuGeometry + 2)] + static bool MenuVerify_FlipObjectNormals() + { + var instance = EditorToolbarLoader.GetInstance<FlipObjectNormals>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Object/Flip Object Normals", false, PreferenceKeys.menuGeometry + 2)] + static void MenuPerform_FlipObjectNormals() + { + var instance = EditorToolbarLoader.GetInstance<FlipObjectNormals>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Object/Freeze Transform", true, PreferenceKeys.menuGeometry + 2)] + static bool MenuVerify_FreezeTransform() + { + var instance = EditorToolbarLoader.GetInstance<FreezeTransform>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Object/Freeze Transform", false, PreferenceKeys.menuGeometry + 2)] + static void MenuPerform_FreezeTransform() + { + var instance = EditorToolbarLoader.GetInstance<FreezeTransform>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Object/Merge Objects", true, PreferenceKeys.menuGeometry + 2)] + static bool MenuVerify_MergeObjects() + { + var instance = EditorToolbarLoader.GetInstance<MergeObjects>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Object/Merge Objects", false, PreferenceKeys.menuGeometry + 2)] + static void MenuPerform_MergeObjects() + { + var instance = EditorToolbarLoader.GetInstance<MergeObjects>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Object/Mirror Objects", true, PreferenceKeys.menuGeometry + 2)] + static bool MenuVerify_MirrorObjects() + { + var instance = EditorToolbarLoader.GetInstance<MirrorObjects>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Object/Mirror Objects", false, PreferenceKeys.menuGeometry + 2)] + static void MenuPerform_MirrorObjects() + { + var instance = EditorToolbarLoader.GetInstance<MirrorObjects>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Object/Pro Builderize", true, PreferenceKeys.menuGeometry + 2)] + static bool MenuVerify_ProBuilderize() + { + var instance = EditorToolbarLoader.GetInstance<ProBuilderize>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Object/Pro Builderize", false, PreferenceKeys.menuGeometry + 2)] + static void MenuPerform_ProBuilderize() + { + var instance = EditorToolbarLoader.GetInstance<ProBuilderize>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Object/Set Collider", true, PreferenceKeys.menuGeometry + 2)] + static bool MenuVerify_SetCollider() + { + var instance = EditorToolbarLoader.GetInstance<SetCollider>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Object/Set Collider", false, PreferenceKeys.menuGeometry + 2)] + static void MenuPerform_SetCollider() + { + var instance = EditorToolbarLoader.GetInstance<SetCollider>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Object/Set Trigger", true, PreferenceKeys.menuGeometry + 2)] + static bool MenuVerify_SetTrigger() + { + var instance = EditorToolbarLoader.GetInstance<SetTrigger>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Object/Set Trigger", false, PreferenceKeys.menuGeometry + 2)] + static void MenuPerform_SetTrigger() + { + var instance = EditorToolbarLoader.GetInstance<SetTrigger>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Object/Subdivide Object", true, PreferenceKeys.menuGeometry + 2)] + static bool MenuVerify_SubdivideObject() + { + var instance = EditorToolbarLoader.GetInstance<SubdivideObject>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Object/Subdivide Object", false, PreferenceKeys.menuGeometry + 2)] + static void MenuPerform_SubdivideObject() + { + var instance = EditorToolbarLoader.GetInstance<SubdivideObject>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Object/Triangulate Object", true, PreferenceKeys.menuGeometry + 2)] + static bool MenuVerify_TriangulateObject() + { + var instance = EditorToolbarLoader.GetInstance<TriangulateObject>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Object/Triangulate Object", false, PreferenceKeys.menuGeometry + 2)] + static void MenuPerform_TriangulateObject() + { + var instance = EditorToolbarLoader.GetInstance<TriangulateObject>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Selection/Grow Selection &g", true, PreferenceKeys.menuSelection + 0)] + static bool MenuVerify_GrowSelection() + { + var instance = EditorToolbarLoader.GetInstance<GrowSelection>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Selection/Grow Selection &g", false, PreferenceKeys.menuSelection + 0)] + static void MenuPerform_GrowSelection() + { + var instance = EditorToolbarLoader.GetInstance<GrowSelection>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Selection/Select Hole", true, PreferenceKeys.menuSelection + 0)] + static bool MenuVerify_SelectHole() + { + var instance = EditorToolbarLoader.GetInstance<SelectHole>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Selection/Select Hole", false, PreferenceKeys.menuSelection + 0)] + static void MenuPerform_SelectHole() + { + var instance = EditorToolbarLoader.GetInstance<SelectHole>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Selection/Select Loop &l", true, PreferenceKeys.menuSelection + 0)] + static bool MenuVerify_SelectLoop() + { + var instance = EditorToolbarLoader.GetInstance<SelectLoop>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Selection/Select Loop &l", false, PreferenceKeys.menuSelection + 0)] + static void MenuPerform_SelectLoop() + { + var instance = EditorToolbarLoader.GetInstance<SelectLoop>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Selection/Select Material", true, PreferenceKeys.menuSelection + 0)] + static bool MenuVerify_SelectMaterial() + { + var instance = EditorToolbarLoader.GetInstance<SelectMaterial>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Selection/Select Material", false, PreferenceKeys.menuSelection + 0)] + static void MenuPerform_SelectMaterial() + { + var instance = EditorToolbarLoader.GetInstance<SelectMaterial>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Selection/Select Ring &r", true, PreferenceKeys.menuSelection + 0)] + static bool MenuVerify_SelectRing() + { + var instance = EditorToolbarLoader.GetInstance<SelectRing>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Selection/Select Ring &r", false, PreferenceKeys.menuSelection + 0)] + static void MenuPerform_SelectRing() + { + var instance = EditorToolbarLoader.GetInstance<SelectRing>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Selection/Select Smoothing Group", true, PreferenceKeys.menuSelection + 0)] + static bool MenuVerify_SelectSmoothingGroup() + { + var instance = EditorToolbarLoader.GetInstance<SelectSmoothingGroup>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Selection/Select Smoothing Group", false, PreferenceKeys.menuSelection + 0)] + static void MenuPerform_SelectSmoothingGroup() + { + var instance = EditorToolbarLoader.GetInstance<SelectSmoothingGroup>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Selection/Select Vertex Color", true, PreferenceKeys.menuSelection + 0)] + static bool MenuVerify_SelectVertexColor() + { + var instance = EditorToolbarLoader.GetInstance<SelectVertexColor>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Selection/Select Vertex Color", false, PreferenceKeys.menuSelection + 0)] + static void MenuPerform_SelectVertexColor() + { + var instance = EditorToolbarLoader.GetInstance<SelectVertexColor>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + [MenuItem(k_MenuPrefix + "Selection/Shrink Selection &#g", true, PreferenceKeys.menuSelection + 0)] + static bool MenuVerify_ShrinkSelection() + { + var instance = EditorToolbarLoader.GetInstance<ShrinkSelection>(); + return instance != null && instance.enabled; + } + + [MenuItem(k_MenuPrefix + "Selection/Shrink Selection &#g", false, PreferenceKeys.menuSelection + 0)] + static void MenuPerform_ShrinkSelection() + { + var instance = EditorToolbarLoader.GetInstance<ShrinkSelection>(); + if(instance != null && instance.enabled) + EditorUtility.ShowNotification(instance.DoAction().notification); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbarMenuItems.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbarMenuItems.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e756ac55c806bd8930647fb9a2895055f9fdf4d3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorToolbarMenuItems.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e82491da45686848bf17df39975ff3c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..4bba28f514de3e03f09796411dbd6f8cc1547402 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorUtility.cs @@ -0,0 +1,616 @@ +#pragma warning disable 0168 + +using UnityEngine; +using System.Linq; +using System; +using UnityEditor.Experimental.SceneManagement; +using UnityEngine.ProBuilder; +using UnityEngine.Rendering; +using UObject = UnityEngine.Object; +using UnityEditor.SettingsManagement; +using UnityEditorInternal; +using UnityEngine.SceneManagement; +#if !UNITY_2019_1_OR_NEWER +using System.Reflection; +#endif + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Utilities for working in Unity editor. + /// </summary> + public static class EditorUtility + { + const float k_DefaultNotificationDuration = 1f; + static float s_NotificationTimer; + static EditorWindow s_NotificationWindow; + static bool s_IsNotificationDisplayed; + + [UserSetting("General", "Show Action Notifications", "Enable or disable notification popups when performing actions.")] + static Pref<bool> s_ShowNotifications = new Pref<bool>("editor.showEditorNotifications", false); + + [UserSetting("Mesh Settings", "Static Editor Flags", "Default static flags to apply to new shapes.")] + static Pref<StaticEditorFlags> s_StaticEditorFlags = new Pref<StaticEditorFlags>("mesh.defaultStaticEditorFlags", 0); + + [UserSetting("Mesh Settings", "Mesh Collider is Convex", "If a MeshCollider is set as the default collider component, this sets the convex setting.")] + static Pref<bool> s_MeshColliderIsConvex = new Pref<bool>("mesh.meshColliderIsConvex", false); + + [UserSetting("Mesh Settings", "Pivot Location", "Determines the placement of new shape's pivot.")] + static Pref<PivotLocation> s_NewShapesPivotAtVertex = new Pref<PivotLocation>("mesh.newShapePivotLocation", PivotLocation.FirstVertex); + + [UserSetting("Mesh Settings", "Snap New Shape To Grid", "When enabled, new shapes will snap to the closest point on grid.")] + static Pref<bool> s_SnapNewShapesToGrid = new Pref<bool>("mesh.newShapesSnapToGrid", true); + + [UserSetting("Mesh Settings", "Shadow Casting Mode", "The default ShadowCastingMode to apply to MeshRenderer components.")] + static Pref<ShadowCastingMode> s_ShadowCastingMode = new Pref<ShadowCastingMode>("mesh.shadowCastingMode", ShadowCastingMode.On); + + [UserSetting("Mesh Settings", "Collider Type", "What type of Collider to apply to new Shapes.")] + static Pref<ColliderType> s_ColliderType = new Pref<ColliderType>("mesh.newShapeColliderType", ColliderType.MeshCollider); + + internal static PivotLocation newShapePivotLocation + { + get { return s_NewShapesPivotAtVertex; } + } + + /// <value> + /// Subscribe to this delegate to be notified when a new mesh has been created and initialized through ProBuilder. + /// </value> + /// <remarks> + /// This is only called when an object is initialized in editor, and created by ProBuilder menu items. + /// </remarks> + public static event Action<ProBuilderMesh> meshCreated = null; + + /// <summary> + /// Set the selected render state for an object. In Unity 5.4 and lower, this just toggles wireframe on or off. + /// </summary> + /// <param name="renderer"></param> + /// <param name="state"></param> + internal static void SetSelectionRenderState(Renderer renderer, EditorSelectedRenderState state) + { + UnityEditor.EditorUtility.SetSelectedRenderState(renderer, state); + } + + internal static void ShowNotification(ActionResult result) + { + ShowNotification(result.notification); + } + + /// <summary> + /// Show a timed (1 second) notification in the SceneView window. + /// </summary> + /// <param name="message">The text to display in the notification.</param> + /// <seealso cref="RemoveNotification"/> + internal static void ShowNotification(string message) + { + SceneView scnview = SceneView.lastActiveSceneView; + if (scnview == null) + scnview = EditorWindow.GetWindow<SceneView>(); + + ShowNotification(scnview, message); + } + + /// <inheritdoc cref="ShowNotification(string)"/> + /// <param name="window">The EditorWindow to display this notification in.</param> + /// <param name="message">The text to display in the notification.</param> + /// <exception cref="ArgumentNullException">Window is null.</exception> + internal static void ShowNotification(EditorWindow window, string message) + { + if (!s_ShowNotifications) + return; + + if (window == null) + throw new ArgumentNullException("window"); + + window.ShowNotification(new GUIContent(message, "")); + window.Repaint(); + + if (EditorApplication.update != NotifUpdate) + EditorApplication.update += NotifUpdate; + + s_NotificationTimer = Time.realtimeSinceStartup + k_DefaultNotificationDuration; + s_NotificationWindow = window; + s_IsNotificationDisplayed = true; + } + + /// <summary> + /// Remove any currently displaying notifications from an <see cref="UnityEditor.EditorWindow"/>. + /// </summary> + /// <param name="window">The EditorWindow from which all currently displayed notifications will be removed.</param> + /// <exception cref="ArgumentNullException">Thrown if window is null.</exception> + internal static void RemoveNotification(EditorWindow window) + { + if (window == null) + throw new ArgumentNullException("window"); + + EditorApplication.update -= NotifUpdate; + + window.RemoveNotification(); + window.Repaint(); + } + + static void NotifUpdate() + { + if (s_IsNotificationDisplayed && Time.realtimeSinceStartup > s_NotificationTimer) + { + s_IsNotificationDisplayed = false; + RemoveNotification(s_NotificationWindow); + } + } + + internal static bool IsPrefab(ProBuilderMesh mesh) + { +#if UNITY_2018_3_OR_NEWER + return PrefabUtility.GetPrefabAssetType(mesh.gameObject) != PrefabAssetType.NotAPrefab; +#else + PrefabType type = PrefabUtility.GetPrefabType(mesh.gameObject); + return type == PrefabType.Prefab || type == PrefabType.PrefabInstance || type == PrefabType.DisconnectedPrefabInstance; +#endif + } + + /// <summary> + /// Returns true if this object is a prefab instanced in the scene. + /// </summary> + /// <param name="go"></param> + /// <returns></returns> + internal static bool IsPrefabInstance(GameObject go) + { +#if UNITY_2018_3_OR_NEWER + var status = PrefabUtility.GetPrefabInstanceStatus(go); + return status == PrefabInstanceStatus.Connected || status == PrefabInstanceStatus.Disconnected; +#else + return PrefabUtility.GetPrefabType(go) == PrefabType.PrefabInstance; +#endif + } + + /** + * Returns true if this object is a prefab in the Project view. + */ + internal static bool IsPrefabAsset(GameObject go) + { +#if UNITY_2018_3_OR_NEWER + return PrefabUtility.IsPartOfPrefabAsset(go); +#else + return PrefabUtility.GetPrefabType(go) == PrefabType.Prefab; +#endif + } + + /** + * Returns true if Asset Store window is open, false otherwise. + */ + internal static bool AssetStoreWindowIsOpen() + { + return Resources.FindObjectsOfTypeAll<EditorWindow>().Any(x => x.GetType().ToString().Contains("AssetStoreWindow")); + } + + /// <summary> + /// Ensure that this object has a valid mesh reference, and the geometry is current. If it is not valid, this function will attempt to repair the sync state. + /// </summary> + /// <param name="mesh">The component to test.</param> + /// <seealso cref="ProBuilderMesh.meshSyncState"/> + public static void SynchronizeWithMeshFilter(ProBuilderMesh mesh) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + mesh.EnsureMeshFilterIsAssigned(); + mesh.EnsureMeshColliderIsAssigned(); + MeshSyncState state = mesh.meshSyncState; + bool meshesAreAssets = Experimental.meshesAreAssets; + + if (state != MeshSyncState.InSync) + { + Mesh oldMesh; + + if (state == MeshSyncState.Null) + { + mesh.Rebuild(); + mesh.Optimize(); + } + else + // If the mesh ID doesn't match the gameObject Id, it could mean two things: + // 1. The object was just duplicated, and then made unique + // 2. The scene was reloaded, and gameObject ids were recalculated. + // If (2) we need to clean up the old mesh. If the (1) the old mesh needs to *not* be destroyed. + if ((oldMesh = mesh.mesh) != null) + { + int meshNo = -1; + int.TryParse(oldMesh.name.Replace("pb_Mesh", ""), out meshNo); + + UnityEngine.Object dup = UnityEditor.EditorUtility.InstanceIDToObject(meshNo); + GameObject go = dup as GameObject; + + // Scene reload, just rename the mesh to the correct ID + if (go == null) + { + mesh.mesh.name = "pb_Mesh" + mesh.id; + } + else + { + // Mesh was duplicated, need to instantiate a unique mesh asset + if (!meshesAreAssets || !(IsPrefabAsset(mesh.gameObject) || IsPrefabInstance(mesh.gameObject))) + { + // deep copy arrays & ToMesh/Refresh + mesh.MakeUnique(); + mesh.Optimize(); + } + } + } + else + { + // old mesh didn't exist, so this is probably a prefab being instanced + if (IsPrefabAsset(mesh.gameObject)) + mesh.mesh.hideFlags = (HideFlags)(1 | 2 | 4 | 8); + + mesh.Optimize(); + } + } + else + { + if (meshesAreAssets) + EditorMeshUtility.TryCacheMesh(mesh); + } + } + + /// <summary> + /// Returns true if GameObject contains flags. + /// </summary> + /// <param name="go"></param> + /// <param name="flags"></param> + /// <returns></returns> + internal static bool HasStaticFlag(this GameObject go, StaticEditorFlags flags) + { + return (GameObjectUtility.GetStaticEditorFlags(go) & flags) == flags; + } + + /// <summary> + /// Move a GameObject to the active scene, where active scene may be a prefab stage. + /// </summary> + /// <param name="gameObject"></param> + internal static void MoveToActiveScene(GameObject gameObject) + { + var prefabStage = PrefabStageUtility.GetCurrentPrefabStage(); + var activeScene = SceneManager.GetActiveScene(); + + if (prefabStage != null) + { + if (gameObject.scene != prefabStage.scene) + { + SceneManager.MoveGameObjectToScene(gameObject, prefabStage.scene); + + // Prefabs cannot have multiple roots + gameObject.transform.SetParent(prefabStage.prefabContentsRoot.transform, true); + } + } + else if(gameObject.scene != activeScene) + { + gameObject.transform.SetParent(null); + SceneManager.MoveGameObjectToScene(gameObject, activeScene); + } + } + + /// <summary> + /// Initialize this object with the various editor-only parameters, and invoke the object creation callback. + /// </summary> + /// <param name="pb"></param> + internal static void InitObject(ProBuilderMesh pb) + { + MoveToActiveScene(pb.gameObject); + GameObjectUtility.EnsureUniqueNameForSibling(pb.gameObject); + ScreenCenter(pb.gameObject); + SetPivotLocationAndSnap(pb); +#if UNITY_2019_1_OR_NEWER + ComponentUtility.MoveComponentRelativeToComponent(pb, pb.transform, false); +#endif + + pb.renderer.shadowCastingMode = s_ShadowCastingMode; + pb.renderer.sharedMaterial = EditorMaterialUtility.GetUserMaterial(); + + GameObjectUtility.SetStaticEditorFlags(pb.gameObject, s_StaticEditorFlags); + + switch (s_ColliderType.value) + { + case ColliderType.BoxCollider: + if(!pb.gameObject.TryGetComponent<BoxCollider>(out _)) + Undo.AddComponent(pb.gameObject, typeof(BoxCollider)); + break; + + case ColliderType.MeshCollider: + MeshCollider collider; + if (!pb.gameObject.TryGetComponent<MeshCollider>(out collider)) + collider = Undo.AddComponent<MeshCollider>(pb.gameObject); + // This little dance is required to prevent the Prefab system from detecting an overridden property + // before ProBuilderMesh.RefreshCollisions has a chance to mark the MeshCollider.sharedMesh property + // as driven. "AddComponent<MeshCollider>" constructs the MeshCollider and simultaneously assigns + // the "m_Mesh" property, marking the property dirty. So we undo that change, here then assign the + // mesh through our own method. + collider.sharedMesh = null; + collider.convex = s_MeshColliderIsConvex; + pb.Refresh(RefreshMask.Collisions); + break; + } + + pb.unwrapParameters = new UnwrapParameters(Lightmapping.s_UnwrapParameters); + + pb.Optimize(); + + if (meshCreated != null) + meshCreated(pb); + } + + internal static void SetPivotLocationAndSnap(ProBuilderMesh mesh) + { + if (ProGridsInterface.SnapEnabled()) + mesh.transform.position = ProBuilderSnapping.SnapValue(mesh.transform.position, ProGridsInterface.SnapValue()); + else if (s_SnapNewShapesToGrid) + mesh.transform.position = ProBuilderSnapping.SnapValue(mesh.transform.position, new Vector3( + EditorPrefs.GetFloat("MoveSnapX"), + EditorPrefs.GetFloat("MoveSnapY"), + EditorPrefs.GetFloat("MoveSnapZ"))); + + mesh.Optimize(); + } + + /** + * Puts the selected gameObject at the pivot point of the SceneView camera. + */ + internal static void ScreenCenter(GameObject _gameObject) + { + if (_gameObject == null) + return; + + // If in the unity editor, attempt to center the object the sceneview or main camera, in that order + _gameObject.transform.position = ScenePivot(); + + Selection.activeObject = _gameObject; + } + + /** + * Gets the current SceneView's camera's pivot point. + */ + internal static Vector3 ScenePivot() + { + return GetSceneView().pivot; + } + + /** + * Returns the last active SceneView window, or creates a new one if no last SceneView is found. + */ + internal static SceneView GetSceneView() + { + return SceneView.lastActiveSceneView == null ? EditorWindow.GetWindow<SceneView>() : SceneView.lastActiveSceneView; + } + +#if !UNITY_2019_1_OR_NEWER + const BindingFlags k_BindingFlagsAll = BindingFlags.NonPublic + | BindingFlags.Public + | BindingFlags.Instance + | BindingFlags.Static; + + static SceneView.OnSceneFunc onPreSceneGuiDelegate + { + get + { + var fi = typeof(SceneView).GetField("onPreSceneGUIDelegate", k_BindingFlagsAll); + return fi != null ? fi.GetValue(null) as SceneView.OnSceneFunc : null; + } + + set + { + var fi = typeof(SceneView).GetField("onPreSceneGUIDelegate", k_BindingFlagsAll); + + if (fi != null) + fi.SetValue(null, value); + } + } + + internal static void RegisterOnPreSceneGUIDelegate(SceneView.OnSceneFunc func) + { + var del = onPreSceneGuiDelegate; + + if (del == null) + onPreSceneGuiDelegate = func; + else + del += func; + } + + internal static void UnregisterOnPreSceneGUIDelegate(SceneView.OnSceneFunc func) + { + var del = onPreSceneGuiDelegate; + + if (del != null) + del -= func; + } +#endif + + internal static bool IsUnix() + { + System.PlatformID platform = System.Environment.OSVersion.Platform; + return platform == System.PlatformID.MacOSX || + platform == System.PlatformID.Unix || + (int)platform == 128; + } + + /** + * CreateCachedEditor didn't exist until 5.0, so recreate it's contents if necessary or pass it on. + */ + internal static void CreateCachedEditor<T>(UnityEngine.Object[] targetObjects, ref UnityEditor.Editor previousEditor) where T : UnityEditor.Editor + { + #if UNITY_4_7 + if (previousEditor != null && pbUtil.IsEqual(previousEditor.targets, targetObjects)) + return; + + if (previousEditor != null) + UnityEngine.Object.DestroyImmediate(previousEditor); + + previousEditor = Editor.CreateEditor(targetObjects, typeof(T)); + #else + UnityEditor.Editor.CreateCachedEditor(targetObjects, typeof(T), ref previousEditor); + #endif + } + + /// <summary> + /// Is this mode one of the mesh element modes (vertex, edge, face, texture). + /// </summary> + /// <param name="mode"></param> + /// <returns></returns> + internal static bool IsMeshElementMode(this SelectMode mode) + { + return mode.ContainsFlag( + SelectMode.Vertex + | SelectMode.Edge + | SelectMode.Face + | SelectMode.TextureEdge + | SelectMode.TextureFace + | SelectMode.TextureVertex + ); + } + + internal static bool IsTextureMode(this SelectMode mode) + { + return mode.ContainsFlag( + SelectMode.TextureEdge + | SelectMode.TextureFace + | SelectMode.TextureVertex + ); + } + + internal static bool IsPositionMode(this SelectMode mode) + { + return mode.ContainsFlag( + SelectMode.TextureEdge + | SelectMode.TextureFace + | SelectMode.TextureVertex + ); + } + + internal static SelectMode GetPositionMode(this SelectMode mode) + { + if (mode.ContainsFlag(SelectMode.TextureFace)) + mode = (mode & ~SelectMode.TextureFace) | SelectMode.Face; + + if (mode.ContainsFlag(SelectMode.TextureEdge)) + mode = (mode & ~SelectMode.TextureEdge) | SelectMode.Edge; + + if (mode.ContainsFlag(SelectMode.TextureVertex)) + mode = (mode & ~SelectMode.TextureVertex) | SelectMode.Vertex; + + return mode; + } + + internal static SelectMode GetTextureMode(this SelectMode mode) + { + if (mode.ContainsFlag(SelectMode.Face)) + mode = (mode & ~SelectMode.Face) | SelectMode.TextureFace; + + if (mode.ContainsFlag(SelectMode.Edge)) + mode = (mode & ~SelectMode.Edge) | SelectMode.TextureEdge; + + if (mode.ContainsFlag(SelectMode.Vertex)) + mode = (mode & ~SelectMode.Vertex) | SelectMode.TextureVertex; + + return mode; + } + + /// <summary> + /// Test if SelectMode contains any of the value bits. + /// </summary> + /// <remarks> + /// HasFlag doesn't exist in .NET 3.5 + /// </remarks> + /// <param name="target"></param> + /// <param name="value"></param> + /// <returns></returns> + internal static bool ContainsFlag(this SelectMode target, SelectMode value) + { + return (target & value) != SelectMode.None; + } + internal static SelectMode GetSelectMode(EditLevel edit, ComponentMode component) + { + switch (edit) + { + case EditLevel.Top: + return SelectMode.Object; + + case EditLevel.Geometry: + { + switch (component) + { + case ComponentMode.Vertex: + return SelectMode.Vertex; + case ComponentMode.Edge: + return SelectMode.Edge; + default: + return SelectMode.Face; + } + } + + case EditLevel.Texture: + return SelectMode.TextureFace; + + default: + return SelectMode.None; + } + } + + internal static EditLevel GetEditLevel(SelectMode mode) + { + switch (mode) + { + case SelectMode.Object: + return EditLevel.Top; + case SelectMode.TextureFace: + return EditLevel.Texture; + case SelectMode.None: + return EditLevel.Plugin; + default: + return EditLevel.Geometry; + } + } + + internal static ComponentMode GetComponentMode(SelectMode mode) + { + switch (mode) + { + case SelectMode.Vertex: + return ComponentMode.Vertex; + case SelectMode.Edge: + return ComponentMode.Edge; + default: + return ComponentMode.Face; + } + } + + internal static bool IsDeveloperMode() + { + return EditorPrefs.GetBool("DeveloperMode", false); + } + + public static void SetGizmoIconEnabled(Type script, bool enabled) + { +#if UNITY_2019_1_OR_NEWER + var annotations = AnnotationUtility.GetAnnotations(); + var annotation = annotations.FirstOrDefault(x => x.scriptClass.Contains(script.Name)); + AnnotationUtility.SetIconEnabled(annotation.classID, annotation.scriptClass, enabled ? 1 : 0); +#else + Type annotationUtility = typeof(Editor).Assembly.GetType("UnityEditor.AnnotationUtility"); + + //Case 1294866 : Seems that getting the annotation array remove the warning + //Might be initializing something that is missing otherwise + MethodInfo getAnnotations = annotationUtility.GetMethod("GetAnnotations", + BindingFlags.Static | BindingFlags.NonPublic, + null, + new Type[] { }, + null); + var annotations = getAnnotations.Invoke(null, new object[] {}); + + MethodInfo setGizmoIconEnabled = annotationUtility.GetMethod("SetIconEnabled", + BindingFlags.Static | BindingFlags.NonPublic, + null, + new Type[] { typeof(int), typeof(string), typeof(int) }, + null); + var name = script.Name; + setGizmoIconEnabled.Invoke(null, new object[] { 114, name, enabled ? 1 : 0}); +#endif + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4d17a827d9b2cc27861c28ef4807598e1a928fbb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EditorUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a17a8a25b5ef051479efd66b56f58823 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..9fa98f7fe9ff3b1da659784b076532e9e088af1e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityEditor.cs @@ -0,0 +1,154 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; +using System.Linq; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + [CustomEditor(typeof(Entity))] + [CanEditMultipleObjects] + sealed class EntityEditor : Editor + { + Entity ent; + ProBuilderMesh pb; + + public enum ColType + { + MeshCollider, + BoxCollider, + SphereCollider + } + + public void OnEnable() + { + ent = (Entity)target; + + if (ent != null) + pb = (ProBuilderMesh)ent.transform.GetComponent<ProBuilderMesh>(); + } + + public override void OnInspectorGUI() + { + if (pb == null) return; + if (ent == null) return; + + EntityType et = ent.entityType; + et = (EntityType)EditorGUILayout.EnumPopup("Entity Type", et); + if (et != ent.entityType) + { + UndoUtility.RecordObjects(new Object[] {ent, ent.gameObject.GetComponent<ProBuilderMesh>() }, "Set Entity Type"); +#pragma warning disable 0618 + EntityUtility.SetEntityType(et, ent.gameObject); +#pragma warning restore 0618 + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + } + + GUILayout.Space(4); + + pb.userCollisions = EditorGUILayout.Toggle("Custom Collider", pb.userCollisions); + + // Convience + if (pb.userCollisions) + GUI.enabled = false; + + GUILayout.Label("Add Collider", EditorStyles.boldLabel); + GUILayout.BeginHorizontal(); + + if (GUILayout.Button("Mesh Collider", EditorStyles.miniButtonLeft)) + EditorApplication.delayCall += AddMeshCollider; + + if (GUILayout.Button("Box Collider", EditorStyles.miniButtonMid)) + EditorApplication.delayCall += AddBoxCollider; + + if (GUILayout.Button("Remove Collider", EditorStyles.miniButtonRight)) + EditorApplication.delayCall += RemoveColliders; + + + GUILayout.EndHorizontal(); + + GUI.enabled = true; + } + + void AddMeshCollider() + { + AddCollider(ColType.MeshCollider); + } + + void AddBoxCollider() + { + AddCollider(ColType.BoxCollider); + } + + private void AddCollider(ColType c) + { + Collider[] colliders = serializedObject.targetObjects.Where(x => x is Entity).SelectMany(x => ((Entity)x).gameObject.GetComponents<Collider>()).ToArray(); + bool isTrigger = false; + if (colliders != null) + isTrigger = colliders.Any(x => x.isTrigger); + + RemoveColliders(); + + foreach (Entity obj in serializedObject.targetObjects) + { + GameObject go = obj.gameObject; + + switch (c) + { + case ColType.MeshCollider: + { + MeshCollider col = go.AddComponent<MeshCollider>(); + + if (ent.entityType == EntityType.Trigger) + { + col.convex = true; + col.isTrigger = true; + } + else if (ent.entityType == EntityType.Collider) + { + col.convex = true; + } + else if (isTrigger) + { + col.convex = true; + col.isTrigger = true; + } + + break; + } + + case ColType.BoxCollider: + { + BoxCollider col = go.AddComponent<BoxCollider>(); + + if (ent.entityType == EntityType.Trigger || isTrigger) + col.isTrigger = true; + break; + } + + case ColType.SphereCollider: + { + SphereCollider col = go.AddComponent<SphereCollider>(); + if (ent.entityType == EntityType.Trigger || isTrigger) + col.isTrigger = true; + break; + } + + default: + break; + } + } + } + + private void RemoveColliders() + { + foreach (Entity obj in serializedObject.targetObjects) + { + foreach (Collider c in obj.gameObject.GetComponents<Collider>()) + DestroyImmediate(c); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..0188847f62a95f23721edd11e79134d405ac9369 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0c5bae1215e224409318f415e45db0a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..c4cf1225e938c7910b871346336dd7eb588b9945 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityUtility.cs @@ -0,0 +1,147 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + static class EntityUtility + { + const StaticEditorFlags StaticEditorFlags_All = +#if UNITY_2019_2_OR_NEWER + StaticEditorFlags.ContributeGI | +#else + StaticEditorFlags.LightmapStatic | +#endif + StaticEditorFlags.OccluderStatic | + StaticEditorFlags.BatchingStatic | + StaticEditorFlags.OccludeeStatic | + StaticEditorFlags.NavigationStatic | + StaticEditorFlags.OffMeshLinkGeneration | + StaticEditorFlags.ReflectionProbeStatic; + + /// <summary> + /// Sets the EntityType for the passed gameObject. + /// </summary> + /// <param name="newEntityType">The type to set.</param> + /// <param name="target">The gameObject to apply the EntityType to. Must contains pb_Object and pb_Entity components. Method does contain null checks.</param> + [Obsolete("pb_Entity is deprecated. Manage static flags manually or use Set Trigger/Set Collider actions.")] + public static void SetEntityType(EntityType newEntityType, GameObject target) + { + Entity ent = target.GetComponent<Entity>(); + + if (ent == null) + ent = target.AddComponent<Entity>(); + + ProBuilderMesh pb = target.GetComponent<ProBuilderMesh>(); + + if (!ent || !pb) + return; + + SetEditorFlags(StaticEditorFlags_All, target); + + switch (newEntityType) + { + case EntityType.Detail: + case EntityType.Occluder: + SetBrush(target); + break; + + case EntityType.Trigger: + SetTrigger(target); + break; + + case EntityType.Collider: + SetCollider(target); + break; + + case EntityType.Mover: + SetDynamic(target); + break; + } + + ent.SetEntity(newEntityType); + } + + [Obsolete("pb_Entity is deprecated. Manage static flags manually or use Set Trigger/Set Collider actions.")] + static void SetBrush(GameObject target) + { + EntityType et = target.GetComponent<Entity>().entityType; + + if (et == EntityType.Trigger || + et == EntityType.Collider) + { + ProBuilderMesh pb = target.GetComponent<ProBuilderMesh>(); + foreach (var face in pb.facesInternal) + face.material = BuiltinMaterials.defaultMaterial; + pb.ToMesh(); + pb.Refresh(); + } + } + + [Obsolete("pb_Entity is deprecated. Manage static flags manually or use Set Trigger/Set Collider actions.")] + static void SetDynamic(GameObject target) + { + EntityType et = target.GetComponent<Entity>().entityType; + + SetEditorFlags((StaticEditorFlags)0, target); + + if (et == EntityType.Trigger || + et == EntityType.Collider) + { + ProBuilderMesh pb = target.GetComponent<ProBuilderMesh>(); + foreach (var face in pb.facesInternal) + face.material = BuiltinMaterials.defaultMaterial; + + pb.ToMesh(); + pb.Refresh(); + } + } + + [Obsolete("pb_Entity is deprecated. Manage static flags manually or use Set Trigger/Set Collider actions.")] + static void SetTrigger(GameObject target) + { + ProBuilderMesh pb = target.GetComponent<ProBuilderMesh>(); + foreach (var face in pb.facesInternal) + face.material = BuiltinMaterials.triggerMaterial; + SetIsTrigger(true, target); + SetEditorFlags((StaticEditorFlags)0, target); + + pb.ToMesh(); + pb.Refresh(); + } + + [Obsolete("pb_Entity is deprecated. Manage static flags manually or use Set Trigger/Set Collider actions.")] + static void SetCollider(GameObject target) + { + ProBuilderMesh pb = target.GetComponent<ProBuilderMesh>(); + foreach (var face in pb.facesInternal) + face.material = BuiltinMaterials.colliderMaterial; + pb.ToMesh(); + pb.Refresh(); + + SetEditorFlags((StaticEditorFlags)(StaticEditorFlags.NavigationStatic | StaticEditorFlags.OffMeshLinkGeneration), + target); + } + + [Obsolete("pb_Entity is deprecated. Manage static flags manually or use Set Trigger/Set Collider actions.")] + static void SetEditorFlags(StaticEditorFlags editorFlags, GameObject target) + { + GameObjectUtility.SetStaticEditorFlags(target, editorFlags); + } + + [Obsolete("pb_Entity is deprecated. Manage static flags manually or use Set Trigger/Set Collider actions.")] + static void SetIsTrigger(bool val, GameObject target) + { + Collider[] colliders = InternalUtility.GetComponents<Collider>(target); + foreach (Collider col in colliders) + { + if (val && col is MeshCollider) + ((MeshCollider)col).convex = true; + col.isTrigger = val; + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..83813e324ccb0cb96ad5491a83be7099da173d96 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4746bcae5f2c20c4db633d37d4a2901d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityVisibility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityVisibility.cs new file mode 100644 index 0000000000000000000000000000000000000000..d1038232a8d520642b499fdfea66981fdf73d727 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityVisibility.cs @@ -0,0 +1,78 @@ +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.SceneManagement; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Responsible for managing the visibility of entity types in the scene. + /// </summary> + [InitializeOnLoad] + internal static class EntityVisibility + { + static EntityVisibility() + { +#if UNITY_2017_2_OR_NEWER + EditorApplication.playModeStateChanged += x => { OnPlayModeStateChanged(); }; +#else + EditorApplication.playmodeStateChanged += OnPlayModeStateChanged; +#endif + SceneManager.sceneLoaded += OnSceneLoaded; + } + + private static void OnSceneLoaded(Scene scene, LoadSceneMode mode) + { + if (EditorApplication.isPlaying) + { + foreach (var rootGameObject in scene.GetRootGameObjects()) + { + foreach (var entityBehaviour in rootGameObject.GetComponentsInChildren<EntityBehaviour>()) + { + if (entityBehaviour.manageVisibility) + entityBehaviour.OnSceneLoaded(scene, mode); + } + } + } + } + + /// <summary> + /// Set the visibility of an entity type in the Scene view. + /// </summary> + /// <param name="entityType"></param> + /// <param name="isVisible"></param> + public static void SetEntityVisibility(EntityType entityType, bool isVisible) + { + foreach (var entity in Object.FindObjectsOfType<Entity>()) + if (entity.entityType == entityType) + { + var mr = entity.GetComponent<MeshRenderer>(); + if (mr != null) mr.enabled = isVisible; + } + } + + /// <summary> + /// Registered to EditorApplication.onPlaymodeStateChanged + /// </summary> + private static void OnPlayModeStateChanged() + { + var isPlaying = EditorApplication.isPlaying; + var orWillPlay = EditorApplication.isPlayingOrWillChangePlaymode; + + // if these two don't match, that means it's the call prior to actually engaging + // whatever state. when entering play mode it doesn't make a difference, but on + // exiting it's the difference between a scene reload and the reloaded scene. + if (isPlaying != orWillPlay) + return; + + var isEntering = isPlaying && orWillPlay; + + foreach (var entityBehaviour in Resources.FindObjectsOfTypeAll<EntityBehaviour>()) + if (entityBehaviour.manageVisibility) + if (isEntering) + entityBehaviour.OnEnterPlayMode(); + + if (!isEntering) + return; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityVisibility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityVisibility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6a480aec074e6f2cd3f7677c8911e6e7ffcb6685 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/EntityVisibility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 171bb48d73467244c9487173c12e2c46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Experimental.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Experimental.cs new file mode 100644 index 0000000000000000000000000000000000000000..cec9d0c2c7fc681911cbe2a3a62f03b9603279e8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Experimental.cs @@ -0,0 +1,56 @@ +using UnityEditor.SettingsManagement; +using UnityEngine; + +namespace UnityEditor.ProBuilder +{ + static class Experimental + { + const string k_ExperimentalFeaturesEnabled = "PROBUILDER_EXPERIMENTAL_FEATURES"; + + [UserSetting] + static Pref<bool> s_MeshesAreAssets = new Pref<bool>("experimental.meshesAreAssets", false, SettingsScope.Project); + + internal static bool meshesAreAssets + { + get { return experimentalFeaturesEnabled && s_MeshesAreAssets; } + } + + internal static bool experimentalFeaturesEnabled + { +#if PROBUILDER_EXPERIMENTAL_FEATURES + get { return true; } +#else + get { return false; } +#endif + } + + [UserSettingBlock("Experimental")] + static void ExperimentalFeaturesSettings(string searchContext) + { + var enabled = experimentalFeaturesEnabled; + + EditorGUI.BeginChangeCheck(); + + enabled = SettingsGUILayout.SearchableToggle("Experimental Features Enabled", enabled, searchContext); + + if (EditorGUI.EndChangeCheck()) + { + if(enabled) + ScriptingSymbolManager.AddScriptingDefine(k_ExperimentalFeaturesEnabled); + else + ScriptingSymbolManager.RemoveScriptingDefine(k_ExperimentalFeaturesEnabled); + } + + if(enabled) + { + using (new SettingsGUILayout.IndentedGroup()) + { + s_MeshesAreAssets.value = SettingsGUILayout.SettingsToggle("Store Mesh as Asset", s_MeshesAreAssets, searchContext); + + if (s_MeshesAreAssets.value) + EditorGUILayout.HelpBox("Please note that this feature is untested, and may result in instabilities or lost work. Proceed with caution!", MessageType.Warning); + } + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Experimental.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Experimental.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d1de6a3b508d2f174cfadd1508d2e74d32017070 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Experimental.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d2c71b118edf0476f868fa213864aac6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/FileUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/FileUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..d70523ccd77ddba0ba133a4a9ed8c575ec526148 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/FileUtility.cs @@ -0,0 +1,298 @@ +using System; +using UnityEngine; +using UnityEditor; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEngine.ProBuilder; +using Object = UnityEngine.Object; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Helper functions for working with files and directories. + /// </summary> + static class FileUtility + { + // ProBuilder folder path. + static string s_ProBuilderFolderPath = "Packages/com.unity.probuilder/"; + static string s_ProBuilderDataPath = "Assets/ProBuilder Data/"; + + // The order is important - always search for the package manager installed version first + static readonly string[] k_PossibleInstallDirectories = new string[] + { + "Packages/com.unity.probuilder/", + "UnityPackageManager/com.unity.probuilder/", + "Assets/", + }; + + /// <summary> + /// Check that the directory contains a valid ProBuilder install. + /// </summary> + /// <param name="dir">Directory to check</param> + /// <returns></returns> + internal static bool ValidateProBuilderRoot(string dir) + { + return !string.IsNullOrEmpty(dir) && + Directory.Exists(dir + "/Editor/EditorCore") && + Directory.Exists(dir + "/Runtime/Core") && + Directory.Exists(dir + "/Runtime/MeshOperations"); + } + + /// <summary> + /// Return a relative path to the ProBuilder directory. Can be in the packages cache or Assets folder. + /// If the project is in the packman cache it is immutable. + /// </summary> + /// <returns></returns> + internal static string GetProBuilderInstallDirectory() + { + if (ValidateProBuilderRoot(s_ProBuilderFolderPath)) + return s_ProBuilderFolderPath; + + foreach (var install in k_PossibleInstallDirectories) + { + s_ProBuilderFolderPath = install; + + if (ValidateProBuilderRoot(s_ProBuilderFolderPath)) + return s_ProBuilderFolderPath; + } + + // It's not in any of the usual haunts, start digging through Assets until we find it (likely an A$ install) + s_ProBuilderFolderPath = FindAssetStoreProBuilderInstall(); + + if (Directory.Exists(s_ProBuilderFolderPath)) + return s_ProBuilderFolderPath; + + // Things are dire. ProBuilder was nowhere to be found in the Assets directory, which means either the user + // has renamed the folder, or something very spooky is going on. + // Either way, just create a new ProBuilder folder in Assets and return that so at the very least + // local preferences and the material/color palettes will still work. + Log.Warning("Creating a new ProBuilder directory... was the ProBuilder folder renamed?\nIcons & preferences may not work in this state."); + s_ProBuilderFolderPath = "Assets/ProBuilder"; + Directory.CreateDirectory(s_ProBuilderFolderPath); + + return s_ProBuilderFolderPath; + } + + /// <summary> + /// Scan the Assets directory for an install of ProBuilder. + /// </summary> + /// <returns></returns> + internal static string FindAssetStoreProBuilderInstall() + { + string dir = null; + + string[] matches = Directory.GetDirectories("Assets", "ProBuilder", SearchOption.AllDirectories); + + foreach (var match in matches) + { + dir = match.Replace("\\", "/") + "/"; + if (dir.Contains("ProBuilder") && ValidateProBuilderRoot(dir)) + break; + } + + return dir; + } + + /// <summary> + /// Get the path to the local ProBuilder/Data folder + /// </summary> + /// <returns></returns> + internal static string GetLocalDataDirectory(bool initializeIfMissing = false) + { + if (Directory.Exists(s_ProBuilderDataPath)) + return s_ProBuilderDataPath; + + string root = GetProBuilderInstallDirectory(); + + if (root.StartsWith("Assets")) + { + // Installed from Asset Store or manual package import + s_ProBuilderDataPath = root + "Data/"; + } + else + { + // Scan project for ProBuilder Data folder + // none found? create one at root + string[] matches = Directory.GetDirectories("Assets", "ProBuilder Data", SearchOption.AllDirectories); + s_ProBuilderDataPath = matches.Length > 0 ? matches[0] : "Assets/ProBuilder Data/"; + } + + if (!Directory.Exists(s_ProBuilderDataPath) && initializeIfMissing) + Directory.CreateDirectory(s_ProBuilderDataPath); + + return s_ProBuilderDataPath; + } + + internal static string[] FindAssets<T>(string pattern) where T : UnityEngine.Object + { + return AssetDatabase.FindAssets("t:" + typeof(T).ToString() + " " + pattern); + } + + internal static T[] FindAndLoadAssets<T>() where T : UnityEngine.Object + { + return AssetDatabase.FindAssets("t:" + typeof(T).ToString()) + .Select(x => AssetDatabase.LoadAssetAtPath<T>(AssetDatabase.GUIDToAssetPath(x))).ToArray(); + } + + internal static T FindAssetOfType<T>() where T : UnityEngine.Object + { + foreach (var i in AssetDatabase.FindAssets("t:" + typeof(T).ToString())) + { + T o = AssetDatabase.LoadAssetAtPath<T>(AssetDatabase.GUIDToAssetPath(i)); + if (o != null) + return o; + } + + return null; + } + + /// <summary> + /// Get the selected directory relative to project root. + /// </summary> + /// <returns></returns> + internal static string GetSelectedDirectory() + { + Object o = Selection.activeObject; + + if (o != null) + { + string path = AssetDatabase.GetAssetPath(o.GetInstanceID()); + + if (!string.IsNullOrEmpty(path)) + { + if (Directory.Exists(path)) + return GetRelativePath(Path.GetFullPath(path)); + + string res = Path.GetDirectoryName(path); + + if (!string.IsNullOrEmpty(res) && Directory.Exists(res)) + return GetRelativePath(Path.GetFullPath(res)); + } + } + + return "Assets"; + } + + /// <summary> + /// Get a file or folder path relative to the Unity project directory. + /// </summary> + /// <param name="path">File or directory path, either relative or absolute.</param> + /// <returns>A new path relative to the current project root.</returns> + public static string GetRelativePath(string path) + { + string full = Path.GetFullPath(path).Replace("\\", "/"); + string cur = Directory.GetCurrentDirectory().Replace("\\", "/"); + if (!cur.EndsWith("/")) + cur += "/"; + return full.Replace(cur, ""); + } + + /// <summary> + /// Check if a file or folder exists at path. + /// </summary> + /// <param name="path"></param> + /// <returns></returns> + public static bool Exists(string path) + { + return Directory.Exists(path) || File.Exists(path); + } + + /// <summary> + /// Load an internal asset relative to the ProBuilder directory. + /// </summary> + /// <param name="path"></param> + /// <typeparam name="T"></typeparam> + /// <returns></returns> + internal static T LoadInternalAsset<T>(string path) where T : Object + { + string full = string.Format("{0}{1}", GetProBuilderInstallDirectory(), path); + return Load<T>(full); + } + + /// <summary> + /// Fetch a default asset from path. If not found, a new one is created. + /// </summary> + /// <param name="path"></param> + /// <typeparam name="T"></typeparam> + /// <returns></returns> + internal static T LoadRequired<T>(string path) where T : ScriptableObject, IHasDefault + { + T asset = Load<T>(path); + + if (asset == null) + { + asset = ScriptableObject.CreateInstance<T>(); + + asset.SetDefaultValues(); + + UnityEditor.EditorUtility.SetDirty(asset); + + string folder = Path.GetDirectoryName(path); + + if (!Directory.Exists(folder)) + Directory.CreateDirectory(folder); + + AssetDatabase.CreateAsset(asset, path); + } + + return asset; + } + + static T Load<T>(string path) where T : Object + { + return AssetDatabase.LoadAssetAtPath<T>(path); + } + + /// <summary> + /// Write contents to a file path. + /// </summary> + /// <param name="path"></param> + /// <param name="contents"></param> + [System.Obsolete("Use WriteAllText")] + public static void WriteFile(string path, string contents) + { + WriteAllText(path, contents); + } + + /// <summary> + /// Write contents to a file path, creating a new directory if necessary. + /// </summary> + /// <param name="path"></param> + /// <param name="contents"></param> + public static void WriteAllText(string path, string contents) + { + string dir = Path.GetDirectoryName(path); + + if (string.IsNullOrEmpty(dir)) + { + Log.Error("Cannot write file to \"{0}\", invalid path.", path); + return; + } + + if (!Directory.Exists(path)) + Directory.CreateDirectory(dir); + + File.WriteAllText(path, contents); + } + + /// <summary> + /// Save an image to the specified path. + /// </summary> + /// <param name="texture"></param> + /// <param name="path"></param> + /// <returns>True on success, false if operation failed.</returns> + internal static bool SaveTexture(Texture2D texture, string path) + { + byte[] bytes = texture.EncodeToPNG(); + + if (string.IsNullOrEmpty(path)) + return false; + + System.IO.File.WriteAllBytes(path, bytes); + AssetDatabase.Refresh(); + return true; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/FileUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/FileUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..cee3f5cbce507762d75de17f73c34c316e86a113 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/FileUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b360b08870ee97249b28c408f0d1e0d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/HandleGUI.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/HandleGUI.cs new file mode 100644 index 0000000000000000000000000000000000000000..f54ec74169d7d5a4420f35a815c277a87ddbbe8a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/HandleGUI.cs @@ -0,0 +1,28 @@ +using System; +using UnityEditor; +using UnityEngine; + +namespace UnityEditor.ProBuilder +{ + sealed class HandleGUI : IDisposable + { + bool m_SrgbWrite; + + public HandleGUI() + { + Handles.BeginGUI(); +#if !UNITY_2018_2_OR_NEWER + m_SrgbWrite = GL.sRGBWrite; + GL.sRGBWrite = false; +#endif + } + + public void Dispose() + { +#if !UNITY_2018_2_OR_NEWER + GL.sRGBWrite = m_SrgbWrite; +#endif + Handles.EndGUI(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/HandleGUI.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/HandleGUI.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e9fa7789880be49d2d5efbbb29a847087d04e157 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/HandleGUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b73fbc8867750541be154ed40569dea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/HierarchyListener.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/HierarchyListener.cs new file mode 100644 index 0000000000000000000000000000000000000000..448bf9104758afc6ceef6e910b7f68f90ee7d5b4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/HierarchyListener.cs @@ -0,0 +1,77 @@ +using System.Linq; +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Static delegates listen for hierarchy changes (duplication, delete, copy/paste) and rebuild the mesh components of pb_Objects if necessary. + /// </summary> + [InitializeOnLoad] + static class HierarchyListener + { + static HierarchyListener() + { + AssemblyReloadEvents.afterAssemblyReload += OnAfterAssemblyReload; + // When a prefab is updated, this is raised. For some reason it's + // called twice? + #if UNITY_2018_1_OR_NEWER + EditorApplication.hierarchyChanged += HierarchyWindowChanged; + #else + EditorApplication.hierarchyWindowChanged += HierarchyWindowChanged; + #endif + + // prefabInstanceUpdated is not called when dragging out of Project view, + // or when creating a prefab or reverting. OnHierarchyChange captures those. + PrefabUtility.prefabInstanceUpdated += PrefabInstanceUpdated; + } + + static void OnAfterAssemblyReload() + { + // The inspector icon for ProBuilderMesh is set in the component metadata. However, this also serves as the + // scene view gizmo icon, which we do not want. To avoid drawing an icon for every mesh in the Scene View, + // we simply tell the AnnotationManager to not render the icon. This _does_ put ProBuilderMesh in the + // "Recently Changed" list, but only when it is modified the first time. + // The alternative method of setting an icon is to place it in a folder named "Editor Default Resources/Icons", + // however that requires that the resources directory be in "Assets", which we do not want to do. + EditorApplication.delayCall += () => EditorUtility.SetGizmoIconEnabled(typeof(ProBuilderMesh), false); + } + + static void PrefabInstanceUpdated(GameObject go) + { + if (EditorApplication.isPlayingOrWillChangePlaymode) + return; + + foreach (ProBuilderMesh pb in go.GetComponentsInChildren<ProBuilderMesh>()) + { + EditorUtility.SynchronizeWithMeshFilter(pb); + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + } + } + + /** + * Used to catch prefab modifications that otherwise wouldn't be registered on the usual 'Awake' verify. + * - Dragging prefabs out of Project + * - 'Revert' prefab changes + * - 'Apply' prefab changes + */ + static void HierarchyWindowChanged() + { + if (!EditorApplication.isPlaying) + { + bool meshesAreAssets = Experimental.meshesAreAssets; + + // on duplication, or copy paste, this rebuilds the mesh structures of the new objects + foreach (ProBuilderMesh pb in Selection.transforms.GetComponents<ProBuilderMesh>()) + { + if (!meshesAreAssets) + EditorUtility.SynchronizeWithMeshFilter(pb); + } + } + + ProBuilderEditor.Refresh(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/HierarchyListener.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/HierarchyListener.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d16268e5dead2d6e2cb3132dade7d2ad1733a4d1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/HierarchyListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c4897f4be94b09d4a90eb6a4d9b85c55 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IHasPreferences.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IHasPreferences.cs new file mode 100644 index 0000000000000000000000000000000000000000..fc935aca70124d66e6fe792ad3e6212547cd584d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IHasPreferences.cs @@ -0,0 +1,7 @@ +namespace UnityEditor.ProBuilder +{ + interface IHasPreferences + { + void ReloadPreferences(); + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IHasPreferences.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IHasPreferences.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..584da9afb11997067a00918b29c881f6f697cc3b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IHasPreferences.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 09802f6381a8fb2478f18a624b459ff8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IconImporter.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IconImporter.cs new file mode 100644 index 0000000000000000000000000000000000000000..23ac0999a934e24daea182cb377825cb4804165f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IconImporter.cs @@ -0,0 +1,40 @@ +using System; +using UnityEngine; +using UnityEditor; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Asset post processor for ProBuilder icons. + /// </summary> + sealed class IconImporter : AssetPostprocessor + { + /// <summary> + /// Automatically set the importer settings for ProBuilder icons. + /// </summary> + public void OnPreprocessTexture() + { + // don't try to write to upm dir + if (!assetPath.StartsWith("Assets")) + return; + + if (assetPath.IndexOf("ProBuilder/Icons", StringComparison.Ordinal) < 0 && + assetPath.IndexOf("ProBuilder/About/Images", StringComparison.Ordinal) < 0) + return; + + TextureImporter ti = (TextureImporter)assetImporter; + + ti.textureType = TextureImporterType.Default; + ti.sRGBTexture = true; + ti.textureCompression = TextureImporterCompression.Uncompressed; + ti.alphaSource = TextureImporterAlphaSource.FromInput;//.FromGrayScale; + ti.crunchedCompression = false; + ti.npotScale = TextureImporterNPOTScale.None; + ti.filterMode = FilterMode.Point; + ti.wrapMode = TextureWrapMode.Clamp; + ti.mipmapEnabled = false; + + // ti.maxTextureSize = 64; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IconImporter.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IconImporter.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3a8dc6d338458887d4576ce0a7b5da856187efbe --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IconImporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8e1eca4be91601347969177c85897f52 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IconUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IconUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..9b4fed466b4930e557b4d2a712681a9848ce3bd4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IconUtility.cs @@ -0,0 +1,62 @@ +using UnityEngine; +using System; +using System.Collections.Generic; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Describes icon styles for pro and basic skin, or default (whatever the editor is currently using). + /// </summary> + enum IconSkin + { + Default, + Light, + Pro + }; + + static class IconUtility + { + static Dictionary<string, Texture2D> s_Icons = new Dictionary<string, Texture2D>(); + static string s_IconFolderPath = "Content/Icons/"; + + /// <summary> + /// Load an icon from the ProBuilder/Icons folder. IconName must *not* include the extension or `_Light` mode suffix. + /// </summary> + /// <param name="iconName"></param> + /// <param name="skin"></param> + /// <returns></returns> + public static Texture2D GetIcon(string iconName, IconSkin skin = IconSkin.Default) + { +#if PB_DEBUG + if (iconName.EndsWith(".png")) + pb_Log.Error("GetIcon(string) called with .png suffix!"); + + if (iconName.EndsWith("_Light")) + pb_Log.Error("GetIcon(string) called with _Light suffix!"); +#endif + + bool isDarkSkin = skin == IconSkin.Default ? EditorGUIUtility.isProSkin : skin == IconSkin.Pro; + string name = isDarkSkin ? iconName : iconName + "_Light"; + Texture2D icon = null; + + if (!s_Icons.TryGetValue(name, out icon)) + { + int i = 0; + + do + { + // if in light mode: + // - do one lap searching for light + // - if nothing found, next searching for default + string fullPath = string.Format("{0}{1}.png", s_IconFolderPath, i == 0 ? name : iconName); + icon = FileUtility.LoadInternalAsset<Texture2D>(fullPath); + } + while (!isDarkSkin && ++i < 2 && icon == null); + + s_Icons.Add(name, icon); + } + + return icon; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IconUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IconUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2d0f3407e5fcb1c1e5e2588c27eb30c0275bc18f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/IconUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a9ebc9851a2d8e4c868fa97dbbb35f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LicenseEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LicenseEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..f431cb190985d54c3b1368a184b571de53189dc9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LicenseEditor.cs @@ -0,0 +1,43 @@ +using UnityEditor; +using UnityEngine; +using System; + +namespace UnityEditor.ProBuilder +{ + sealed class LicenseEditor : EditorWindow + { + const string k_LicenseTextPath = "Third Party Notices.md"; + const int k_MaxStringLength = 60000; + TextAsset m_LicenseText; + string[] m_LicenseContents; + Vector2 m_Scroll; + + void OnEnable() + { + m_LicenseText = FileUtility.LoadInternalAsset<TextAsset>(k_LicenseTextPath); + int charCount = m_LicenseText.text.Length; + int stringCount = charCount / k_MaxStringLength + 1; + m_LicenseContents = new string[stringCount]; + int index = 0; + for (int i = 0; i < stringCount; i++) + { + int length = Math.Min(k_MaxStringLength, charCount - index); + m_LicenseContents[i] = m_LicenseText.text.Substring(index, length); + index += length; + } + } + + void OnGUI() + { + if (m_LicenseContents == null) + return; + + m_Scroll = EditorGUILayout.BeginScrollView(m_Scroll); + + for (int i = 0, c = m_LicenseContents.Length; i < c; i++) + GUILayout.Label(m_LicenseContents[i], EditorStyles.wordWrappedLabel); + + EditorGUILayout.EndScrollView(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LicenseEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LicenseEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f5607940f15a254296fccba264cfcfb2cd0ed232 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LicenseEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 563aeff009644264e815e6de1439e784 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LightmapUVEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LightmapUVEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..6a0980f87936442d27d8c38cd34c9fa1a31316f4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LightmapUVEditor.cs @@ -0,0 +1,89 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + sealed class LightmapUVEditor : EditorWindow + { + List<ProBuilderMesh> m_MissingLightmaps = new List<ProBuilderMesh>(); + + GUIContent m_AutoLightmapUVContent = new GUIContent("Auto Lightmap UVs", "Automatically build the lightmap UV array when editing ProBuilder meshes. If this feature is disabled, you will need to use the 'Generate UV2' action to build lightmap UVs for meshes prior to baking lightmaps."); + internal static readonly Rect desiredPosition = new Rect(100, 100, 348, 234); + + void OnEnable() + { + m_MissingLightmaps = FindMissingLightmaps(); + EditorMeshUtility.meshOptimized += MeshOptimized; + } + + void OnGUI() + { + GUILayout.Label("Lightmap UV Settings", EditorStyles.boldLabel); + + Lightmapping.autoUnwrapLightmapUV = EditorGUILayout.Toggle(m_AutoLightmapUVContent, Lightmapping.autoUnwrapLightmapUV); + + if (m_MissingLightmaps.Count > 0) + { + EditorGUILayout.HelpBox(GetMissingLightmapText(), MessageType.Warning); + + GUILayout.BeginHorizontal(); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Build Missing Lightmap UVs")) + { + // copy the missing lightmaps array so that MeshOptimized does not interfere with the rebuild iterator + Lightmapping.RebuildMissingLightmapUVs(m_MissingLightmaps.ToArray()); + EditorUtility.ShowNotification("Rebuild Missing Lightmap UVs"); + } + + GUILayout.EndHorizontal(); + } + } + + void MeshOptimized(ProBuilderMesh mesh, Mesh umesh) + { + var missing = IsMissingLightmaps(mesh); + + if (missing) + { + if (!m_MissingLightmaps.Contains(mesh)) + m_MissingLightmaps.Add(mesh); + } + else + { + if (m_MissingLightmaps.Contains(mesh)) + m_MissingLightmaps.Remove(mesh); + } + + Repaint(); + } + + string GetMissingLightmapText() + { + var count = m_MissingLightmaps.Count; + + if (count < 2) + return "There is 1 mesh missing Lightmap UVs in the open scenes."; + + return "There are " + m_MissingLightmaps.Count + " meshes missing Lightmap UVs in the open scenes."; + } + + static bool IsMissingLightmaps(ProBuilderMesh mesh) + { +#if UNITY_2019_2_OR_NEWER + return mesh.gameObject.HasStaticFlag(StaticEditorFlags.ContributeGI) && !mesh.HasArrays(MeshArrays.Lightmap); +#else + return mesh.gameObject.HasStaticFlag(StaticEditorFlags.LightmapStatic) && !mesh.HasArrays(MeshArrays.Lightmap); +#endif + } + + static List<ProBuilderMesh> FindMissingLightmaps() + { + return FindObjectsOfType<ProBuilderMesh>().Where(IsMissingLightmaps).ToList(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LightmapUVEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LightmapUVEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..366dc6b529056b7e0cb91e02ef4a1a8e6cf79909 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LightmapUVEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b38e0917ff1e4a54292a5137af265542 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Lightmapping.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Lightmapping.cs new file mode 100644 index 0000000000000000000000000000000000000000..8fc71002a923859c438db6c02d6237df98348776 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Lightmapping.cs @@ -0,0 +1,255 @@ +using UnityEditor; +using UnityEngine; +using System.Linq; +using System.Collections.Generic; +using UnityEngine.ProBuilder; +using UL = UnityEditor.Lightmapping; +using UnityEditor.SettingsManagement; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Methods used in manipulating or creating Lightmaps. + /// </summary> + [InitializeOnLoad] + static class Lightmapping + { +#if UNITY_2019_2_OR_NEWER + const StaticEditorFlags k_ContributeGI = StaticEditorFlags.ContributeGI; +#else + const StaticEditorFlags k_ContributeGI = StaticEditorFlags.LightmapStatic; +#endif + + const string k_StaticEditorFlagsProperty = "m_StaticEditorFlags"; + + [UserSetting("General", "Auto Lightmap UVs", "Automatically build the lightmap UV array when editing ProBuilder meshes. If this feature is disabled, you will need to use the 'Generate UV2' action to build lightmap UVs for meshes prior to baking lightmaps.")] + static Pref<bool> s_AutoUnwrapLightmapUV = new Pref<bool>("lightmapping.autoUnwrapLightmapUV", true); + + [UserSetting("General", "Show Missing Lightmap UVs Warning", "Enable or disable a warning log if lightmaps are baked while ProBuilder shapes are missing a valid UV2 channel.")] + static Pref<bool> s_ShowMissingLightmapUVWarning = new Pref<bool>("lightmapping.showMissingLightmapWarning", true, SettingsScope.User); + + [UserSetting] + internal static Pref<UnwrapParameters> s_UnwrapParameters = new Pref<UnwrapParameters>("lightmapping.defaultLightmapUnwrapParameters", new UnwrapParameters()); +#pragma warning disable 618 + static Pref<UL.GIWorkflowMode> s_GiWorkflowMode = new Pref<UL.GIWorkflowMode>("lightmapping.giWorkflowMode", UL.GIWorkflowMode.Iterative, SettingsScope.User); +#pragma warning restore 618 + static class Styles + { + public static readonly GUIContent hardAngle = new GUIContent("Hard Angle", "Angle between neighbor triangles that will generate seam."); + public static readonly GUIContent packMargin = new GUIContent("Pack Margin", "Measured in pixels, assuming mesh will cover an entire 1024x1024 lightmap."); + public static readonly GUIContent angleError = new GUIContent("Angle Error", "Measured in percents. Angle error measures deviation of UV angles from geometry angles."); + public static readonly GUIContent areaError = new GUIContent("Area Error", ""); + + static bool s_Initialized; + public static GUIStyle miniButton; + public static bool unwrapSettingsFoldout; + + public static void Init() + { + if (s_Initialized) + return; + + s_Initialized = true; + + miniButton = new GUIStyle(GUI.skin.button); + miniButton.stretchHeight = false; + miniButton.stretchWidth = false; + miniButton.padding = new RectOffset(6, 6, 3, 3); + miniButton.margin = new RectOffset(4, 4, 4, 0); + } + } + + [UserSettingBlock("Mesh Settings")] + static void UnwrapSettingDefaults(string searchContext) + { + Styles.Init(); + var isSearching = !string.IsNullOrEmpty(searchContext); + + if (!isSearching) + Styles.unwrapSettingsFoldout = EditorGUILayout.Foldout(Styles.unwrapSettingsFoldout, "Lightmap UVs Settings"); + + if (isSearching || Styles.unwrapSettingsFoldout) + { + EditorGUI.BeginChangeCheck(); + + var unwrap = (UnwrapParameters)s_UnwrapParameters; + + using (new SettingsGUILayout.IndentedGroup()) + { + unwrap.hardAngle = SettingsGUILayout.SearchableSlider(Styles.hardAngle, unwrap.hardAngle, 1f, 180f, searchContext); + unwrap.packMargin = SettingsGUILayout.SearchableSlider(Styles.packMargin, unwrap.packMargin, 1f, 64f, searchContext); + unwrap.angleError = SettingsGUILayout.SearchableSlider(Styles.angleError, unwrap.angleError, 1f, 75f, searchContext); + unwrap.areaError = SettingsGUILayout.SearchableSlider(Styles.areaError, unwrap.areaError, 1f, 75f, searchContext); + + if (!isSearching) + { + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Reset", Styles.miniButton)) + unwrap.Reset(); + GUILayout.EndHorizontal(); + } + } + + SettingsGUILayout.DoResetContextMenuForLastRect(s_UnwrapParameters); + + if (EditorGUI.EndChangeCheck()) + s_UnwrapParameters.value = unwrap; + } + } + + public static bool autoUnwrapLightmapUV + { + get { return (bool)s_AutoUnwrapLightmapUV; } + set { s_AutoUnwrapLightmapUV.value = value; } + } + + static Lightmapping() + { +#if UNITY_2019_2_OR_NEWER + UL.bakeCompleted += OnLightmappingCompleted; +#else + UL.completed += OnLightmappingCompleted; +#endif + Undo.postprocessModifications += PostprocessModifications; + } + + /// <summary> + /// Toggles the LightmapStatic bit of an objects Static flags. + /// </summary> + /// <param name="pb"></param> + /// <param name="isEnabled"></param> + public static void SetLightmapStaticFlagEnabled(ProBuilderMesh pb, bool isEnabled) + { + Entity ent = pb.GetComponent<Entity>(); + + if (ent != null && ent.entityType == EntityType.Detail) + { + StaticEditorFlags flags = GameObjectUtility.GetStaticEditorFlags(pb.gameObject); + + if (isEnabled != (flags & k_ContributeGI) > 0) + { + flags ^= k_ContributeGI; + GameObjectUtility.SetStaticEditorFlags(pb.gameObject, flags); + } + } + } + + static UndoPropertyModification[] PostprocessModifications(UndoPropertyModification[] modifications) + { + if (!autoUnwrapLightmapUV) + return modifications; + + foreach (var modification in modifications) + { + string property = modification.currentValue == null ? null : modification.currentValue.propertyPath; + + if (string.IsNullOrEmpty(property) + || !property.Equals(k_StaticEditorFlagsProperty) + || string.IsNullOrEmpty(modification.currentValue.value)) + continue; + + var staticFlags = uint.Parse(modification.currentValue.value); + var lightmapStatic = (staticFlags & (uint) k_ContributeGI) != 0; + + if (lightmapStatic) + { + var gameObject = modification.currentValue.target as GameObject; + + if (gameObject != null) + { + var mesh = gameObject.GetComponent<ProBuilderMesh>(); + + if (mesh != null) + mesh.Optimize(); + } + } + } + + return modifications; + } + + static void OnLightmappingCompleted() + { + if (!s_ShowMissingLightmapUVWarning) + return; + + var missingUv2 = Object.FindObjectsOfType<ProBuilderMesh>().Where(x => !x.HasArrays(MeshArrays.Lightmap) && x.gameObject.HasStaticFlag(k_ContributeGI)); + + int count = missingUv2.Count(); + + if (count > 0) + Log.Warning("{0} ProBuilder {1} included in lightmap bake with missing UV2. Use the Lightmap + options to find missing UV2s.\n(You can turn off this warning in Preferences/ProBuilder).", count, count == 1 ? "mesh" : "meshes"); + } + + /// <summary> + /// Build Lightmap UVs for each mesh in the selection that is missing the UV2 array. + /// </summary> + /// <param name="selection"></param> + /// <param name="showProgressBar"></param> + public static int RebuildMissingLightmapUVs(IEnumerable<ProBuilderMesh> selection, bool showProgressBar = false) + { + int count = 0; + float total = selection.Count(x => x.gameObject.HasStaticFlag(k_ContributeGI) && !x.HasArrays(MeshArrays.Lightmap)); + + foreach (var mesh in selection) + { + if (!mesh.gameObject.HasStaticFlag(k_ContributeGI) || mesh.HasArrays(MeshArrays.Texture1)) + continue; + + if (showProgressBar) + { + if (UnityEditor.EditorUtility.DisplayCancelableProgressBar("Generate Lightmap UVs", "Unwrapping UVs for mesh: " + mesh.name, count / total)) + break; + } + + count++; + mesh.Optimize(true); + } + + UnityEditor.EditorUtility.ClearProgressBar(); + + return count; + } + + /** + * Get the UnwrapParam values from a pb_UnwrapParameters object. + * Not in pb_UnwrapParameters because UnwrapParam is an Editor class. + */ + public static UnwrapParam GetUnwrapParam(UnwrapParameters parameters) + { + UnwrapParam param = new UnwrapParam(); + + if (parameters != null) + { + param.angleError = Mathf.Clamp(parameters.angleError, 1f, 75f) * .01f; + param.areaError = Mathf.Clamp(parameters.areaError , 1f, 75f) * .01f; + param.hardAngle = Mathf.Clamp(parameters.hardAngle , 0f, 180f); + param.packMargin = Mathf.Clamp(parameters.packMargin, 1f, 64) * .001f; + } + else + { + param.angleError = Mathf.Clamp(UnwrapParameters.k_AngleError, 1f, 75f) * .01f; + param.areaError = Mathf.Clamp(UnwrapParameters.k_AreaError , 1f, 75f) * .01f; + param.hardAngle = Mathf.Clamp(UnwrapParameters.k_HardAngle , 0f, 180f); + param.packMargin = Mathf.Clamp(UnwrapParameters.k_PackMargin, 1f, 64) * .001f; + } + + return param; + } +#pragma warning disable 618 + internal static void PushGIWorkflowMode() + { + s_GiWorkflowMode.SetValue(UL.giWorkflowMode, true); + + if (UL.giWorkflowMode != UL.GIWorkflowMode.Legacy) + UL.giWorkflowMode = UL.GIWorkflowMode.OnDemand; + } + + internal static void PopGIWorkflowMode() + { + UL.giWorkflowMode = s_GiWorkflowMode; + } +#pragma warning restore 618 + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Lightmapping.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Lightmapping.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5d188f160c14a741fa7ed6a4b312b7e2410d359f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Lightmapping.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0ae93cadae49f8488c27d0d40da0e99 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LogEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LogEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..bdef7d35600ef2ba5ab6e4f84306147f23acf7ed --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LogEditor.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder.UI; +using UnityEngine; +using UnityEditor; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Initialize Log preferences here because Log does not have access to preference values. + /// </summary> + [InitializeOnLoad] + static class LogPreferences + { + static LogPreferences() + { + SetLogPreferences(); + } + + internal static void SetLogPreferences() + { + EditorApplication.delayCall += () => + { + Log.SetLogLevel(LogEditor.s_LogLevel); + Log.SetOutput(LogEditor.s_LogOutput); + Log.SetLogFile(LogEditor.s_LogPath); + }; + } + } + + /// <summary> + /// Manage settings for pb_Log. + /// </summary> + sealed class LogEditor : EditorWindow + { + internal static Pref<LogLevel> s_LogLevel = new Pref<LogLevel>("log.level", LogLevel.Default); + internal static Pref<LogOutput> s_LogOutput = new Pref<LogOutput>("log.output", LogOutput.Console); + internal static Pref<string> s_LogPath = new Pref<string>("log.path", Log.k_ProBuilderLogFileName); + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Debug/Log Preferences")] + static void MenuInit() + { + GetWindow<LogEditor>(true, "Log Preferences", true); + } + + static GUIContent[] gc_output = new GUIContent[] + { + new GUIContent("Console"), + new GUIContent("File") + }; + + static GUIContent[] gc_level = new GUIContent[] + { + new GUIContent("Error"), + new GUIContent("Warning"), + new GUIContent("Info"), + new GUIContent("Debug"), + new GUIContent("All") + }; + + void OnGUI() + { + GUILayout.Label("Log Output", EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + s_LogOutput.value = (LogOutput)global::UnityEditor.ProBuilder.UI.EditorGUILayout.FlagToolbar((int)s_LogOutput.value, gc_output); + if (EditorGUI.EndChangeCheck()) + { + ProBuilderSettings.Save(); + LogPreferences.SetLogPreferences(); + } + + GUI.enabled = (s_LogOutput & LogOutput.File) > 0; + + GUILayout.BeginHorizontal(); + GUILayout.Label("Log Path"); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("...", EditorStyles.miniButton)) + { + string dir = UnityEditor.EditorUtility.OpenFolderPanel("ProBuilder Log Directory", "", ""); + + if (!string.IsNullOrEmpty(dir) && Directory.Exists(dir)) + { + s_LogPath.value = string.Format("{0}/{1}", dir, Log.k_ProBuilderLogFileName); + + try + { + Uri directoryUri = new Uri(dir); + Uri fileUri = new Uri(s_LogPath); + string relativePath = directoryUri.MakeRelativeUri(fileUri).ToString(); + if (!string.IsNullOrEmpty(relativePath)) + s_LogPath.value = relativePath; + } + catch {} + + ProBuilderSettings.Save(); + Log.SetLogFile(s_LogPath); + } + } + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + GUI.enabled = false; + EditorGUILayout.LabelField(s_LogPath); + GUI.enabled = true; + GUILayout.FlexibleSpace(); + if (GUILayout.Button("open", EditorStyles.miniButton)) + UnityEditor.EditorUtility.OpenWithDefaultApp(s_LogPath); + GUILayout.EndHorizontal(); + + GUILayout.Label("Chatty-ness", EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + s_LogLevel.value = (LogLevel)global::UnityEditor.ProBuilder.UI.EditorGUILayout.FlagToolbar((int)s_LogLevel.value, gc_level, false, true); + if (EditorGUI.EndChangeCheck()) + { + ProBuilderSettings.Save(); + Log.SetLogLevel(s_LogLevel); + } + + GUILayout.FlexibleSpace(); + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Clear Log File", EditorStyles.miniButton)) + Log.ClearLogFile(); + GUILayout.EndHorizontal(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LogEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LogEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..20573df07f30e4ab993d365149afe4605a6e6f17 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/LogEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb7d601e6d679aa4dbd856d20dda3f74 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MaterialEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MaterialEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..f7d0c9aaa78de9a3ca0d02b65a6c3f778b11c13b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MaterialEditor.cs @@ -0,0 +1,398 @@ +#pragma warning disable 0618 + +using UnityEngine; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Assign materials to faces and objects. + /// </summary> + sealed class MaterialEditor : ConfigurableWindow + { + // Reference to pb_Editor instance. + static ProBuilderEditor editor { get { return ProBuilderEditor.instance; } } + + // Reference to the currently open pb_Material_Editor + public static MaterialEditor instance { get; private set; } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 1 &1", true, PreferenceKeys.menuMaterialColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 2 &2", true, PreferenceKeys.menuMaterialColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 3 &3", true, PreferenceKeys.menuMaterialColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 4 &4", true, PreferenceKeys.menuMaterialColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 5 &5", true, PreferenceKeys.menuMaterialColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 6 &6", true, PreferenceKeys.menuMaterialColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 7 &7", true, PreferenceKeys.menuMaterialColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 8 &8", true, PreferenceKeys.menuMaterialColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 9 &9", true, PreferenceKeys.menuMaterialColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 10 &0", true, PreferenceKeys.menuMaterialColors)] + public static bool VerifyMaterialAction() + { + return ProBuilderEditor.instance != null && MeshSelection.selectedObjectCount > 0; + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 1 &1", false, PreferenceKeys.menuMaterialColors)] + public static void ApplyMaterial0() + { + ApplyMaterial(MeshSelection.topInternal, CurrentPalette[0]); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 2 &2", false, PreferenceKeys.menuMaterialColors)] + public static void ApplyMaterial1() + { + ApplyMaterial(MeshSelection.topInternal, CurrentPalette[1]); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 3 &3", false, PreferenceKeys.menuMaterialColors)] + public static void ApplyMaterial2() + { + ApplyMaterial(MeshSelection.topInternal, CurrentPalette[2]); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 4 &4", false, PreferenceKeys.menuMaterialColors)] + public static void ApplyMaterial3() + { + ApplyMaterial(MeshSelection.topInternal, CurrentPalette[3]); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 5 &5", false, PreferenceKeys.menuMaterialColors)] + public static void ApplyMaterial4() + { + ApplyMaterial(MeshSelection.topInternal, CurrentPalette[4]); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 6 &6", false, PreferenceKeys.menuMaterialColors)] + public static void ApplyMaterial5() + { + ApplyMaterial(MeshSelection.topInternal, CurrentPalette[5]); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 7 &7", false, PreferenceKeys.menuMaterialColors)] + public static void ApplyMaterial6() + { + ApplyMaterial(MeshSelection.topInternal, CurrentPalette[6]); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 8 &8", false, PreferenceKeys.menuMaterialColors)] + public static void ApplyMaterial7() + { + ApplyMaterial(MeshSelection.topInternal, CurrentPalette[7]); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 9 &9", false, PreferenceKeys.menuMaterialColors)] + public static void ApplyMaterial8() + { + ApplyMaterial(MeshSelection.topInternal, CurrentPalette[8]); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Materials/Apply Material Preset 10 &0", false, PreferenceKeys.menuMaterialColors)] + public static void ApplyMaterial9() + { + ApplyMaterial(MeshSelection.topInternal, CurrentPalette[9]); + } + + // Path to the required default material palette. If not valid material palettes are + // found a new one will be created with this path (relative to ProBuilder folder). + static Pref<string> s_MaterialPalettePath = new Pref<string>("editor.materialPalettePath", FileUtility.GetLocalDataDirectory() + "/Default Material Palette.asset"); + + // The currently loaded material palette asset. + static MaterialPalette s_CurrentPalette = null; + + // The user set "quick material" + [SerializeField] + Material m_QueuedMaterial; + + // Custom style for material row background + GUIStyle m_RowBackgroundStyle; + + // The view scroll position. + Vector2 m_ViewScroll = Vector2.zero; + + // All available material palettes + MaterialPalette[] m_AvailablePalettes = null; + + // List of string names for all available palettes (plus one entry for 'Add New') + string[] m_AvailablePalettes_Str = null; + + // The index of the currently loaded material palette in m_AvailablePalettes + int m_CurrentPaletteIndex = 0; + + /// <summary> + /// The currently loaded material palette, or a default. + /// </summary> + public static MaterialPalette CurrentPalette + { + get + { + if (s_CurrentPalette == null) + { + // Attempt to load the last user-set material palette + s_CurrentPalette = AssetDatabase.LoadAssetAtPath<MaterialPalette>(s_MaterialPalettePath); + + // If not set (or deleted), fall back on default + if (s_CurrentPalette != null) + return s_CurrentPalette; + + // No dice - iterate any other pb_MaterialPalette objects in the project (favoring first found) + s_CurrentPalette = FileUtility.FindAssetOfType<MaterialPalette>(); + + if (s_CurrentPalette != null) + return s_CurrentPalette; + + // If no existing pb_MaterialPalette objects in project: + // - create a new one + // - check for the older pb_ObjectArray and copy data to new default + s_CurrentPalette = FileUtility.LoadRequired<MaterialPalette>(s_MaterialPalettePath); + + string[] m_LegacyMaterialArrays = AssetDatabase.FindAssets("t:pb_ObjectArray"); + + for (int i = 0; m_LegacyMaterialArrays != null && i < m_LegacyMaterialArrays.Length; i++) + { + pb_ObjectArray poa = AssetDatabase.LoadAssetAtPath<pb_ObjectArray>(AssetDatabase.GUIDToAssetPath(m_LegacyMaterialArrays[i])); + + // Make sure there's actually something worth copying + if (poa != null && poa.array != null && poa.array.Any(x => x != null && x is Material)) + { + s_CurrentPalette.array = poa.GetArray<Material>(); + break; + } + } + } + return s_CurrentPalette; + } + } + + public static void MenuOpenMaterialEditor() + { + GetWindow<MaterialEditor>("Material Editor"); + } + + void OnEnable() + { + instance = this; + this.autoRepaintOnSceneChange = true; + this.minSize = new Vector2(236, 250); + m_RowBackgroundStyle = new GUIStyle(); + m_RowBackgroundStyle.normal.background = EditorGUIUtility.whiteTexture; + s_CurrentPalette = null; + RefreshAvailablePalettes(); + } + + void OnDisable() + { + instance = null; + } + + void OnGUI() + { + DoContextMenu(); + + GUILayout.Label("Quick Material", EditorStyles.boldLabel); + Rect r = GUILayoutUtility.GetLastRect(); + int left = (int)position.width - 68; + + GUILayout.BeginHorizontal(GUILayout.MaxWidth(position.width - 74)); + GUILayout.BeginVertical(); + + m_QueuedMaterial = (Material)EditorGUILayout.ObjectField(m_QueuedMaterial, typeof(Material), true); + + GUILayout.Space(2); + + if (GUILayout.Button("Apply (Ctrl+Shift+Click)")) + ApplyMaterial(MeshSelection.topInternal, m_QueuedMaterial); + + GUI.enabled = editor != null && MeshSelection.selectedFaceCount > 0; + if (GUILayout.Button("Match Selection")) + { + m_QueuedMaterial = EditorMaterialUtility.GetActiveSelection(); + } + GUI.enabled = true; + + GUILayout.EndVertical(); + + GUI.Box(new Rect(left, r.y + r.height + 2, 64, 64), ""); + + var previewTexture = EditorMaterialUtility.GetPreviewTexture(m_QueuedMaterial); + + if (previewTexture != null) + { + GUI.Label(new Rect(left + 2, r.y + r.height + 4, 60, 60), previewTexture); + } + else + { + GUI.Box(new Rect(left + 2, r.y + r.height + 4, 60, 60), ""); + GUI.Label(new Rect(left + 2, r.height + 28, 120, 32), "None\n(Texture)"); + } + + GUILayout.EndHorizontal(); + + GUILayout.Space(4); + + GUI.backgroundColor = PreferenceKeys.proBuilderDarkGray; + UI.EditorGUIUtility.DrawSeparator(2); + GUI.backgroundColor = Color.white; + + GUILayout.Label("Material Palette", EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + + m_CurrentPaletteIndex = EditorGUILayout.Popup("", m_CurrentPaletteIndex, m_AvailablePalettes_Str); + + if (EditorGUI.EndChangeCheck()) + { + MaterialPalette newPalette = null; + + // Add a new material palette + if (m_CurrentPaletteIndex >= m_AvailablePalettes.Length) + { + string path = AssetDatabase.GenerateUniqueAssetPath("Assets/Material Palette.asset"); + newPalette = FileUtility.LoadRequired<MaterialPalette>(path); + EditorGUIUtility.PingObject(newPalette); + } + else + { + newPalette = m_AvailablePalettes[m_CurrentPaletteIndex]; + } + + SetMaterialPalette(newPalette); + } + + EditorGUI.BeginChangeCheck(); + s_CurrentPalette = (MaterialPalette)EditorGUILayout.ObjectField(s_CurrentPalette, typeof(MaterialPalette), false); + if (EditorGUI.EndChangeCheck()) + SetMaterialPalette(s_CurrentPalette); + + GUILayout.Space(4); + + Material[] materials = CurrentPalette; + + m_ViewScroll = GUILayout.BeginScrollView(m_ViewScroll); + + for (int i = 0; i < materials.Length; i++) + { + if (i == 10) + { + GUILayout.Space(2); + GUI.backgroundColor = PreferenceKeys.proBuilderLightGray; + UI.EditorGUIUtility.DrawSeparator(1); + GUI.backgroundColor = Color.white; + GUILayout.Space(2); + } + + GUILayout.BeginHorizontal(); + if (i < 10) + { + if (GUILayout.Button("Alt + " + (i == 9 ? 0 : (i + 1)).ToString(), EditorStyles.miniButton, GUILayout.MaxWidth(58))) + ApplyMaterial(MeshSelection.topInternal, materials[i]); + } + else + { + if (GUILayout.Button("Apply", EditorStyles.miniButtonLeft, GUILayout.MaxWidth(44))) + ApplyMaterial(MeshSelection.topInternal, materials[i]); + + GUI.backgroundColor = Color.red; + if (GUILayout.Button("", EditorStyles.miniButtonRight, GUILayout.MaxWidth(14))) + { + Material[] temp = new Material[materials.Length - 1]; + System.Array.Copy(materials, 0, temp, 0, materials.Length - 1); + materials = temp; + SaveUserMaterials(materials); + return; + } + GUI.backgroundColor = Color.white; + } + + EditorGUI.BeginChangeCheck(); + materials[i] = (Material)EditorGUILayout.ObjectField(materials[i], typeof(Material), false); + if (EditorGUI.EndChangeCheck()) + SaveUserMaterials(materials); + + GUILayout.EndHorizontal(); + } + + + if (GUILayout.Button("Add")) + { + Material[] temp = new Material[materials.Length + 1]; + System.Array.Copy(materials, 0, temp, 0, materials.Length); + materials = temp; + SaveUserMaterials(materials); + } + + GUILayout.EndScrollView(); + } + + /// <summary> + /// Applies the currently queued material to the selected face and eats the event. + /// </summary> + /// <param name="em"></param> + /// <param name="pb"></param> + /// <param name="quad"></param> + /// <returns></returns> + public bool ClickShortcutCheck(EventModifiers em, ProBuilderMesh pb, Face quad) + { + if (UVEditor.instance == null) + { + if (em == (EventModifiers.Control | EventModifiers.Shift)) + { + UndoUtility.RecordObject(pb, "Quick Apply"); + quad.material = m_QueuedMaterial; + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + EditorUtility.ShowNotification("Quick Apply Material"); + return true; + } + } + + return false; + } + + static void ApplyMaterial(IEnumerable<ProBuilderMesh> selection, Material mat) + { + if (mat == null) + return; + + UndoUtility.RecordComponents<MeshRenderer, ProBuilderMesh>(selection, "Set Material"); + + foreach (var mesh in selection) + { + var applyPerFace = ProBuilderEditor.selectMode.ContainsFlag(SelectMode.Face) && mesh.faceCount > 0; + mesh.SetMaterial(applyPerFace ? mesh.GetSelectedFaces() : mesh.facesInternal, mat); + InternalMeshUtility.FilterUnusedSubmeshIndexes(mesh); + mesh.Rebuild(); + mesh.Optimize(); + } + + if (ProBuilderEditor.instance != null && MeshSelection.selectedFaceCount > 0) + EditorUtility.ShowNotification("Set Material\n" + mat.name); + } + + static void SaveUserMaterials(Material[] materials) + { + s_CurrentPalette.array = materials; + UnityEditor.EditorUtility.SetDirty(s_CurrentPalette); + AssetDatabase.SaveAssets(); + } + + void SetMaterialPalette(MaterialPalette palette) + { + s_CurrentPalette = palette; + RefreshAvailablePalettes(); + } + + void RefreshAvailablePalettes() + { + MaterialPalette cur = CurrentPalette; + m_AvailablePalettes = FileUtility.FindAndLoadAssets<MaterialPalette>(); + m_AvailablePalettes_Str = m_AvailablePalettes.Select(x => x.name).ToArray(); + ArrayUtility.Add<string>(ref m_AvailablePalettes_Str, string.Empty); + ArrayUtility.Add<string>(ref m_AvailablePalettes_Str, "New Material Palette..."); + m_CurrentPaletteIndex = System.Array.IndexOf(m_AvailablePalettes, cur); + s_MaterialPalettePath.SetValue(AssetDatabase.GetAssetPath(cur), true); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MaterialEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MaterialEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ef452d3e1f584b451369f1334c765eb09b04b9b6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MaterialEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9be09300178708d4aaa608eed9697f1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MaterialPalette.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MaterialPalette.cs new file mode 100644 index 0000000000000000000000000000000000000000..03ea3a1364348120cf3324d4d8fba77c8d5a2f57 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MaterialPalette.cs @@ -0,0 +1,70 @@ +using UnityEngine; +using UnityEditor; +using System.Linq; +using System.Collections; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// A serializable object that stores an array of materials. Used by MaterialEditor. + /// </summary> + /// <inheritdoc cref="UnityEngine.ScriptableObject"/> + /// <inheritdoc cref="IHasDefault"/> + sealed class MaterialPalette : ScriptableObject, IHasDefault + { + [MenuItem("Assets/Create/Material Palette", true)] + static bool VerifyCreateMaterialPalette() + { + // This hangs on large projects + // Selection.GetFiltered(typeof(Material), SelectionMode.DeepAssets).Length > 0; + return true; + } + + [MenuItem("Assets/Create/Material Palette")] + static void CreateMaterialPalette() + { + string path = FileUtility.GetSelectedDirectory() + "/Material Palette.asset"; + + // Only generate unique path if it already exists - otherwise GenerateAssetUniquePath can return empty string + // in event of path existing in a directory that is not yet created. + if (FileUtility.Exists(path)) + path = AssetDatabase.GenerateUniqueAssetPath(path); + + MaterialPalette newPalette = FileUtility.LoadRequired<MaterialPalette>(path); + newPalette.array = Selection.GetFiltered(typeof(Material), SelectionMode.DeepAssets).Cast<Material>().ToArray(); + UnityEditor.EditorUtility.SetDirty(newPalette); + EditorGUIUtility.PingObject(newPalette); + } + + public Material[] array; + + public static implicit operator Material[](MaterialPalette materialArray) + { + return materialArray.array; + } + + public Material this[int i] + { + get { return array[i]; } + set { array[i] = value; } + } + + public void SetDefaultValues() + { + array = new Material[10] + { + EditorMaterialUtility.GetUserMaterial(), + null, + null, + null, + null, + null, + null, + null, + null, + null + }; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MaterialPalette.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MaterialPalette.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e75a6c7358464b73bb25ef80a625037d4a295c8c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MaterialPalette.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f1ca63a91b17724bbd99c8fa67e0180 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuAction.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuAction.cs new file mode 100644 index 0000000000000000000000000000000000000000..6eaa643aebeb69eb016e1e66fc03332af48de9f4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuAction.cs @@ -0,0 +1,384 @@ +// #define GENERATE_DESATURATED_ICONS +#if UNITY_2019_1_OR_NEWER +#define SHORTCUT_MANAGER +#endif + +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Base class from which any action that is represented in the ProBuilder toolbar inherits. + /// </summary> + public abstract class MenuAction + { + /// <summary> + /// A flag indicating the state of a menu action. This determines whether the menu item is visible, and if visible, enabled. + /// </summary> + [System.Flags] + public enum MenuActionState + { + /// <summary> + /// The button is not visible in the toolbar. + /// </summary> + Hidden = 0x0, + /// <summary> + /// The button is visible in the toolbar. + /// </summary> + Visible = 0x1, + /// <summary> + /// The button (and by proxy, the action it performs) are valid given the current selection. + /// </summary> + Enabled = 0x2, + /// <summary> + /// Button and action are both visible in the toolbar and valid given the current selection. + /// </summary> + VisibleAndEnabled = 0x3 + }; + + /// <value> + /// Path to the ProBuilder menu category. + /// </value> + /// <remarks> + /// Use this where you wish to add a top level menu item. + /// </remarks> + internal const string probuilderMenuPath = "Tools/ProBuilder/"; + + /// <value> + /// The unicode character for the control key symbol on Windows, or command key on macOS. + /// </value> + internal const char keyCommandSuper = PreferenceKeys.CMD_SUPER; + + /// <value> + /// The unicode character for the shift key symbol. + /// </value> + internal const char keyCommandShift = PreferenceKeys.CMD_SHIFT; + + /// <value> + /// The unicode character for the option key symbol on macOS. + /// </value> + /// <seealso cref="keyCommandAlt"/> + internal const char keyCommandOption = PreferenceKeys.CMD_OPTION; + + /// <value> + /// The unicode character for the alt key symbol on Windows. + /// </value> + internal const char keyCommandAlt = PreferenceKeys.CMD_ALT; + + /// <value> + /// The unicode character for the delete key symbol. + /// </value> + internal const char keyCommandDelete = PreferenceKeys.CMD_DELETE; + + static readonly GUIContent AltButtonContent = new GUIContent("+", ""); + + static readonly Vector2 AltButtonSize = new Vector2(21, 0); + + Vector2 m_LastCalculatedSize = Vector2.zero; + + protected MenuAction() + { + iconMode = ProBuilderEditor.s_IsIconGui; + } + + /// <summary> + /// Compare two menu items precedence by their category and priority modifier. + /// </summary> + /// <param name="left"></param> + /// <param name="right"></param> + /// <returns></returns> + internal static int CompareActionsByGroupAndPriority(MenuAction left, MenuAction right) + { + if (left == null) + { + if (right == null) + return 0; + else + return -1; + } + else + { + if (right == null) + { + return 1; + } + else + { + int l = (int)left.group, r = (int)right.group; + + if (l < r) + return -1; + else if (l > r) + return 1; + else + { + int lp = left.toolbarPriority < 0 ? int.MaxValue : left.toolbarPriority, + rp = right.toolbarPriority < 0 ? int.MaxValue : right.toolbarPriority; + + return lp.CompareTo(rp); + } + } + } + } + + Texture2D m_DesaturatedIcon = null; + + /// <summary> + /// By default this function will look for an image named `${icon}_disabled`. If your disabled icon is somewhere else override this function. + /// </summary> + protected virtual Texture2D disabledIcon + { + get + { + if (m_DesaturatedIcon == null) + { + if (icon == null) + return null; + + m_DesaturatedIcon = IconUtility.GetIcon(string.Format("Toolbar/{0}_disabled", icon.name)); + +#if GENERATE_DESATURATED_ICONS + if (!m_DesaturatedIcon) + m_DesaturatedIcon = ProBuilder2.EditorCommon.DebugUtilities.pb_GenerateDesaturatedImage.CreateDesaturedImage(icon); +#endif + } + + return m_DesaturatedIcon; + } + } + + /// <value> + /// What category this action belongs in. + /// </value> + public abstract ToolbarGroup group { get; } + + /// <value> + /// Optional value influences where in the toolbar this menu item will be placed. + /// <remarks> + /// 0 is first, 1 is second, -1 is no preference. + /// </remarks> + /// </value> + public virtual int toolbarPriority { get { return -1; } } + + /// <value> + /// The icon to be displayed for this action. + /// </value> + /// <remarks> + /// Not used when toolbar is in text mode. + /// </remarks> + public abstract Texture2D icon { get; } + + /// <value> + /// The contents to display for this menu action's tooltip. + /// </value> + public abstract TooltipContent tooltip { get; } + + /// <value> + /// Optional override for the action title displayed in the toolbar button. + /// </value> + /// <remarks> + /// If unimplemented the tooltip title is used. + /// </remarks> + public virtual string menuTitle { get { return tooltip.title; } } + + /// <value> + /// True if this class should have an entry built into the hardware menu. This is not implemented for custom actions. + /// </value> + protected virtual bool hasFileMenuEntry { get { return true; } } + + /// <summary> + /// Is the current mode and selection valid for this action? + /// </summary> + /// <value>A flag indicating both the visibility and enabled state for an action.</value> + public MenuActionState menuActionState + { + get + { + if (hidden) + return MenuActionState.Hidden; + if (enabled) + return MenuActionState.VisibleAndEnabled; + return MenuActionState.Visible; + } + } + + /// <summary> + /// In which SelectMode states is this action applicable. Drives the `virtual bool hidden { get; }` property unless overridden. + /// </summary> + public virtual SelectMode validSelectModes + { + get { return SelectMode.Any; } + } + + /// <summary> + /// A check for whether or not the action is valid given the current selection. + /// </summary> + /// <seealso cref="hidden"/> + /// <value>True if this action is valid with current selection and mode.</value> + public virtual bool enabled + { + get + { + return ProBuilderEditor.instance != null + && ProBuilderEditor.selectMode.ContainsFlag(validSelectModes) + && !ProBuilderEditor.selectMode.ContainsFlag(SelectMode.InputTool); + } + } + + /// <summary> + /// Is this action visible in the ProBuilder toolbar? + /// </summary> + /// <remarks>This returns false by default.</remarks> + /// <seealso cref="enabled"/> + /// <value>True if this action should be shown in the toolbar with the current mode and settings, false otherwise.</value> + public virtual bool hidden + { + get { return !ProBuilderEditor.selectMode.ContainsFlag(validSelectModes); } + } + + /// <summary> + /// Get a flag indicating the visibility and enabled state of an extra options menu modifier for this action. + /// </summary> + /// <value>A flag specifying whether an options icon should be displayed for this action button. If your action implements some etra options, you must also implement OnSettingsGUI.</value> + protected virtual MenuActionState optionsMenuState + { + get { return MenuActionState.Hidden; } + } + + /// <summary> + /// Perform whatever action this menu item is supposed to do. You are responsible for implementing Undo. + /// </summary> + /// <returns>A new ActionResult with a summary of the state of the action's success.</returns> + public abstract ActionResult DoAction(); + + protected virtual void DoAlternateAction() + { + MenuOption.Show(OnSettingsGUI, OnSettingsEnable, OnSettingsDisable); + } + + /// <summary> + /// Implement the extra settings GUI for your action in this method. + /// </summary> + protected virtual void OnSettingsGUI() {} + + /// <summary> + /// Called when the settings window is opened. + /// </summary> + protected virtual void OnSettingsEnable() {} + + /// <summary> + /// Called when the settings window is closed. + /// </summary> + protected virtual void OnSettingsDisable() {} + + protected bool iconMode { get; set; } + + /// <summary> + /// Draw a menu button. Returns true if the button is active and settings are enabled, false if settings are not enabled. + /// </summary> + /// <param name="isHorizontal"></param> + /// <param name="showOptions"></param> + /// <param name="optionsRect"></param> + /// <param name="layoutOptions"></param> + /// <returns></returns> + internal bool DoButton(bool isHorizontal, bool showOptions, ref Rect optionsRect, params GUILayoutOption[] layoutOptions) + { + bool wasEnabled = GUI.enabled; + bool buttonEnabled = (menuActionState & MenuActionState.Enabled) == MenuActionState.Enabled; + + GUI.enabled = buttonEnabled; + + GUI.backgroundColor = Color.white; + + if (iconMode) + { + if (GUILayout.Button(buttonEnabled || !disabledIcon ? icon : disabledIcon, ToolbarGroupUtility.GetStyle(group, isHorizontal), layoutOptions)) + { + if (showOptions && (optionsMenuState & MenuActionState.VisibleAndEnabled) == MenuActionState.VisibleAndEnabled) + { + DoAlternateAction(); + } + else + { + ActionResult result = DoAction(); + EditorUtility.ShowNotification(result.notification); + } + } + + if ((optionsMenuState & MenuActionState.VisibleAndEnabled) == MenuActionState.VisibleAndEnabled) + { + Rect r = GUILayoutUtility.GetLastRect(); + r.x = r.x + r.width - 16; + r.y += 0; + r.width = 14; + r.height = 14; + GUI.Label(r, IconUtility.GetIcon("Toolbar/Options", IconSkin.Pro), GUIStyle.none); + optionsRect = r; + GUI.enabled = wasEnabled; + return buttonEnabled; + } + else + { + GUI.enabled = wasEnabled; + return false; + } + } + else + { + // in text mode always use the vertical layout. + isHorizontal = false; + GUILayout.BeginHorizontal(MenuActionStyles.rowStyleVertical, layoutOptions); + + GUI.backgroundColor = ToolbarGroupUtility.GetColor(group); + + if (GUILayout.Button(menuTitle, MenuActionStyles.buttonStyleVertical)) + { + ActionResult res = DoAction(); + EditorUtility.ShowNotification(res.notification); + } + MenuActionState altState = optionsMenuState; + + if ((altState & MenuActionState.Visible) == MenuActionState.Visible) + { + GUI.enabled = GUI.enabled && (altState & MenuActionState.Enabled) == MenuActionState.Enabled; + + if (DoAltButton(GUILayout.MaxWidth(21), GUILayout.MaxHeight(16))) + DoAlternateAction(); + } + GUILayout.EndHorizontal(); + + GUI.backgroundColor = Color.white; + + GUI.enabled = wasEnabled; + + return false; + } + } + + bool DoAltButton(params GUILayoutOption[] options) + { + return GUILayout.Button(AltButtonContent, MenuActionStyles.altButtonStyle, options); + } + + /// <summary> + /// Get the rendered width of this GUI item. + /// </summary> + /// <param name="isHorizontal"></param> + /// <returns></returns> + internal Vector2 GetSize(bool isHorizontal) + { + if (iconMode) + { + m_LastCalculatedSize = ToolbarGroupUtility.GetStyle(ToolbarGroup.Object, isHorizontal).CalcSize(UI.EditorGUIUtility.TempContent(null, null, icon)); + } + else + { + // in text mode always use the vertical layout. + isHorizontal = false; + m_LastCalculatedSize = MenuActionStyles.buttonStyleVertical.CalcSize(UI.EditorGUIUtility.TempContent(menuTitle)) + AltButtonSize; + } + return m_LastCalculatedSize; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuAction.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuAction.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6e3dbe6fdfcda93d414b6c7b3b8effa44b5f1200 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuAction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9264fc220d4aaf645b44e788499db0db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuActionShortcutAttribute.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuActionShortcutAttribute.cs new file mode 100644 index 0000000000000000000000000000000000000000..8f313c0595974486406826d19e8dc2834eb2e3ab --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuActionShortcutAttribute.cs @@ -0,0 +1,36 @@ +using System; +using UnityEngine; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Decorate MenuAction classes to set default ShortcutBinding or override the ShortcutContext (default is global). + /// </summary> + [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)] + class MenuActionShortcutAttribute : Attribute + { + internal Type context { get; private set; } + + internal KeyCode key; + + internal EventModifiers modifiers; + + public MenuActionShortcutAttribute(KeyCode defaultKeyCode, EventModifiers defaultShorcutModifiers = EventModifiers.None) + : this(null, defaultKeyCode, defaultShorcutModifiers) + { + } + + public MenuActionShortcutAttribute(Type defaultContext) + : this(defaultContext, KeyCode.None, EventModifiers.None) + { + } + + public MenuActionShortcutAttribute(Type defaultContext, KeyCode defaultKeyCode, EventModifiers defaultShorcutModifiers = EventModifiers.None) + { + context = defaultContext; + key = defaultKeyCode; + modifiers = defaultShorcutModifiers; + } + } +} + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuActionShortcutAttribute.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuActionShortcutAttribute.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2fb0431fd857578afb4fd7c179cc5a2dde9fc156 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuActionShortcutAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c9e17f9cc89704707b15d2340fd8a585 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuActionStyles.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuActionStyles.cs new file mode 100644 index 0000000000000000000000000000000000000000..e2296271f53c7ca4b006e3fc8a78a71bcf4ec4c9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuActionStyles.cs @@ -0,0 +1,151 @@ +// #define GENERATE_DESATURATED_ICONS + +using UnityEngine.ProBuilder; +using UnityEngine; +using UnityEditor; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Styles used in MenuAction. + /// </summary> + static class MenuActionStyles + { + const int k_FontSize = 11; + internal static readonly Color TEXT_COLOR_WHITE_NORMAL = new Color(0.82f, 0.82f, 0.82f, 1f); + internal static readonly Color TEXT_COLOR_WHITE_HOVER = new Color(0.7f, 0.7f, 0.7f, 1f); + internal static readonly Color TEXT_COLOR_WHITE_ACTIVE = new Color(0.5f, 0.5f, 0.5f, 1f); + + static GUIStyle s_ButtonStyleVertical = null; + static GUIStyle s_ButtonStyleHorizontal = null; + static GUIStyle s_RowStyleVertical = null; + static GUIStyle s_RowStyleHorizontal = null; + static GUIStyle s_AltButtonStyle = null; + + /// <summary> + /// Reset static GUIStyle objects so that they will be re-initialized the next time used. + /// </summary> + internal static void ResetStyles() + { + s_ButtonStyleVertical = null; + s_ButtonStyleHorizontal = null; + s_RowStyleVertical = null; + s_AltButtonStyle = null; + } + + /// <summary> + /// Vertical icon button. + /// </summary> + internal static GUIStyle buttonStyleVertical + { + get + { + if (s_ButtonStyleVertical == null) + { + s_ButtonStyleVertical = new GUIStyle(); + s_ButtonStyleVertical.fontSize = k_FontSize; + s_ButtonStyleVertical.normal.background = IconUtility.GetIcon("Toolbar/Button_Normal", IconSkin.Pro); + s_ButtonStyleVertical.normal.textColor = EditorGUIUtility.isProSkin ? TEXT_COLOR_WHITE_NORMAL : Color.black; + s_ButtonStyleVertical.hover.background = IconUtility.GetIcon("Toolbar/Button_Hover", IconSkin.Pro); + s_ButtonStyleVertical.hover.textColor = EditorGUIUtility.isProSkin ? TEXT_COLOR_WHITE_HOVER : Color.black; + s_ButtonStyleVertical.active.background = IconUtility.GetIcon("Toolbar/Button_Pressed", IconSkin.Pro); + s_ButtonStyleVertical.active.textColor = EditorGUIUtility.isProSkin ? TEXT_COLOR_WHITE_ACTIVE : Color.black; + s_ButtonStyleVertical.alignment = ProBuilderEditor.s_IsIconGui ? TextAnchor.MiddleCenter : TextAnchor.MiddleLeft; + s_ButtonStyleVertical.border = new RectOffset(4, 0, 0, 0); + s_ButtonStyleVertical.stretchWidth = true; + s_ButtonStyleVertical.stretchHeight = false; + s_ButtonStyleVertical.margin = new RectOffset(4, 5, 4, 4); + s_ButtonStyleVertical.padding = new RectOffset(8, 0, 2, 2); + } + return s_ButtonStyleVertical; + } + } + + internal static GUIStyle buttonStyleHorizontal + { + get + { + if (s_ButtonStyleHorizontal == null) + { + s_ButtonStyleHorizontal = new GUIStyle(); + + s_ButtonStyleHorizontal.fontSize = k_FontSize; + s_ButtonStyleHorizontal.normal.textColor = EditorGUIUtility.isProSkin ? TEXT_COLOR_WHITE_NORMAL : Color.black; + s_ButtonStyleHorizontal.normal.background = IconUtility.GetIcon("Toolbar/Button_Normal_Horizontal", IconSkin.Pro); + s_ButtonStyleHorizontal.hover.background = IconUtility.GetIcon("Toolbar/Button_Hover_Horizontal", IconSkin.Pro); + s_ButtonStyleHorizontal.hover.textColor = EditorGUIUtility.isProSkin ? TEXT_COLOR_WHITE_HOVER : Color.black; + s_ButtonStyleHorizontal.active.background = IconUtility.GetIcon("Toolbar/Button_Pressed_Horizontal", IconSkin.Pro); + s_ButtonStyleHorizontal.active.textColor = EditorGUIUtility.isProSkin ? TEXT_COLOR_WHITE_ACTIVE : Color.black; + s_ButtonStyleHorizontal.alignment = TextAnchor.MiddleCenter; + s_ButtonStyleHorizontal.border = new RectOffset(0, 0, 4, 0); + s_ButtonStyleHorizontal.stretchWidth = true; + s_ButtonStyleHorizontal.stretchHeight = false; + s_ButtonStyleHorizontal.margin = new RectOffset(4, 4, 4, 5); + s_ButtonStyleHorizontal.padding = new RectOffset(2, 2, 8, 0); + } + return s_ButtonStyleHorizontal; + } + } + + internal static GUIStyle rowStyleVertical + { + get + { + if (s_RowStyleVertical == null) + { + s_RowStyleVertical = new GUIStyle(); + s_RowStyleVertical.fontSize = k_FontSize; + s_RowStyleVertical.alignment = TextAnchor.MiddleLeft; + s_RowStyleVertical.stretchWidth = true; + s_RowStyleVertical.stretchHeight = false; + s_RowStyleVertical.margin = new RectOffset(0, 0, 0, 0); + s_RowStyleVertical.padding = new RectOffset(0, 0, 0, 0); + } + return s_RowStyleVertical; + } + } + + internal static GUIStyle rowStyleHorizontal + { + get + { + if (s_RowStyleHorizontal == null) + { + s_RowStyleHorizontal = new GUIStyle(); + s_RowStyleHorizontal.fontSize = k_FontSize; + s_RowStyleHorizontal.alignment = TextAnchor.MiddleCenter; + s_RowStyleHorizontal.stretchWidth = true; + s_RowStyleHorizontal.stretchHeight = false; + s_RowStyleHorizontal.margin = new RectOffset(0, 0, 0, 0); + s_RowStyleHorizontal.padding = new RectOffset(0, 0, 0, 0); + } + return s_RowStyleHorizontal; + } + } + + internal static GUIStyle altButtonStyle + { + get + { + if (s_AltButtonStyle == null) + { + s_AltButtonStyle = new GUIStyle(); + + s_AltButtonStyle.normal.background = IconUtility.GetIcon("Toolbar/AltButton_Normal", IconSkin.Pro); + s_AltButtonStyle.normal.textColor = EditorGUIUtility.isProSkin ? TEXT_COLOR_WHITE_NORMAL : Color.black; + s_AltButtonStyle.hover.background = IconUtility.GetIcon("Toolbar/AltButton_Hover", IconSkin.Pro); + s_AltButtonStyle.hover.textColor = EditorGUIUtility.isProSkin ? TEXT_COLOR_WHITE_HOVER : Color.black; + s_AltButtonStyle.active.background = IconUtility.GetIcon("Toolbar/AltButton_Pressed", IconSkin.Pro); + s_AltButtonStyle.active.textColor = EditorGUIUtility.isProSkin ? TEXT_COLOR_WHITE_ACTIVE : Color.black; + s_AltButtonStyle.alignment = TextAnchor.MiddleCenter; + s_AltButtonStyle.border = new RectOffset(1, 1, 1, 1); + s_AltButtonStyle.stretchWidth = false; + s_AltButtonStyle.stretchHeight = true; + s_AltButtonStyle.margin = new RectOffset(4, 4, 4, 4); + s_AltButtonStyle.padding = new RectOffset(2, 2, 1, 3); + } + return s_AltButtonStyle; + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuActionStyles.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuActionStyles.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..8f4c06dc4999f6210ae69426608501ab3b7cbc76 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuActionStyles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eff25082b866e6d468d04fc8a3f22e71 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuItems.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuItems.cs new file mode 100644 index 0000000000000000000000000000000000000000..bc6e090fa071eb1e371d7ff15ccfdc9534d0e5b6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuItems.cs @@ -0,0 +1,122 @@ +using UnityEngine; +using UnityEditor; +using System.Linq; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + static class MenuItems + { + static ProBuilderEditor editor + { + get { return ProBuilderEditor.instance; } + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/" + PreferenceKeys.pluginTitle + " Window", false, + PreferenceKeys.menuEditor)] + public static void OpenEditorWindow() + { + ProBuilderEditor.MenuOpenWindow(); + } + + static ProBuilderMesh[] selection + { + get { return Selection.transforms.GetComponents<ProBuilderMesh>(); } + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 1 ", true, + PreferenceKeys.menuVertexColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 2 ", true, + PreferenceKeys.menuVertexColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 3 ", true, + PreferenceKeys.menuVertexColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 4 ", true, + PreferenceKeys.menuVertexColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 5 ", true, + PreferenceKeys.menuVertexColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 6 ", true, + PreferenceKeys.menuVertexColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 7 ", true, + PreferenceKeys.menuVertexColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 8 ", true, + PreferenceKeys.menuVertexColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 9 	", true, + PreferenceKeys.menuVertexColors)] + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 0 �", true, + PreferenceKeys.menuVertexColors)] + public static bool VerifyApplyVertexColor() + { + return ProBuilderEditor.instance != null && MeshSelection.selectedVertexCount > 0; + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 1 ", false, + PreferenceKeys.menuVertexColors)] + public static void MenuSetVertexColorPreset1() + { + VertexColorPalette.SetFaceColors(1); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 2 ", false, + PreferenceKeys.menuVertexColors)] + public static void MenuSetVertexColorPreset2() + { + VertexColorPalette.SetFaceColors(2); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 3 ", false, + PreferenceKeys.menuVertexColors)] + public static void MenuSetVertexColorPreset3() + { + VertexColorPalette.SetFaceColors(3); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 4 ", false, + PreferenceKeys.menuVertexColors)] + public static void MenuSetVertexColorPreset4() + { + VertexColorPalette.SetFaceColors(4); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 5 ", false, + PreferenceKeys.menuVertexColors)] + public static void MenuSetVertexColorPreset5() + { + VertexColorPalette.SetFaceColors(5); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 6 ", false, + PreferenceKeys.menuVertexColors)] + public static void MenuSetVertexColorPreset6() + { + VertexColorPalette.SetFaceColors(6); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 7 ", false, + PreferenceKeys.menuVertexColors)] + public static void MenuSetVertexColorPreset7() + { + VertexColorPalette.SetFaceColors(7); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 8 ", false, + PreferenceKeys.menuVertexColors)] + public static void MenuSetVertexColorPreset8() + { + VertexColorPalette.SetFaceColors(8); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 9 	", false, + PreferenceKeys.menuVertexColors)] + public static void MenuSetVertexColorPreset9() + { + VertexColorPalette.SetFaceColors(9); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Vertex Colors/Set Selected Faces to Preset 0 �", false, + PreferenceKeys.menuVertexColors)] + public static void MenuSetVertexColorPreset0() + { + VertexColorPalette.SetFaceColors(0); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuItems.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuItems.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c46139cca14e45e9b3ea2bf64472659f0c2f6d49 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuItems.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05147f3a976fb174d987bc71dc70dee2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuOption.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuOption.cs new file mode 100644 index 0000000000000000000000000000000000000000..4cb9f2a35ef30f23ff17d62b4a4975c681f7bbc7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuOption.cs @@ -0,0 +1,87 @@ +using UnityEngine; +using UnityEditor; +using System.Reflection; +using System.Linq; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + /// <inheritdoc /> + /// <summary> + /// Options menu window container. Do not instantiate this yourself, the toolbar will handle opening option windows. + /// </summary> + sealed class MenuOption : EditorWindow + { + System.Action onSettingsGUI = null; + System.Action onSettingsDisable = null; + + internal static MenuOption Show(System.Action onSettingsGUI, System.Action onSettingsEnable, System.Action onSettingsDisable) + { + MenuOption win = EditorWindow.GetWindow<MenuOption>(true, "Options", true); + win.hideFlags = HideFlags.HideAndDontSave; + + if (win.onSettingsDisable != null) + win.onSettingsDisable(); + + if (onSettingsEnable != null) + onSettingsEnable(); + + win.onSettingsDisable = onSettingsDisable; + + win.onSettingsGUI = onSettingsGUI; + + // don't let window hang around after a script reload nukes the pb_MenuAction instances + object parent = ReflectionUtility.GetValue(win, typeof(EditorWindow), "m_Parent"); + object window = ReflectionUtility.GetValue(parent, typeof(EditorWindow), "window"); + ReflectionUtility.SetValue(parent, "mouseRayInvisible", true); + ReflectionUtility.SetValue(window, "m_DontSaveToLayout", true); + + win.Show(); + + return win; + } + + /// <summary> + /// Close any currently open option windows. + /// </summary> + public static void CloseAll() + { + foreach (MenuOption win in Resources.FindObjectsOfTypeAll<MenuOption>()) + win.Close(); + } + + void OnEnable() + { + autoRepaintOnSceneChange = true; + } + + void OnDisable() + { + if (onSettingsDisable != null) + onSettingsDisable(); + } + + void OnSelectionChange() + { + Repaint(); + } + + void OnHierarchyChange() + { + Repaint(); + } + + void OnGUI() + { + if (onSettingsGUI != null) + { + onSettingsGUI(); + } + else if (Event.current.type == EventType.Repaint) + { + EditorApplication.delayCall += CloseAll; + GUIUtility.ExitGUI(); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuOption.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuOption.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..fcbdcaf63aecb399eb6e08883bde7fbdd979491f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MenuOption.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b2832c5edf831bd45a81ea86f2f3c0db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MeshAndElementSelection.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MeshAndElementSelection.cs new file mode 100644 index 0000000000000000000000000000000000000000..11c7db6344eaee81f1211be3131a6c8c06f63866 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MeshAndElementSelection.cs @@ -0,0 +1,297 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.ProBuilder; +using PHandleUtility = UnityEngine.ProBuilder.HandleUtility; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Represents the state of a ProBuilderMesh and it's selected elements. + /// </summary> + abstract class MeshAndElementSelection + { + ProBuilderMesh m_Mesh; + + List<ElementGroup> m_ElementGroups; + + public ProBuilderMesh mesh + { + get { return m_Mesh; } + } + + public List<ElementGroup> elementGroups + { + get { return m_ElementGroups; } + } + + public MeshAndElementSelection(ProBuilderMesh mesh, bool collectCoincidentIndices) + { + m_Mesh = mesh; + m_ElementGroups = ElementGroup.GetElementGroups(mesh, collectCoincidentIndices); + } + } + + class ElementGroup + { + List<int> m_Indices; + Vector3 m_Position; + Quaternion m_Rotation; + + /// <value> + /// The pivot of this selection in world space. + /// </value> + public Vector3 position + { + get { return m_Position; } + } + + /// <value> + /// The rotation of this element group in world space. + /// </value> + public Quaternion rotation + { + get { return m_Rotation; } + } + + public IEnumerable<int> indices + { + get { return m_Indices; } + } + + public ElementGroup(List<int> indices, Vector3 pivot, Quaternion rotation) + { + m_Indices = indices; + m_Position = pivot; + m_Rotation = rotation; + } + + public static List<ElementGroup> GetElementGroups(ProBuilderMesh mesh, bool collectCoincident) + { + var groups = new List<ElementGroup>(); + var selectMode = ProBuilderEditor.selectMode; + + if (selectMode.ContainsFlag(SelectMode.Vertex | SelectMode.TextureVertex)) + { + foreach (var list in GetVertexSelectionGroups(mesh, collectCoincident)) + { + var pos = PHandleUtility.GetActiveElementPosition(mesh, list); + var rot = PHandleUtility.GetVertexRotation(mesh, HandleOrientation.ActiveElement, list); + groups.Add(new ElementGroup(list, pos, rot)); + } + } + else if (selectMode.ContainsFlag(SelectMode.Edge | SelectMode.TextureEdge)) + { + foreach (var list in GetEdgeSelectionGroups(mesh)) + { + var pos = PHandleUtility.GetActiveElementPosition(mesh, list); + var rot = PHandleUtility.GetEdgeRotation(mesh, HandleOrientation.ActiveElement, list); + + List<int> indices; + + if (collectCoincident) + { + indices = new List<int>(); + mesh.GetCoincidentVertices(list, indices); + } + else + { + indices = list.SelectMany(x => new int[] { x.a, x.b }).ToList(); + } + + groups.Add(new ElementGroup(indices, pos, rot)); + } + } + else if (selectMode.ContainsFlag(SelectMode.Face | SelectMode.TextureFace)) + { + foreach (var list in GetFaceSelectionGroups(mesh)) + { + var pos = PHandleUtility.GetActiveElementPosition(mesh, list); + var rot = PHandleUtility.GetFaceRotation(mesh, HandleOrientation.ActiveElement, list); + List<int> indices; + + if (collectCoincident) + { + indices = new List<int>(); + mesh.GetCoincidentVertices(list, indices); + } + else + { + indices = list.SelectMany(x => x.distinctIndexesInternal).ToList(); + } + + groups.Add(new ElementGroup(indices, pos, rot)); + } + } + + return groups; + } + + static IEnumerable<List<Face>> GetFaceSelectionGroups(ProBuilderMesh mesh) + { + var wings = WingedEdge.GetWingedEdges(mesh, mesh.selectedFacesInternal, true); + var filter = new HashSet<Face>(); + var groups = new List<List<Face>>(); + var groupIdx = -1; + var i = -1; + + foreach (var wing in wings) + { + var group = new List<Face>() {}; + CollectAdjacentFaces(wing, filter, group); + if (group.Count > 0) + { + i++; + // Make sure the last selected face is the last in the group + var idx = group.IndexOf(mesh.selectedFacesInternal[mesh.selectedFacesInternal.Length - 1]); + if (idx != -1 && idx < group.Count) + { + var item = group[idx]; + groupIdx = i; + group[idx] = group[group.Count - 1]; + group[group.Count - 1] = item; + } + groups.Add(group); + } + } + // Make sure the last selected face's group is the last in the groups + if (groupIdx != -1 && groupIdx < groups.Count) + { + var item = groups[groupIdx]; + groups[groupIdx] = groups[groups.Count - 1]; + groups[groups.Count - 1] = item; + } + + return groups; + } + + static IEnumerable<List<int>> GetVertexSelectionGroups(ProBuilderMesh mesh, bool collectCoincident) + { + if (!collectCoincident) + return mesh.selectedIndexesInternal.Select(x => new List<int>() { x }).ToList(); + + var shared = mesh.selectedSharedVertices; + + var groups = new List<List<int>>(); + var groupIdx = -1; + var i = -1; + foreach (var index in shared) + { + var coincident = new List<int>(); + mesh.GetCoincidentVertices(mesh.sharedVerticesInternal[index][0], coincident); + groups.Add(coincident); + i++; + // Make sure the last selected vertic is the last in the group + var idx = coincident.IndexOf(mesh.selectedIndexesInternal[mesh.selectedIndexesInternal.Length - 1]); + if (idx != -1 && idx < coincident.Count) + { + var item = coincident[idx]; + groupIdx = i; + coincident[idx] = coincident[coincident.Count - 1]; + coincident[coincident.Count - 1] = item; + } + } + + // Make sure the last selected vertic's group is the last in the groups + if (groupIdx != -1 && groupIdx < groups.Count) + { + var item = groups[groupIdx]; + groups[groupIdx] = groups[groups.Count - 1]; + groups[groups.Count - 1] = item; + } + + return groups; + } + + static IEnumerable<List<Edge>> GetEdgeSelectionGroups(ProBuilderMesh mesh) + { + var edges = EdgeLookup.GetEdgeLookup(mesh.selectedEdgesInternal, mesh.sharedVertexLookup); + var groups = new List<SimpleTuple<HashSet<int>, List<Edge>>>(); + + foreach (var edge in edges) + { + var foundMatch = false; + + foreach (var kvp in groups) + { + if (kvp.item1.Contains(edge.common.a) || kvp.item1.Contains(edge.common.b)) + { + kvp.item1.Add(edge.common.a); + kvp.item1.Add(edge.common.b); + kvp.item2.Add(edge.local); + foundMatch = true; + break; + } + } + + if (!foundMatch) + groups.Add(new SimpleTuple<HashSet<int>, List<Edge>>( + new HashSet<int>() { edge.common.a, edge.common.b }, + new List<Edge>() { edge.local })); + } + + // collect overlapping groups (happens in cases where selection order begins as two separate groups but + // becomes one) + var res = new List<List<Edge>>(); + var overlap = new HashSet<int>(); + var j = -1; + var groupIdx = -1; + + for (int i = 0, c = groups.Count; i < c; i++) + { + if (overlap.Contains(i)) + continue; + + List<Edge> grp = groups[i].item2; + + for (int n = i + 1; n < c; n++) + { + if (groups[i].item1.Overlaps(groups[n].item1)) + { + overlap.Add(n); + grp.AddRange(groups[n].item2); + } + } + j++; + // Make sure the last selected edge is the last in the group + var idx = grp.IndexOf(mesh.selectedEdgesInternal[mesh.selectedEdgesInternal.Length - 1]); + if (idx != -1 && idx < grp.Count) + { + var item = grp[idx]; + groupIdx = j; + grp[idx] = grp[grp.Count - 1]; + grp[grp.Count - 1] = item; + } + res.Add(grp); + } + + // Make sure the last selected edge's group is the last in the groups + if (groupIdx != -1 && groupIdx < res.Count) + { + var item = res[groupIdx]; + res[groupIdx] = res[res.Count - 1]; + res[res.Count - 1] = item; + } + + return res; + } + + static void CollectAdjacentFaces(WingedEdge wing, HashSet<Face> filter, List<Face> group) + { + if (!filter.Add(wing.face)) + return; + + group.Add(wing.face); + + var enumerator = new WingedEdgeEnumerator(wing); + + while (enumerator.MoveNext()) + { + var opposite = enumerator.Current.opposite; + if (opposite == null) + continue; + CollectAdjacentFaces(opposite, filter, group); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MeshAndElementSelection.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MeshAndElementSelection.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7046bed8f0841fddb377bdee24a67cb0bc067e7e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MeshAndElementSelection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1266b9f3f7ac478b97ce34f935eadc3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MeshSelection.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MeshSelection.cs new file mode 100644 index 0000000000000000000000000000000000000000..f627a56b2a54027e538dd8f1463cad55da61a980 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MeshSelection.cs @@ -0,0 +1,586 @@ +using UnityEngine; +using System.Linq; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Helper functions for working with Unity object selection and ProBuilder mesh attribute selections. + /// </summary> + [InitializeOnLoad] + public static class MeshSelection + { + static List<ProBuilderMesh> s_TopSelection = new List<ProBuilderMesh>(); + static ProBuilderMesh s_ActiveMesh; + static List<MeshAndElementSelection> s_ElementSelection = new List<MeshAndElementSelection>(); + + static bool s_TotalElementCountCacheIsDirty = true; + static bool s_SelectedElementGroupsDirty = true; + static bool s_SelectedFacesInEditAreaDirty = true; + static bool s_SelectionBoundsDirty = true; + + static Bounds s_SelectionBounds = new Bounds(); + static Dictionary<ProBuilderMesh, List<Face>> s_SelectedFacesInEditArea = new Dictionary<ProBuilderMesh, List<Face>>(); + + /// <value> + /// An axis-aligned bounding box encompassing the selected elements. + /// </value> + public static Bounds bounds + { + get + { + if(s_SelectionBoundsDirty) + RecalculateSelectionBounds(); + return s_SelectionBounds; + } + } + + static int s_TotalVertexCount; + static int s_TotalFaceCount; + static int s_TotalEdgeCount; + static int s_TotalCommonVertexCount; + static int s_TotalVertexCountCompiled; + static int s_TotalTriangleCountCompiled; + + /// <value> + /// How many ProBuilderMesh components are currently selected. Corresponds to the length of Top. + /// </value> + public static int selectedObjectCount { get; private set; } + + /// <value> + /// The sum of all selected ProBuilderMesh selected vertex counts. + /// </value> + /// <seealso cref="selectedSharedVertexCount"/> + public static int selectedVertexCount { get; private set; } + + /// <value> + /// The sum of all selected ProBuilderMesh selected shared vertex counts. + /// </value> + /// <seealso cref="selectedVertexCount"/> + public static int selectedSharedVertexCount { get; private set; } + + /// <value> + /// The sum of all selected ProBuilderMesh selected face counts. + /// </value> + public static int selectedFaceCount { get; private set; } + + /// <value> + /// The sum of all selected ProBuilderMesh selected edge counts. + /// </value> + public static int selectedEdgeCount { get; private set; } + + // per-object selected element maxes + internal static int selectedFaceCountObjectMax { get; private set; } + internal static int selectedEdgeCountObjectMax { get; private set; } + internal static int selectedVertexCountObjectMax { get; private set; } + internal static int selectedSharedVertexCountObjectMax { get; private set; } + internal static int selectedCoincidentVertexCountMax { get; private set; } + + // Faces that need to be refreshed when moving or modifying the actual selection + internal static Dictionary<ProBuilderMesh, List<Face>> selectedFacesInEditZone + { + get + { + if(s_SelectedFacesInEditAreaDirty) + RecalculateFacesInEditableArea(); + return s_SelectedFacesInEditArea; + } + } + + internal static void InvalidateElementSelection() + { + s_SelectedElementGroupsDirty = true; + } + + internal static IEnumerable<MeshAndElementSelection> elementSelection + { + get + { + RecalculateSelectedElementGroups(); + return s_ElementSelection; + } + } + + static MeshSelection() + { + Selection.selectionChanged += OnObjectSelectionChanged; + Undo.undoRedoPerformed += EnsureMeshSelectionIsValid; + ProBuilderMesh.elementSelectionChanged += ElementSelectionChanged; + EditorMeshUtility.meshOptimized += (x, y) => { s_TotalElementCountCacheIsDirty = true; }; + ProBuilderMesh.componentWillBeDestroyed += RemoveMeshFromSelectionInternal; + ProBuilderMesh.componentHasBeenReset += RefreshSelectionAfterComponentReset; + OnObjectSelectionChanged(); + } + + /// <value> + /// Returns the active selected mesh. + /// </value> + public static ProBuilderMesh activeMesh + { + get + { + // If shift selecting between objects already selected there won't be an OnObjectSelectionChanged + // triggered which might lead to Selection.activeGameObject and s_ActiveMesh to be out of sync. + // This check below is to handle this situation. + GameObject activeGo = (s_ActiveMesh ? s_ActiveMesh.gameObject : null); + + if (activeGo != Selection.activeGameObject) + s_ActiveMesh = Selection.activeGameObject != null ? Selection.activeGameObject.GetComponent<ProBuilderMesh>() : null; + + return s_ActiveMesh; + } + } + + internal static Face activeFace + { + get { return activeMesh != null ? activeMesh.selectedFacesInternal.LastOrDefault() : null; } + } + + /// <value> + /// Receive notifications when the object selection changes. + /// </value> + public static event System.Action objectSelectionChanged; + + static HashSet<ProBuilderMesh> s_UnitySelectionChangeMeshes = new HashSet<ProBuilderMesh>(); + + internal static void OnObjectSelectionChanged() + { + // GameObjects returns both parent and child when both are selected, where transforms only returns the top-most + // transform. + s_UnitySelectionChangeMeshes.Clear(); + s_ElementSelection.Clear(); + s_ActiveMesh = null; + + var gameObjects = Selection.gameObjects; + + for (int i = 0, c = gameObjects.Length; i < c; i++) + { +#if UNITY_2019_3_OR_NEWER + ProBuilderMesh mesh; + if(gameObjects[i].TryGetComponent<ProBuilderMesh>(out mesh)) +#else + var mesh = gameObjects[i].GetComponent<ProBuilderMesh>(); + if (mesh != null) +#endif + { + if (gameObjects[i] == Selection.activeGameObject) + s_ActiveMesh = mesh; + + s_UnitySelectionChangeMeshes.Add(mesh); + } + } + + for (int i = 0, c = s_TopSelection.Count; i < c; i++) + { + if (!s_UnitySelectionChangeMeshes.Contains(s_TopSelection[i])) + { + if(s_TopSelection[i] != null) + UndoUtility.RecordSelection(s_TopSelection[i], "Selection Change"); + s_TopSelection[i].ClearSelection(); + } + } + + s_TopSelection.Clear(); + + foreach (var i in s_UnitySelectionChangeMeshes) + { + // don't add prefabs or assets to the mesh selection + if(string.IsNullOrEmpty(AssetDatabase.GetAssetPath(i.gameObject))) + s_TopSelection.Add(i); + } + + selectedObjectCount = s_TopSelection.Count; + + OnComponentSelectionChanged(); + + if (objectSelectionChanged != null) + objectSelectionChanged(); + + s_UnitySelectionChangeMeshes.Clear(); + } + + internal static void OnComponentSelectionChanged() + { + s_TotalElementCountCacheIsDirty = true; + s_SelectedFacesInEditAreaDirty = true; + s_SelectedElementGroupsDirty = true; + s_SelectionBoundsDirty = true; + + selectedVertexCount = 0; + selectedFaceCount = 0; + selectedEdgeCount = 0; + selectedSharedVertexCount = 0; + + selectedFaceCountObjectMax = 0; + selectedVertexCountObjectMax = 0; + selectedSharedVertexCountObjectMax = 0; + selectedCoincidentVertexCountMax = 0; + selectedEdgeCountObjectMax = 0; + + RecalculateSelectedComponentCounts(); + } + + /// <summary> + /// Ensure the mesh selection matches the current Unity selection. Called after Undo/Redo, as adding or removing + /// mesh components can cause the selection to de-sync without emitting a selection changed event. + /// </summary> + internal static void EnsureMeshSelectionIsValid() + { + for (int i = 0; i < topInternal.Count; i++) + { + if (topInternal[i] == null || !Selection.Contains(topInternal[i].gameObject)) + { + EditorApplication.delayCall += OnObjectSelectionChanged; + break; + } + } + } + + static void ElementSelectionChanged(ProBuilderMesh mesh) + { + InvalidateElementSelection(); + } + + internal static void RecalculateSelectedElementGroups() + { + if (!s_SelectedElementGroupsDirty) + return; + + s_SelectedElementGroupsDirty = false; + s_ElementSelection.Clear(); + + var activeTool = ProBuilderEditor.activeTool; + + if (activeTool != null) + { + foreach (var mesh in s_TopSelection) + s_ElementSelection.Add(activeTool.GetElementSelection(mesh, VertexManipulationTool.pivotPoint)); + } + } + + internal static void RecalculateSelectedComponentCounts() + { + for (var i = 0; i < topInternal.Count; i++) + { + var mesh = topInternal[i]; + + selectedFaceCount += mesh.selectedFaceCount; + selectedEdgeCount += mesh.selectedEdgeCount; + selectedVertexCount += mesh.selectedIndexesInternal.Length; + selectedSharedVertexCount += mesh.selectedSharedVerticesCount; + + selectedVertexCountObjectMax = System.Math.Max(selectedVertexCountObjectMax, mesh.selectedIndexesInternal.Length); + selectedSharedVertexCountObjectMax = System.Math.Max(selectedSharedVertexCountObjectMax, mesh.selectedSharedVerticesCount); + selectedCoincidentVertexCountMax = System.Math.Max(selectedCoincidentVertexCountMax, mesh.selectedCoincidentVertexCount); + selectedFaceCountObjectMax = System.Math.Max(selectedFaceCountObjectMax, mesh.selectedFaceCount); + selectedEdgeCountObjectMax = System.Math.Max(selectedEdgeCountObjectMax, mesh.selectedEdgeCount); + } + } + + internal static void RecalculateSelectionBounds() + { + s_SelectionBoundsDirty = false; + s_SelectionBounds = new Bounds(); + var boundsInitialized = false; + + for (int i = 0, c = topInternal.Count; i < c; i++) + { + var mesh = topInternal[i]; + + // Undo causes this state + if (mesh == null) + return; + + if (!boundsInitialized && mesh.selectedVertexCount > 0) + { + boundsInitialized = true; + s_SelectionBounds = new Bounds(mesh.transform.TransformPoint(mesh.positionsInternal[mesh.selectedIndexesInternal[0]]), Vector3.zero); + } + + if (mesh.selectedVertexCount > 0) + { + var shared = mesh.sharedVerticesInternal; + + foreach (var sharedVertex in mesh.selectedSharedVertices) + s_SelectionBounds.Encapsulate(mesh.transform.TransformPoint(mesh.positionsInternal[shared[sharedVertex][0]])); + } + } + } + + static void RecalculateFacesInEditableArea() + { + s_SelectedFacesInEditAreaDirty = false; + s_SelectedFacesInEditArea.Clear(); + + foreach (var mesh in topInternal) + { + s_SelectedFacesInEditArea.Add(mesh, ElementSelection.GetNeighborFaces(mesh, mesh.selectedIndexesInternal)); + } + } + + /// <summary> + /// Get all selected ProBuilderMesh components. Corresponds to <![CDATA[Selection.gameObjects.Select(x => x.GetComponent<ProBuilderMesh>().Where(y => y != null);]]>. + /// </summary> + /// <value>An array of the currently selected ProBuilderMesh components. Does not include children of selected objects.</value> + public static IEnumerable<ProBuilderMesh> top + { + get { return new ReadOnlyCollection<ProBuilderMesh>(s_TopSelection); } + } + + internal static List<ProBuilderMesh> topInternal + { + get { return s_TopSelection; } + } + + /// <summary> + /// Get all selected ProBuilderMesh components, including those in children of selected objects. + /// </summary> + /// <returns>All selected ProBuilderMesh components, including those in children of selected objects.</returns> + public static IEnumerable<ProBuilderMesh> deep + { + get { return Selection.gameObjects.SelectMany(x => x.GetComponentsInChildren<ProBuilderMesh>()); } + } + + internal static bool Contains(ProBuilderMesh mesh) + { + return s_TopSelection.Contains(mesh); + } + + /// <value> + /// Get the number of all selected vertices across the selected ProBuilder meshes. + /// </value> + /// <remarks> + /// This is the ProBuilderMesh.vertexCount, not UnityEngine.Mesh.vertexCount. To get the optimized mesh vertex count, + /// see `totalVertexCountCompiled` for the vertex count as is rendered in the scene. + /// </remarks> + public static int totalVertexCount { get { RebuildElementCounts(); return s_TotalVertexCount; } } + + /// <value> + /// Get the number of all selected vertices across the selected ProBuilder meshes, excluding coincident duplicates. + /// </value> + public static int totalCommonVertexCount { get { RebuildElementCounts(); return s_TotalCommonVertexCount; } } + + internal static int totalVertexCountOptimized { get { RebuildElementCounts(); return s_TotalVertexCountCompiled; } } + + /// <value> + /// Sum of all selected ProBuilderMesh object faceCount properties. + /// </value> + public static int totalFaceCount { get { RebuildElementCounts(); return s_TotalFaceCount; } } + + /// <value> + /// Sum of all selected ProBuilderMesh object edgeCount properties. + /// </value> + public static int totalEdgeCount { get { RebuildElementCounts(); return s_TotalEdgeCount; } } + + /// <value> + /// Get the sum of all selected ProBuilder compiled mesh triangle counts (3 indexes make up a triangle, or 4 indexes if topology is quad). + /// </value> + public static int totalTriangleCountCompiled { get { RebuildElementCounts(); return s_TotalTriangleCountCompiled; } } + + static void RebuildElementCounts() + { + if (!s_TotalElementCountCacheIsDirty) + return; + + try + { + s_TotalVertexCount = topInternal.Sum(x => x.vertexCount); + s_TotalFaceCount = topInternal.Sum(x => x.faceCount); + s_TotalEdgeCount = topInternal.Sum(x => x.edgeCount); + s_TotalCommonVertexCount = topInternal.Sum(x => x.sharedVerticesInternal.Length); + s_TotalVertexCountCompiled = topInternal.Sum(x => x.mesh == null ? 0 : x.mesh.vertexCount); + s_TotalTriangleCountCompiled = topInternal.Sum(x => (int)UnityEngine.ProBuilder.MeshUtility.GetPrimitiveCount(x.mesh)); + s_TotalElementCountCacheIsDirty = false; + } + catch + { + // expected when UndoRedo is called + } + } + + internal static void AddToSelection(GameObject t) + { + if (t == null || Selection.objects.Contains(t)) + return; + + int len = Selection.objects.Length; + + Object[] temp = new Object[len + 1]; + + for (int i = 0; i < len; i++) + temp[i] = Selection.objects[i]; + + temp[len] = t; + + Selection.activeObject = t; + Selection.objects = temp; + } + + internal static void RemoveFromSelection(GameObject t) + { + int ind = System.Array.IndexOf(Selection.objects, t); + if (ind < 0) + return; + + Object[] temp = new Object[Selection.objects.Length - 1]; + + for (int i = 0; i < temp.Length; i++) + { + if (i != ind) + temp[i] = Selection.objects[i]; + } + + Selection.objects = temp; + + if (Selection.activeGameObject == t) + Selection.activeObject = temp.FirstOrDefault(); + } + + internal static void MakeActiveObject(GameObject t) + { + if (t == null || !Selection.objects.Contains(t)) + return; + + int ind = System.Array.IndexOf(Selection.objects, t); + int len = Selection.objects.Length; + + Object[] temp = new Object[len]; + + for (int i = 0; i < len - 1 ; i++) + { + if(i == ind) + { + temp[i] = Selection.objects[len - 1]; + } + else + { + temp[i] = Selection.objects[i]; + } + } + + temp[len - 1] = t; + + Selection.activeObject = t; + Selection.objects = temp; + } + + internal static void RemoveMeshFromSelectionInternal(ProBuilderMesh mesh) + { + if (s_TopSelection.Contains(mesh)) + s_TopSelection.Remove(mesh); + } + + internal static void RefreshSelectionAfterComponentReset(ProBuilderMesh mesh) + { + ProBuilderEditor.Refresh(true); + } + + internal static void SetSelection(IList<GameObject> newSelection) + { + UndoUtility.RecordSelection(topInternal.ToArray(), "Change Selection"); + ClearElementAndObjectSelection(); + + // if the previous tool was set to none, use Tool.Move + if (Tools.current == Tool.None) + Tools.current = Tool.Move; + + var newCount = newSelection != null ? newSelection.Count : 0; + + if (newCount > 0) + { + Selection.activeTransform = newSelection[newCount - 1].transform; + Selection.objects = newSelection.ToArray(); + } + else + { + Selection.activeTransform = null; + } + } + + internal static void SetSelection(GameObject go) + { + UndoUtility.RecordSelection(topInternal.ToArray(), "Change Selection"); + ClearElementAndObjectSelection(); + AddToSelection(go); + } + + /// <summary> + /// Clears all selected mesh attributes in the current selection. This means triangles, faces, and edges, but not objects. + /// </summary> + public static void ClearElementSelection() + { + if (ProBuilderEditor.instance) + ProBuilderEditor.instance.ClearElementSelection(); + s_TotalElementCountCacheIsDirty = true; + if (objectSelectionChanged != null) + objectSelectionChanged(); + } + + /// <summary> + /// Clear both the Selection.objects and ProBuilder mesh attribute selections. + /// </summary> + public static void ClearElementAndObjectSelection() + { + if (ProBuilderEditor.instance) + ProBuilderEditor.instance.ClearElementSelection(); + Selection.objects = new Object[0]; + } + + internal static Vector3 GetHandlePosition() + { + var active = GetActiveSelectionGroup(); + + if(active == null || active.mesh == null) + return Vector3.zero; + + switch (VertexManipulationTool.pivotPoint) + { + case PivotPoint.ActiveElement: + case PivotPoint.IndividualOrigins: + if (!active.elementGroups.Any()) + goto case default; + return active.elementGroups.Last().position; + + case PivotPoint.Center: + default: + return bounds.center; + } + } + + internal static Quaternion GetHandleRotation() + { + var active = GetActiveSelectionGroup(); + + if(active == null || active.mesh == null) + return Quaternion.identity; + + switch (VertexManipulationTool.handleOrientation) + { + case HandleOrientation.ActiveObject: + return active.mesh.transform.rotation; + + case HandleOrientation.ActiveElement: + if (!active.elementGroups.Any()) + goto case HandleOrientation.ActiveObject; + return active.elementGroups.Last().rotation; + + default: + return Quaternion.identity; + } + } + + internal static MeshAndElementSelection GetActiveSelectionGroup() + { + foreach (var pair in elementSelection) + { + if (pair.mesh == activeMesh) + return pair; + } + + return null; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MeshSelection.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MeshSelection.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..47849a7a9e356032b16a2b8d8b42b80ccee8a329 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/MeshSelection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bec5fadb27a8bd249a3d1051e2e8f970 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Model.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Model.cs new file mode 100644 index 0000000000000000000000000000000000000000..68d39a5cd671e8f45440e203a8e0a373a1079532 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Model.cs @@ -0,0 +1,93 @@ +using UnityEngine; +using System.Linq; +using System.Collections.Generic; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// A mesh, material and optional transform matrix combination. + /// </summary> + sealed class Model + { + // The name of this model. + public string name; + + // vertices + public Vertex[] vertices; + + // Submeshes + public Submesh[] submeshes; + + public Material[] materials; + + // Optional transform matrix. + public Matrix4x4 matrix; + + /// <summary> + /// Vertex count for the mesh (corresponds to vertices length). + /// </summary> + public int vertexCount + { + get + { + return vertices == null ? 0 : vertices.Length; + } + } + + /// <summary> + /// Submesh count. + /// </summary> + public int submeshCount { get { return submeshes.Length; } } + + public Model() + {} + + public Model(string name, Mesh mesh, Material material) : this(name, mesh, new Material[] { material }, Matrix4x4.identity) + {} + + public Model(string name, Mesh mesh, Material[] materials, Matrix4x4 matrix) + { + this.name = name; + this.vertices = mesh.GetVertices(); + this.matrix = matrix; + this.submeshes = new Submesh[mesh.subMeshCount]; + this.materials = new Material[mesh.subMeshCount]; + int matCount = materials != null ? materials.Length : 0; + + for (int submeshIndex = 0; submeshIndex < mesh.subMeshCount; submeshIndex++) + { + submeshes[submeshIndex] = new Submesh(mesh, submeshIndex); + + if (matCount < 1) + materials[submeshIndex] = BuiltinMaterials.defaultMaterial; + else + this.materials[submeshIndex] = materials[Math.Clamp(submeshIndex, 0, matCount - 1)]; + } + } + + /// <summary> + /// Create a pb_Model from a pb_Object, optionally converting to quad topology. + /// </summary> + /// <param name="name"></param> + /// <param name="mesh"></param> + /// <param name="quads"></param> + public Model(string name, ProBuilderMesh mesh, bool quads = true) + { + mesh.ToMesh(quads ? MeshTopology.Quads : MeshTopology.Triangles); + mesh.Refresh(RefreshMask.UV | RefreshMask.Colors | RefreshMask.Normals | RefreshMask.Tangents); + this.name = name; + vertices = mesh.GetVertices(); + submeshes = Submesh.GetSubmeshes(mesh.facesInternal, MaterialUtility.GetMaterialCount(mesh.renderer), quads ? MeshTopology.Quads : MeshTopology.Triangles); + materials = new Material[submeshCount]; + + for (int i = 0; i < submeshCount; ++i) + materials[i] = mesh.renderer.sharedMaterials[Math.Clamp(i, 0, materials.Length - 1)]; + + matrix = mesh.transform.localToWorldMatrix; + mesh.ToMesh(MeshTopology.Triangles); + mesh.Refresh(); + mesh.Optimize(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Model.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Model.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3ffd022b1ae42b251f8d76223ed10c69f6aab252 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Model.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: afd663fb17a03f749915886536580b91 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ObjExporter.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ObjExporter.cs new file mode 100644 index 0000000000000000000000000000000000000000..ef05565e91edd3e3a1033a71ec78814df8dac528 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ObjExporter.cs @@ -0,0 +1,567 @@ +using UnityEngine; +using UnityEditor; +using System.IO; +using System.Text; +using System.Linq; +using System.Collections.Generic; +using System.Globalization; +using System.Threading; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// A set of options used when exporting OBJ models. + /// </summary> + sealed class ObjOptions + { + // Coordinate system to use when exporting. Unity is left handed where most other + // applications are right handed. + public enum Handedness + { + Left, + Right + }; + + // Convert from left to right handed coordinates on export? + public Handedness handedness = Handedness.Right; + + // If copyTextures is true then the material textures will be copied to the export path. + // If false the material library will point to the existing texture path in the Unity project. + public bool copyTextures = true; + + // Should meshes be exported in local (false) or world (true) space. + public bool applyTransforms = true; + + // Some modeling programs support reading vertex colors as an additional {r, g, b} following + // the vertex position {x, y, z} + public bool vertexColors = false; + + // Write the texture map offset and scale. Not supported by all importers. + public bool textureOffsetScale = false; + } + + /// <summary> + /// Utilities for writing mesh data to the Wavefront OBJ format. + /// </summary> + static class ObjExporter + { + /** + * Standard shader defines: + * Albedo | map_Kd | _MainTex + * Metallic | Pm/map_Pm* | _MetallicGlossMap + * Normal | map_bump / bump | _BumpMap + * Height | disp | _ParallaxMap + * Occlusion | | _OcclusionMap + * Emission | Ke/map_Ke* | _EmissionMap + * DetailMask | map_d | _DetailMask + * DetailAlbedo | | _DetailAlbedoMap + * DetailNormal | | _DetailNormalMap + * + * *http://exocortex.com/blog/extending_wavefront_mtl_to_support_pbr + */ + static Dictionary<string, string> s_TextureMapKeys = new Dictionary<string, string> + { + { "_MainTex", "map_Kd" }, + { "_MetallicGlossMap", "map_Pm" }, + { "_BumpMap", "bump" }, + { "_ParallaxMap", "disp" }, + { "_EmissionMap", "map_Ke" }, + { "_DetailMask", "map_d" }, + // Alternative naming conventions - possibly useful if someone + // runs into an issue with another 3d modeling app. + // { "_MetallicGlossMap", "Pm" }, + // { "_BumpMap", "map_bump" }, + // { "_BumpMap", "norm" }, + // { "_EmissionMap", "Ke" }, + }; + + /// <summary> + /// Write the contents of a single obj & mtl from a set of models. + /// </summary> + /// <param name="name"></param> + /// <param name="models"></param> + /// <param name="objContents"></param> + /// <param name="mtlContents"></param> + /// <param name="textures"></param> + /// <param name="options"></param> + /// <returns></returns> + public static bool Export(string name, IEnumerable<Model> models, out string objContents, out string mtlContents, out List<string> textures, ObjOptions options = null) + { + if (models == null || models.Count() < 1) + { + objContents = null; + mtlContents = null; + textures = null; + return false; + } + + Dictionary<Material, string> materialMap = null; + + if (options == null) + options = new ObjOptions(); + + mtlContents = WriteMtlContents(models, options, out materialMap, out textures); + objContents = WriteObjContents(name, models, materialMap, options); + + return true; + } + + static string WriteObjContents(string name, IEnumerable<Model> models, Dictionary<Material, string> materialMap, ObjOptions options) + { + // Empty names in OBJ groups can crash some 3d programs (meshlab) + if (string.IsNullOrEmpty(name)) + name = "ProBuilderModel"; + + StringBuilder sb = new StringBuilder(); + + SemVer version; + + if(Version.TryGetPackageVersion(out version)) + sb.AppendLine("# ProBuilder " + version.MajorMinorPatch); + else + sb.AppendLine("# ProBuilder"); + sb.AppendLine("# https://unity3d.com/unity/features/worldbuilding/probuilder"); + sb.AppendLine(string.Format("# {0}", System.DateTime.Now)); + sb.AppendLine(); + sb.AppendLine(string.Format("mtllib ./{0}.mtl", name.Replace(" ", "_"))); + sb.AppendLine(string.Format("o {0}", name)); + sb.AppendLine(); + + // obj orders indices 1 indexed + int positionOffset = 1; + int normalOffset = 1; + int textureOffset = 1; + + bool reverseWinding = options.handedness == ObjOptions.Handedness.Right; + float handedness = options.handedness == ObjOptions.Handedness.Left ? 1f : -1f; + + foreach (Model model in models) + { + int subMeshCount = model.submeshCount; + Matrix4x4 matrix = options.applyTransforms ? model.matrix : Matrix4x4.identity; + + int vertexCount = model.vertexCount; + + Vector3[] positions; + Color[] colors; + Vector2[] textures0; + Vector3[] normals; + Vector4[] tangent; + Vector2[] uv2; + List<Vector4> uv3; + List<Vector4> uv4; + + MeshArrays attribs = MeshArrays.Position | MeshArrays.Normal | MeshArrays.Texture0; + + if (options.vertexColors) + attribs = attribs | MeshArrays.Color; + + Vertex.GetArrays(model.vertices, out positions, out colors, out textures0, out normals, out tangent, out uv2, out uv3, out uv4, attribs); + + // Can skip this entirely if handedness matches Unity & not applying transforms. + // matrix is set to identity if not applying transforms. + if (options.handedness != ObjOptions.Handedness.Left || options.applyTransforms) + { + for (int i = 0; i < vertexCount; i++) + { + if (positions != null) + { + positions[i] = matrix.MultiplyPoint3x4(positions[i]); + positions[i].x *= handedness; + } + + if (normals != null) + { + normals[i] = matrix.MultiplyVector(normals[i]); + normals[i].x *= handedness; + } + } + } + + sb.AppendLine(string.Format("g {0}", model.name)); + + Dictionary<int, int> positionIndexMap; + var positionCount = AppendPositions(sb, positions, colors, true, options.vertexColors, out positionIndexMap); + + sb.AppendLine(); + + Dictionary<int, int> textureIndexMap; + var textureCount = AppendArrayVec2(sb, textures0, "vt", true, out textureIndexMap); + + sb.AppendLine(); + + Dictionary<int, int> normalIndexMap; + var normalCount = AppendArrayVec3(sb, normals, "vn", true, out normalIndexMap); + + sb.AppendLine(); + + // Material assignment + for (int submeshIndex = 0; submeshIndex < subMeshCount; submeshIndex++) + { + Submesh submesh = model.submeshes[submeshIndex]; + + string materialName = ""; + + if (materialMap.TryGetValue(model.materials[submeshIndex], out materialName)) + sb.AppendLine(string.Format("usemtl {0}", materialName)); + else + sb.AppendLine(string.Format("usemtl {0}", "null")); + + int[] indexes = submesh.m_Indexes; + int inc = submesh.m_Topology == MeshTopology.Quads ? 4 : 3; + int inc1 = inc - 1; + + int o0 = reverseWinding ? inc1 : 0; + int o1 = reverseWinding ? inc1 - 1 : 1; + int o2 = reverseWinding ? inc1 - 2 : 2; + int o3 = reverseWinding ? inc1 - 3 : 3; + + for (int ff = 0; ff < indexes.Length; ff += inc) + { + int p0 = positionIndexMap[indexes[ff + o0]] + positionOffset; + int p1 = positionIndexMap[indexes[ff + o1]] + positionOffset; + int p2 = positionIndexMap[indexes[ff + o2]] + positionOffset; + + int t0 = textureIndexMap[indexes[ff + o0]] + textureOffset; + int t1 = textureIndexMap[indexes[ff + o1]] + textureOffset; + int t2 = textureIndexMap[indexes[ff + o2]] + textureOffset; + + int n0 = normalIndexMap[indexes[ff + o0]] + normalOffset; + int n1 = normalIndexMap[indexes[ff + o1]] + normalOffset; + int n2 = normalIndexMap[indexes[ff + o2]] + normalOffset; + + if (inc == 4) + { + int p3 = positionIndexMap[indexes[ff + o3]] + positionOffset; + int n3 = normalIndexMap[indexes[ff + o3]] + normalOffset; + int t3 = textureIndexMap[indexes[ff + o3]] + textureOffset; + + sb.AppendLine(string.Format(CultureInfo.InvariantCulture, + "f {0}/{4}/{8} {1}/{5}/{9} {2}/{6}/{10} {3}/{7}/{11}", + p0, p1, p2, p3, + t0, t1, t2, t3, + n0, n1, n2, n3 + )); + } + else + { + sb.AppendLine(string.Format(CultureInfo.InvariantCulture, + "f {0}/{3}/{6} {1}/{4}/{7} {2}/{5}/{8}", + p0, p1, p2, + t0, t1, t2, + n0, n1, n2 + )); + + } + } + + sb.AppendLine(); + } + + positionOffset += positionCount; + normalOffset += normalCount; + textureOffset += textureCount; + } + + return sb.ToString(); + } + + /// <summary> + /// Write the material file for an OBJ. This function handles making the list of Materials unique & ensuring unique names for each group. Material to named mtl group are stored in materialMap. + /// </summary> + /// <param name="models"></param> + /// <param name="options"></param> + /// <param name="materialMap"></param> + /// <param name="textures"></param> + /// <returns></returns> + static string WriteMtlContents(IEnumerable<Model> models, ObjOptions options, out Dictionary<Material, string> materialMap, out List<string> textures) + { + materialMap = new Dictionary<Material, string>(); + + foreach (Model model in models) + { + for (int i = 0, c = model.submeshCount; i < c; i++) + { + Material material = model.materials[i]; + + if (material == null) + continue; + + if (!materialMap.ContainsKey(material)) + { + string escapedName = material.name.Replace(" ", "_"); + string name = escapedName; + int nameIncrement = 1; + + while (materialMap.Any(x => x.Value.Equals(name))) + name = string.Format("{0}_{1}", escapedName, nameIncrement++); + + materialMap.Add(material, name); + } + } + } + + StringBuilder sb = new StringBuilder(); + textures = new List<string>(); + + foreach (KeyValuePair<Material, string> group in materialMap) + { + Material mat = group.Key; + + sb.AppendLine(string.Format("newmtl {0}", group.Value)); + + // Texture maps + if (mat.shader != null) + { + for (int i = 0; i < ShaderUtil.GetPropertyCount(mat.shader); i++) + { + if (ShaderUtil.GetPropertyType(mat.shader, i) != ShaderUtil.ShaderPropertyType.TexEnv) + continue; + + string texPropertyName = ShaderUtil.GetPropertyName(mat.shader, i); + + Texture texture = mat.GetTexture(texPropertyName); + + string path = texture != null ? AssetDatabase.GetAssetPath(texture) : null; + + if (!string.IsNullOrEmpty(path)) + { + if (options.copyTextures) + textures.Add(path); + + // remove "Assets/" from start of path + path = path.Substring(7, path.Length - 7); + + string textureName = options.copyTextures ? Path.GetFileName(path) : string.Format("{0}/{1}", Application.dataPath, path); + + string mtlKey = null; + + if (s_TextureMapKeys.TryGetValue(texPropertyName, out mtlKey)) + { + Vector2 offset = mat.GetTextureOffset(texPropertyName); + Vector2 scale = mat.GetTextureScale(texPropertyName); + + if (options.textureOffsetScale) + sb.AppendLine(string.Format(CultureInfo.InvariantCulture, "{0} -o {1} {2} -s {3} {4} {5}", mtlKey, offset.x, offset.y, scale.x, scale.y, textureName)); + else + sb.AppendLine(string.Format("{0} {1}", mtlKey, textureName)); + } + } + } + } + + if (mat.HasProperty("_BaseColorMap") || mat.HasProperty("_BaseMap")) // HDRP || URP + { + var color = mat.GetColor("_BaseColor"); + // Diffuse + sb.AppendLine(string.Format("Kd {0}", string.Format(CultureInfo.InvariantCulture, "{0} {1} {2}", color.r, color.g, color.b))); + // Transparency + sb.AppendLine(string.Format(CultureInfo.InvariantCulture, "d {0}", color.a)); + } + else if (mat.HasProperty("_Color")) + { + Color color = mat.color; + // Diffuse + sb.AppendLine(string.Format("Kd {0}", string.Format(CultureInfo.InvariantCulture, "{0} {1} {2}", color.r, color.g, color.b))); + // Transparency + sb.AppendLine(string.Format(CultureInfo.InvariantCulture, "d {0}", color.a)); + } + else + { + sb.AppendLine("Kd 1.0 1.0 1.0"); + sb.AppendLine("d 1.0"); + } + + sb.AppendLine(); + } + + return sb.ToString(); + } + + struct PositionColorKey : System.IEquatable<PositionColorKey> + { + public IntVec3 position; + public IntVec4 color; + + public PositionColorKey(Vector3 p, Color c) + { + position = new IntVec3(p); + color = new IntVec4(c); + } + + public bool Equals(PositionColorKey other) + { + return position.Equals(other.position) && color.Equals(other.color); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) + return false; + + return obj is PositionColorKey && Equals(obj); + } + + public override int GetHashCode() + { + unchecked + { + return (position.GetHashCode() * 397) ^ color.GetHashCode(); + } + } + } + + // AppendPositions separately from AppendArrayVec3 to support the non-spec color extension that some DCCs can read + static int AppendPositions(StringBuilder sb, Vector3[] positions, Color[] colors, bool mergeCoincident, bool includeColors, out Dictionary<int, int> coincidentIndexMap) + { + var writeColors = includeColors && colors != null && colors.Length == positions.Length; + + Dictionary<PositionColorKey, int> common = new Dictionary<PositionColorKey, int>(); + coincidentIndexMap = new Dictionary<int, int>(); + + int index = 0; + + for (int i = 0, c = positions.Length; i < c; i++) + { + var position = positions[i]; + var color = writeColors ? colors[i] : Color.white; + + var key = new PositionColorKey(position, color); + int vertexIndex; + + if (mergeCoincident) + { + if (!common.TryGetValue(key, out vertexIndex)) + { + vertexIndex = index++; + common.Add(key, vertexIndex); + } + else + { + coincidentIndexMap.Add(i, vertexIndex); + continue; + } + } + else + { + vertexIndex = index++; + } + + coincidentIndexMap.Add(i, vertexIndex); + + if (writeColors) + { + sb.AppendLine(string.Format(CultureInfo.InvariantCulture, "v {0} {1} {2} {3} {4} {5}", + position.x, + position.y, + position.z, + color.r, + color.g, + color.b)); + } + else + { + sb.AppendLine(string.Format(CultureInfo.InvariantCulture, "v {0} {1} {2}", + position.x, + position.y, + position.z)); + } + } + + return index; + } + + static int AppendArrayVec2(StringBuilder sb, Vector2[] array, string prefix, bool mergeCoincident, out Dictionary<int, int> coincidentIndexMap) + { + coincidentIndexMap = new Dictionary<int, int>(); + + if (array == null) + return 0; + + Dictionary<IntVec2, int> common = new Dictionary<IntVec2, int>(); + int index = 0; + + for (int i = 0, c = array.Length; i < c; i++) + { + var texture = array[i]; + var key = new IntVec2(texture); + int vertexIndex; + + if (mergeCoincident) + { + if (!common.TryGetValue(key, out vertexIndex)) + { + vertexIndex = index++; + common.Add(key, vertexIndex); + } + else + { + coincidentIndexMap.Add(i, vertexIndex); + continue; + } + } + else + { + vertexIndex = index++; + } + + coincidentIndexMap.Add(i, vertexIndex); + + sb.AppendLine(string.Format(CultureInfo.InvariantCulture, "{0} {1} {2}", + prefix, + texture.x, + texture.y)); + } + + return index; + } + + static int AppendArrayVec3(StringBuilder sb, Vector3[] array, string prefix, bool mergeCoincident, out Dictionary<int, int> coincidentIndexMap) + { + coincidentIndexMap = new Dictionary<int, int>(); + + if (array == null) + return 0; + + Dictionary<IntVec3, int> common = new Dictionary<IntVec3, int>(); + int index = 0; + + for (int i = 0, c = array.Length; i < c; i++) + { + var vec = array[i]; + var key = new IntVec3(vec); + int vertexIndex; + + if (mergeCoincident) + { + if (!common.TryGetValue(key, out vertexIndex)) + { + vertexIndex = index++; + common.Add(key, vertexIndex); + } + else + { + coincidentIndexMap.Add(i, vertexIndex); + continue; + } + } + else + { + vertexIndex = index++; + } + + coincidentIndexMap.Add(i, vertexIndex); + + sb.AppendLine(string.Format(CultureInfo.InvariantCulture, "{0} {1} {2} {3}", + prefix, + vec.x, + vec.y, + vec.z)); + } + + return index; + } + + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ObjExporter.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ObjExporter.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b52a3193acc72cbd8280c25e6f9b9372b27f3547 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ObjExporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 99e7c5113a4eb574398293fbd74a61a6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PlyExporter.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PlyExporter.cs new file mode 100644 index 0000000000000000000000000000000000000000..bc200b255aac8511ab68aec9ff050f09ccd52c96 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PlyExporter.cs @@ -0,0 +1,210 @@ +using UnityEngine; +using System.Text; +using System.Linq; +using System.Collections.Generic; +using System.Globalization; +using System.Threading; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Export options for Ply format. + /// </summary> + sealed class PlyOptions + { + // Should the mesh be exported with a right handed coordinate system? + public bool isRightHanded = true; + + // Should n-gon faces be allowed? + public bool ngons = false; + + // Should quad faces be allowed? + public bool quads = true; + + // Should object transforms be applied to mesh attributes before writing to PLY? + public bool applyTransforms = true; + } + + /// <summary> + /// Import and export of Ply files in Unity. + /// </summary> + static class PlyExporter + { + /// <summary> + /// Export a ply file. + /// </summary> + /// <param name="models"></param> + /// <param name="contents"></param> + /// <param name="options"></param> + /// <returns></returns> + public static bool Export(IEnumerable<ProBuilderMesh> models, out string contents, PlyOptions options = null) + { + if (options == null) + options = new PlyOptions(); + + foreach (ProBuilderMesh pb in models) + { + pb.ToMesh(); + pb.Refresh(); + } + + int modelCount = models.Count(); + + Vector3[] positions = models.SelectMany(x => x.positionsInternal).ToArray(); + Vector3[] normals = models.SelectMany(x => x.GetNormals()).ToArray(); + Color[] colors = models.SelectMany(x => x.GetColors()).ToArray(); + + List<int[]> faces = new List<int[]>(modelCount); + int vertexOffset = 0; + + foreach (ProBuilderMesh pb in models) + { + List<int[]> indexes = null; + + if (options.ngons) + { + indexes = pb.facesInternal.Select(y => options.quads ? (y.IsQuad() ? y.ToQuad() : y.indexesInternal) : y.indexesInternal).ToList(); + } + else + { + indexes = new List<int[]>(); + + foreach (Face face in pb.facesInternal) + { + if (options.quads && face.IsQuad()) + { + indexes.Add(face.ToQuad()); + continue; + } + + for (int i = 0; i < face.indexesInternal.Length; i += 3) + indexes.Add(new int[] { + face.indexesInternal[i + 0], + face.indexesInternal[i + 1], + face.indexesInternal[i + 2] + }); + } + } + + foreach (int[] face in indexes) + for (int y = 0; y < face.Length; y++) + face[y] += vertexOffset; + + vertexOffset += pb.vertexCount; + + if (options.applyTransforms) + { + Transform trs = pb.transform; + + for (int i = 0; positions != null && i < positions.Length; i++) + positions[i] = trs.TransformPoint(positions[i]); + + for (int i = 0; normals != null && i < normals.Length; i++) + normals[i] = trs.TransformDirection(normals[i]); + } + + faces.AddRange(indexes); + } + + bool res = Export(positions, faces.ToArray(), out contents, normals, colors, options.isRightHanded); + + foreach (ProBuilderMesh pb in models) + pb.Optimize(); + + return res; + } + + /// <summary> + /// Create the contents of an ASCII formatted PLY file. + /// </summary> + /// <param name="positions"></param> + /// <param name="faces"></param> + /// <param name="contents"></param> + /// <param name="normals"></param> + /// <param name="colors"></param> + /// <param name="flipHandedness"></param> + /// <returns></returns> + public static bool Export( + Vector3[] positions, + int[][] faces, out string contents, + Vector3[] normals = null, + Color[] colors = null, + bool flipHandedness = true) + { + int faceCount = faces != null ? faces.Length : 0; + int vertexCount = positions != null ? positions.Length : 0; + + if (vertexCount < 1 || faceCount < 1) + { + contents = null; + return false; + } + + bool hasNormals = normals != null && normals.Length == vertexCount; + bool hasColors = colors != null && colors.Length == vertexCount; + + StringBuilder sb = new StringBuilder(); + + WriteHeader(vertexCount, faceCount, hasNormals, hasColors, ref sb); + + for (int i = 0; i < vertexCount; i++) + { + sb.Append(string.Format(CultureInfo.InvariantCulture, "{0} {1} {2}", flipHandedness ? -positions[i].x : positions[i].x, positions[i].y, positions[i].z)); + + if (hasNormals) + sb.Append(string.Format(CultureInfo.InvariantCulture, " {0} {1} {2}", flipHandedness ? -normals[i].x : -normals[i].x, normals[i].y, normals[i].z)); + + if (hasColors) + sb.Append(string.Format(CultureInfo.InvariantCulture, " {0} {1} {2} {3}", + System.Math.Min(System.Math.Max(0, (int)(colors[i].r * 255)), 255), + System.Math.Min(System.Math.Max(0, (int)(colors[i].g * 255)), 255), + System.Math.Min(System.Math.Max(0, (int)(colors[i].b * 255)), 255), + System.Math.Min(System.Math.Max(0, (int)(colors[i].a * 255)), 255))); + + sb.AppendLine(); + } + + for (int i = 0; i < faceCount; i++) + { + int faceLength = faces[i] != null ? faces[i].Length : 0; + sb.Append(faceLength.ToString(CultureInfo.InvariantCulture)); + for (int n = 0; n < faceLength; n++) + sb.Append(string.Format(CultureInfo.InvariantCulture, " {0}", faces[i][flipHandedness ? faceLength - n - 1 : n])); + sb.AppendLine(); + } + + contents = sb.ToString(); + + return true; + } + + static void WriteHeader(int vertexCount, int faceCount, bool hasNormals, bool hasColors, ref StringBuilder sb) + { + sb.AppendLine("ply"); + sb.AppendLine("format ascii 1.0"); + sb.AppendLine("comment Exported by [ProBuilder](http://www.procore3d.com/probuilder)"); + sb.AppendLine("comment " + System.DateTime.Now); + sb.AppendLine(string.Format(CultureInfo.InvariantCulture, "element vertex {0}", vertexCount)); + sb.AppendLine("property float32 x"); + sb.AppendLine("property float32 y"); + sb.AppendLine("property float32 z"); + if (hasNormals) + { + sb.AppendLine("property float32 nx"); + sb.AppendLine("property float32 ny"); + sb.AppendLine("property float32 nz"); + } + if (hasColors) + { + sb.AppendLine("property uint8 red"); + sb.AppendLine("property uint8 green"); + sb.AppendLine("property uint8 blue"); + sb.AppendLine("property uint8 alpha"); + } + sb.AppendLine(string.Format(CultureInfo.InvariantCulture, "element face {0}", faceCount)); + sb.AppendLine("property list uint8 int32 vertex_index"); + sb.AppendLine("end_header"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PlyExporter.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PlyExporter.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..97ebbea8ad49c28a6664090379b838621c4f369d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PlyExporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d65f00b82160e14fb2ab9bb2d2108ae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PolyShapeEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PolyShapeEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..95a54e1cf8f8e728f6d6440c62f5f76b94ca62a4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PolyShapeEditor.cs @@ -0,0 +1,799 @@ +using UnityEngine; +using UnityEngine.ProBuilder.MeshOperations; +using System.Collections.Generic; +using UnityEngine.ProBuilder; +using MeshTopology = UnityEngine.MeshTopology; + +namespace UnityEditor.ProBuilder +{ + [CustomEditor(typeof(PolyShape))] + sealed class PolyShapeEditor : Editor + { + static Color k_HandleColor = new Color(.8f, .8f, .8f, 1f); + static Color k_HandleColorGreen = new Color(.01f, .9f, .3f, 1f); + static Color k_HandleSelectedColor = new Color(.01f, .8f, .98f, 1f); + + static Color k_LineMaterialBaseColor = new Color(0f, 136f / 255f, 1f, 1f); + static Color k_LineMaterialHighlightColor = new Color(0f, 200f / 255f, 170f / 200f, 1f); + + static Color k_InvalidLineMaterialColor = Color.red; + + const float k_HandleSize = .05f; + + Material m_LineMaterial; + Mesh m_LineMesh = null; + + Plane m_Plane = new Plane(Vector3.up, Vector3.zero); + + Plane plane + { + set + { + m_Plane = value; + } + get + { + if (polygon.m_Points.Count >= 3 && + m_Plane.distance.Equals(0) && + m_Plane.normal.Equals(Vector3.up)) + { + Transform trs = polygon.transform; + m_Plane = new Plane(trs.TransformPoint(polygon.m_Points[0]), + trs.TransformPoint(polygon.m_Points[1]), + trs.TransformPoint(polygon.m_Points[2])); + } + + return m_Plane; + } + } + + int m_ControlId; + bool m_PlacingPoint = false; + int m_SelectedIndex = -2; + float m_DistanceFromHeightHandle; + static float s_HeightMouseOffset; + bool m_NextMouseUpAdvancesMode = false; + bool m_IsModifyingVertices = false; + + // should the height change handles be visible? + bool m_DrawHeightHandles = true; + + PolyShape polygon + { + get { return target as PolyShape; } + } + + static Material CreateHighlightLineMaterial() + { + Material mat = new Material(Shader.Find("Hidden/ProBuilder/ScrollHighlight")); + mat.SetColor("_Highlight", k_LineMaterialHighlightColor); + mat.SetColor("_Base", k_LineMaterialBaseColor); + return mat; + } + + void OnEnable() + { + if (polygon == null) + { + DestroyImmediate(this); + return; + } + + ProBuilderEditor.selectModeChanged += OnSelectModeChanged; + m_LineMesh = new Mesh(); + m_LineMaterial = CreateHighlightLineMaterial(); + Undo.undoRedoPerformed += UndoRedoPerformed; +#if UNITY_2019_1_OR_NEWER + SceneView.duringSceneGui += DuringSceneGUI; +#else + SceneView.onSceneGUIDelegate += DuringSceneGUI; +#endif + DrawPolyLine(polygon.m_Points); + EditorApplication.update += Update; + + PolyShape.PolyEditMode mode = polygon.polyEditMode; + polygon.polyEditMode = PolyShape.PolyEditMode.None; + SetPolyEditMode(mode); + } + + void OnDisable() + { + // Quit Edit mode when the object gets de-selected. + if (polygon != null && polygon.polyEditMode == PolyShape.PolyEditMode.Edit) + SetPolyEditMode(PolyShape.PolyEditMode.None); + + ProBuilderEditor.selectModeChanged -= OnSelectModeChanged; +#if UNITY_2019_1_OR_NEWER + SceneView.duringSceneGui -= DuringSceneGUI; +#else + SceneView.onSceneGUIDelegate -= DuringSceneGUI; +#endif + DestroyImmediate(m_LineMesh); + DestroyImmediate(m_LineMaterial); + EditorApplication.update -= Update; + Undo.undoRedoPerformed -= UndoRedoPerformed; + } + + public override void OnInspectorGUI() + { + switch (polygon.polyEditMode) + { + case PolyShape.PolyEditMode.None: + { + if (GUILayout.Button("Edit Poly Shape")) + SetPolyEditMode(PolyShape.PolyEditMode.Edit); + + EditorGUILayout.HelpBox( + "Editing a poly shape will erase any modifications made to the mesh!\n\nIf you accidentally enter Edit Mode you can Undo to get your changes back.", + MessageType.Warning); + + break; + } + + case PolyShape.PolyEditMode.Path: + { + EditorGUILayout.HelpBox("\nClick To Add Points\n\nPress 'Enter' or 'Space' to Set Height\n", MessageType.Info); + break; + } + + case PolyShape.PolyEditMode.Height: + { + EditorGUILayout.HelpBox("\nMove Mouse to Set Height\n\nPress 'Enter' or 'Space' to Finalize\n", MessageType.Info); + break; + } + + case PolyShape.PolyEditMode.Edit: + { + if (GUILayout.Button("Editing Poly Shape", UI.EditorGUIUtility.GetActiveStyle("Button"))) + SetPolyEditMode(PolyShape.PolyEditMode.None); + break; + } + } + + EditorGUI.BeginChangeCheck(); + + float extrude = polygon.extrude; + extrude = EditorGUILayout.FloatField("Extrusion", extrude); + + bool flipNormals = polygon.flipNormals; + flipNormals = EditorGUILayout.Toggle("Flip Normals", flipNormals); + + if (EditorGUI.EndChangeCheck()) + { + if (polygon.polyEditMode == PolyShape.PolyEditMode.None) + { + if (ProBuilderEditor.instance != null) + ProBuilderEditor.instance.ClearElementSelection(); + + UndoUtility.RecordObject(polygon, "Change Polygon Shape Settings"); + UndoUtility.RecordObject(polygon.mesh, "Change Polygon Shape Settings"); + } + else + { + UndoUtility.RecordObject(polygon, "Change Polygon Shape Settings"); + } + + polygon.extrude = extrude; + polygon.flipNormals = flipNormals; + + RebuildPolyShapeMesh(polygon); + } + + // GUILayout.Label("selected : " + m_SelectedIndex); + } + + void Update() + { + if (polygon != null && polygon.polyEditMode == PolyShape.PolyEditMode.Path && m_LineMaterial != null) + m_LineMaterial.SetFloat("_EditorTime", (float)EditorApplication.timeSinceStartup); + } + + void SetPolyEditMode(PolyShape.PolyEditMode mode) + { + PolyShape.PolyEditMode old = polygon.polyEditMode; + + if (mode != old) + { + // Clear the control always + GUIUtility.hotControl = 0; + + // Entering edit mode after the shape has been finalized once before, which means + // possibly reverting manual changes. Store undo state so that if this was + // not intentional user can revert. + if (polygon.polyEditMode == PolyShape.PolyEditMode.None && polygon.m_Points.Count > 2) + { + if (ProBuilderEditor.instance != null) + ProBuilderEditor.instance.ClearElementSelection(); + + UndoUtility.RecordObject(polygon, "Edit Polygon Shape"); + UndoUtility.RecordObject(polygon.mesh, "Edit Polygon Shape"); + } + + polygon.polyEditMode = mode; + + if (polygon.polyEditMode == PolyShape.PolyEditMode.None) + ProBuilderEditor.selectMode = ProBuilderEditor.selectMode & ~(SelectMode.InputTool); + else + ProBuilderEditor.selectMode = ProBuilderEditor.selectMode | SelectMode.InputTool; + + if (polygon.polyEditMode != PolyShape.PolyEditMode.None) + Tools.current = Tool.None; + + // If coming from Path -> Height set the mouse / origin offset + if (old == PolyShape.PolyEditMode.Path && mode == PolyShape.PolyEditMode.Height && Event.current != null) + { + Vector3 up = polygon.transform.up; + Vector3 origin = polygon.transform.TransformPoint(Math.Average(polygon.m_Points)); + Ray r = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); + Vector3 p = Math.GetNearestPointRayRay(origin, up, r.origin, r.direction); + s_HeightMouseOffset = polygon.extrude - + ProGridsInterface.ProGridsSnap( + Vector3.Distance(origin, p) * Mathf.Sign(Vector3.Dot(p - origin, up))); + } + + RebuildPolyShapeMesh(polygon); + } + } + + public void RebuildPolyShapeMesh(bool vertexCountChanged = false) + { + // If Undo is called immediately after creation this situation can occur + if (polygon == null) + return; + + DrawPolyLine(polygon.m_Points); + + if (polygon.polyEditMode != PolyShape.PolyEditMode.Path) + { + var result = polygon.CreateShapeFromPolygon(); + if(result.status == ActionResult.Status.Failure) + { + m_LineMaterial.SetColor("_Highlight", k_InvalidLineMaterialColor); + m_LineMaterial.SetColor("_Base", k_InvalidLineMaterialColor); + + // hide the handle to change the height of the invalid mesh + m_DrawHeightHandles = false; + + // skip height edit mode if the mesh is invalid + if(polygon.polyEditMode == PolyShape.PolyEditMode.Height) + { + SetPolyEditMode(PolyShape.PolyEditMode.Edit); + } + } + else + { + // make sure everything set to normal if polygon creation succeeded + m_LineMaterial.SetColor("_Highlight", k_LineMaterialHighlightColor); + m_LineMaterial.SetColor("_Base", k_LineMaterialBaseColor); + m_DrawHeightHandles = true; + } + } + + // While the vertex count may not change, the triangle winding might. So unfortunately we can't take + // advantage of the `vertexCountChanged = false` optimization here. + ProBuilderEditor.Refresh(); + } + + void DuringSceneGUI(SceneView sceneView) + { + if (polygon.polyEditMode == PolyShape.PolyEditMode.None) + return; + + if (polygon == null || Tools.current != Tool.None) + { + SetPolyEditMode(PolyShape.PolyEditMode.None); + return; + } + + if (m_LineMaterial != null) + { + m_LineMaterial.SetPass(0); + Graphics.DrawMeshNow(m_LineMesh, polygon.transform.localToWorldMatrix, 0); + } + + Event evt = Event.current; + + // used when finishing a loop by clicking the first created point + if (m_NextMouseUpAdvancesMode && evt.type == EventType.MouseUp) + { + evt.Use(); + + m_NextMouseUpAdvancesMode = false; + + if (SceneCameraIsAlignedWithPolyUp()) + SetPolyEditMode(PolyShape.PolyEditMode.Edit); + else + SetPolyEditMode(PolyShape.PolyEditMode.Height); + } + + if (m_IsModifyingVertices && ( + evt.type == EventType.MouseUp || + evt.type == EventType.Ignore || + evt.type == EventType.KeyDown || + evt.type == EventType.KeyUp)) + { + OnFinishVertexMovement(); + } + + DoExistingPointsGUI(); + + if (evt.type == EventType.KeyDown) + HandleKeyEvent(evt); + + if (EditorHandleUtility.SceneViewInUse(evt)) + return; + + m_ControlId = GUIUtility.GetControlID(FocusType.Passive); + if (evt.type == EventType.Layout) + HandleUtility.AddDefaultControl(m_ControlId); + + DoPointPlacement(); + } + + // Returns a local space point, + Vector3 GetPointInLocalSpace(Vector3 point) + { + var trs = polygon.transform; + + if (polygon.isOnGrid) + { + Vector3 snapMask = ProBuilderSnapping.GetSnappingMaskBasedOnNormalVector(plane.normal); + return trs.InverseTransformPoint(ProGridsInterface.ProGridsSnap(point, snapMask)); + } + + return trs.InverseTransformPoint(point); + } + + void DoPointPlacement() + { + Event evt = Event.current; + EventType eventType = evt.type; + + if (m_PlacingPoint) + { + Ray ray = HandleUtility.GUIPointToWorldRay(evt.mousePosition); + + if (eventType == EventType.MouseDrag) + { + float hitDistance = Mathf.Infinity; + + if (plane.Raycast(ray, out hitDistance)) + { + evt.Use(); + polygon.m_Points[m_SelectedIndex] = GetPointInLocalSpace(ray.GetPoint(hitDistance)); + RebuildPolyShapeMesh(false); + SceneView.RepaintAll(); + } + } + + if (eventType == EventType.MouseUp || + eventType == EventType.Ignore || + eventType == EventType.KeyDown || + eventType == EventType.KeyUp) + { + evt.Use(); + m_PlacingPoint = false; + m_SelectedIndex = -1; + SceneView.RepaintAll(); + } + } + else if (polygon.polyEditMode == PolyShape.PolyEditMode.Path) + { + if (eventType == EventType.MouseDown && HandleUtility.nearestControl == m_ControlId) + { + if (polygon.m_Points.Count < 1) + SetupInputPlane(evt.mousePosition); + + float hitDistance = Mathf.Infinity; + + Ray ray = HandleUtility.GUIPointToWorldRay(evt.mousePosition); + + if (plane.Raycast(ray, out hitDistance)) + { + UndoUtility.RecordObject(polygon, "Add Polygon Shape Point"); + + Vector3 hit = ray.GetPoint(hitDistance); + + if (polygon.m_Points.Count < 1) + { + polygon.transform.position = polygon.isOnGrid ? ProGridsInterface.ProGridsSnap(hit) : hit; + + Vector3 cameraFacingPlaneNormal = plane.normal; + if (Vector3.Dot(cameraFacingPlaneNormal, SceneView.lastActiveSceneView.camera.transform.forward) > 0f) + cameraFacingPlaneNormal *= -1; + + polygon.transform.rotation = Quaternion.LookRotation(cameraFacingPlaneNormal) * Quaternion.Euler(new Vector3(90f, 0f, 0f)); + } + + Vector3 point = GetPointInLocalSpace(hit); + + if (polygon.m_Points.Count > 2 && Math.Approx3(polygon.m_Points[0], point)) + { + m_NextMouseUpAdvancesMode = true; + return; + } + + polygon.m_Points.Add(point); + + m_PlacingPoint = true; + m_SelectedIndex = polygon.m_Points.Count - 1; + RebuildPolyShapeMesh(polygon); + + evt.Use(); + } + } + } + else if (polygon.polyEditMode == PolyShape.PolyEditMode.Edit) + { + if (polygon.m_Points.Count < 3) + { + SetPolyEditMode(PolyShape.PolyEditMode.Path); + return; + } + + if (m_DistanceFromHeightHandle > PreferenceKeys.k_MaxPointDistanceFromControl) + { + // point insertion + Vector2 mouse = evt.mousePosition; + Ray ray = HandleUtility.GUIPointToWorldRay(mouse); + float hitDistance = Mathf.Infinity; + if (plane.Raycast(ray, out hitDistance)) + { + Vector3 hit = ray.GetPoint(hitDistance); + Vector3 point = GetPointInLocalSpace(hit); + + int polyCount = polygon.m_Points.Count; + + float distToLineInGUI; + int index; + EditorHandleUtility.ClosestPointToPolyLine(polygon.m_Points, out index, out distToLineInGUI, true, polygon.transform); + + Vector3 aToPoint = point - polygon.m_Points[index - 1]; + Vector3 aToB = polygon.m_Points[index % polyCount] - polygon.m_Points[index - 1]; + + float ratio = Vector3.Dot(aToPoint, aToB.normalized) / aToB.magnitude; + Vector3 wp = Vector3.Lerp(polygon.m_Points[index - 1], polygon.m_Points[index % polyCount], ratio); + wp = polygon.transform.TransformPoint(wp); + + Vector2 aInGUI = HandleUtility.WorldToGUIPoint(polygon.transform.TransformPoint(polygon.m_Points[index - 1])); + Vector2 bInGUI = HandleUtility.WorldToGUIPoint(polygon.transform.TransformPoint(polygon.m_Points[index % polyCount])); + float distanceToVertex = Mathf.Min(Vector2.Distance(mouse, aInGUI), Vector2.Distance(mouse, bInGUI)); + + if (distanceToVertex > PreferenceKeys.k_MaxPointDistanceFromControl && distToLineInGUI < PreferenceKeys.k_MaxPointDistanceFromControl) + { + if (evt.type == EventType.Repaint) + { + Handles.color = Color.green; + Handles.DotHandleCap(-1, wp, Quaternion.identity, + HandleUtility.GetHandleSize(wp) * k_HandleSize, evt.type); + } + + if (evt.type == EventType.MouseDown && HandleUtility.nearestControl == m_ControlId) + { + evt.Use(); + + UndoUtility.RecordObject(polygon, "Insert Point"); + polygon.m_Points.Insert(index, point); + m_SelectedIndex = index; + m_PlacingPoint = true; + RebuildPolyShapeMesh(true); + OnBeginVertexMovement(); + } + + Handles.color = Color.white; + } + + if (evt.type != EventType.Repaint) + SceneView.RepaintAll(); + } + } + } + } + + void SetupInputPlane(Vector2 mousePosition) + { + plane = EditorHandleUtility.FindBestPlane(mousePosition); + + var planeNormal = plane.normal; + var planeCenter = plane.normal * -plane.distance; + + // if hit point on plane is cardinal axis and on grid, snap to grid. + if (Math.IsCardinalAxis(planeNormal)) + { + const float epsilon = .00001f; + float snapVal = Mathf.Abs(ProGridsInterface.SnapValue()); + float rem = Mathf.Abs(snapVal - (Vector3.Scale(planeNormal, planeCenter).magnitude % snapVal)); + polygon.isOnGrid = (rem < epsilon || Mathf.Abs(snapVal - rem) < epsilon); + } + else + { + polygon.isOnGrid = false; + } + } + + void DoExistingPointsGUI() + { + Transform trs = polygon.transform; + int len = polygon.m_Points.Count; + + Vector3 up = polygon.transform.up; + Vector3 right = polygon.transform.right; + Vector3 forward = polygon.transform.forward; + Vector3 center = Vector3.zero; + + Event evt = Event.current; + + bool used = evt.type == EventType.Used; + + if (!used && + (evt.type == EventType.MouseDown && + evt.button == 0 && + !EditorHandleUtility.IsAppendModifier(evt.modifiers))) + { + m_SelectedIndex = -1; + Repaint(); + } + + if (polygon.polyEditMode == PolyShape.PolyEditMode.Height) + { + if (!used && evt.type == EventType.MouseUp && evt.button == 0 && !EditorHandleUtility.IsAppendModifier(evt.modifiers)) + { + evt.Use(); + SetPolyEditMode(PolyShape.PolyEditMode.Edit); + } + + bool sceneInUse = EditorHandleUtility.SceneViewInUse(evt); + Ray r = HandleUtility.GUIPointToWorldRay(evt.mousePosition); + + Vector3 origin = polygon.transform.TransformPoint(Math.Average(polygon.m_Points)); + float extrude = polygon.extrude; + + if (evt.type == EventType.MouseMove && !sceneInUse) + { + Vector3 p = Math.GetNearestPointRayRay(origin, up, r.origin, r.direction); + extrude = ProGridsInterface.ProGridsSnap(s_HeightMouseOffset + Vector3.Distance(origin, p) * Mathf.Sign(Vector3.Dot(p - origin, up))); + } + + Vector3 extrudePoint = origin + (extrude * up); + + if (m_DrawHeightHandles) + { + Handles.color = k_HandleColor; + Handles.DotHandleCap(-1, origin, Quaternion.identity, HandleUtility.GetHandleSize(origin) * k_HandleSize, evt.type); + Handles.color = k_HandleColorGreen; + Handles.DrawLine(origin, extrudePoint); + Handles.DotHandleCap(-1, extrudePoint, Quaternion.identity, HandleUtility.GetHandleSize(extrudePoint) * k_HandleSize, evt.type); + Handles.color = Color.white; + } + + if (!sceneInUse && polygon.extrude != extrude) + { + OnBeginVertexMovement(); + polygon.extrude = extrude; + RebuildPolyShapeMesh(false); + } + } + else + { + // vertex dots + for (int ii = 0; ii < len; ii++) + { + Vector3 point = trs.TransformPoint(polygon.m_Points[ii]); + + center.x += point.x; + center.y += point.y; + center.z += point.z; + + float size = HandleUtility.GetHandleSize(point) * k_HandleSize; + + Handles.color = ii == m_SelectedIndex ? k_HandleSelectedColor : k_HandleColor; + + EditorGUI.BeginChangeCheck(); + + point = Handles.Slider2D(point, up, right, forward, size, Handles.DotHandleCap, Vector2.zero, true); + + if (EditorGUI.EndChangeCheck()) + { + UndoUtility.RecordObject(polygon, "Move Polygon Shape Point"); + polygon.m_Points[ii] = GetPointInLocalSpace(point); + OnBeginVertexMovement(); + RebuildPolyShapeMesh(false); + } + + // "clicked" a button + if (!used && evt.type == EventType.Used) + { + if (ii == 0 && polygon.m_Points.Count > 2 && polygon.polyEditMode == PolyShape.PolyEditMode.Path) + { + m_NextMouseUpAdvancesMode = true; + return; + } + else + { + used = true; + m_SelectedIndex = ii; + } + } + } + + Handles.color = Color.white; + + // height setting + if (polygon.polyEditMode != PolyShape.PolyEditMode.Path && polygon.m_Points.Count > 2) + { + center.x /= (float)len; + center.y /= (float)len; + center.z /= (float)len; + + Vector3 extrude = center + (up * polygon.extrude); + m_DistanceFromHeightHandle = Vector2.Distance(HandleUtility.WorldToGUIPoint(extrude), evt.mousePosition); + + EditorGUI.BeginChangeCheck(); + + if (m_DrawHeightHandles) + { + Handles.color = k_HandleColor; + Handles.DotHandleCap(-1, center, Quaternion.identity, HandleUtility.GetHandleSize(center) * k_HandleSize, evt.type); + Handles.DrawLine(center, extrude); + Handles.color = k_HandleColorGreen; + extrude = Handles.Slider(extrude, up, HandleUtility.GetHandleSize(extrude) * k_HandleSize, Handles.DotHandleCap, 0f); + Handles.color = Color.white; + } + + if (EditorGUI.EndChangeCheck()) + { + UndoUtility.RecordObject(polygon, "Set Polygon Shape Height"); + polygon.extrude = ProGridsInterface.ProGridsSnap(Vector3.Distance(extrude, center) * Mathf.Sign(Vector3.Dot(up, extrude - center))); + OnBeginVertexMovement(); + RebuildPolyShapeMesh(false); + } + } + } + } + + void HandleKeyEvent(Event evt) + { + KeyCode key = evt.keyCode; + + switch (key) + { + case KeyCode.Space: + case KeyCode.Return: + { + if (polygon.polyEditMode == PolyShape.PolyEditMode.Path) + { + if (SceneCameraIsAlignedWithPolyUp()) + SetPolyEditMode(PolyShape.PolyEditMode.Edit); + else + SetPolyEditMode(PolyShape.PolyEditMode.Height); + + evt.Use(); + } + else if (polygon.polyEditMode == PolyShape.PolyEditMode.Height) + { + SetPolyEditMode(PolyShape.PolyEditMode.Edit); + evt.Use(); + } + else if (polygon.polyEditMode == PolyShape.PolyEditMode.Edit) + { + SetPolyEditMode(PolyShape.PolyEditMode.None); + evt.Use(); + } + + break; + } + + case KeyCode.Backspace: + { + if (m_SelectedIndex > -1) + { + UndoUtility.RecordObject(polygon, "Delete Selected Points"); + polygon.m_Points.RemoveAt(m_SelectedIndex); + m_SelectedIndex = -1; + RebuildPolyShapeMesh(polygon); + evt.Use(); + } + break; + } + + case KeyCode.Escape: + { + SetPolyEditMode(PolyShape.PolyEditMode.None); + evt.Use(); + break; + } + } + } + + void DrawPolyLine(List<Vector3> points) + { + if (points.Count < 2) + return; + + int vc = polygon.polyEditMode == PolyShape.PolyEditMode.Path ? points.Count : points.Count + 1; + + Vector3[] ver = new Vector3[vc]; + Vector2[] uvs = new Vector2[vc]; + int[] indexes = new int[vc]; + int cnt = points.Count; + float distance = 0f; + + for (int i = 0; i < vc; i++) + { + Vector3 a = points[i % cnt]; + Vector3 b = points[i < 1 ? 0 : i - 1]; + + float d = Vector3.Distance(a, b); + distance += d; + + ver[i] = points[i % cnt]; + uvs[i] = new Vector2(distance, 1f); + indexes[i] = i; + } + + m_LineMesh.Clear(); + m_LineMesh.name = "Poly Shape Guide"; + m_LineMesh.vertices = ver; + m_LineMesh.uv = uvs; + m_LineMesh.SetIndices(indexes, MeshTopology.LineStrip, 0); + m_LineMaterial.SetFloat("_LineDistance", distance); + } + + /** + * Is the scene camera looking directly at the up vector of the current polygon? + * Prevents a situation where the height tool is rendered useless by coplanar + * ray tracking. + */ + bool SceneCameraIsAlignedWithPolyUp() + { + float dot = Vector3.Dot(SceneView.lastActiveSceneView.camera.transform.forward, polygon.transform.up); + return Mathf.Abs(Mathf.Abs(dot) - 1f) < .01f; + } + + void OnSelectModeChanged(SelectMode selectMode) + { + // User changed select mode manually, remove InputTool flag + if (polygon != null + && polygon.polyEditMode != PolyShape.PolyEditMode.None + && !selectMode.ContainsFlag(SelectMode.InputTool)) + { + SetPolyEditMode(PolyShape.PolyEditMode.None); + } + } + + void OnBeginVertexMovement() + { + if (!m_IsModifyingVertices) + m_IsModifyingVertices = true; + } + + void OnFinishVertexMovement() + { + m_IsModifyingVertices = false; + RebuildPolyShapeMesh(polygon); + } + + void UndoRedoPerformed() + { + if (polygon.polyEditMode == PolyShape.PolyEditMode.None) + ProBuilderEditor.selectMode = ProBuilderEditor.selectMode & ~(SelectMode.InputTool); + else + ProBuilderEditor.selectMode = ProBuilderEditor.selectMode | SelectMode.InputTool; + + if (polygon.polyEditMode != PolyShape.PolyEditMode.None) + Tools.current = Tool.None; + + if (m_LineMesh != null) + DestroyImmediate(m_LineMesh); + + if (m_LineMaterial != null) + DestroyImmediate(m_LineMaterial); + + m_LineMesh = new Mesh(); + m_LineMaterial = CreateHighlightLineMaterial(); + + if (polygon.polyEditMode != PolyShape.PolyEditMode.None) + RebuildPolyShapeMesh(polygon); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PolyShapeEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PolyShapeEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..369b67385a144fcdd67edfa059d00f748bb6af75 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PolyShapeEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa15474f4b771974c86469106f4a4cb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionMoveTool.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionMoveTool.cs new file mode 100644 index 0000000000000000000000000000000000000000..e76cf74eb6584b19f945d8222dc6be3e29e6bea8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionMoveTool.cs @@ -0,0 +1,212 @@ +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + class PositionMoveTool : PositionTool + { + const float k_CardinalAxisError = .001f; + const float k_MinTranslateDeltaSqrMagnitude = .00001f; + Vector3 m_HandlePosition; + Vector3 m_RawHandleDelta; + Vector3Mask m_ActiveAxesModel; + Vector3Mask m_ActiveAxesWorld; + + bool m_SnapAsGroup; + +#if PROBUILDER_ENABLE_TRANSFORM_ORIGIN_GIZMO + Vector3 m_IndividualOriginDirection; + bool m_DirectionOriginInitialized; +#endif + + protected override void OnToolEngaged() + { + // If grids are enabled and "snap on all axes" is on, initialize active axes to all. + m_ActiveAxesModel = worldSnapEnabled && !snapAxisConstraint + ? Vector3Mask.XYZ + : new Vector3Mask(0x0); + +#if PROBUILDER_ENABLE_TRANSFORM_ORIGIN_GIZMO + m_DirectionOriginInitialized = false; +#endif + + // Snap as group preference is only respected when snap mode is "World" + m_SnapAsGroup = worldSnapEnabled && ProBuilderSnapSettings.snapAsGroup; + } + + protected override void DoTool(Vector3 handlePosition, Quaternion handleRotation) + { + base.DoTool(handlePosition, handleRotation); + + if (!isEditing) + m_HandlePosition = handlePosition; + +#if PROBUILDER_ENABLE_TRANSFORM_ORIGIN_GIZMO + if (isEditing) + DrawSelectionOriginGizmos(); +#endif + + EditorGUI.BeginChangeCheck(); + + m_HandlePosition = Handles.PositionHandle(m_HandlePosition, handleRotation); + + m_RawHandleDelta = m_HandlePosition - handlePositionOrigin; + + var delta = m_RawHandleDelta; + + if (EditorGUI.EndChangeCheck() && delta.sqrMagnitude > k_MinTranslateDeltaSqrMagnitude) + { + if (!isEditing) + BeginEdit("Translate Selection"); + + if (vertexDragging) + { + Vector3 nearest; + + if (FindNearestVertex(currentEvent.mousePosition, out nearest)) + { + var unrotated = handleRotationOriginInverse * delta; + var dir = new Vector3Mask(unrotated, k_CardinalAxisError); + + if (dir.active == 1) + { + var rotationDirection = handleRotationOrigin * dir * 10000f; + + m_HandlePosition = HandleUtility.ProjectPointLine(nearest, + handlePositionOrigin + rotationDirection, + handlePositionOrigin - rotationDirection); + + delta = m_HandlePosition - handlePositionOrigin; + } + } + } + else if (worldSnapEnabled) + { + if (snapAxisConstraint) + { + m_ActiveAxesModel |= new Vector3Mask(handleRotationOriginInverse * delta, k_CardinalAxisError); + m_ActiveAxesWorld = new Vector3Mask(handleRotation * m_ActiveAxesModel); + + if (m_ActiveAxesWorld.active == 1) + { + m_HandlePosition = ProBuilderSnapping.SnapValueOnRay( + new Ray(handlePositionOrigin, delta), + delta.magnitude, + GetSnapValueForAxis(m_ActiveAxesModel), + m_ActiveAxesWorld); + } + else + { + m_HandlePosition = ProBuilderSnapping.SnapValue(m_HandlePosition, snapValue); + } + } + else + { + m_HandlePosition = ProBuilderSnapping.SnapValue(m_HandlePosition, snapValue); + } + + delta = m_HandlePosition - handlePositionOrigin; + } + +#if PROBUILDER_ENABLE_TRANSFORM_ORIGIN_GIZMO + if (pivotPoint == PivotPoint.IndividualOrigins && !m_DirectionOriginInitialized) + { + var mask = new Vector3Mask(handleRotationOriginInverse * delta, k_CardinalAxisError); + + if (mask.active > 0) + { + m_IndividualOriginDirection = mask; + m_DirectionOriginInitialized = true; + } + } +#endif + + ApplyTranslation(handleRotationOriginInverse * delta); + } + + // Draw at the end so we get the snapped value + if(showHandleInfo && isEditing) + DrawDeltaInfo(string.Format("Translate: <b>{0:F2}</b> {1}", delta.magnitude, (handleRotationOriginInverse * delta).ToString("0.00"))); + } + + void ApplyTranslation(Vector3 translation) + { + var translationMagnitude = translation.magnitude; + + foreach (var key in elementSelection) + { + if (!(key is MeshAndPositions)) + continue; + + var kvp = (MeshAndPositions)key; + var mesh = kvp.mesh; + var worldToLocal = mesh.transform.worldToLocalMatrix; + var origins = kvp.positions; + var positions = mesh.positionsInternal; + + foreach (var group in kvp.elementGroups) + { + var postApplyMatrix = GetPostApplyMatrix(group); + var preApplyMatrix = postApplyMatrix.inverse; + + foreach (var index in group.indices) + { + // res = Group pre-apply matrix * world vertex position + // res += translation + // res = Group post-apply matrix * res + // positions[i] = mesh.worldToLocal * res + if (worldSnapEnabled && !m_SnapAsGroup) + { + if (snapAxisConstraint && m_ActiveAxesWorld.active == 1) + { + var wp = postApplyMatrix.MultiplyPoint3x4(preApplyMatrix.MultiplyPoint3x4(origins[index])); + + var snap = ProBuilderSnapping.SnapValueOnRay( + new Ray(wp, m_RawHandleDelta), + translationMagnitude, + GetSnapValueForAxis(m_ActiveAxesWorld), + m_ActiveAxesWorld); + + positions[index] = worldToLocal.MultiplyPoint3x4(snap); + } + else + { + var wp = postApplyMatrix.MultiplyPoint3x4(translation + preApplyMatrix.MultiplyPoint3x4(origins[index])); + var snap = ProBuilderSnapping.SnapValue(wp, snapValue); + positions[index] = worldToLocal.MultiplyPoint3x4(snap); + } + } + else + { + positions[index] = worldToLocal.MultiplyPoint3x4( + postApplyMatrix.MultiplyPoint3x4( + translation + preApplyMatrix.MultiplyPoint3x4(origins[index]))); + } + } + } + + mesh.mesh.vertices = positions; + mesh.RefreshUV(MeshSelection.selectedFacesInEditZone[mesh]); + mesh.Refresh(RefreshMask.Normals); + } + + ProBuilderEditor.Refresh(false); + } + +#if PROBUILDER_ENABLE_TRANSFORM_ORIGIN_GIZMO + void DrawSelectionOriginGizmos() + { + if (isEditing && currentEvent.type == EventType.Repaint) + { + foreach (var key in meshAndElementGroupPairs) + { + foreach (var group in key.elementGroups) + { + EditorMeshHandles.DrawTransformOriginGizmo(group.postApplyMatrix, m_IndividualOriginDirection); + } + } + } + } +#endif + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionMoveTool.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionMoveTool.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..831f94d7a975409a2bca2f6db365d686212a63a3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionMoveTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a9809eb838f424cce87ddc1b066c4f1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionRotateTool.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionRotateTool.cs new file mode 100644 index 0000000000000000000000000000000000000000..dfc5d67176dc8993d6ec5d6ba9c19f5c9fbe6640 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionRotateTool.cs @@ -0,0 +1,77 @@ +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + class PositionRotateTool : PositionTool + { + Quaternion m_Rotation; + + protected override void DoTool(Vector3 handlePosition, Quaternion handleRotation) + { + base.DoTool(handlePosition, handleRotation); + + if (showHandleInfo && isEditing) + { + var euler = m_Rotation.eulerAngles; + + DrawDeltaInfo(string.Format("Rotate: {0,5:##0.00}, {1,5:##0.00}, {2,5:##0.00}", + euler.x, + euler.y, + euler.z)); + } + + EditorGUI.BeginChangeCheck(); + + if (!isEditing) + m_Rotation = Quaternion.identity; + + var hm = Handles.matrix; + Handles.matrix = Matrix4x4.TRS(handlePosition, handleRotation, Vector3.one); + m_Rotation = Handles.RotationHandle(m_Rotation, Vector3.zero); + Handles.matrix = hm; + + if (EditorGUI.EndChangeCheck()) + { + if (!isEditing) + BeginEdit("Rotate Selection"); + + ApplyRotation(m_Rotation); + } + } + + void ApplyRotation(Quaternion rotation) + { + foreach (var key in elementSelection) + { + if (!(key is MeshAndPositions)) + continue; + + var kvp = (MeshAndPositions)key; + var mesh = kvp.mesh; + var worldToLocal = mesh.transform.worldToLocalMatrix; + var origins = kvp.positions; + var positions = mesh.positionsInternal; + + foreach (var group in kvp.elementGroups) + { + var postApplyMatrix = GetPostApplyMatrix(group); + var preApplyMatrix = postApplyMatrix.inverse; + + foreach (var index in group.indices) + { + positions[index] = worldToLocal.MultiplyPoint3x4( + postApplyMatrix.MultiplyPoint3x4( + rotation * preApplyMatrix.MultiplyPoint3x4(origins[index]))); + } + } + + mesh.mesh.vertices = positions; + mesh.RefreshUV(MeshSelection.selectedFacesInEditZone[mesh]); + mesh.Refresh(RefreshMask.Normals); + } + + ProBuilderEditor.Refresh(false); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionRotateTool.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionRotateTool.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..66bd2567d8129de04405be0387781fac70384f4c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionRotateTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 87dbab7c5aec0498a8ef34d8490bc9f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionScaleTool.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionScaleTool.cs new file mode 100644 index 0000000000000000000000000000000000000000..40410da31372d5f5c94b5b612e7d0290189478a6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionScaleTool.cs @@ -0,0 +1,38 @@ +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + class PositionScaleTool : PositionTool + { + Vector3 m_Scale; + + protected override void DoTool(Vector3 handlePosition, Quaternion handleRotation) + { + base.DoTool(handlePosition, handleRotation); + + if (showHandleInfo && isEditing) + DrawDeltaInfo("Scale: " + m_Scale.ToString("0.00")); + + if (!isEditing) + m_Scale = Vector3.one; + + EditorGUI.BeginChangeCheck(); + + var size = HandleUtility.GetHandleSize(handlePosition); + + EditorHandleUtility.PushMatrix(); + Handles.matrix = Matrix4x4.TRS(handlePosition, handleRotation, Vector3.one); + m_Scale = Handles.ScaleHandle(m_Scale, Vector3.zero, Quaternion.identity, size); + EditorHandleUtility.PopMatrix(); + + if (EditorGUI.EndChangeCheck()) + { + if (!isEditing) + BeginEdit("Scale Selection"); + + Apply(Matrix4x4.Scale(m_Scale)); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionScaleTool.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionScaleTool.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..aad8eb0e87d033d4f4c2e015f51e0a8f9ead94bb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionScaleTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 589c2adb27cec4b26849162d3b624642 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionTool.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionTool.cs new file mode 100644 index 0000000000000000000000000000000000000000..2b426e338cc53a16e3ab85c82811e956a7d0a23f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionTool.cs @@ -0,0 +1,165 @@ +//#define DEBUG_HANDLES + +using System.Linq; +using UnityEditor.SettingsManagement; +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + abstract class PositionTool : VertexManipulationTool + { + [UserSetting("General", "Show Handle Info", "Toggle the display of information of move, rotate, and scale deltas.")] + static Pref<bool> s_ShowHandleInfo = new Pref<bool>("editor.showHandleDelta", false, SettingsScope.User); + + protected bool showHandleInfo + { + get { return s_ShowHandleInfo.value; } + } + + protected void DrawDeltaInfo(string text) + { + Handles.BeginGUI(); + var view = SceneView.lastActiveSceneView; + var gc = UI.EditorGUIUtility.TempContent(text); + + // scene view screen.height includes the tab and toolbar + var toolbarHeight = UI.EditorStyles.sceneTextBox.CalcHeight(gc, Screen.width); + var contentSize = UI.EditorStyles.sceneTextBox.CalcSize(gc); + Rect handleTransformInfoRect = new Rect( + view.position.width - (contentSize.x + 8), + view.position.height - (contentSize.y + 8 + toolbarHeight), + contentSize.x, + contentSize.y); + + GUI.Label(handleTransformInfoRect, gc, UI.EditorStyles.sceneTextBox); + Handles.EndGUI(); + } + + const bool k_CollectCoincidentVertices = true; + +#if APPLY_POSITION_TO_SPACE_GIZMO + Matrix4x4 m_CurrentDelta = Matrix4x4.identity; +#endif + + protected class MeshAndPositions : MeshAndElementSelection + { + Vector3[] m_Positions; + + public Vector3[] positions + { + get { return m_Positions; } + } + + public MeshAndPositions(ProBuilderMesh mesh, PivotPoint pivot) : base(mesh, k_CollectCoincidentVertices) + { + m_Positions = mesh.positions.ToArray(); + + var l2w = mesh.transform.localToWorldMatrix; + + for (int i = 0, c = m_Positions.Length; i < c; i++) + m_Positions[i] = l2w.MultiplyPoint3x4(m_Positions[i]); + } + } + + internal override MeshAndElementSelection GetElementSelection(ProBuilderMesh mesh, PivotPoint pivot) + { + return new MeshAndPositions(mesh, pivot); + } + + internal Matrix4x4 GetPostApplyMatrix(ElementGroup group) + { + switch (pivotPoint) + { + case PivotPoint.Center: + return Matrix4x4.TRS(handlePositionOrigin, handleRotationOrigin, Vector3.one); + + case PivotPoint.ActiveElement: + return Matrix4x4.TRS(handlePositionOrigin, handleRotationOrigin, Vector3.one); + + case PivotPoint.IndividualOrigins: + return Matrix4x4.TRS(group.position, group.rotation, Vector3.one); + + default: + return Matrix4x4.identity; + } + } + + protected override void DoTool(Vector3 handlePosition, Quaternion handleRotation) + { +#if DEBUG_HANDLES + if (isEditing && currentEvent.type == EventType.Repaint) + { + foreach (var key in elementSelection) + { + if (!(key is MeshAndPositions)) + break; + + foreach (var group in key.elementGroups) + { + var positions = ((MeshAndPositions)key).positions; + var postApplyMatrix = GetPostApplyMatrix(group); + var preApplyMatrix = postApplyMatrix.inverse; + + using (var faceDrawer = new EditorMeshHandles.TriangleDrawingScope(Color.cyan, + UnityEngine.Rendering.CompareFunction.Always)) + { + foreach (var face in key.mesh.GetSelectedFaces()) + { + var indices = face.indexesInternal; + + for (int i = 0, c = indices.Length; i < c; i += 3) + { + faceDrawer.Draw( + preApplyMatrix.MultiplyPoint3x4(positions[indices[i]]), + preApplyMatrix.MultiplyPoint3x4(positions[indices[i + 1]]), + preApplyMatrix.MultiplyPoint3x4(positions[indices[i + 2]]) + ); + } + } + } + } + } + } +#endif + } + + protected void Apply(Matrix4x4 delta) + { +#if APPLY_POSITION_TO_SPACE_GIZMO + m_CurrentDelta.SetColumn(3, delta.GetColumn(3)); +#endif + + foreach (var key in elementSelection) + { + if (!(key is MeshAndPositions)) + continue; + + var kvp = (MeshAndPositions)key; + var mesh = kvp.mesh; + var worldToLocal = mesh.transform.worldToLocalMatrix; + var origins = kvp.positions; + var positions = mesh.positionsInternal; + + foreach (var group in kvp.elementGroups) + { + var postApplyMatrix = GetPostApplyMatrix(group); + var preApplyMatrix = postApplyMatrix.inverse; + + foreach (var index in group.indices) + { + positions[index] = worldToLocal.MultiplyPoint3x4( + postApplyMatrix.MultiplyPoint3x4( + delta.MultiplyPoint3x4(preApplyMatrix.MultiplyPoint3x4(origins[index])))); + } + } + + mesh.mesh.vertices = positions; + mesh.RefreshUV(MeshSelection.selectedFacesInEditZone[mesh]); + mesh.Refresh(RefreshMask.Normals); + } + + ProBuilderEditor.Refresh(false); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionTool.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionTool.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..bc283942af473602e8ec946ce980071feda9d7a9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PositionTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b9ed23c5ac29d4227a634affc39ad4a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Pref.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Pref.cs new file mode 100644 index 0000000000000000000000000000000000000000..ada0683929948ed60993447b809d651ae2042dca --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Pref.cs @@ -0,0 +1,19 @@ +using UnityEditor.SettingsManagement; + +namespace UnityEditor.ProBuilder +{ + sealed class Pref<T> : UserSetting<T> + { + public Pref(string key, T value, SettingsScope scope = SettingsScope.Project) + : base(ProBuilderSettings.instance, key, value, scope) + {} + + public Pref(Settings settings, string key, T value, SettingsScope scope = SettingsScope.Project) + : base(settings, key, value, scope) {} + + public static implicit operator T(Pref<T> pref) + { + return pref.value; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Pref.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Pref.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..47c6cbd155c966715b170c37a2a4ade72841ce36 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Pref.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ca7e8f303d863c40930ccc1085e6990 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferenceDictionaryEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferenceDictionaryEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..20d100544248fd8232603611eeb9dee913d6c441 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferenceDictionaryEditor.cs @@ -0,0 +1,60 @@ +using System.Collections.Generic; +using UnityEngine.ProBuilder; +using UnityEngine; +using UnityEditor; +using UnityEditor.IMGUI.Controls; + +namespace UnityEditor.ProBuilder +{ + [CustomEditor(typeof(PreferenceDictionary))] + sealed class PreferenceDictionaryEditor : UnityEditor.Editor + { + PreferenceDictionary m_Preferences = null; + Vector2 m_Scroll = Vector2.zero; + SearchField m_Search; + string m_SearchText; + + void OnEnable() + { + m_Preferences = target as PreferenceDictionary; + m_Search = new SearchField(); + m_SearchText = ""; + } + + public override void OnInspectorGUI() + { + m_SearchText = m_Search.OnGUI(m_SearchText); + + GUILayout.Label("Key Value Pairs", EditorStyles.boldLabel); + + m_Scroll = EditorGUILayout.BeginScrollView(m_Scroll); + + DoPreferenceList<string, bool>(m_Preferences.GetBoolDictionary()); + DoPreferenceList<string, int>(m_Preferences.GetIntDictionary()); + DoPreferenceList<string, float>(m_Preferences.GetFloatDictionary()); + DoPreferenceList<string, string>(m_Preferences.GetStringDictionary()); + DoPreferenceList<string, Color>(m_Preferences.GetColorDictionary()); + DoPreferenceList<string, Material>(m_Preferences.GetMaterialDictionary()); + + + EditorGUILayout.EndScrollView(); + } + + void DoPreferenceList<T, K>(Dictionary<T, K> dictionary) + { + foreach (var kvp in dictionary) + { + var label = kvp.Key.ToString(); + var value = kvp.Value.ToString(); + + if (string.IsNullOrEmpty(m_SearchText) || label.Contains(m_SearchText)) + { + GUILayout.BeginHorizontal(); + GUILayout.Label(label, GUILayout.Width(180), GUILayout.ExpandWidth(false)); + GUILayout.Label(value); + GUILayout.EndHorizontal(); + } + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferenceDictionaryEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferenceDictionaryEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..30235de68925d6f1abf0bb20752c39f763ef1988 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferenceDictionaryEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08ab9a4e4186d164cb67bda77d36ff4c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferencesInternal.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferencesInternal.cs new file mode 100644 index 0000000000000000000000000000000000000000..a71767177970e89e80a03146a94804eff989a564 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferencesInternal.cs @@ -0,0 +1,419 @@ +#if UNITY_2019_1_OR_NEWER +#define SHORTCUT_MANAGER +#endif + +using UnityEngine; +using UnityEngine.Rendering; +using System.Collections.Generic; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Where a preference is stored. Can be per-project or global. + /// </summary> + enum PreferenceLocation + { + /// <summary> + /// Stored per-project. + /// </summary> + Project, + + /// <summary> + /// Shared between all projects. + /// </summary> + Global + }; + + /// <summary> + /// Manage ProBuilder preferences. + /// </summary> + [System.Obsolete("Use Pref<T> or Settings class directly.")] + static class PreferencesInternal + { + const string k_PrefsAssetName = "ProBuilderPreferences.asset"; + + static Dictionary<string, bool> s_BoolDefaults = new Dictionary<string, bool>() + { + }; + + static Dictionary<string, float> s_FloatDefaults = new Dictionary<string, float>() + { + }; + + static Dictionary<string, int> s_IntDefaults = new Dictionary<string, int>() + { + }; + + static Dictionary<string, Color> s_ColorDefaults = new Dictionary<string, Color>() + { + }; + + static Dictionary<string, string> s_StringDefaults = new Dictionary<string, string>() + { + }; + + static PreferenceDictionary s_Preferences = null; + static bool s_Initialized; + + static void LoadPreferencesObject() + { + string preferencesPath = FileUtility.GetLocalDataDirectory() + k_PrefsAssetName; + + // First try loading at the local files directory + s_Preferences = AssetDatabase.LoadAssetAtPath<PreferenceDictionary>(preferencesPath); + + // If that fails, search the project for a compatible preference object + if (s_Preferences == null) + s_Preferences = FileUtility.FindAssetOfType<PreferenceDictionary>(); + } + + /// <summary> + /// Access the project local preferences asset. + /// </summary> + public static PreferenceDictionary preferences + { + get + { + if (!s_Initialized) + { + LoadPreferencesObject(); + s_Initialized = true; + } + + return s_Preferences; + } + } + + /** + * Check if project or global preferences contains a key. + */ + public static bool HasKey(string key) + { + return (s_Preferences != null && s_Preferences.HasKey(key)) || EditorPrefs.HasKey(key); + } + + /// <summary> + /// Delete a key from both project and global preferences. + /// </summary> + /// <param name="key"></param> + public static void DeleteKey(string key) + { + if (preferences != null) + preferences.DeleteKey(key); + EditorPrefs.DeleteKey(key); + } + + /// <summary> + /// Checks if pref key exists in library, and if so return the value. If not, return the default value (true). + /// </summary> + /// <param name="pref"></param> + /// <returns></returns> + public static bool GetBool(string pref) + { + // Backwards compatibility reasons dictate that default bool value is true. + if (s_BoolDefaults.ContainsKey(pref)) + return GetBool(pref, s_BoolDefaults[pref]); + return GetBool(pref, true); + } + + /// <summary> + /// Get a preference bool value. Local preference has priority over EditorPref. + /// </summary> + /// <param name="key"></param> + /// <param name="fallback"></param> + /// <returns></returns> + public static bool GetBool(string key, bool fallback) + { + if (s_Preferences != null && preferences.HasKey<bool>(key)) + return preferences.GetBool(key, fallback); + return EditorPrefs.GetBool(key, fallback); + } + + /// <summary> + /// Get float value that is stored in preferences, or it's default value. + /// </summary> + /// <param name="key"></param> + /// <returns></returns> + public static float GetFloat(string key) + { + if (s_FloatDefaults.ContainsKey(key)) + return GetFloat(key, s_FloatDefaults[key]); + return GetFloat(key, 1f); + } + + public static float GetFloat(string key, float fallback) + { + if (s_Preferences != null && preferences.HasKey<float>(key)) + return preferences.GetFloat(key, fallback); + return EditorPrefs.GetFloat(key, fallback); + } + + /// <summary> + /// Get int value that is stored in preferences, or it's default value. + /// </summary> + /// <param name="key"></param> + /// <returns></returns> + public static int GetInt(string key) + { + if (s_IntDefaults.ContainsKey(key)) + return GetInt(key, s_IntDefaults[key]); + return GetInt(key, 0); + } + + public static int GetInt(string key, int fallback) + { + if (s_Preferences != null && preferences.HasKey<int>(key)) + return preferences.GetInt(key, fallback); + return EditorPrefs.GetInt(key, fallback); + } + + /// <summary> + /// Get an enum value from the stored preferences (or it's default value). + /// </summary> + /// <param name="key"></param> + /// <typeparam name="T"></typeparam> + /// <returns></returns> + public static T GetEnum<T>(string key) where T : struct, System.IConvertible + { + return (T)(object)GetInt(key); + } + + /// <summary> + /// Get Color value stored in preferences. + /// </summary> + /// <param name="key"></param> + /// <returns></returns> + public static Color GetColor(string key) + { + if (s_ColorDefaults.ContainsKey(key)) + return GetColor(key, s_ColorDefaults[key]); + return GetColor(key, Color.white); + } + + public static Color GetColor(string key, Color fallback) + { + if (s_Preferences != null && preferences.HasKey<Color>(key)) + return preferences.GetColor(key, fallback); + InternalUtility.TryParseColor(EditorPrefs.GetString(key), ref fallback); + return fallback; + } + + /// <summary> + /// Get the string value associated with this key. + /// </summary> + /// <param name="key"></param> + /// <returns></returns> + public static string GetString(string key) + { + if (s_StringDefaults.ContainsKey(key)) + return GetString(key, s_StringDefaults[key]); + return GetString(key, string.Empty); + } + + public static string GetString(string key, string fallback) + { + if (s_Preferences != null && preferences.HasKey<string>(key)) + return preferences.GetString(key, fallback); + return EditorPrefs.GetString(key, fallback); + } + + public static T GetValue<T>(string key, T fallback = default(T)) + { + var str = GetString(key, null); + + if (string.IsNullOrEmpty(str)) + return fallback; + + return JsonUtility.FromJson<T>(str); + } + + public static Material GetMaterial(string key) + { + if (preferences != null && preferences.HasKey<Material>(key)) + return preferences.GetMaterial(key); + + return AssetDatabase.LoadAssetAtPath<Material>(EditorPrefs.GetString(key)); + } + + internal static bool TryGetValue(string key, System.Type type, out object value) + { + value = null; + + if (!HasKey(key)) + return false; + + if (type == typeof(bool)) + value = GetBool(key); + else if (type == typeof(float)) + value = GetFloat(key); + else if (type == typeof(int)) + value = GetInt(key); + else if (type == typeof(string)) + value = GetString(key); +#if !SHORTCUT_MANAGER + else if (type == typeof(Shortcut[])) + value = Shortcut.ParseShortcuts(EditorPrefs.GetString(key)); +#endif + else if (type == typeof(Color)) + value = GetColor(key); + else if (type == typeof(Material)) + value = GetMaterial(key); + else if (type == typeof(ColliderType)) + value = GetEnum<ColliderType>(key); + else if (type == typeof(ShadowCastingMode)) + value = GetEnum<ShadowCastingMode>(key); + else if (type == typeof(LogLevel)) + value = GetEnum<LogLevel>(key); + else if (type == typeof(LogOutput)) + value = GetEnum<LogOutput>(key); + else if (type == typeof(SceneToolbarLocation)) + value = GetEnum<SceneToolbarLocation>(key); + else + return false; + + return true; + } + +#if !SHORTCUT_MANAGER + /// <summary> + /// Retrieve stored shortcuts from preferences in an IEnumerable format. + /// </summary> + /// <returns></returns> + public static IEnumerable<Shortcut> GetShortcuts() + { + return EditorPrefs.HasKey(PreferenceKeys.pbDefaultShortcuts) + ? Shortcut.ParseShortcuts(EditorPrefs.GetString(PreferenceKeys.pbDefaultShortcuts)) + : Shortcut.DefaultShortcuts(); + } +#endif + + /// <summary> + /// Associate key with int value. + /// </summary> + /// <param name="key"></param> + /// <param name="value"></param> + /// <param name="location">Optional parameter stores preference in project settings (true) or global (false).</param> + public static void SetInt(string key, int value, PreferenceLocation location = PreferenceLocation.Project) + { + if (location == PreferenceLocation.Project) + { + if (preferences == null) + return; + preferences.SetInt(key, value); + UnityEditor.EditorUtility.SetDirty(preferences); + } + else + { + EditorPrefs.SetInt(key, value); + } + } + + /** + * Associate key with float value. + * Optional isLocal parameter stores preference in project settings (true) or global (false). + */ + public static void SetFloat(string key, float value, PreferenceLocation location = PreferenceLocation.Project) + { + if (location == PreferenceLocation.Project) + { + if (preferences == null) + return; + preferences.SetFloat(key, value); + UnityEditor.EditorUtility.SetDirty(preferences); + } + else + { + EditorPrefs.SetFloat(key, value); + } + } + + /** + * Associate key with bool value. + * Optional isLocal parameter stores preference in project settings (true) or global (false). + */ + public static void SetBool(string key, bool value, PreferenceLocation location = PreferenceLocation.Project) + { + if (location == PreferenceLocation.Project) + { + if (preferences == null) + return; + preferences.SetBool(key, value); + UnityEditor.EditorUtility.SetDirty(preferences); + } + else + { + EditorPrefs.SetBool(key, value); + } + } + + /** + * Associate key with string value. + * Optional isLocal parameter stores preference in project settings (true) or global (false). + */ + public static void SetString(string key, string value, PreferenceLocation location = PreferenceLocation.Project) + { + if (location == PreferenceLocation.Project) + { + if (preferences == null) + return; + preferences.SetString(key, value); + UnityEditor.EditorUtility.SetDirty(preferences); + } + else + { + EditorPrefs.SetString(key, value); + } + } + + /** + * Associate key with color value. + * Optional isLocal parameter stores preference in project settings (true) or global (false). + */ + public static void SetColor(string key, Color value, PreferenceLocation location = PreferenceLocation.Project) + { + if (location == PreferenceLocation.Project) + { + if (preferences == null) + return; + preferences.SetColor(key, value); + UnityEditor.EditorUtility.SetDirty(preferences); + } + else + { + EditorPrefs.SetString(key, value.ToString()); + } + } + + /** + * Associate key with material value. + * Optional isLocal parameter stores preference in project settings (true) or global (false). + */ + public static void SetMaterial(string key, Material value, PreferenceLocation location = PreferenceLocation.Project) + { + if (location == PreferenceLocation.Project) + { + if (preferences == null) + return; + preferences.SetMaterial(key, value); + UnityEditor.EditorUtility.SetDirty(preferences); + } + else + { + EditorPrefs.SetString(key, value != null ? AssetDatabase.GetAssetPath(value) : ""); + } + } + + /// <summary> + /// Serialize a value to JSON + /// </summary> + /// <param name="key"></param> + /// <param name="value"></param> + /// <param name="location"></param> + /// <typeparam name="T"></typeparam> + public static void SetValue<T>(string key, T value, PreferenceLocation location = PreferenceLocation.Project) + { + SetString(key, JsonUtility.ToJson(value), location); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferencesInternal.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferencesInternal.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..822839474c719ec701c23151920f60140a2b7927 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferencesInternal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c1d6bd74068a5242b4a72adf38b704b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferencesUpdater.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferencesUpdater.cs new file mode 100644 index 0000000000000000000000000000000000000000..bae33eeb68637d3ee5b420925e71b29a049b9a2b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferencesUpdater.cs @@ -0,0 +1,277 @@ +#if UNITY_2019_1_OR_NEWER +#define SHORTCUT_MANAGER +#endif + +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEditor.SettingsManagement; + +namespace UnityEditor.ProBuilder +{ + static class PreferencesUpdater + { + static Pref<SemVer> s_PreferencesVersion = new Pref<SemVer>("preferences.version", new SemVer(), SettingsScope.Project); + static readonly SemVer k_ProBuilder_4_0_0 = new SemVer(4, 0, 0, 16, "preview"); + + /// <summary> + /// Set the editor pref version, and check if any preferences need to be updated or reset. + /// </summary> + public static void CheckEditorPrefsVersion() + { + // this exists to force update preferences when updating packages + var stored = s_PreferencesVersion.value; + SemVer current; + + if (Version.TryGetPackageVersion(out current) && !stored.Equals(current)) + { + s_PreferencesVersion.SetValue(current); + + if (stored < k_ProBuilder_4_0_0) + { + RecoverOldPreferences(); + DeleteObsoletePreferences(); + } + } + } + + struct FormerPreferenceKeyMap + { + public string oldKey; + public string newKey; + public System.Type type; + public SettingsScope scope; + + public FormerPreferenceKeyMap(string oldKey, string newKey, System.Type type, SettingsScope scope) + { + this.oldKey = oldKey; + this.newKey = newKey; + this.type = type; + this.scope = scope; + } + } + + // for upgrading from pre-4.0.0 preferences this keymap is used. for renaming post 4.0.0 settings, use + // [FormerlySavedAs] attribute (not yet created). + static readonly FormerPreferenceKeyMap[] s_FormerPreferenceKeyMap = new FormerPreferenceKeyMap[] + { +#pragma warning disable 612, 618 + new FormerPreferenceKeyMap("", "about.identifier", typeof(UnityEngine.ProBuilder.SemVer), SettingsScope.Project), + new FormerPreferenceKeyMap(PreferenceKeys.pbUseUnityColors, "graphics.handlesUseUnityColors", typeof(System.Boolean), SettingsScope.User), + new FormerPreferenceKeyMap(PreferenceKeys.pbSelectedFaceDither, "graphics.ditherFaceHandles", typeof(System.Boolean), SettingsScope.User), + new FormerPreferenceKeyMap(PreferenceKeys.pbSelectedFaceColor, "graphics.userSelectedFaceColor", typeof(UnityEngine.Color), SettingsScope.User), + new FormerPreferenceKeyMap(PreferenceKeys.pbWireframeColor, "graphics.userWireframeColor", typeof(UnityEngine.Color), SettingsScope.User), + new FormerPreferenceKeyMap(PreferenceKeys.pbUnselectedEdgeColor, "graphics.userUnselectedEdgeColor", typeof(UnityEngine.Color), SettingsScope.User), + new FormerPreferenceKeyMap(PreferenceKeys.pbSelectedEdgeColor, "graphics.userSelectedEdgeColor", typeof(UnityEngine.Color), SettingsScope.User), + new FormerPreferenceKeyMap(PreferenceKeys.pbUnselectedVertexColor, "graphics.userUnselectedVertexColor", typeof(UnityEngine.Color), SettingsScope.User), + new FormerPreferenceKeyMap(PreferenceKeys.pbSelectedVertexColor, "graphics.userSelectedVertexColor", typeof(UnityEngine.Color), SettingsScope.User), + new FormerPreferenceKeyMap(PreferenceKeys.pbPreselectionColor, "graphics.userPreselectionColor", typeof(UnityEngine.Color), SettingsScope.User), + new FormerPreferenceKeyMap(PreferenceKeys.pbWireframeSize, "graphics.wireframeLineSize", typeof(System.Single), SettingsScope.User), + new FormerPreferenceKeyMap(PreferenceKeys.pbLineHandleSize, "graphics.edgeLineSize", typeof(System.Single), SettingsScope.User), + new FormerPreferenceKeyMap(PreferenceKeys.pbVertexHandleSize, "graphics.vertexPointSize", typeof(System.Single), SettingsScope.User), + new FormerPreferenceKeyMap(PreferenceKeys.pbShiftOnlyTooltips, "editor.shiftOnlyTooltips", typeof(System.Boolean), SettingsScope.User), + new FormerPreferenceKeyMap(PreferenceKeys.pbShowEditorNotifications, "editor.showEditorNotifications", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap(PreferenceKeys.pbDefaultStaticFlags, "mesh.defaultStaticEditorFlags", typeof(UnityEditor.StaticEditorFlags), SettingsScope.Project), + new FormerPreferenceKeyMap(PreferenceKeys.pbDefaultMaterial, "mesh.userMaterial", typeof(UnityEngine.Material), SettingsScope.Project), + new FormerPreferenceKeyMap(PreferenceKeys.pbForceConvex, "mesh.meshColliderIsConvex", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap("", "mesh.newShapePivotLocation", typeof(UnityEngine.ProBuilder.PivotLocation), SettingsScope.Project), + new FormerPreferenceKeyMap("", "mesh.newShapesSnapToGrid", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap(PreferenceKeys.pbShadowCastingMode, "mesh.shadowCastingMode", typeof(UnityEngine.Rendering.ShadowCastingMode), SettingsScope.Project), + new FormerPreferenceKeyMap(PreferenceKeys.pbDefaultCollider, "mesh.newShapeColliderType", typeof(UnityEngine.ProBuilder.ColliderType), SettingsScope.Project), + new FormerPreferenceKeyMap(PreferenceKeys.pbEnableExperimental, "experimental.featuresEnabled", typeof(System.Boolean), SettingsScope.User), + new FormerPreferenceKeyMap(PreferenceKeys.pbMeshesAreAssets, "experimental.meshesAreAssets", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap("", "entity.detailVisible", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap("", "entity.moverVisible", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap("", "entity.colliderVisible", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap("", "entity.triggerVisible", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap("", "lightmapping.autoUnwrapLightmapUV", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap(PreferenceKeys.pbShowMissingLightmapUvWarning, "lightmapping.showMissingLightmapWarning", typeof(System.Boolean), SettingsScope.User), + new FormerPreferenceKeyMap("", "lightmapping.defaultLightmapUnwrapParameters", typeof(UnityEngine.ProBuilder.UnwrapParameters), SettingsScope.Project), + new FormerPreferenceKeyMap("", "lightmapping.giWorkflowMode", typeof(UnityEditor.Lightmapping.GIWorkflowMode), SettingsScope.User), + new FormerPreferenceKeyMap("pb_Log::m_LogLevel", "log.level", typeof(UnityEngine.ProBuilder.LogLevel), SettingsScope.Project), + new FormerPreferenceKeyMap("pb_Log::m_Output", "log.output", typeof(UnityEngine.ProBuilder.LogOutput), SettingsScope.Project), + new FormerPreferenceKeyMap("pb_Log::m_LogFilePath", "log.path", typeof(System.String), SettingsScope.Project), + new FormerPreferenceKeyMap("", "editor.materialPalettePath", typeof(System.String), SettingsScope.Project), + new FormerPreferenceKeyMap("", "preferences.version", typeof(UnityEngine.ProBuilder.SemVer), SettingsScope.Project), + new FormerPreferenceKeyMap(PreferenceKeys.pbShowSceneInfo, "editor.showSceneInfo", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap(PreferenceKeys.pbIconGUI, "editor.toolbarIconGUI", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap(PreferenceKeys.pbUniqueModeShortcuts, "editor.uniqueModeShortcuts", typeof(System.Boolean), SettingsScope.User), + new FormerPreferenceKeyMap("", "editor.allowNonManifoldActions", typeof(System.Boolean), SettingsScope.User), + new FormerPreferenceKeyMap(PreferenceKeys.pbToolbarLocation, "editor.sceneToolbarLocation", typeof(UnityEditor.ProBuilder.SceneToolbarLocation), SettingsScope.User), + new FormerPreferenceKeyMap("", "UnityEngine.ProBuilder.ProBuilderEditor-isUtilityWindow", typeof(System.Boolean), SettingsScope.Project), +#if !SHORTCUT_MANAGER + new FormerPreferenceKeyMap(PreferenceKeys.pbDefaultShortcuts, "editor.sceneViewShortcuts", typeof(UnityEngine.ProBuilder.Shortcut[]), SettingsScope.Project), +#endif + new FormerPreferenceKeyMap(PreferenceKeys.pbShowPreselectionHighlight, "editor.showPreselectionHighlight", typeof(System.Boolean), SettingsScope.User), + new FormerPreferenceKeyMap(PreferenceKeys.pbCloseShapeWindow, "editor.closeWindowAfterShapeCreation", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap("", "shape.torusDefinesInnerOuter", typeof(System.Boolean), SettingsScope.User), + new FormerPreferenceKeyMap("pb_SmoothingGroupEditor::m_ShowPreview", "smoothing.showPreview", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap("pb_SmoothingGroupEditor::m_DrawNormals", "smoothing.showNormals", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap("", "smoothing.showHelp", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap("pb_SmoothingGroupEditor::m_NormalsSize", "smoothing.NormalsSize", typeof(System.Single), SettingsScope.Project), + new FormerPreferenceKeyMap("pb_SmoothingGroupEditor::m_PreviewOpacity", "smoothing.PreviewOpacity", typeof(System.Single), SettingsScope.Project), + new FormerPreferenceKeyMap("pb_SmoothingGroupEditor::m_PreviewDither", "smoothing.previewDither", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap("", "smoothing.showSettings", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap(PreferenceKeys.pbStripProBuilderOnBuild, "editor.stripProBuilderScriptsOnBuild", typeof(System.Boolean), SettingsScope.Project), + new FormerPreferenceKeyMap(PreferenceKeys.pbUVGridSnapValue, "uv.uvEditorGridSnapIncrement", typeof(System.Single), SettingsScope.Project), + new FormerPreferenceKeyMap("", "VertexColorPalette.previousColorPalette", typeof(System.String), SettingsScope.Project), +#pragma warning restore 612, 618 + }; + + static void RecoverOldPreferences() + { + int success = 0; + + foreach (var map in s_FormerPreferenceKeyMap) + { + object val; + MethodInfo set = typeof(Settings).GetMethod("Set", BindingFlags.Static | BindingFlags.Public); + +#pragma warning disable 618 + if (!string.IsNullOrEmpty(map.oldKey) && PreferencesInternal.TryGetValue(map.oldKey, map.type, out val)) + { + try + { + MethodInfo genericSet = set.MakeGenericMethod(map.type); + + genericSet.Invoke(null, new object[] + { + map.newKey, + val, + map.scope + }); + + success++; + } + catch + { + } + } +#pragma warning restore 618 + } + +#if PB_DEBUG + Debug.Log("ProBuilder successfully recovered " + success + " settings."); +#endif + + ProBuilderSettings.Save(); + } + + static void DeleteObsoletePreferences() + { +#pragma warning disable 612, 618 + PreferencesInternal.DeleteKey(PreferenceKeys.pbDefaultEditLevel); + PreferencesInternal.DeleteKey(PreferenceKeys.pbDefaultSelectionMode); + PreferencesInternal.DeleteKey(PreferenceKeys.pbHandleAlignment); + PreferencesInternal.DeleteKey(PreferenceKeys.pbVertexColorTool); + PreferencesInternal.DeleteKey(PreferenceKeys.pbToolbarLocation); + PreferencesInternal.DeleteKey(PreferenceKeys.pbDefaultEntity); + PreferencesInternal.DeleteKey(PreferenceKeys.pbUseUnityColors); + PreferencesInternal.DeleteKey(PreferenceKeys.pbLineHandleSize); + PreferencesInternal.DeleteKey(PreferenceKeys.pbWireframeSize); + PreferencesInternal.DeleteKey(PreferenceKeys.pbSelectedFaceColor); + PreferencesInternal.DeleteKey(PreferenceKeys.pbWireframeColor); + PreferencesInternal.DeleteKey(PreferenceKeys.pbPreselectionColor); + PreferencesInternal.DeleteKey(PreferenceKeys.pbSelectedFaceDither); + PreferencesInternal.DeleteKey(PreferenceKeys.pbSelectedVertexColor); + PreferencesInternal.DeleteKey(PreferenceKeys.pbUnselectedVertexColor); + PreferencesInternal.DeleteKey(PreferenceKeys.pbSelectedEdgeColor); + PreferencesInternal.DeleteKey(PreferenceKeys.pbUnselectedEdgeColor); + PreferencesInternal.DeleteKey(PreferenceKeys.pbDefaultOpenInDockableWindow); + PreferencesInternal.DeleteKey(PreferenceKeys.pbEditorPrefVersion); + PreferencesInternal.DeleteKey(PreferenceKeys.pbEditorShortcutsVersion); + PreferencesInternal.DeleteKey(PreferenceKeys.pbDefaultCollider); + PreferencesInternal.DeleteKey(PreferenceKeys.pbForceConvex); + PreferencesInternal.DeleteKey(PreferenceKeys.pbVertexColorPrefs); + PreferencesInternal.DeleteKey(PreferenceKeys.pbShowEditorNotifications); + PreferencesInternal.DeleteKey(PreferenceKeys.pbDragCheckLimit); + PreferencesInternal.DeleteKey(PreferenceKeys.pbForceVertexPivot); + PreferencesInternal.DeleteKey(PreferenceKeys.pbForceGridPivot); + PreferencesInternal.DeleteKey(PreferenceKeys.pbManifoldEdgeExtrusion); + PreferencesInternal.DeleteKey(PreferenceKeys.pbPerimeterEdgeBridgeOnly); + PreferencesInternal.DeleteKey(PreferenceKeys.pbPBOSelectionOnly); + PreferencesInternal.DeleteKey(PreferenceKeys.pbCloseShapeWindow); + PreferencesInternal.DeleteKey(PreferenceKeys.pbUVEditorFloating); + PreferencesInternal.DeleteKey(PreferenceKeys.pbUVMaterialPreview); + PreferencesInternal.DeleteKey(PreferenceKeys.pbShowSceneToolbar); + PreferencesInternal.DeleteKey(PreferenceKeys.pbNormalizeUVsOnPlanarProjection); + PreferencesInternal.DeleteKey(PreferenceKeys.pbStripProBuilderOnBuild); + PreferencesInternal.DeleteKey(PreferenceKeys.pbDisableAutoUV2Generation); + PreferencesInternal.DeleteKey(PreferenceKeys.pbShowSceneInfo); + PreferencesInternal.DeleteKey(PreferenceKeys.pbEnableBackfaceSelection); + PreferencesInternal.DeleteKey(PreferenceKeys.pbVertexPaletteDockable); + PreferencesInternal.DeleteKey(PreferenceKeys.pbExtrudeAsGroup); + PreferencesInternal.DeleteKey(PreferenceKeys.pbUniqueModeShortcuts); + PreferencesInternal.DeleteKey(PreferenceKeys.pbMaterialEditorFloating); + PreferencesInternal.DeleteKey(PreferenceKeys.pbShapeWindowFloating); + PreferencesInternal.DeleteKey(PreferenceKeys.pbIconGUI); + PreferencesInternal.DeleteKey(PreferenceKeys.pbShiftOnlyTooltips); + PreferencesInternal.DeleteKey(PreferenceKeys.pbDrawAxisLines); + PreferencesInternal.DeleteKey(PreferenceKeys.pbElementSelectIsHamFisted); + PreferencesInternal.DeleteKey(PreferenceKeys.pbCollapseVertexToFirst); + PreferencesInternal.DeleteKey(PreferenceKeys.pbMeshesAreAssets); + PreferencesInternal.DeleteKey(PreferenceKeys.pbDragSelectWholeElement); + PreferencesInternal.DeleteKey(PreferenceKeys.pbEnableExperimental); + PreferencesInternal.DeleteKey(PreferenceKeys.pbFillHoleSelectsEntirePath); + PreferencesInternal.DeleteKey(PreferenceKeys.pbDetachToNewObject); + PreferencesInternal.DeleteKey(PreferenceKeys.pbPreserveFaces); + PreferencesInternal.DeleteKey(PreferenceKeys.pbVertexHandleSize); + PreferencesInternal.DeleteKey(PreferenceKeys.pbUVGridSnapValue); + PreferencesInternal.DeleteKey(PreferenceKeys.pbUVWeldDistance); + PreferencesInternal.DeleteKey(PreferenceKeys.pbWeldDistance); + PreferencesInternal.DeleteKey(PreferenceKeys.pbExtrudeDistance); + PreferencesInternal.DeleteKey(PreferenceKeys.pbBevelAmount); + PreferencesInternal.DeleteKey(PreferenceKeys.pbEdgeSubdivisions); + PreferencesInternal.DeleteKey(PreferenceKeys.pbDefaultShortcuts); + PreferencesInternal.DeleteKey(PreferenceKeys.pbDefaultMaterial); + PreferencesInternal.DeleteKey(PreferenceKeys.pbGrowSelectionUsingAngle); + PreferencesInternal.DeleteKey(PreferenceKeys.pbGrowSelectionAngle); + PreferencesInternal.DeleteKey(PreferenceKeys.pbGrowSelectionAngleIterative); + PreferencesInternal.DeleteKey(PreferenceKeys.pbShowDetail); + PreferencesInternal.DeleteKey(PreferenceKeys.pbShowOccluder); + PreferencesInternal.DeleteKey(PreferenceKeys.pbShowMover); + PreferencesInternal.DeleteKey(PreferenceKeys.pbShowCollider); + PreferencesInternal.DeleteKey(PreferenceKeys.pbShowTrigger); + PreferencesInternal.DeleteKey(PreferenceKeys.pbShowNoDraw); + PreferencesInternal.DeleteKey(PreferenceKeys.pbShowMissingLightmapUvWarning); + PreferencesInternal.DeleteKey(PreferenceKeys.pbManageLightmappingStaticFlag); + PreferencesInternal.DeleteKey(PreferenceKeys.pbShadowCastingMode); + PreferencesInternal.DeleteKey(PreferenceKeys.pbDefaultStaticFlags); + PreferencesInternal.DeleteKey(PreferenceKeys.pbShowPreselectionHighlight); + + PreferencesInternal.DeleteKey("ProBuilder_AboutWindowIdentifier"); + PreferencesInternal.DeleteKey("pb_UVTemplate_imageSize"); + PreferencesInternal.DeleteKey("pb_UVTemplate_lineColor"); + PreferencesInternal.DeleteKey("pb_UVTemplate_backgroundColor"); + PreferencesInternal.DeleteKey("pb_UVTemplate_transparentBackground"); + PreferencesInternal.DeleteKey("pb_UVTemplate_hideGrid"); + PreferencesInternal.DeleteKey("pb_Log::m_LogFilePath"); + PreferencesInternal.DeleteKey("pb_Log::m_Output"); + PreferencesInternal.DeleteKey("pb_Log::m_LogLevel"); + PreferencesInternal.DeleteKey("pb_SmoothingGroupEditor::m_ShowPreview"); + PreferencesInternal.DeleteKey("pb_SmoothingGroupEditor::m_DrawNormals"); + PreferencesInternal.DeleteKey("pb_SmoothingGroupEditor::m_NormalsSize"); + PreferencesInternal.DeleteKey("pb_SmoothingGroupEditor::m_PreviewOpacity"); + PreferencesInternal.DeleteKey("pb_SmoothingGroupEditor::m_PreviewDither"); + + PreferencesInternal.DeleteKey("pbDefaultExportFormat"); + PreferencesInternal.DeleteKey("pbExportRecursive"); + PreferencesInternal.DeleteKey("pbExportAsGroup"); + PreferencesInternal.DeleteKey("pbObjExportRightHanded"); + PreferencesInternal.DeleteKey("pbObjApplyTransform"); + PreferencesInternal.DeleteKey("pbObjExportCopyTextures"); + PreferencesInternal.DeleteKey("pbObjExportVertexColors"); + PreferencesInternal.DeleteKey("pbObjTextureOffsetScale"); + PreferencesInternal.DeleteKey("pbObjQuads"); + PreferencesInternal.DeleteKey("pbStlFormat"); + PreferencesInternal.DeleteKey("pbPlyExportIsRightHanded"); + PreferencesInternal.DeleteKey("pbPlyApplyTransform"); + PreferencesInternal.DeleteKey("pbPlyQuads"); + PreferencesInternal.DeleteKey("pbPlyNGons"); +#pragma warning restore 612, 618 + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferencesUpdater.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferencesUpdater.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3556f8cd4c30f399bce0471791b4a5b836717476 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/PreferencesUpdater.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 90907e6bfb6afd145986768f6095c76d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..bd0a6f8c13e08a343b55323a9ee9aa1abefa158e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderEditor.cs @@ -0,0 +1,1434 @@ +#if UNITY_2019_1_OR_NEWER +#define SHORTCUT_MANAGER +#endif + +using System; +using UnityEngine; +using System.Linq; +using System.Collections.Generic; +using UnityEditor.ProBuilder.Actions; +using UnityEngine.ProBuilder; +using PMesh = UnityEngine.ProBuilder.ProBuilderMesh; +using UObject = UnityEngine.Object; +using UnityEditor.SettingsManagement; +using UnityEditor.ShortcutManagement; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Manages the ProBuilder toolbar window and tool mode. + /// </summary> + public sealed class ProBuilderEditor : EditorWindow, IHasCustomMenu + { + // Match the value set in RectSelection.cs + const float k_MouseDragThreshold = 6f; + + /// <value> + /// Raised any time the ProBuilder editor refreshes the selection. This is called every frame when interacting with mesh elements, and after any mesh operation. + /// </value> + public static event Action<IEnumerable<ProBuilderMesh>> selectionUpdated; + + /// <value> + /// Raised when the EditLevel is changed. + /// </value> + public static event Action<SelectMode> selectModeChanged; + + /// <value> + /// Called when vertex modifications are complete. + /// </value> + public static event Action<IEnumerable<ProBuilderMesh>> afterMeshModification; + + /// <value> + /// Called immediately prior to beginning vertex modifications. The ProBuilderMesh will be in un-altered state at this point (meaning ProBuilderMesh.ToMesh and ProBuilderMesh.Refresh have been called, but not Optimize). + /// </value> + public static event Action<IEnumerable<ProBuilderMesh>> beforeMeshModification; + + internal static EditorToolbar s_EditorToolbar; + static ProBuilderEditor s_Instance; + + GUIContent[] m_EditModeIcons; + GUIStyle VertexTranslationInfoStyle; + + [UserSetting("General", "Show Scene Info", "Toggle the display of information about selected meshes in the Scene View.")] + static Pref<bool> s_ShowSceneInfo = new Pref<bool>("editor.showSceneInfo", false); + + [UserSetting("Toolbar", "Icon GUI", "Toggles the ProBuilder window interface between text and icon versions.")] + internal static Pref<bool> s_IsIconGui = new Pref<bool>("editor.toolbarIconGUI", false); + +#if !SHORTCUT_MANAGER + [UserSetting("Toolbar", "Unique Mode Shortcuts", "When off, the G key toggles between Object and Element modes and H enumerates the element modes. If on, G, H, J, and K are shortcuts to Object, Vertex, Edge, and Face modes respectively.")] + internal static Pref<bool> s_UniqueModeShortcuts = new Pref<bool>("editor.uniqueModeShortcuts", false, SettingsScope.User); +#endif + + [UserSetting("Mesh Editing", "Allow non-manifold actions", "Enables advanced mesh editing techniques that may create non-manifold geometry.")] + internal static Pref<bool> s_AllowNonManifoldActions = new Pref<bool>("editor.allowNonManifoldActions", false, SettingsScope.User); + + [UserSetting("Toolbar", "Toolbar Location", "Where the Object, Face, Edge, and Vertex toolbar will be shown in the Scene View.")] + static Pref<SceneToolbarLocation> s_SceneToolbarLocation = new Pref<SceneToolbarLocation>("editor.sceneToolbarLocation", SceneToolbarLocation.UpperCenter, SettingsScope.User); + + static Pref<bool> s_WindowIsFloating = new Pref<bool>("UnityEngine.ProBuilder.ProBuilderEditor-isUtilityWindow", false, SettingsScope.Project); + static Pref<bool> m_BackfaceSelectEnabled = new Pref<bool>("editor.backFaceSelectEnabled", false); + static Pref<RectSelectMode> m_DragSelectRectMode = new Pref<RectSelectMode>("editor.dragSelectRectMode", RectSelectMode.Partial); + static Pref<SelectionModifierBehavior> m_SelectModifierBehavior = new Pref<SelectionModifierBehavior>("editor.rectSelectModifier", SelectionModifierBehavior.Difference); + static Pref<SelectMode> s_SelectMode = new Pref<SelectMode>("editor.selectMode", SelectMode.Object); + + internal static RectSelectMode rectSelectMode + { + get { return m_DragSelectRectMode.value; } + + set + { + if (m_DragSelectRectMode.value == value) + return; + + m_DragSelectRectMode.SetValue(value, true); + + if (s_Instance != null) + s_Instance.m_ScenePickerPreferences.rectSelectMode = value; + } + } + + internal static SelectionModifierBehavior selectionModifierBehavior + { + get { return m_SelectModifierBehavior.value; } + + set + { + if (s_Instance == null || m_SelectModifierBehavior.value == value) + return; + + m_SelectModifierBehavior.SetValue(value, true); + + if (s_Instance != null) + s_Instance.m_ScenePickerPreferences.selectionModifierBehavior = value; + } + } + + internal static bool backfaceSelectionEnabled + { + get { return m_BackfaceSelectEnabled.value; } + + set + { + if (value == m_BackfaceSelectEnabled.value) + return; + + m_BackfaceSelectEnabled.SetValue(value, true); + + if(s_Instance != null) + s_Instance.m_ScenePickerPreferences.cullMode = value ? CullingMode.None : CullingMode.Back; + } + } + + // used for 'g' key shortcut to swap between object/vef modes + SelectMode m_LastComponentMode; + +#if !SHORTCUT_MANAGER + [UserSetting] + internal static Pref<Shortcut[]> s_Shortcuts = new Pref<Shortcut[]>("editor.sceneViewShortcuts", Shortcut.DefaultShortcuts().ToArray()); +#endif + GUIStyle m_CommandStyle; + Rect m_ElementModeToolbarRect = new Rect(3, 6, 128, 24); + + int m_DefaultControl; + SceneSelection m_Hovering = new SceneSelection(); + SceneSelection m_HoveringPrevious = new SceneSelection(); + ScenePickerPreferences m_ScenePickerPreferences; + + [UserSetting("Graphics", "Show Hover Highlight", "Highlight the mesh element nearest to the mouse cursor.")] + static Pref<bool> s_ShowHoverHighlight = new Pref<bool>("editor.showPreselectionHighlight", true, SettingsScope.User); + + Tool m_CurrentTool = Tool.Move; + Vector2 m_InitialMousePosition; + Rect m_MouseDragRect; + bool m_IsDragging; + bool m_IsReadyForMouseDrag; + // prevents leftClickUp from stealing focus after double click + bool m_WasDoubleClick; + // vertex handles +#if !SHORTCUT_MANAGER + bool m_IsRightMouseDown; +#endif + static Dictionary<Type, VertexManipulationTool> s_EditorTools = new Dictionary<Type, VertexManipulationTool>(); + + Vector3[][] m_VertexPositions; + Vector3[] m_VertexOffset; + + GUIContent m_SceneInfo = new GUIContent(); + + Rect m_SceneInfoRect = new Rect(10, 10, 200, 40); + + bool m_wasSelectingPath; + +#if !UNITY_2018_2_OR_NEWER + static MethodInfo s_ResetOnSceneGUIState = null; +#endif + + // All selected pb_Objects + internal List<ProBuilderMesh> selection + { + get { return MeshSelection.topInternal; } + } + + Event m_CurrentEvent; + + internal bool isFloatingWindow { get; private set; } + + /// <value> + /// Get the current @"UnityEngine.ProBuilder.EditLevel". + /// </value> + [Obsolete] + internal static EditLevel editLevel + { + get { return s_Instance != null ? EditorUtility.GetEditLevel(s_SelectMode) : EditLevel.Top; } + } + + /// <summary> + /// Get the current @"UnityEngine.ProBuilder.SelectMode". + /// </summary> + /// <value>The ComponentMode currently set.</value> + [Obsolete] + internal static ComponentMode componentMode + { + get { return s_Instance != null ? EditorUtility.GetComponentMode(s_SelectMode) : ComponentMode.Face; } + } + + /// <value> + /// Get and set the current SelectMode. + /// </value> + public static SelectMode selectMode + { + get + { + if (s_Instance != null) + return s_SelectMode; + + // for backwards compatibility reasons `Object` is returned when editor is closed + return SelectMode.Object; + } + + set + { + if (s_Instance == null) + return; + + var previous = s_SelectMode.value; + + if (previous == value) + return; + + s_SelectMode.SetValue(value, true); + + if (previous == SelectMode.Edge || previous == SelectMode.Vertex || previous == SelectMode.Face) + s_Instance.m_LastComponentMode = previous; + + if (value == SelectMode.Object) + Tools.current = s_Instance.m_CurrentTool; + + if (selectModeChanged != null) + selectModeChanged(value); + + Refresh(); + } + } + + Stack<SelectMode> m_SelectModeHistory = new Stack<SelectMode>(); + + internal static void PushSelectMode(SelectMode mode) + { + s_Instance.m_SelectModeHistory.Push(selectMode); + selectMode = mode; + } + + internal static void PopSelectMode() + { + if (s_Instance.m_SelectModeHistory.Count < 1) + return; + selectMode = s_Instance.m_SelectModeHistory.Pop(); + } + + internal static void ResetToLastSelectMode() + { + if (s_Instance != null) + selectMode = s_Instance.m_LastComponentMode; + } + + static class SceneStyles + { + static bool s_Init = false; + static GUIStyle s_SelectionRect; + + public static GUIStyle selectionRect + { + get { return s_SelectionRect; } + } + + public static void Init() + { + if (s_Init) + return; + + s_Init = true; + + s_SelectionRect = new GUIStyle() + { + normal = new GUIStyleState() + { + background = IconUtility.GetIcon("Scene/SelectionRect") + }, + border = new RectOffset(1, 1, 1, 1), + margin = new RectOffset(0, 0, 0, 0), + padding = new RectOffset(0, 0, 0, 0) + }; + } + } + + /// <value> + /// Get the active ProBuilderEditor window. Null if no instance is open. + /// </value> + public static ProBuilderEditor instance + { + get { return s_Instance; } + } + + internal static void MenuOpenWindow() + { + ProBuilderEditor editor = (ProBuilderEditor)EditorWindow.GetWindow(typeof(ProBuilderEditor), + s_WindowIsFloating, PreferenceKeys.pluginTitle, + true); // open as floating window + editor.isFloatingWindow = s_WindowIsFloating; + } + + void OnBecameVisible() + { + // fixes maximizing/unmaximizing + s_Instance = this; + } + + void OnEnable() + { + s_Instance = this; + +#if UNITY_2019_1_OR_NEWER + SceneView.duringSceneGui += OnSceneGUI; +#else + SceneView.onSceneGUIDelegate += OnSceneGUI; +#endif + ProGridsInterface.SubscribePushToGridEvent(PushToGrid); + ProGridsInterface.SubscribeToolbarEvent(ProGridsToolbarOpen); + MeshSelection.objectSelectionChanged += OnObjectSelectionChanged; + + ProGridsToolbarOpen(ProGridsInterface.SceneToolbarIsExtended()); + +#if !UNITY_2018_2_OR_NEWER + s_ResetOnSceneGUIState = typeof(SceneView).GetMethod("ResetOnSceneGUIState", BindingFlags.Instance | BindingFlags.NonPublic); +#endif + + VertexManipulationTool.beforeMeshModification += BeforeMeshModification; + VertexManipulationTool.afterMeshModification += AfterMeshModification; + + LoadSettings(); + InitGUI(); + EditorApplication.delayCall += () => UpdateSelection(); + SetOverrideWireframe(true); + + if (selectModeChanged != null) + selectModeChanged(selectMode); + } + + void OnDisable() + { + s_Instance = null; + + VertexManipulationTool.beforeMeshModification -= BeforeMeshModification; + VertexManipulationTool.afterMeshModification -= AfterMeshModification; + + if (s_EditorToolbar != null) + DestroyImmediate(s_EditorToolbar); + + ClearElementSelection(); + + UpdateSelection(); + + if (selectionUpdated != null) + selectionUpdated(null); + +#if UNITY_2019_1_OR_NEWER + SceneView.duringSceneGui -= OnSceneGUI; +#else + SceneView.onSceneGUIDelegate -= OnSceneGUI; +#endif + ProGridsInterface.UnsubscribePushToGridEvent(PushToGrid); + ProGridsInterface.UnsubscribeToolbarEvent(ProGridsToolbarOpen); + MeshSelection.objectSelectionChanged -= OnObjectSelectionChanged; + + SetOverrideWireframe(false); + + if (selectModeChanged != null) + selectModeChanged(SelectMode.Object); + + SceneView.RepaintAll(); + } + + void BeforeMeshModification(IEnumerable<ProBuilderMesh> meshes) + { + if(beforeMeshModification != null) + beforeMeshModification(meshes); + } + + void AfterMeshModification(IEnumerable<ProBuilderMesh> meshes) + { + if(afterMeshModification != null) + afterMeshModification(meshes); + } + + internal static void ReloadSettings() + { + if (s_Instance != null) + s_Instance.LoadSettings(); + SceneView.RepaintAll(); + } + + void LoadSettings() + { + EditorApplication.delayCall += EditorHandleDrawing.ResetPreferences; + + m_ScenePickerPreferences = new ScenePickerPreferences() + { + cullMode = m_BackfaceSelectEnabled ? CullingMode.None : CullingMode.Back, + selectionModifierBehavior = m_SelectModifierBehavior, + rectSelectMode = m_DragSelectRectMode + }; + +#if !SHORTCUT_MANAGER + // workaround for old single-key shortcuts + if (s_Shortcuts.value == null || s_Shortcuts.value.Length < 1) + s_Shortcuts.SetValue(Shortcut.DefaultShortcuts().ToArray(), true); +#endif + } + + void InitGUI() + { + OpenEditorToolbar(); + VertexTranslationInfoStyle = new GUIStyle(); + VertexTranslationInfoStyle.normal.background = EditorGUIUtility.whiteTexture; + VertexTranslationInfoStyle.normal.textColor = new Color(1f, 1f, 1f, .6f); + VertexTranslationInfoStyle.padding = new RectOffset(3, 3, 3, 0); + } + + /// <summary> + /// Rebuild the mesh wireframe and selection caches. + /// </summary> + public static void Refresh(bool vertexCountChanged = true) + { + if (instance != null) + { + instance.UpdateSelection(vertexCountChanged); + SceneView.RepaintAll(); + } + } + + void OnGUI() + { + if (s_EditorToolbar != null && s_EditorToolbar.isIconMode != s_IsIconGui.value) + IconModeChanged(); + + if (m_CommandStyle == null) + m_CommandStyle = EditorGUIUtility.GetBuiltinSkin(EditorSkin.Inspector).FindStyle("Command"); + + Event e = Event.current; + + switch (e.type) + { + case EventType.ContextClick: + var menu = new GenericMenu(); + AddItemsToMenu(menu); + menu.ShowAsContext(); + break; + +#if !SHORTCUT_MANAGER + case EventType.KeyDown: + if (s_Shortcuts.value.Any(x => x.Matches(e.keyCode, e.modifiers))) + e.Use(); + break; + + case EventType.KeyUp: + ShortcutCheck(e); + break; +#else + case EventType.KeyUp: + if (e.keyCode == KeyCode.Escape) + { + selectMode = SelectMode.Object; + e.Use(); + } + break; +#endif + } + + if (s_EditorToolbar != null) + { + s_EditorToolbar.OnGUI(); + } + else + { + try + { + InitGUI(); + } + catch (System.Exception exception) + { + Debug.LogWarning(string.Format("Failed initializing ProBuilder Toolbar:\n{0}", exception.ToString())); + } + } + } + + void OpenEditorToolbar() + { + if (s_EditorToolbar != null) + DestroyImmediate(s_EditorToolbar); + + s_EditorToolbar = ScriptableObject.CreateInstance<EditorToolbar>(); + s_EditorToolbar.hideFlags = HideFlags.HideAndDontSave; + s_EditorToolbar.InitWindowProperties(this); + } + + void IconModeChanged() + { + OpenEditorToolbar(); + } + + void Menu_ToggleIconMode() + { + s_IsIconGui.value = !s_IsIconGui.value; + IconModeChanged(); + } + + public void AddItemsToMenu(GenericMenu menu) + { + bool floating = s_WindowIsFloating; + + menu.AddItem(new GUIContent("Window/Open as Floating Window", ""), floating, () => SetIsUtilityWindow(true)); + menu.AddItem(new GUIContent("Window/Open as Dockable Window", ""), !floating, () => SetIsUtilityWindow(false)); + menu.AddSeparator(""); + + menu.AddItem(new GUIContent("Use Icon Mode", ""), s_IsIconGui, + Menu_ToggleIconMode); + menu.AddItem(new GUIContent("Use Text Mode", ""), !s_IsIconGui, + Menu_ToggleIconMode); + } + + void SetIsUtilityWindow(bool isUtilityWindow) + { + s_WindowIsFloating.value = isUtilityWindow; + var windowTitle = titleContent; + Close(); + var res = GetWindow(GetType(), isUtilityWindow); + res.titleContent = windowTitle; + } + + internal static VertexManipulationTool activeTool + { + get + { + return s_Instance == null + ? null + : s_Instance.GetToolForSelectMode(s_Instance.m_CurrentTool, s_SelectMode); + } + } + + VertexManipulationTool GetTool<T>() where T : VertexManipulationTool, new() + { + VertexManipulationTool tool; + + if (s_EditorTools.TryGetValue(typeof(T), out tool)) + return tool; + tool = new T(); + s_EditorTools.Add(typeof(T), tool); + return tool; + } + + VertexManipulationTool GetToolForSelectMode(Tool tool, SelectMode mode) + { + switch (tool) + { + case Tool.Move: + return mode.IsTextureMode() + ? GetTool<TextureMoveTool>() + : GetTool<PositionMoveTool>(); + case Tool.Rotate: + return mode.IsTextureMode() + ? GetTool<TextureRotateTool>() + : GetTool<PositionRotateTool>(); + case Tool.Scale: + return mode.IsTextureMode() + ? GetTool<TextureScaleTool>() + : GetTool<PositionScaleTool>(); + default: + return null; + } + } + + void OnSceneGUI(SceneView sceneView) + { +#if !UNITY_2018_2_OR_NEWER + if (s_ResetOnSceneGUIState != null) + s_ResetOnSceneGUIState.Invoke(sceneView, null); +#endif + + SceneStyles.Init(); + + m_CurrentEvent = Event.current; + + EditorHandleDrawing.DrawSceneHandles(SceneDragAndDropListener.isDragging ? SelectMode.None : selectMode); + + DrawHandleGUI(sceneView); + +#if SHORTCUT_MANAGER + if (m_CurrentEvent.type == EventType.KeyDown) + { + // Escape isn't assignable as a shortcut + if (m_CurrentEvent.keyCode == KeyCode.Escape && selectMode != SelectMode.Object) + { + selectMode = SelectMode.Object; + + m_IsDragging = false; + m_IsReadyForMouseDrag = false; + + m_CurrentEvent.Use(); + } + } +#else + if (m_CurrentEvent.type == EventType.MouseDown && m_CurrentEvent.button == 1) + m_IsRightMouseDown = true; + + if (m_CurrentEvent.type == EventType.MouseUp && m_CurrentEvent.button == 1 || m_CurrentEvent.type == EventType.Ignore) + m_IsRightMouseDown = false; + + if (!m_IsRightMouseDown && (m_CurrentEvent.type == EventType.KeyUp ? m_CurrentEvent.keyCode : KeyCode.None) != KeyCode.None) + { + if (ShortcutCheck(m_CurrentEvent)) + { + m_CurrentEvent.Use(); + return; + } + } + + if (m_CurrentEvent.type == EventType.KeyDown) + { + if (s_Shortcuts.value.Any(x => x.Matches(m_CurrentEvent.keyCode, m_CurrentEvent.modifiers))) + m_CurrentEvent.Use(); + } +#endif + + if (selectMode == SelectMode.Object) + return; + + bool pathSelectionModifier = EditorHandleUtility.IsSelectionPathModifier(m_CurrentEvent.modifiers); + + // Check mouse position in scene and determine if we should highlight something + if (s_ShowHoverHighlight + && selectMode.IsMeshElementMode() + && (m_CurrentEvent.type == EventType.MouseMove + || (m_wasSelectingPath != pathSelectionModifier && m_CurrentEvent.isKey))) + { + m_Hovering.CopyTo(m_HoveringPrevious); + if (GUIUtility.hotControl != 0 || + EditorSceneViewPicker.MouseRayHitTest(m_CurrentEvent.mousePosition, selectMode, m_ScenePickerPreferences, m_Hovering) > ScenePickerPreferences.maxPointerDistance) + m_Hovering.Clear(); + + if (!m_Hovering.Equals(m_HoveringPrevious)) + { + if (pathSelectionModifier) + EditorSceneViewPicker.DoMouseHover(m_Hovering); + + SceneView.RepaintAll(); + } + } + m_wasSelectingPath = pathSelectionModifier; + + + if (Tools.current == Tool.View) + return; + + switch (m_CurrentEvent.type) + { + case EventType.ValidateCommand: + case EventType.ExecuteCommand: + bool execute = m_CurrentEvent.type == EventType.ExecuteCommand; + switch (m_CurrentEvent.commandName) + { + case "SelectAll": + if (execute) + { + SelectAll(); + } + m_CurrentEvent.Use(); + break; + case "DeselectAll": + if (execute) + { + DeselectAll(); + } + m_CurrentEvent.Use(); + break; + case "InvertSelection": + if (execute) + { + InvertSelection(); + } + m_CurrentEvent.Use(); + break; + } + break; + } + + // Overrides the toolbar transform tools + if (Tools.current != Tool.None && Tools.current != m_CurrentTool) + SetTool_Internal(Tools.current); + + Tools.current = Tool.None; + + if (selectMode.IsMeshElementMode() && MeshSelection.selectedVertexCount > 0) + { + var tool = GetToolForSelectMode(m_CurrentTool, s_SelectMode); + + if (tool != null) + tool.OnSceneGUI(m_CurrentEvent); + } + + if (EditorHandleUtility.SceneViewInUse(m_CurrentEvent)) + { + if(m_IsDragging) + m_IsDragging = false; + + if (GUIUtility.hotControl == m_DefaultControl) + GUIUtility.hotControl = 0; + + return; + } + + // This prevents us from selecting other objects in the scene, + // and allows for the selection of faces / vertices. + m_DefaultControl = GUIUtility.GetControlID(FocusType.Passive); + if (Event.current.type == EventType.Layout) + HandleUtility.AddDefaultControl(m_DefaultControl); + + if (m_CurrentEvent.type == EventType.MouseDown && HandleUtility.nearestControl == m_DefaultControl) + { + // double clicking object + if (m_CurrentEvent.clickCount > 1) + { + DoubleClick(m_CurrentEvent); + } + + m_InitialMousePosition = m_CurrentEvent.mousePosition; + // readyForMouseDrag prevents a bug wherein after ending a drag an errant + // MouseDrag event is sent with no corresponding MouseDown/MouseUp event. + m_IsReadyForMouseDrag = true; + + GUIUtility.hotControl = m_DefaultControl; + } + + if (m_CurrentEvent.type == EventType.MouseDrag && m_IsReadyForMouseDrag && GUIUtility.hotControl == m_DefaultControl) + { + if (!m_IsDragging && Vector2.Distance(m_CurrentEvent.mousePosition, m_InitialMousePosition) > k_MouseDragThreshold) + { + sceneView.Repaint(); + m_IsDragging = true; + } + } + + if (m_CurrentEvent.type == EventType.Ignore) + { + if (m_IsDragging) + { + m_IsReadyForMouseDrag = false; + m_IsDragging = false; + EditorSceneViewPicker.DoMouseDrag(m_MouseDragRect, selectMode, m_ScenePickerPreferences); + } + + if (m_WasDoubleClick) + m_WasDoubleClick = false; + + if (GUIUtility.hotControl == m_DefaultControl) + GUIUtility.hotControl = 0; + } + + if (m_CurrentEvent.type == EventType.MouseUp && GUIUtility.hotControl == m_DefaultControl) + { + GUIUtility.hotControl = 0; + + if (m_WasDoubleClick) + { + m_WasDoubleClick = false; + } + else + { + if (!m_IsDragging) + { + if (UVEditor.instance) + UVEditor.instance.ResetUserPivot(); + + EditorSceneViewPicker.DoMouseClick(m_CurrentEvent, selectMode, m_ScenePickerPreferences); + UpdateSelection(); + SceneView.RepaintAll(); + } + else + { + m_IsDragging = false; + m_IsReadyForMouseDrag = false; + + if (UVEditor.instance) + UVEditor.instance.ResetUserPivot(); + + EditorSceneViewPicker.DoMouseDrag(m_MouseDragRect, selectMode, m_ScenePickerPreferences); + + if (GUIUtility.hotControl == m_DefaultControl) + GUIUtility.hotControl = 0; + } + } + } + } + + void SelectAll() + { + if (MeshSelection.selectedObjectCount < 1) + return; + + UndoUtility.RecordSelection("Select all"); + + switch (selectMode) + { + case SelectMode.Vertex: + foreach (var mesh in MeshSelection.topInternal) + { + var sharedIndexes = mesh.sharedVerticesInternal; + var all = new List<int>(); + + for (var i = 0; i < sharedIndexes.Length; i++) + { + all.Add(sharedIndexes[i][0]); + } + + mesh.SetSelectedVertices(all); + } + break; + + case SelectMode.Face: + case SelectMode.TextureFace: + foreach (var mesh in MeshSelection.topInternal) + { + mesh.SetSelectedFaces(mesh.facesInternal); + } + break; + + case SelectMode.Edge: + + foreach (var mesh in MeshSelection.topInternal) + { + var universalEdges = mesh.GetSharedVertexHandleEdges(mesh.facesInternal.SelectMany(x => x.edges)).ToArray(); + var all = new Edge[universalEdges.Length]; + + for (var n = 0; n < universalEdges.Length; n++) + all[n] = new Edge(mesh.sharedVerticesInternal[universalEdges[n].a][0], mesh.sharedVerticesInternal[universalEdges[n].b][0]); + + mesh.SetSelectedEdges(all); + } + break; + } + + Refresh(); + SceneView.RepaintAll(); + } + + void DeselectAll() + { + if (MeshSelection.selectedObjectCount < 1) + return; + + UndoUtility.RecordSelection("Deselect All"); + + switch (selectMode) + { + case SelectMode.Vertex: + foreach (var mesh in MeshSelection.topInternal) + { + mesh.SetSelectedVertices(null); + } + break; + + case SelectMode.Face: + case SelectMode.TextureFace: + foreach (var mesh in MeshSelection.topInternal) + { + mesh.SetSelectedFaces((IEnumerable<Face>) null); + } + break; + + case SelectMode.Edge: + + foreach (var mesh in MeshSelection.topInternal) + { + mesh.SetSelectedEdges(null); + } + break; + } + + Refresh(); + SceneView.RepaintAll(); + } + + void InvertSelection() + { + if (MeshSelection.selectedObjectCount < 1) + return; + + UndoUtility.RecordSelection("Invert Selection"); + + switch (selectMode) + { + case SelectMode.Vertex: + foreach (var mesh in MeshSelection.topInternal) + { + var sharedIndexes = mesh.sharedVerticesInternal; + var selectedSharedIndexes = new List<int>(); + + foreach (int i in mesh.selectedIndexesInternal) + selectedSharedIndexes.Add(mesh.GetSharedVertexHandle(i)); + + var inverse = new List<int>(); + + for (int i = 0; i < sharedIndexes.Length; i++) + { + if (!selectedSharedIndexes.Contains(i)) + inverse.Add(sharedIndexes[i][0]); + } + + mesh.SetSelectedVertices(inverse.ToArray()); + } + + break; + + case SelectMode.Face: + case SelectMode.TextureFace: + foreach (var mesh in MeshSelection.topInternal) + { + var inverse = mesh.facesInternal.Where(x => !mesh.selectedFacesInternal.Contains(x)); + mesh.SetSelectedFaces(inverse.ToArray()); + } + + break; + + case SelectMode.Edge: + + foreach (var mesh in MeshSelection.topInternal) + { + var universalEdges = + mesh.GetSharedVertexHandleEdges(mesh.facesInternal.SelectMany(x => x.edges)).ToArray(); + var universalSelectedEdges = + EdgeUtility.GetSharedVertexHandleEdges(mesh, mesh.selectedEdges).Distinct(); + var inverseUniversal = + System.Array.FindAll(universalEdges, x => !universalSelectedEdges.Contains(x)); + var inverse = new Edge[inverseUniversal.Length]; + + for (var n = 0; n < inverseUniversal.Length; n++) + inverse[n] = new Edge(mesh.sharedVerticesInternal[inverseUniversal[n].a][0], + mesh.sharedVerticesInternal[inverseUniversal[n].b][0]); + + mesh.SetSelectedEdges(inverse); + } + + break; + } + + Refresh(); + SceneView.RepaintAll(); + } + + void DoubleClick(Event e) + { + var mesh = EditorSceneViewPicker.DoMouseClick(m_CurrentEvent, selectMode, m_ScenePickerPreferences); + + if (mesh != null) + { + if (selectMode.ContainsFlag(SelectMode.Edge | SelectMode.TextureEdge)) + { + if (e.shift) + EditorUtility.ShowNotification(EditorToolbarLoader.GetInstance<Actions.SelectEdgeRing>().DoAction()); + else + EditorUtility.ShowNotification(EditorToolbarLoader.GetInstance<Actions.SelectEdgeLoop>().DoAction()); + } + else if (selectMode.ContainsFlag(SelectMode.Face | SelectMode.TextureFace)) + { + if ((e.modifiers & (EventModifiers.Control | EventModifiers.Shift)) == + (EventModifiers.Control | EventModifiers.Shift)) + Actions.SelectFaceRing.MenuRingAndLoopFaces(MeshSelection.topInternal); + else if (e.control) + EditorUtility.ShowNotification(EditorToolbarLoader.GetInstance<Actions.SelectFaceRing>().DoAction()); + else if (e.shift) + EditorUtility.ShowNotification(EditorToolbarLoader.GetInstance<Actions.SelectFaceLoop>().DoAction()); + else + mesh.SetSelectedFaces(mesh.facesInternal); + } + else + { + mesh.SetSelectedFaces(mesh.facesInternal); + } + + UpdateSelection(); + SceneView.RepaintAll(); + m_WasDoubleClick = true; + } + } + + void DrawHandleGUI(SceneView sceneView) + { + if (sceneView != SceneView.lastActiveSceneView) + return; + + if (m_CurrentEvent.type == EventType.Repaint + && !SceneDragAndDropListener.isDragging + && m_Hovering != null + && GUIUtility.hotControl == 0 + && HandleUtility.nearestControl == m_DefaultControl + && selectMode.IsMeshElementMode()) + { + try + { + EditorHandleDrawing.DrawSceneSelection(m_Hovering); + } + catch + { + // this happens on undo, when c++ object is destroyed but c# side thinks it's still alive + } + } + + using (new HandleGUI()) + { + int screenWidth = (int)sceneView.position.width; + int screenHeight = (int)sceneView.position.height; + + switch ((SceneToolbarLocation)s_SceneToolbarLocation) + { + case SceneToolbarLocation.BottomCenter: + m_ElementModeToolbarRect.x = (screenWidth / 2 - 64); + m_ElementModeToolbarRect.y = screenHeight - m_ElementModeToolbarRect.height * 3; + break; + + case SceneToolbarLocation.BottomLeft: + m_ElementModeToolbarRect.x = 12; + m_ElementModeToolbarRect.y = screenHeight - m_ElementModeToolbarRect.height * 3; + break; + + case SceneToolbarLocation.BottomRight: + m_ElementModeToolbarRect.x = screenWidth - (m_ElementModeToolbarRect.width + 12); + m_ElementModeToolbarRect.y = screenHeight - m_ElementModeToolbarRect.height * 3; + break; + + case SceneToolbarLocation.UpperLeft: + m_ElementModeToolbarRect.x = 12; + m_ElementModeToolbarRect.y = 10; + break; + + case SceneToolbarLocation.UpperRight: + m_ElementModeToolbarRect.x = screenWidth - (m_ElementModeToolbarRect.width + 96); + m_ElementModeToolbarRect.y = 10; + break; + + default: + case SceneToolbarLocation.UpperCenter: + m_ElementModeToolbarRect.x = (screenWidth / 2 - 64); + m_ElementModeToolbarRect.y = 10; + break; + } + + selectMode = UI.EditorGUIUtility.DoElementModeToolbar(m_ElementModeToolbarRect, selectMode); + + if (s_ShowSceneInfo) + { + Vector2 size = UI.EditorStyles.sceneTextBox.CalcSize(m_SceneInfo); + m_SceneInfoRect.width = size.x; + m_SceneInfoRect.height = size.y; + GUI.Label(m_SceneInfoRect, m_SceneInfo, UI.EditorStyles.sceneTextBox); + } + + if (m_IsDragging) + { + if (m_CurrentEvent.type == EventType.Repaint) + { + // Always draw from lowest to largest values + var start = Vector2.Min(m_InitialMousePosition, m_CurrentEvent.mousePosition); + var end = Vector2.Max(m_InitialMousePosition, m_CurrentEvent.mousePosition); + + m_MouseDragRect = new Rect(start.x, start.y, end.x - start.x, end.y - start.y); + + SceneStyles.selectionRect.Draw(m_MouseDragRect, false, false, false, false); + } + else if (m_CurrentEvent.isMouse) + { + HandleUtility.Repaint(); + } + } + } + } + +#if !SHORTCUT_MANAGER + internal bool ShortcutCheck(Event e) + { + List<Shortcut> matches = s_Shortcuts.value.Where(x => x.Matches(e.keyCode, e.modifiers)).ToList(); + + if (matches.Count < 1) + return false; + + bool used = false; + Shortcut usedShortcut = null; + + foreach (Shortcut cut in matches) + { + if (AllLevelShortcuts(cut)) + { + used = true; + usedShortcut = cut; + break; + } + } + + if (!used) + { + foreach (Shortcut cut in matches) + used |= GeoLevelShortcuts(cut); + } + + if (used) + Event.current.Use(); + + if (usedShortcut != null) + EditorUtility.ShowNotification(usedShortcut.action); + + return used; + } + + bool AllLevelShortcuts(Shortcut shortcut) + { + switch (shortcut.action) + { + // TODO Remove once a workaround for non-upper-case shortcut chars is found + case "Toggle Geometry Mode": + + if (selectMode == SelectMode.Object) + selectMode = m_LastComponentMode; + else + selectMode = SelectMode.Object; + EditorUtility.ShowNotification(selectMode.ToString() + " Editing"); + return true; + + case "Vertex Mode": + { + if (!s_UniqueModeShortcuts) + return false; + selectMode = SelectMode.Vertex; + return true; + } + + case "Edge Mode": + { + if (!s_UniqueModeShortcuts) + return false; + selectMode = SelectMode.Edge; + return true; + } + + case "Face Mode": + { + if (!s_UniqueModeShortcuts) + return false; + selectMode = SelectMode.Face; + return true; + } + + default: + return false; + } + } + + bool GeoLevelShortcuts(Shortcut shortcut) + { + switch (shortcut.action) + { + case "Escape": + ClearElementSelection(); + EditorUtility.ShowNotification("Top Level"); + UpdateSelection(); + selectMode = SelectMode.Object; + return true; + + // Used to be (incorrectly) named handle pivot, and since shortcuts are serialized this value is still valid + case "Toggle Handle Pivot": + case "Toggle Handle Orientation": + VertexManipulationTool.handleOrientation = InternalUtility.NextEnumValue(VertexManipulationTool.handleOrientation); + return true; + + // TODO Remove once a workaround for non-upper-case shortcut chars is found + case "Toggle Selection Mode": + if (s_UniqueModeShortcuts) + return false; + ToggleSelectionMode(); + EditorUtility.ShowNotification(selectMode.ToString()); + return true; + + case "Delete Face": + EditorUtility.ShowNotification(EditorToolbarLoader.GetInstance<DeleteFaces>().DoAction().notification); + return true; + + case "Set Pivot": + + if (selection.Count > 0) + { + foreach (ProBuilderMesh pbo in selection) + { + UndoUtility.RecordObjects(new UObject[2] { pbo, pbo.transform }, "Set Pivot"); + + if (pbo.selectedIndexesInternal.Length > 0) + { + pbo.CenterPivot(pbo.selectedIndexesInternal); + } + else + { + pbo.CenterPivot(null); + } + } + + EditorUtility.ShowNotification("Set Pivot"); + } + + return true; + + default: + return false; + } + } +#endif + + /// <summary> + /// Allows another window to tell the Editor what Tool is now in use. Does *not* update any other windows. + /// </summary> + /// <param name="newTool"></param> + internal void SetTool(Tool newTool) + { + m_CurrentTool = newTool; + } + + /// <summary> + /// Calls SetTool(), then Updates the UV Editor window if applicable. + /// </summary> + /// <param name="newTool"></param> + void SetTool_Internal(Tool newTool) + { + SetTool(newTool); + + if (UVEditor.instance != null) + UVEditor.instance.SetTool(newTool); + } + + /// <summary> + /// Toggles between the SelectMode values and updates the graphic handles as necessary. + /// </summary> + internal void ToggleSelectionMode() + { + if (s_SelectMode == SelectMode.Vertex) + selectMode = SelectMode.Edge; + else if (s_SelectMode == SelectMode.Edge) + selectMode = SelectMode.Face; + else if (s_SelectMode == SelectMode.Face) + selectMode = SelectMode.Vertex; + } + + void UpdateSelection(bool selectionChanged = true) + { + UpdateMeshHandles(selectionChanged); + + if (selectionChanged) + { + MeshSelection.OnComponentSelectionChanged(); + UpdateSceneInfo(); + } + + if (selectionUpdated != null) + selectionUpdated(selection); + } + + internal static void UpdateMeshHandles(bool selectionOrVertexCountChanged = true) + { + if (!s_Instance) + return; + + try + { + EditorHandleDrawing.RebuildSelectedHandles(MeshSelection.topInternal, selectMode); + } + catch + { + // happens on undo when c++ object is gone but c# isn't in the know + EditorHandleDrawing.ClearHandles(); + } + } + + void UpdateSceneInfo() + { + m_SceneInfo.text = string.Format( + "Faces: <b>{0}</b>\nTriangles: <b>{1}</b>\nVertices: <b>{2} ({3})</b>\n\nSelected Faces: <b>{4}</b>\nSelected Edges: <b>{5}</b>\nSelected Vertices: <b>{6} ({7})</b>", + MeshSelection.totalFaceCount.ToString(), + MeshSelection.totalTriangleCountCompiled.ToString(), + MeshSelection.totalCommonVertexCount.ToString(), + MeshSelection.totalVertexCountOptimized.ToString(), + MeshSelection.selectedFaceCount.ToString(), + MeshSelection.selectedEdgeCount.ToString(), + MeshSelection.selectedSharedVertexCount.ToString(), + MeshSelection.selectedVertexCount.ToString()); + } + + internal void ClearElementSelection() + { + foreach (ProBuilderMesh pb in selection) + pb.ClearSelection(); + + m_Hovering.Clear(); + } + + /// <summary> + /// If dragging a texture aroudn, this method ensures that if it's a member of a texture group it's cronies are also selected + /// </summary> + void VerifyTextureGroupSelection() + { + bool selectionModified = false; + + foreach (ProBuilderMesh mesh in selection) + { + List<int> alreadyChecked = new List<int>(); + + foreach (Face f in mesh.selectedFacesInternal) + { + int tg = f.textureGroup; + + if (tg > 0 && !alreadyChecked.Contains(f.textureGroup)) + { + foreach (Face j in mesh.facesInternal) + { + if (j != f && j.textureGroup == tg && !mesh.selectedFacesInternal.Contains(j)) + { + List<Face> newFaceSection = new List<Face>(); + foreach (Face jf in mesh.facesInternal) + if (jf.textureGroup == tg) + newFaceSection.Add(jf); + mesh.SetSelectedFaces(newFaceSection.ToArray()); + selectionModified = true; + break; + } + } + } + + alreadyChecked.Add(f.textureGroup); + } + } + + if (selectionModified) + UpdateSelection(true); + } + + void OnObjectSelectionChanged() + { + m_Hovering.Clear(); + UpdateSelection(); + SetOverrideWireframe(true); + } + + /// <summary> + /// Hide the default unity wireframe renderer + /// </summary> + void SetOverrideWireframe(bool overrideWireframe) + { + const EditorSelectedRenderState k_DefaultSelectedRenderState = EditorSelectedRenderState.Highlight | EditorSelectedRenderState.Wireframe; + + foreach (var mesh in Selection.transforms.GetComponents<ProBuilderMesh>()) + { + // Disable Wireframe for meshes when ProBuilder is active + EditorUtility.SetSelectionRenderState( + mesh.renderer, + overrideWireframe + ? k_DefaultSelectedRenderState & ~(EditorSelectedRenderState.Wireframe) + : k_DefaultSelectedRenderState); + } + + SceneView.RepaintAll(); + } + + /// <summary> + /// Called from ProGrids. + /// </summary> + /// <param name="snapVal"></param> + void PushToGrid(float snapVal) + { + UndoUtility.RecordSelection(selection.ToArray(), "Push elements to Grid"); + + if (selectMode == SelectMode.Object || selectMode == SelectMode.None) + return; + + for (int i = 0, c = MeshSelection.selectedObjectCount; i < c; i++) + { + ProBuilderMesh mesh = selection[i]; + if (mesh.selectedVertexCount < 1) + continue; + + var indexes = mesh.GetCoincidentVertices(mesh.selectedIndexesInternal); + ProBuilderSnapping.SnapVertices(mesh, indexes, Vector3.one * snapVal); + + mesh.ToMesh(); + mesh.Refresh(); + mesh.Optimize(); + } + + UpdateSelection(); + } + + void ProGridsToolbarOpen(bool menuOpen) + { + bool active = ProGridsInterface.IsActive(); + m_SceneInfoRect.y = active && !menuOpen ? 28 : 10; + m_SceneInfoRect.x = active ? (menuOpen ? 64 : 8) : 10; + } + + /// <summary> + /// A tool, any tool, has just been engaged while in texture mode + /// </summary> + internal void OnBeginTextureModification() + { + VerifyTextureGroupSelection(); + } + + /// <summary> + /// Returns the first selected pb_Object and pb_Face, or false if not found. + /// </summary> + /// <param name="pb"></param> + /// <param name="face"></param> + /// <returns></returns> + internal bool GetFirstSelectedFace(out ProBuilderMesh pb, out Face face) + { + pb = null; + face = null; + + if (selection.Count < 1) + return false; + + pb = selection.FirstOrDefault(x => x.selectedFaceCount > 0); + + if (pb == null) + return false; + + face = pb.selectedFacesInternal[0]; + + return true; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..eef203fdcb4a01e7edfe856d4dd14a1deb3ee4b1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c262c1329a02fa49b5cb4c297106f3f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderEditorShortcuts.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderEditorShortcuts.cs new file mode 100644 index 0000000000000000000000000000000000000000..b3b12b1c91bf18275b1b44827d275f73de31c859 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderEditorShortcuts.cs @@ -0,0 +1,60 @@ +#if UNITY_2019_1_OR_NEWER +#define SHORTCUT_MANAGER +#endif + +#if SHORTCUT_MANAGER + +using UnityEditor.ShortcutManagement; +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Manages the ProBuilder toolbar window and tool mode. + /// </summary> + static class ProBuilderEditorShortcuts + { + [Shortcut("ProBuilder/Editor/Edit Objects", typeof(SceneView))] + static void SetSelectMode_Object() + { + ProBuilderEditor.selectMode = SelectMode.Object; + } + + [Shortcut("ProBuilder/Editor/Edit Vertices", typeof(SceneView))] + static void SetSelectMode_Vertex() + { + ProBuilderEditor.selectMode = SelectMode.Vertex; + } + + [Shortcut("ProBuilder/Editor/Edit Edges", typeof(SceneView))] + static void SetSelectMode_Edge() + { + ProBuilderEditor.selectMode = SelectMode.Edge; + } + + [Shortcut("ProBuilder/Editor/Edit Faces", typeof(SceneView))] + static void SetSelectMode_Faces() + { + ProBuilderEditor.selectMode = SelectMode.Face; + } + + [Shortcut("ProBuilder/Editor/Toggle Geometry Mode", typeof(SceneView), KeyCode.G)] + static void Toggle_ObjectElementMode() + { + if (ProBuilderEditor.selectMode == SelectMode.Object) + ProBuilderEditor.ResetToLastSelectMode(); + else + ProBuilderEditor.selectMode = SelectMode.Object; + } + + [Shortcut("ProBuilder/Editor/Toggle Select Mode", typeof(SceneView), KeyCode.H)] + static void Toggle_SelectMode() + { + if(ProBuilderEditor.instance != null) + ProBuilderEditor.instance.ToggleSelectionMode(); + } + } +} + +#endif diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderEditorShortcuts.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderEditorShortcuts.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..950a241493c07c92eb52e067f249f462c9a80108 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderEditorShortcuts.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8cefaab4396434cd9b6db510b6458a3d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderMenuActionAttribute.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderMenuActionAttribute.cs new file mode 100644 index 0000000000000000000000000000000000000000..b29949e071c88746a091dbafa79f257580c01895 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderMenuActionAttribute.cs @@ -0,0 +1,32 @@ +using System; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Classes inheriting MenuAction and tagged with this attribute will be displayed in the ProBuilderEditor window. + /// See [ProBuilder API Examples](https://github.com/Unity-Technologies/ProBuilder-API-Examples) for sample code. + /// </summary> + /// <example> + /// ``` + /// using UnityEngine; + /// using UnityEditor; + /// using UnityEngine.ProBuilder; + /// using UnityEditor.ProBuilder; + /// using UnityEngine.ProBuilder.MeshOperations; + /// + /// namespace ProBuilder.ExampleActions + /// { + /// [ProBuilderMenuAction] + /// public class MyCustomProBuilderMenuAction : MenuAction + /// { + /// // @todo Write your plugin + /// } + /// } + /// ``` + /// </example> + /// <seealso cref="MenuAction"/> + [AttributeUsage(AttributeTargets.Class)] + public sealed class ProBuilderMenuActionAttribute : Attribute + { + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderMenuActionAttribute.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderMenuActionAttribute.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f220cbddb66b8d843a2e4a931fd1d0827d64c0e9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderMenuActionAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bed1bc9741072a14ebe8da808930d75b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderMeshEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderMeshEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..ba74adb9d0ae763bd39a4f6f758326ee04b0ca5f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderMeshEditor.cs @@ -0,0 +1,331 @@ +using System.Collections.Generic; +using UnityEngine; +using System.Linq; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + /// <inheritdoc /> + /// <summary> + /// Custom editor for ProBuilderMesh type. + /// </summary> + [CustomEditor(typeof(ProBuilderMesh))] + [CanEditMultipleObjects] + sealed class ProBuilderMeshEditor : Editor + { + static class Styles + { + static bool s_Initialized; + public static GUIStyle miniButton; + + public static readonly GUIContent lightmapStatic = EditorGUIUtility.TrTextContent("Lightmap Static", "Controls whether the geometry will be marked as Static for lightmapping purposes. When enabled, this mesh will be present in lightmap calculations."); + public static readonly GUIContent sharedMesh = EditorGUIUtility.TrTextContent("Mesh"); + + public static void Init() + { + if (s_Initialized) + return; + s_Initialized = true; + miniButton = new GUIStyle(GUI.skin.button); + miniButton.stretchHeight = false; + miniButton.stretchWidth = false; + miniButton.padding = new RectOffset(6, 6, 3, 3); + } + } + + internal static event System.Action onGetFrameBoundsEvent; + ProBuilderMesh m_Mesh; + + SerializedObject m_GameObjectsSerializedObject; + SerializedProperty m_UnwrapParameters; + SerializedProperty m_StaticEditorFlags; + bool m_AnyMissingLightmapUVs; + bool m_ModifyingMesh; + + ProBuilderEditor editor + { + get { return ProBuilderEditor.instance; } + } + + Renderer m_MeshRenderer = null; + + protected override void OnHeaderGUI() + { + } + + void OnEnable() + { + if (EditorApplication.isPlayingOrWillChangePlaymode) + return; + + m_Mesh = (ProBuilderMesh)target; + + if (!m_Mesh) + return; + + m_GameObjectsSerializedObject = new SerializedObject(serializedObject.targetObjects.Select(t => ((Component)t).gameObject).ToArray()); + + m_UnwrapParameters = serializedObject.FindProperty("m_UnwrapParameters"); + m_StaticEditorFlags = m_GameObjectsSerializedObject.FindProperty("m_StaticEditorFlags"); + m_MeshRenderer = m_Mesh.gameObject.GetComponent<Renderer>(); + + VertexManipulationTool.beforeMeshModification += OnBeginMeshModification; + VertexManipulationTool.afterMeshModification += OnFinishMeshModification; + } + + void OnDisable() + { + VertexManipulationTool.beforeMeshModification -= OnBeginMeshModification; + VertexManipulationTool.afterMeshModification -= OnFinishMeshModification; + } + + void OnBeginMeshModification(IEnumerable<ProBuilderMesh> selection) + { + m_ModifyingMesh = true; + } + + void OnFinishMeshModification(IEnumerable<ProBuilderMesh> selection) + { + m_ModifyingMesh = false; + } + + public override void OnInspectorGUI() + { + if (m_UnwrapParameters == null || m_StaticEditorFlags == null) + return; + + Styles.Init(); + + if (GUILayout.Button("Open ProBuilder")) + ProBuilderEditor.MenuOpenWindow(); + + GUILayout.Box("Mesh property is driven by the ProBuilder component.", EditorStyles.helpBox); + var guiEnabled = GUI.enabled; + GUI.enabled = false; + var guiStateMixed = EditorGUI.showMixedValue; + EditorGUI.showMixedValue = targets.Length > 1; + EditorGUILayout.ObjectField(Styles.sharedMesh, m_Mesh.mesh, typeof(Mesh), false); + EditorGUI.showMixedValue = guiStateMixed; + GUI.enabled = guiEnabled; + + Vector3 bounds = m_MeshRenderer != null ? m_MeshRenderer.bounds.size : Vector3.zero; + EditorGUILayout.Vector3Field("Object Size (read only)", bounds); + + serializedObject.Update(); + EditorGUI.BeginChangeCheck(); + LightmapStaticSettings(); + if (EditorGUI.EndChangeCheck()) + serializedObject.ApplyModifiedProperties(); + +#if DEVELOPER_MODE + GUILayout.Space(4); + + GUILayout.Label("Compiled Mesh Information", EditorStyles.boldLabel); + + MeshFilter filter; + Mesh sharedMesh = null; + + if (m_Mesh.TryGetComponent(out filter) && (sharedMesh = filter.sharedMesh) != null) + { + GUILayout.Label("Vertex Count: " + sharedMesh.vertexCount); + GUILayout.Label("Submesh Count: " + sharedMesh.subMeshCount); + } + else + { + GUILayout.Label("No compiled mesh", EditorStyles.centeredGreyMiniLabel); + } + + GUILayout.Space(4); + + GUILayout.Label("HideFlags & Driven Properties", EditorStyles.boldLabel); + + if(filter) + GUILayout.Label($"MeshFilter {filter.hideFlags}"); + else + GUILayout.Label($"MeshFilter (null)"); + + MeshCollider collider; + +#if UNITY_2019_1_OR_NEWER + if (m_Mesh.TryGetComponent(out collider)) + GUILayout.Label($"MeshCollider.m_Mesh {DrivenPropertyManagerInternal.IsDriven(collider, "m_Mesh")}"); +#endif + + GUILayout.Space(4); + + GUILayout.Label("Identifiers", EditorStyles.boldLabel); + EditorGUI.showMixedValue = targets.Length > 1; + EditorGUILayout.IntField("ProBuilderMesh", m_Mesh.GetInstanceID()); + EditorGUILayout.IntField("UnityEngine.Mesh", sharedMesh != null ? sharedMesh.GetInstanceID() : -1); + EditorGUILayout.TextField("UnityEngine.Mesh.name", sharedMesh != null ? sharedMesh.name : "null"); + EditorGUI.showMixedValue = false; +#endif + } + + void LightmapStaticSettings() + { + m_GameObjectsSerializedObject.Update(); + +#if UNITY_2019_2_OR_NEWER + bool lightmapStatic = (m_StaticEditorFlags.intValue & (int)StaticEditorFlags.ContributeGI) != 0; +#else + bool lightmapStatic = (m_StaticEditorFlags.intValue & (int)StaticEditorFlags.LightmapStatic) != 0; +#endif + + EditorGUI.BeginChangeCheck(); + + lightmapStatic = EditorGUILayout.Toggle(Styles.lightmapStatic, lightmapStatic); + + if (EditorGUI.EndChangeCheck()) + { +#if UNITY_2019_2_OR_NEWER + SceneModeUtility.SetStaticFlags(m_GameObjectsSerializedObject.targetObjects, (int)StaticEditorFlags.ContributeGI, lightmapStatic); +#else + SceneModeUtility.SetStaticFlags(m_GameObjectsSerializedObject.targetObjects, (int)StaticEditorFlags.LightmapStatic, lightmapStatic); +#endif + } + + if (lightmapStatic) + { + EditorGUILayout.PropertyField(m_UnwrapParameters, true); + + if (m_UnwrapParameters.isExpanded) + { + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Reset", Styles.miniButton)) + ResetUnwrapParams(m_UnwrapParameters); + + if (GUILayout.Button("Apply", Styles.miniButton)) + RebuildLightmapUVs(); + + GUILayout.EndHorizontal(); + GUILayout.Space(4); + } + + if (!m_ModifyingMesh) + { + m_AnyMissingLightmapUVs = targets.Any(x => + { + if (x is ProBuilderMesh) + return !((ProBuilderMesh)x).HasArrays(MeshArrays.Texture1); + + return false; + }); + } + + if (m_AnyMissingLightmapUVs) + { + EditorGUILayout.HelpBox("Lightmap UVs are missing, please generate Lightmap UVs.", MessageType.Warning); + + if (GUILayout.Button("Generate Lightmap UVs")) + RebuildLightmapUVs(); + } + } + else + { + EditorGUILayout.HelpBox("To enable generation of lightmap UVs for this Mesh, please enable the 'Lightmap Static' property.", MessageType.Info); + } + + } + + void RebuildLightmapUVs(bool forceRebuildAll = true) + { + foreach (var obj in targets) + { + if (obj is ProBuilderMesh) + { + var mesh = (ProBuilderMesh)obj; + +#if UNITY_2019_2_OR_NEWER + if (!mesh.gameObject.HasStaticFlag(StaticEditorFlags.ContributeGI)) + continue; +#else + if (!mesh.gameObject.HasStaticFlag(StaticEditorFlags.LightmapStatic)) + continue; +#endif + + if (forceRebuildAll || !mesh.HasArrays(MeshArrays.Texture1)) + mesh.Optimize(true); + } + } + } + + void ResetUnwrapParams(SerializedProperty prop) + { + var hardAngle = prop.FindPropertyRelative("m_HardAngle"); + var packMargin = prop.FindPropertyRelative("m_PackMargin"); + var angleError = prop.FindPropertyRelative("m_AngleError"); + var areaError = prop.FindPropertyRelative("m_AreaError"); + + hardAngle.floatValue = UnwrapParameters.k_HardAngle; + packMargin.floatValue = UnwrapParameters.k_PackMargin; + angleError.floatValue = UnwrapParameters.k_AngleError; + areaError.floatValue = UnwrapParameters.k_AreaError; + + RebuildLightmapUVs(); + } + + bool HasFrameBounds() + { + if (m_Mesh == null) + m_Mesh = (ProBuilderMesh)target; + + return ProBuilderEditor.instance != null && + InternalUtility.GetComponents<ProBuilderMesh>(Selection.transforms).Sum(x => x.selectedIndexesInternal.Length) > 0; + } + + Bounds OnGetFrameBounds() + { + if (!ProBuilderEditor.selectMode.IsMeshElementMode()) + return m_MeshRenderer != null ? m_MeshRenderer.bounds : default(Bounds); + + if (onGetFrameBoundsEvent != null) + onGetFrameBoundsEvent(); + + Vector3 min = Vector3.zero, max = Vector3.zero; + bool init = false; + + foreach (ProBuilderMesh mesh in InternalUtility.GetComponents<ProBuilderMesh>(Selection.transforms)) + { + int[] tris = mesh.selectedIndexesInternal; + + if (tris == null || tris.Length < 1) + continue; + + Vector3[] verts = mesh.positionsInternal; + var trs = mesh.transform; + + if (!init) + { + init = true; + min = trs.TransformPoint(verts[tris[0]]); + max = trs.TransformPoint(verts[tris[0]]); + } + + for (int i = 0, c = tris.Length; i < c; i++) + { + Vector3 p = trs.TransformPoint(verts[tris[i]]); + + min.x = Mathf.Min(p.x, min.x); + max.x = Mathf.Max(p.x, max.x); + + min.y = Mathf.Min(p.y, min.y); + max.y = Mathf.Max(p.y, max.y); + + min.z = Mathf.Min(p.z, min.z); + max.z = Mathf.Max(p.z, max.z); + } + } + + return new Bounds((min + max) / 2f, max != min ? max - min : Vector3.one * .1f); + } + + [MenuItem("CONTEXT/ProBuilderMesh/Open ProBuilder")] + static void OpenProBuilder() + { + ProBuilderEditor.MenuOpenWindow(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderMeshEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderMeshEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..006694f5100791ec7b0f046249f8d17def1f5d10 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderMeshEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9e45af82f3d1428f9ccc2ac15f74603 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSettings.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..11132c915935460bb627629b6a617754732c477a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSettings.cs @@ -0,0 +1,82 @@ +using System.IO; +using UnityEditor.SettingsManagement; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + static class ProBuilderSettings + { + const string k_PackageName = "com.unity.probuilder"; + internal const string k_DeprecatedSettingsPath = "ProjectSettings/ProBuilderSettings.json"; + static Settings s_Instance; + + [InitializeOnLoadMethod] + static void SaveSettingsOnExit() + { + EditorApplication.quitting += Save; + } + + internal static Settings instance + { + get + { + if (s_Instance == null) + { + CheckForOldSettings(); + s_Instance = new Settings(k_PackageName); + } + + return s_Instance; + } + } + + public static void Save() + { + instance.Save(); + } + + public static void Set<T>(string key, T value, SettingsScope scope = SettingsScope.Project) + { + instance.Set<T>(key, value, scope); + } + + public static T Get<T>(string key, SettingsScope scope = SettingsScope.Project, T fallback = default(T)) + { + return instance.Get<T>(key, scope, fallback); + } + + public static bool ContainsKey<T>(string key, SettingsScope scope = SettingsScope.Project) + { + return instance.ContainsKey<T>(key, scope); + } + + public static void Delete<T>(string key, SettingsScope scope = SettingsScope.Project) + { + instance.DeleteKey<T>(key, scope); + } + + static void CheckForOldSettings() + { + var newSettingsPath = PackageSettingsRepository.GetSettingsPath(k_PackageName); + + // Do not overwrite new settings if they exist. VCS can restore old settings file after a successful upgrade, + // which will already be in use. In that case, just leave the old settings alone. + if (!File.Exists(newSettingsPath) && File.Exists(k_DeprecatedSettingsPath)) + { + try + { + var directory = Path.GetDirectoryName(newSettingsPath); + + if(!Directory.Exists(directory)) + Directory.CreateDirectory(Path.GetDirectoryName(newSettingsPath)); + + File.Move(k_DeprecatedSettingsPath, newSettingsPath); + } + catch (System.Exception e) + { + Log.Info("Failed moving ProBuilder settings file to new path.\n{0}", e.ToString()); + } + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSettings.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSettings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..eab7ada89a892d6d17b909a90ddfa22546e1cbd6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a29f58947000b048a0347b48bd16304 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSettingsProvider.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSettingsProvider.cs new file mode 100644 index 0000000000000000000000000000000000000000..d5aeb6fb8104e3117ce571ab7f9561e90d9613ea --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSettingsProvider.cs @@ -0,0 +1,51 @@ +using System; +using UnityEditor; +using UnityEditor.SettingsManagement; + +namespace UnityEditor.ProBuilder +{ + static class ProBuilderSettingsProvider + { + const string k_PreferencesPath = "Preferences/ProBuilder"; + +#if UNITY_2018_3_OR_NEWER + [SettingsProvider] + static SettingsProvider CreateSettingsProvider() + { + var provider = new UserSettingsProvider(k_PreferencesPath, + ProBuilderSettings.instance, + new[] { typeof(ProBuilderSettingsProvider).Assembly }); + + ProBuilderSettings.instance.afterSettingsSaved += () => + { + if(ProBuilderEditor.instance != null) + ProBuilderEditor.ReloadSettings(); + }; + + return provider; + } +#else + + [NonSerialized] + static UserSettingsProvider s_SettingsProvider; + + [PreferenceItem("ProBuilder")] + static void ProBuilderPreferencesGUI() + { + if (s_SettingsProvider == null) + { + s_SettingsProvider = new UserSettingsProvider(ProBuilderSettings.instance, new[] { typeof(ProBuilderSettingsProvider).Assembly }); + + ProBuilderSettings.instance.afterSettingsSaved += () => + { + if (ProBuilderEditor.instance != null) + ProBuilderEditor.ReloadSettings(); + }; + } + + s_SettingsProvider.OnGUI(null); + } + +#endif + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSettingsProvider.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSettingsProvider.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..bf5cbf3092c7f9a4d27c270ce664c9513eb2b2e9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSettingsProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b6cb19e1fd01b64487828605cda5643 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSnapSettings.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSnapSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..91430e9eae6b77139f4958488713b9625a560995 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSnapSettings.cs @@ -0,0 +1,145 @@ +using UnityEditor.SettingsManagement; +using UnityEngine; + +namespace UnityEditor.ProBuilder +{ + enum SnapAxis + { + /// <summary> + /// When an <see cref="UnityEditor.EditorTool"/> is modifying vertices, snap vertex positions only to the axis that is currently moving. + /// </summary> + ActiveAxis, + /// <summary> + /// When an <see cref="UnityEditor.EditorTool"/> is modifying vertices, snap vertex positions in all axis directions. + /// </summary> + AllAxes + } + + enum SnapMode + { + None, + Relative, + World + } + + // Snap settings for ProBuilder tools. If ProGrids is active, ProGrids settings will take priority. + static class ProBuilderSnapSettings + { +#if UNITY_2019_3_OR_NEWER + [UserSetting("Snap Settings", "Snap as Group", "When enabled, selected mesh elements will keep their relative offsets when snapping to the grid. When disabled, every element in the selection is snapped to grid independently.")] +#endif + static Pref<bool> s_SnapAsGroup = new Pref<bool>("ProBuilder.SnapSettings.s_SnapAsGroup", true, SettingsScope.User); + +#if UNITY_2019_3_OR_NEWER + [UserSetting("Snap Settings", "Snap Axis", "When an Editor Tool is modifying vertices, this setting determines in which directions the affected vertices will snap.")] +#endif + static Pref<SnapAxis> s_SnapAxis = new Pref<SnapAxis>("ProBuilder.SnapSettings.s_SnapAxis", SnapAxis.ActiveAxis, SettingsScope.User); + + public static SnapMode snapMode + { + get + { +#if UNITY_2019_3_OR_NEWER + if (EditorSnapSettings.incrementalSnapActive) + return SnapMode.Relative; + if (ProGridsInterface.IsActive() || EditorSnapSettings.gridSnapEnabled) + return SnapMode.World; + return SnapMode.None; +#else + if (Event.current != null && EditorGUI.actionKey) + return SnapMode.Relative; + if (ProGridsInterface.IsActive()) + return SnapMode.World; + return SnapMode.None; +#endif + } + } + + public static bool snapAsGroup + { + get { return ProGridsInterface.IsActive() ? ProGridsInterface.GetSnapAsGroup() : s_SnapAsGroup.value; } + } + + public static SnapAxis snapMethod + { + get { return ProGridsInterface.IsActive() ? ProGridsInterface.GetSnapMethod() : s_SnapAxis.value; } + } + + public static Vector3 incrementalSnapMoveValue + { +#if UNITY_2019_3_OR_NEWER + get { return EditorSnapSettings.move; } +#else + get { return new Vector3(relativeSnapX, relativeSnapY, relativeSnapZ); } +#endif + } + + public static Vector3 worldSnapMoveValue + { + get + { +#if UNITY_2019_3_OR_NEWER + return ProGridsInterface.IsActive() ? ProGridsInterface.SnapValue() * Vector3.one : GridSettings.size; +#else + return ProGridsInterface.IsActive() ? ProGridsInterface.SnapValue() * Vector3.one : Vector3.zero; +#endif + } + } + + public static float incrementalSnapRotateValue + { + get + { +#if UNITY_2019_3_OR_NEWER + return EditorSnapSettings.rotate; +#else + return relativeSnapRotation; +#endif + } + } + + public static float incrementalSnapScaleValue + { + get + { +#if UNITY_2019_3_OR_NEWER + return EditorSnapSettings.scale; +#else + return relativeSnapScale; +#endif + } + } +#if !UNITY_2019_3_OR_NEWER + const string UnityMoveSnapX = "MoveSnapX"; + const string UnityMoveSnapY = "MoveSnapY"; + const string UnityMoveSnapZ = "MoveSnapZ"; + const string UnityScaleSnap = "ScaleSnap"; + const string UnityRotateSnap = "RotationSnap"; + + internal static float relativeSnapX + { + get { return EditorPrefs.GetFloat(UnityMoveSnapX, 1f); } + } + + internal static float relativeSnapY + { + get { return EditorPrefs.GetFloat(UnityMoveSnapY, 1f); } + } + + internal static float relativeSnapZ + { + get { return EditorPrefs.GetFloat(UnityMoveSnapZ, 1f); } + } + + internal static float relativeSnapScale + { + get { return EditorPrefs.GetFloat(UnityScaleSnap, .1f); } + } + + internal static float relativeSnapRotation + { + get { return EditorPrefs.GetFloat(UnityRotateSnap, 15f); } + } +#endif + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSnapSettings.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSnapSettings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e7112287e079575d51a08a2107d942d740febc2e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProBuilderSnapSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 428fa7a76260b497d8306bc5162aa463 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProGridsInterface.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProGridsInterface.cs new file mode 100644 index 0000000000000000000000000000000000000000..2c768ba1cc8dc7afdd11fa6638bf6b3d45784225 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProGridsInterface.cs @@ -0,0 +1,417 @@ +using UnityEngine; +using System; +using System.Reflection; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Acts as a bridge between ProGrids and ProBuilder. Provides a delegate for push to grid events, and allows access + /// to snap enabled, axis preference, and grid size values. + /// </summary> + [InitializeOnLoad] + static class ProGridsInterface + { + static Type s_ProGridsType = null; + + static readonly string[] ProGridsEditorTypeNames = new string[] + { + "UnityEditor.ProGrids.ProGridsEditor", + "ProGrids.Editor.ProGridsEditor", + "ProGrids.Editor.pg_Editor", + "ProGrids.pg_Editor", + "pg_Editor", + }; + + static Func<object> s_ProGridsInstanceDelegate = null; + static Func<bool> s_ProGridsActiveDelegate = null; + static Func<bool> s_SceneToolbarIsExtendedDelegate = null; + static Func<bool> s_UseAxisConstraintDelegate = null; + static Func<bool> s_SnapEnabledDelegate = null; + static Func<bool> s_ProGridsSnapAsGroupDelegate = null; + static Func<bool> s_IsFullGridEnabledDelegate = null; + static Func<float> s_GetActiveGridOffsetDelegate = null; + static Func<float> s_SnapValueDelegate = null; + static Func<Vector3> s_GetPivotDelegate = null; + static FieldInfo s_GridVisibleField = null; + + static Action<Action<float>> s_SubscribePushToGridEventDelegate = null; + static Action<Action<float>> s_UnsubscribePushToGridEventDelegate = null; + static Action<Action<bool>> s_SubscribeToolbarEventDelegate = null; + static Action<Action<bool>> s_UnsubscribeToolbarEventDelegate = null; + + static Action<Vector3> s_OnHandleMoveDelegate = null; + + static FieldInfo s_GetActiveGridAxisDelegate = null; + + static ProGridsInterface() + { + // Current release + for (int i = 0, c = ProGridsEditorTypeNames.Length; i < c && s_ProGridsType == null; i++) + s_ProGridsType = ReflectionUtility.GetType(ProGridsEditorTypeNames[i]); + } + + public static bool IsImported() + { + return s_ProGridsType != null; + } + + /// <summary> + /// Get a pg_Editor type. + /// </summary> + /// <returns></returns> + public static Type GetProGridsType() + { + return s_ProGridsType; + } + + public static object GetProGridsInstance() + { + if (GetProGridsType() == null) + return null; + + if (s_ProGridsInstanceDelegate == null) + s_ProGridsInstanceDelegate = (Func<object>)ReflectionUtility.GetOpenDelegateOnProperty<Func<object>>(GetProGridsType(), "Instance", BindingFlags.NonPublic | BindingFlags.Static); + + if (s_ProGridsInstanceDelegate != null) + return s_ProGridsInstanceDelegate(); + + return null; + } + + public static bool GetSnapAsGroup() + { + if (GetProGridsType() == null) + return false; + + if (s_ProGridsSnapAsGroupDelegate == null) + s_ProGridsSnapAsGroupDelegate = (Func<bool>) ReflectionUtility.GetClosedDelegateOnProperty<Func<bool>>( + GetProGridsType(), + GetProGridsInstance(), + "SnapAsGroupEnabled", + BindingFlags.Instance | BindingFlags.NonPublic); + + if (s_ProGridsSnapAsGroupDelegate != null) + return s_ProGridsSnapAsGroupDelegate(); + + return false; + } + + /// <summary> + /// True if ProGrids is open in scene. + /// </summary> + /// <returns></returns> + public static bool IsActive() + { + if (GetProGridsType() == null) + return false; + + if (s_ProGridsActiveDelegate == null) + s_ProGridsActiveDelegate = (Func<bool>)ReflectionUtility.GetOpenDelegate<Func<bool>>(GetProGridsType(), "SceneToolbarActive"); + + if (s_ProGridsActiveDelegate != null) + return s_ProGridsActiveDelegate(); + + return false; + } + + /// <summary> + /// Is the scene toolbar extended or collapsed? Also check ProGridsActive to see if ProGrids is open in the first place. + /// </summary> + /// <returns>True if ProGrids scene toolbar is open and extended, false if not extended or not active in scene.</returns> + public static bool SceneToolbarIsExtended() + { + if (GetProGridsType() == null) + return false; + + if (s_SceneToolbarIsExtendedDelegate == null) + s_SceneToolbarIsExtendedDelegate = (Func<bool>)ReflectionUtility.GetOpenDelegate<Func<bool>>(GetProGridsType(), "SceneToolbarIsExtended"); + + if (s_SceneToolbarIsExtendedDelegate != null) + return s_SceneToolbarIsExtendedDelegate(); + + return false; + } + + /// <summary> + /// Returns the current UseAxisConstraints value from ProGrids. + /// </summary> + /// <returns></returns> + public static bool UseAxisConstraints() + { + if (GetProGridsType() == null) + return true; + + if (s_UseAxisConstraintDelegate == null) + s_UseAxisConstraintDelegate = (Func<bool>)ReflectionUtility.GetOpenDelegate<Func<bool>>(GetProGridsType(), "UseAxisConstraints"); + + if (s_UseAxisConstraintDelegate != null) + return s_UseAxisConstraintDelegate(); + + return true; + } + + public static SnapAxis GetSnapMethod() + { + return UseAxisConstraints() ? SnapAxis.ActiveAxis : SnapAxis.AllAxes; + } + + /// <summary> + /// If ProGrids is open and snap enabled, return true. False otherwise. + /// </summary> + /// <returns></returns> + public static bool SnapEnabled() + { + if (GetProGridsType() == null || !IsActive()) + return false; + + if (s_SnapEnabledDelegate == null) + s_SnapEnabledDelegate = (Func<bool>)ReflectionUtility.GetOpenDelegate<Func<bool>>(GetProGridsType(), "SnapEnabled"); + + if (s_SnapEnabledDelegate != null) + return s_SnapEnabledDelegate(); + + return false; + } + + /// <summary> + /// Is the grid visible? + /// </summary> + public static bool GridVisible() + { + if (GetProGridsType() == null || GetProGridsInstance() == null) + return false; + + if (s_GridVisibleField == null) + s_GridVisibleField = GetProGridsType().GetField("m_DrawGrid", BindingFlags.NonPublic | BindingFlags.Instance); + + if (s_GridVisibleField != null) + return (bool) s_GridVisibleField.GetValue(GetProGridsInstance()); + + return false; + } + + /// <summary> + /// Return the last known snap value setting from ProGrids. + /// </summary> + /// <returns></returns> + public static float SnapValue() + { + if (GetProGridsType() == null) + return 0f; + + if (s_SnapValueDelegate == null) + s_SnapValueDelegate = (Func<float>)ReflectionUtility.GetOpenDelegate<Func<float>>(GetProGridsType(), "SnapValue"); + + if (s_SnapValueDelegate != null) + return s_SnapValueDelegate(); + + return 0f; + } + + /// <summary> + /// Return the last known grid pivot point. + /// </summary> + /// <param name="pivot"></param> + /// <returns></returns> + public static bool GetPivot(out Vector3 pivot) + { + pivot = Vector3.zero; + + if (s_GetPivotDelegate == null) + s_GetPivotDelegate = (Func<Vector3>)ReflectionUtility.GetOpenDelegate<Func<Vector3>>(GetProGridsType(), "GetPivot"); + + if (s_GetPivotDelegate != null) + { + pivot = s_GetPivotDelegate(); + + // earlier version of progrids return a non-snapped pivot point + pivot = ProBuilderSnapping.SnapValue(pivot, SnapValue()); + return true; + } + + return false; + } + + public static bool IsFullGridEnabled() + { + if (s_IsFullGridEnabledDelegate == null) + s_IsFullGridEnabledDelegate = (Func<bool>)ReflectionUtility.GetClosedDelegateOnProperty<Func<bool>>( + GetProGridsType(), GetProGridsInstance(), "FullGridEnabled", BindingFlags.Instance | BindingFlags.NonPublic); + + if (s_IsFullGridEnabledDelegate != null) + return s_IsFullGridEnabledDelegate(); + + return false; + } + + public static HandleAxis GetActiveGridAxis() + { + if (s_GetActiveGridAxisDelegate == null) + s_GetActiveGridAxisDelegate = ReflectionUtility.GetFieldInfo(GetProGridsType(), "m_RenderPlane", (BindingFlags.Instance | BindingFlags.NonPublic)); + + if (s_GetActiveGridAxisDelegate != null) + { + var value = (int) s_GetActiveGridAxisDelegate.GetValue(GetProGridsInstance()); + + // note - the hex notation that doesn't align to bit masks is intentional. long ago these values were + // defined in progrids, and now we're stuck with random values in the render plane enum. + if(value == 0x1 || value == 0x8) + return HandleAxis.X; + if(value == 0x2 || value == 0x16) + return HandleAxis.Y; + if(value == 0x4 || value == 0x32) + return HandleAxis.Z; + } + + return HandleAxis.Free; + } + + public static float GetActiveGridOffset() + { + if (s_GetActiveGridOffsetDelegate == null) + s_GetActiveGridOffsetDelegate = (Func<float>)ReflectionUtility.GetClosedDelegateOnProperty<Func<float>>( + GetProGridsType(), GetProGridsInstance(), "GridRenderOffset", (BindingFlags.Instance | BindingFlags.Public)); + + if (s_GetActiveGridOffsetDelegate != null) + return s_GetActiveGridOffsetDelegate(); + + return 0f; + } + + /// <summary> + /// Subscribe to PushToGrid events. + /// </summary> + /// <param name="listener"></param> + public static void SubscribePushToGridEvent(Action<float> listener) + { + if (GetProGridsType() == null) + return; + + if (s_SubscribePushToGridEventDelegate == null) + s_SubscribePushToGridEventDelegate = (Action<Action<float>>)ReflectionUtility.GetOpenDelegate<Action<Action<float>>>(GetProGridsType(), "AddPushToGridListener"); + + if (s_SubscribePushToGridEventDelegate != null) + s_SubscribePushToGridEventDelegate(listener); + } + + /// <summary> + /// Remove subscription from PushToGrid events. + /// </summary> + /// <param name="listener"></param> + public static void UnsubscribePushToGridEvent(Action<float> listener) + { + if (GetProGridsType() == null) + return; + + if (s_UnsubscribePushToGridEventDelegate == null) + s_UnsubscribePushToGridEventDelegate = (Action<Action<float>>)ReflectionUtility.GetOpenDelegate<Action<Action<float>>>(GetProGridsType(), "RemovePushToGridListener"); + + if (s_UnsubscribePushToGridEventDelegate != null) + s_UnsubscribePushToGridEventDelegate(listener); + } + + /// <summary> + /// Tell ProGrids that a non-Unity handle has moved in some direction (in world space). + /// </summary> + /// <param name="worldDirection"></param> + public static void OnHandleMove(Vector3 worldDirection) + { + if (GetProGridsType() == null) + return; + + if (s_OnHandleMoveDelegate == null) + s_OnHandleMoveDelegate = (Action<Vector3>)ReflectionUtility.GetOpenDelegate<Action<Vector3>>(GetProGridsType(), "OnHandleMove"); + + if (s_OnHandleMoveDelegate != null) + s_OnHandleMoveDelegate(worldDirection); + } + + /// <summary> + /// Subscribe to toolbar extendo/retracto events. Delegates are called with bool paramater Listener(bool menuOpen); + /// </summary> + /// <param name="listener"></param> + public static void SubscribeToolbarEvent(Action<bool> listener) + { + if (GetProGridsType() == null) + return; + + if (s_SubscribeToolbarEventDelegate == null) + s_SubscribeToolbarEventDelegate = (Action<Action<bool>>)ReflectionUtility.GetOpenDelegate<Action<Action<bool>>>(GetProGridsType(), "AddToolbarEventSubscriber"); + + if (s_SubscribeToolbarEventDelegate != null) + s_SubscribeToolbarEventDelegate(listener); + } + + /// <summary> + /// Remove subscription from extendo/retracto tooblar events. + /// </summary> + /// <param name="listener"></param> + public static void UnsubscribeToolbarEvent(Action<bool> listener) + { + if (GetProGridsType() == null) + return; + + if (s_UnsubscribeToolbarEventDelegate == null) + s_UnsubscribeToolbarEventDelegate = (Action<Action<bool>>)ReflectionUtility.GetOpenDelegate<Action<Action<bool>>>(GetProGridsType(), "RemoveToolbarEventSubscriber"); + + if (s_UnsubscribeToolbarEventDelegate != null) + s_UnsubscribeToolbarEventDelegate(listener); + } + + /// <summary> + /// Snap a Vector3 to the nearest point on the current ProGrids grid if ProGrids is enabled. + /// </summary> + /// <param name="point"></param> + /// <returns></returns> + public static float ProGridsSnap(float point) + { + if (GetProGridsType() == null) + return point; + + if (SnapEnabled()) + return ProBuilderSnapping.SnapValue(point, ProGridsInterface.SnapValue()); + + return point; + } + + /// <summary> + /// Snap a Vector3 to the nearest point on the current ProGrids grid if ProGrids is enabled. + /// </summary> + /// <param name="point"></param> + /// <returns></returns> + public static Vector3 ProGridsSnap(Vector3 point) + { + if (GetProGridsType() == null) + return point; + + if (ProGridsInterface.SnapEnabled()) + { + float snap = ProGridsInterface.SnapValue(); + return ProBuilderSnapping.SnapValue(point, snap); + } + + return point; + } + + /// <summary> + /// Snap a Vector3 to the nearest point on the current ProGrids grid if ProGrids is enabled, with mask. + /// </summary> + /// <param name="point"></param> + /// <param name="mask"></param> + /// <returns></returns> + public static Vector3 ProGridsSnap(Vector3 point, Vector3 mask) + { + if (GetProGridsType() == null) + return point; + + if (ProGridsInterface.SnapEnabled()) + { + float snap = ProGridsInterface.SnapValue(); + return ProBuilderSnapping.SnapValue(point, mask * snap); + } + + return point; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProGridsInterface.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProGridsInterface.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..cdbbb9c70c5dc8988db4be9112b50ef60e4fc985 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ProGridsInterface.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e91b0af086a401648866099dfaf3e377 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ReflectionUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ReflectionUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..f98d5677f4f381679c01c91e3ebcdb488a4d34c3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ReflectionUtility.cs @@ -0,0 +1,215 @@ +using UnityEngine; +using System; +using System.Linq; +using System.Reflection; +using System.Collections.Generic; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Helper functions for working with Reflection. + /// </summary> + static class ReflectionUtility + { + const BindingFlags k_AllFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; + + /// <summary> + /// Get a component with type name. + /// </summary> + /// <param name="gameObject"></param> + /// <param name="componentTypeName"></param> + /// <returns></returns> + public static object GetComponent(this GameObject gameObject, string componentTypeName) + { + return gameObject.GetComponent(componentTypeName); + } + + /// <summary> + /// Fetch a type with name and optional assembly name. `type` should include namespace. + /// </summary> + /// <param name="type"></param> + /// <param name="assembly"></param> + /// <returns></returns> + public static Type GetType(string type, string assembly = null) + { + Type t = Type.GetType(type); + + if (t == null) + { + IEnumerable<Assembly> assemblies = AppDomain.CurrentDomain.GetAssemblies(); + + if (assembly != null) + assemblies = assemblies.Where(x => x.FullName.Contains(assembly)); + + foreach (Assembly ass in assemblies) + { + t = ass.GetType(type); + + if (t != null) + return t; + } + } + + return t; + } + + /// <summary> + /// Fetch a value using GetProperty or GetField. + /// </summary> + /// <param name="target"></param> + /// <param name="type"></param> + /// <param name="member"></param> + /// <param name="flags"></param> + /// <returns></returns> + public static object GetValue(object target, string type, string member, BindingFlags flags = k_AllFlags) + { + Type t = GetType(type); + + if (t == null) + { + Log.Warning("Could not find type \"{0}\"!", type); + return null; + } + else + return GetValue(target, t, member, flags); + } + + public static object GetValue(object target, Type type, string member, BindingFlags flags = k_AllFlags) + { + PropertyInfo pi = type.GetProperty(member, flags); + + if (pi != null) + return pi.GetValue(target, null); + + FieldInfo fi = type.GetField(member, flags); + + if (fi != null) + return fi.GetValue(target); + + return null; + } + + /// <summary> + /// Set a propery or field. + /// </summary> + /// <param name="target"></param> + /// <param name="member"></param> + /// <param name="value"></param> + /// <param name="flags"></param> + /// <returns></returns> + public static bool SetValue(object target, string member, object value, BindingFlags flags = k_AllFlags) + { + if (target == null) + return false; + + PropertyInfo pi = target.GetType().GetProperty(member, flags); + + if (pi != null) + pi.SetValue(target, value, flags, null, null, null); + + FieldInfo fi = target.GetType().GetField(member, flags); + + if (fi != null) + fi.SetValue(target, value); + + return pi != null || fi != null; + } + + public static Delegate GetOpenDelegate<T>(Type type, string methodName) + { + MethodInfo methodInfo = type.GetMethod(methodName); + if (methodInfo != null) + return Delegate.CreateDelegate(typeof(T), methodInfo); + else + { + Log.Warning("Couldn't get method '{0}' from type {1}", methodName, type.ToString()); + } + return null; + } + + public static Delegate GetOpenDelegate<T>(Type type, string methodName, BindingFlags bindings) + { + MethodInfo methodInfo = type.GetMethod(methodName, bindings); + + if (methodInfo != null) + return Delegate.CreateDelegate(typeof(T), methodInfo); + + Log.Warning("Couldn't get method '{0}' from type {1}", methodName, type.ToString()); + + return null; + } + + public static Delegate GetOpenDelegateOnProperty<T>(Type type, string propertyName) + { + PropertyInfo propertyInfo = type.GetProperty(propertyName); + + if (propertyInfo != null) + { + MethodInfo get = propertyInfo.GetGetMethod(); + + if(get != null) + return Delegate.CreateDelegate(typeof(T), get); + } + + Log.Warning("Couldn't get property '{0}' from type {1}", propertyName, type.ToString()); + + return null; + } + + public static Delegate GetOpenDelegateOnProperty<T>(Type type, string propertyName, BindingFlags bindings) + { + PropertyInfo propertyInfo = type.GetProperty(propertyName, bindings); + MethodInfo methodInfo = propertyInfo == null ? null : propertyInfo.GetGetMethod(true); + + if (methodInfo != null) + return Delegate.CreateDelegate(typeof(T), methodInfo);//propertyInfo.GetGetMethod()); + + Log.Warning("Couldn't get property '{0}' from type {1}", propertyName, type.ToString()); + + return null; + } + + public static Delegate GetClosedDelegateOnProperty<T>(Type type, object target, string propertyName) + { + PropertyInfo propertyInfo = type.GetProperty(propertyName); + + if (propertyInfo != null) + { + MethodInfo get = propertyInfo.GetGetMethod(); + + if(get != null) + return Delegate.CreateDelegate(typeof(T), target, get); + } + + Log.Warning("Couldn't get property '{0}' from type {1}", propertyName, type.ToString()); + + return null; + } + + public static Delegate GetClosedDelegateOnProperty<T>(Type type, object target, string propertyName, BindingFlags bindings) + { + PropertyInfo propertyInfo = type.GetProperty(propertyName, bindings); + MethodInfo methodInfo = propertyInfo != null ? propertyInfo.GetGetMethod(true) : null; + + if (methodInfo != null) + return Delegate.CreateDelegate(typeof(T), target, methodInfo); + + Log.Warning("Couldn't get property '{0}' from type {1}", propertyName, type.ToString()); + + return null; + } + + public static FieldInfo GetFieldInfo(Type type, string fieldName, BindingFlags bindings) + { + FieldInfo fieldInfo = type.GetField(fieldName, bindings); + + if (fieldInfo != null) + return fieldInfo; + + Log.Warning("Couldn't get field '{0}' from type {1}", fieldName, type.ToString()); + + return null; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ReflectionUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ReflectionUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ef6e7d8c91ca52f90c5e923bad8c74a9f95eb187 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ReflectionUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0108f8c9cba0ec64cb96fa884a3478bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/RepairActions.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/RepairActions.cs new file mode 100644 index 0000000000000000000000000000000000000000..c5912185061a863c9fba8fa0bd042053f30c3686 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/RepairActions.cs @@ -0,0 +1,152 @@ +using System.Collections.Generic; +using System.Text; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; +using UnityEngine; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Common troubleshooting actions for repairing ProBuilder meshes. + /// </summary> + /// @TODO MOVE THESE TO ACTIONS + static class RepairActions + { + /// <summary> + /// Menu interface for manually re-generating all ProBuilder geometry in scene. + /// </summary> + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Repair/Rebuild All ProBuilder Objects", false, PreferenceKeys.menuRepair)] + public static void MenuForceSceneRefresh() + { + StringBuilder sb = new StringBuilder(); + ProBuilderMesh[] all = Object.FindObjectsOfType<ProBuilderMesh>(); + + for (int i = 0, l = all.Length; i < l; i++) + { + UnityEditor.EditorUtility.DisplayProgressBar( + "Refreshing ProBuilder Objects", + "Reshaping pb_Object " + all[i].id + ".", + ((float)i / all.Length)); + + try + { + all[i].ToMesh(); + all[i].Refresh(); + all[i].Optimize(); + } + catch (System.Exception e) + { + if (!ReProBuilderize(all[i])) + sb.AppendLine("Failed rebuilding: " + all[i].ToString() + "\n\t" + e.ToString()); + } + } + + if (sb.Length > 0) + Log.Error(sb.ToString()); + + UnityEditor.EditorUtility.ClearProgressBar(); + UnityEditor.EditorUtility.DisplayDialog("Refresh ProBuilder Objects", + "Successfully refreshed all ProBuilder objects in scene.", + "Okay"); + } + + static bool ReProBuilderize(ProBuilderMesh pb) + { + try + { + GameObject go = pb.gameObject; + pb.preserveMeshAssetOnDestroy = true; + Undo.DestroyObjectImmediate(pb); + + // don't delete pb_Entity here because it won't + // actually get removed till the next frame, and + // probuilderize wants to add it if it's missing + // (which it looks like it is from c# side but + // is not) + + pb = Undo.AddComponent<ProBuilderMesh>(go); + InternalMeshUtility.ResetPbObjectWithMeshFilter(pb, true); + + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + + return true; + } + catch + { + return false; + } + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Repair/Rebuild Shared Indexes Cache", true, PreferenceKeys.menuRepair)] + static bool VertifyRebuildMeshes() + { + return InternalUtility.GetComponents<ProBuilderMesh>(Selection.transforms).Length > 0; + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Repair/Rebuild Shared Indexes Cache", false, PreferenceKeys.menuRepair)] + public static void DoRebuildMeshes() + { + RebuildSharedIndexes(InternalUtility.GetComponents<ProBuilderMesh>(Selection.transforms)); + } + + /// <summary> + /// Rebuild targets if they can't be refreshed. + /// </summary> + /// <param name="targets"></param> + static void RebuildSharedIndexes(ProBuilderMesh[] targets) + { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < targets.Length; i++) + { + UnityEditor.EditorUtility.DisplayProgressBar( + "Refreshing ProBuilder Objects", + "Rebuilding mesh " + targets[i].id + ".", + ((float)i / targets.Length)); + + ProBuilderMesh pb = targets[i]; + + try + { + pb.sharedVertices = SharedVertex.GetSharedVerticesWithPositions(pb.positionsInternal); + + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + } + catch (System.Exception e) + { + sb.AppendLine("Failed rebuilding " + pb.name + " shared indexes cache.\n" + e.ToString()); + } + } + + if (sb.Length > 0) + Log.Error(sb.ToString()); + + UnityEditor.EditorUtility.ClearProgressBar(); + UnityEditor.EditorUtility.DisplayDialog("Rebuild Shared Index Cache", "Successfully rebuilt " + targets.Length + " shared index caches", "Okay"); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Repair/Remove Degenerate Triangles", false, PreferenceKeys.menuRepair)] + public static void MenuRemoveDegenerateTriangles() + { + int count = 0; + + foreach (ProBuilderMesh pb in InternalUtility.GetComponents<ProBuilderMesh>(Selection.transforms)) + { + int removedVertexCount; + + if(!MeshValidation.EnsureMeshIsValid(pb, out removedVertexCount)) + { + pb.Rebuild(); + pb.Optimize(); + count += removedVertexCount; + } + } + + EditorUtility.ShowNotification("Removed " + count + " vertices \nbelonging to degenerate triangles."); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/RepairActions.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/RepairActions.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b35690da3ffd64ee6159a43fa299791eb25df68d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/RepairActions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c2ff91a42b25c934da55ac7fa3b89db9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SceneDragAndDropListener.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SceneDragAndDropListener.cs new file mode 100644 index 0000000000000000000000000000000000000000..ad59b3df6775baacc804ceb981f6a9cd697854d7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SceneDragAndDropListener.cs @@ -0,0 +1,200 @@ +using System; +using UnityEngine; +using UnityEngine.ProBuilder; +using UObject = UnityEngine.Object; +using System.Linq; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder +{ + [InitializeOnLoad] + static class SceneDragAndDropListener + { + static bool s_IsSceneViewDragAndDrop; + static Mesh s_PreviewMesh; + static Material s_PreviewMaterial; + static ProBuilderMesh s_CurrentPreview; + static bool s_IsFaceDragAndDropOverrideEnabled; + static Matrix4x4 s_Matrix; + + static Func<Material> s_GetDefaultMaterialDelegate = null; + + static SceneDragAndDropListener() + { +#if UNITY_2019_1_OR_NEWER + SceneView.duringSceneGui += OnSceneGUI; +#else + SceneView.onSceneGUIDelegate += OnSceneGUI; +#endif + AssemblyReloadEvents.beforeAssemblyReload += OnBeforeAssemblyReload; + + s_PreviewMesh = new Mesh() + { + name = "pb_DragAndDropListener::PreviewMesh", + hideFlags = HideFlags.HideAndDontSave + }; + } + + static void OnBeforeAssemblyReload() + { + UObject.DestroyImmediate(s_PreviewMesh); + } + + public static bool isDragging + { + get { return s_IsSceneViewDragAndDrop; } + } + + static bool isFaceMode + { + get { return ProBuilderEditor.selectMode.ContainsFlag(SelectMode.TextureFace | SelectMode.Face); } + } + + static Material GetDefaultMaterial() + { + if (s_GetDefaultMaterialDelegate == null) + s_GetDefaultMaterialDelegate = (Func<Material>)ReflectionUtility.GetOpenDelegate<Func<Material>>(typeof(Material), "GetDefaultMaterial"); + + if (s_GetDefaultMaterialDelegate != null) + return s_GetDefaultMaterialDelegate(); + return null; + } + + static Material GetMaterialFromDragReferences(UObject[] references, bool createMaterialForTexture) + { + Material mat = references.FirstOrDefault(x => x is Material) as Material; + + if (!createMaterialForTexture || mat != null) + return mat; + + Texture2D tex = references.FirstOrDefault(x => x is Texture2D) as Texture2D; + string texPath = tex != null ? AssetDatabase.GetAssetPath(tex) : null; + + if (!string.IsNullOrEmpty(texPath)) + { + + var defaultMaterial = GetDefaultMaterial(); + + if (defaultMaterial == null) + mat = new Material(Shader.Find("Standard")); + else + mat = new Material(defaultMaterial.shader); + + if (mat.shader == null) + { + UObject.DestroyImmediate(mat); + return null; + } + + mat.mainTexture = tex; + + int lastDot = texPath.LastIndexOf(".", StringComparison.InvariantCulture); + texPath = texPath.Substring(0, texPath.Length - (texPath.Length - lastDot)); + texPath = AssetDatabase.GenerateUniqueAssetPath(texPath + ".mat"); + AssetDatabase.CreateAsset(mat, texPath); + AssetDatabase.Refresh(); + + return mat; + } + + return null; + } + + static void SetMeshPreview(ProBuilderMesh mesh) + { + if (s_CurrentPreview != mesh) + { + s_PreviewMesh.Clear(); + s_CurrentPreview = mesh; + + if (s_CurrentPreview != null) + { + s_PreviewMaterial = GetMaterialFromDragReferences(DragAndDrop.objectReferences, false); + s_IsFaceDragAndDropOverrideEnabled = isFaceMode && s_PreviewMaterial != null && mesh.selectedFaceCount > 0; + + if (s_IsFaceDragAndDropOverrideEnabled) + { + s_PreviewMesh.vertices = mesh.positionsInternal; + + if (mesh.HasArrays(MeshArrays.Color)) + s_PreviewMesh.colors = mesh.colorsInternal; + if (mesh.HasArrays(MeshArrays.Normal)) + s_PreviewMesh.normals = mesh.normalsInternal; + if (mesh.HasArrays(MeshArrays.Texture0)) + s_PreviewMesh.uv = mesh.texturesInternal; + + s_Matrix = mesh.transform.localToWorldMatrix; + s_PreviewMesh.triangles = mesh.selectedFacesInternal.SelectMany(x => x.indexes).ToArray(); + } + } + else + { + s_IsFaceDragAndDropOverrideEnabled = false; + } + } + } + + static void OnSceneGUI(SceneView sceneView) + { + var evt = Event.current; + + if (evt.type == EventType.DragUpdated) + { + if (!s_IsSceneViewDragAndDrop) + s_IsSceneViewDragAndDrop = true; + + int submeshIndex; + GameObject go = HandleUtility.PickGameObject(evt.mousePosition, out submeshIndex); + + SetMeshPreview(go != null ? go.GetComponent<ProBuilderMesh>() : null); + + if (s_IsFaceDragAndDropOverrideEnabled) + { + DragAndDrop.visualMode = DragAndDropVisualMode.Copy; + evt.Use(); + } + } + else if (evt.type == EventType.DragExited) + { + if (s_IsFaceDragAndDropOverrideEnabled) + { + DragAndDrop.visualMode = DragAndDropVisualMode.Copy; + evt.Use(); + SetMeshPreview(null); + } + + s_IsSceneViewDragAndDrop = false; + } + else if (evt.type == EventType.DragPerform) + { + s_IsSceneViewDragAndDrop = false; + int submeshIndex; + GameObject go = HandleUtility.PickGameObject(evt.mousePosition, out submeshIndex); + SetMeshPreview(go != null ? go.GetComponent<ProBuilderMesh>() : null); + + if (s_CurrentPreview != null && s_IsFaceDragAndDropOverrideEnabled) + { + UndoUtility.RecordObject(s_CurrentPreview, "Set Face Material"); + UndoUtility.RecordObject(s_CurrentPreview.renderer, "Set Face Material"); + + s_CurrentPreview.SetMaterial(s_CurrentPreview.selectedFacesInternal, s_PreviewMaterial); + + InternalMeshUtility.FilterUnusedSubmeshIndexes(s_CurrentPreview); + + s_CurrentPreview.ToMesh(); + s_CurrentPreview.Refresh(); + s_CurrentPreview.Optimize(); + + evt.Use(); + } + + SetMeshPreview(null); + } + else if (evt.type == EventType.Repaint && s_IsFaceDragAndDropOverrideEnabled) + { + if (s_PreviewMaterial.SetPass(0)) + Graphics.DrawMeshNow(s_PreviewMesh, s_Matrix, 0); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SceneDragAndDropListener.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SceneDragAndDropListener.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4590350e252aa9f1813bc8d6c40e9cdaee8f02e4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SceneDragAndDropListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e72ef48ce83a1ef4c9757c374633ea12 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ScriptingSymbolManager.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ScriptingSymbolManager.cs new file mode 100644 index 0000000000000000000000000000000000000000..ed0a91ac7dc622eadae3984408872558fa000cbf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ScriptingSymbolManager.cs @@ -0,0 +1,79 @@ +using System; + +namespace UnityEditor.ProBuilder +{ + static class ScriptingSymbolManager + { + static bool IsObsolete(BuildTargetGroup group) + { + var attrs = typeof(BuildTargetGroup).GetField(group.ToString()).GetCustomAttributes(typeof(ObsoleteAttribute), false); + return attrs.Length > 0; + } + + internal static bool ContainsDefine(string define) + { + foreach (BuildTargetGroup targetGroup in System.Enum.GetValues(typeof(BuildTargetGroup))) + { + if (targetGroup == BuildTargetGroup.Unknown || IsObsolete(targetGroup)) + continue; + + string defineSymbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup); + + if (!defineSymbols.Contains(define)) + return false; + } + + return true; + } + + /// <summary> + /// Add a define to the scripting define symbols for every build target. + /// </summary> + /// <param name="define"></param> + public static void AddScriptingDefine(string define) + { + foreach (BuildTargetGroup targetGroup in System.Enum.GetValues(typeof(BuildTargetGroup))) + { + if (targetGroup == BuildTargetGroup.Unknown || IsObsolete(targetGroup)) + continue; + + string defineSymbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup); + + if (!defineSymbols.Contains(define)) + { + if (defineSymbols.Length < 1) + defineSymbols = define; + else if (defineSymbols.EndsWith(";")) + defineSymbols = string.Format("{0}{1}", defineSymbols, define); + else + defineSymbols = string.Format("{0};{1}", defineSymbols, define); + + PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup, defineSymbols); + } + } + } + + /// <summary> + /// Remove a define from the scripting define symbols for every build target. + /// </summary> + /// <param name="define"></param> + public static void RemoveScriptingDefine(string define) + { + foreach (BuildTargetGroup targetGroup in System.Enum.GetValues(typeof(BuildTargetGroup))) + { + if (targetGroup == BuildTargetGroup.Unknown || IsObsolete(targetGroup)) + continue; + + string defineSymbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup); + + if (defineSymbols.Contains(define)) + { + defineSymbols = defineSymbols.Replace(string.Format("{0};", define), ""); + defineSymbols = defineSymbols.Replace(define, ""); + + PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup, defineSymbols); + } + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ScriptingSymbolManager.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ScriptingSymbolManager.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..eedee04d5102338531a354444e7efc5bf48f0675 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ScriptingSymbolManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8f0035a190335d408067f4bda8fbb49 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SelectionUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SelectionUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..accd4917368366c859e343f9225cb08a3dff9d9a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SelectionUtility.cs @@ -0,0 +1,40 @@ +using UnityEngine; +using UnityEditor; +using System.Linq; +using System.Collections.Generic; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Utility methods for working with UnityEngine.Selection. + /// </summary> + static class SelectionUtility + { + /// <summary> + /// Remove a pb_Object (or it's GameObject) from the current Selection. + /// </summary> + /// <param name="pb"></param> + public static void Remove(ProBuilderMesh pb) + { + if (pb == null) + return; + + Selection.objects = Selection.objects.Where(x => !ObjectMatchesComponent(x, pb)).ToArray(); + } + + static bool ObjectMatchesComponent(Object o, Component c) + { + if (o is GameObject) + { + GameObject g = (GameObject)o; + return g.GetComponent(c.GetType()) == c; + } + + if (o is Component) + return o as Component == c; + + return false; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SelectionUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SelectionUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..44a8beede707905d9017fefacc4e391d902122ab --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SelectionUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72b3f039440c77d4694f2f4e12ab229a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ShapeEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ShapeEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..91de4ea3c4ff37b686cc4c80fc531b367af99c8f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ShapeEditor.cs @@ -0,0 +1,818 @@ +using System.Linq; +using System.Reflection; +using UnityEditor.Experimental.SceneManagement; +using UnityEngine; +using UnityEngine.ProBuilder; +using PMath = UnityEngine.ProBuilder.Math; +using UnityEditor.SettingsManagement; +using UnityEngine.ProBuilder.MeshOperations; +using UnityEngine.SceneManagement; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Shape creation panel implementation. + /// </summary> + sealed class ShapeEditor : ConfigurableWindow + { + static class Styles + { + public static readonly GUIStyle options = "PaneOptions"; + } + + abstract class ShapeBuilder + { + public virtual string name + { + get { return ObjectNames.NicifyVariableName(GetType().Name); } + } + + public abstract void OnGUI(); + + public abstract ProBuilderMesh Build(bool isPreview = false); + + public void ResetParameters() + { + var members = GetType().GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); + + foreach (var fi in members) + { + if(fi.GetValue(this) is IUserSetting setting) + setting.Reset(); + } + } + } + + public static void MenuOpenShapeCreator() + { + GetWindow<ShapeEditor>("Shape Tool"); + } + + static readonly Vector3 k_MinShapeDimensions = new Vector3(.001f, .001f, .001f); + static readonly Vector3 k_MaxShapeDimensions = new Vector3(1000000f, 1000000f, 1000000f); + Vector2 m_Scroll = Vector2.zero; + [SettingsKey("ShapeEditor.s_CurrentIndex")] + static Pref<int> s_CurrentIndex = new Pref<int>("ShapeEditor.s_CurrentIndex", 0, SettingsScope.User); + [UserSetting("Toolbar", "Close Shape Window after Build", "When true the shape window will close after hitting the build button.")] + [SettingsKey("editor.closeWindowAfterShapeCreation")] + static Pref<bool> s_CloseWindowAfterCreateShape = new Pref<bool>("editor.closeWindowAfterShapeCreation", false); + [SerializeField] + GameObject m_PreviewObject; + + static ShapeBuilder[] s_ShapeBuilders = new ShapeBuilder[] + { + new Cube(), + new Sprite(), + new Prism(), + new Stair(), + new Cylinder(), + new Door(), + new Plane(), + new Pipe(), + new Cone(), + new Arch(), + new Sphere(), + new Torus() + }; + + string[] m_ShapeTypes; + + void OnEnable() + { + PrefabStage.prefabStageOpened += PrefabStageOpened; + PrefabStage.prefabStageClosing += PrefabStageClosing; + m_ShapeTypes = s_ShapeBuilders.Select(x => x.name).ToArray(); + // Delaying the call til end of frame fixes an issue where entering play mode would cause the preview object + // to not appear in the Hierarchy until the Shape Editor is interacted with. + EditorApplication.delayCall += () => SetPreviewMesh(GetActiveShapeBuilder().Build()); + EditorApplication.playModeStateChanged += PlayModeStateChanged; + } + + void OnDisable() + { + EditorApplication.playModeStateChanged -= PlayModeStateChanged; + PrefabStage.prefabStageOpened -= PrefabStageOpened; + PrefabStage.prefabStageClosing -= PrefabStageClosing; + DestroyPreviewObject(false); + } + + void PlayModeStateChanged(PlayModeStateChange state) + { + if(state == PlayModeStateChange.EnteredEditMode) + SetPreviewMesh(GetActiveShapeBuilder().Build()); + } + + void PrefabStageOpened(PrefabStage stage) + { + if(m_PreviewObject != null) + EditorUtility.MoveToActiveScene(m_PreviewObject); + } + + void PrefabStageClosing(PrefabStage stage) + { + // Closing is called while the PrefabStage is still open, so we can't use EditorUtility.MoveToActiveScene + if (m_PreviewObject != null) + { + m_PreviewObject.transform.SetParent(null); + SceneManager.MoveGameObjectToScene(m_PreviewObject, SceneManager.GetActiveScene()); + } + } + + [MenuItem("GameObject/3D Object/" + PreferenceKeys.pluginTitle + " Cube _%k")] + public static void MenuCreateCube() + { + ProBuilderMesh mesh = ShapeGenerator.GenerateCube(EditorUtility.newShapePivotLocation, Vector3.one); + UndoUtility.RegisterCreatedObjectUndo(mesh.gameObject, "Create Shape"); + EditorUtility.InitObject(mesh); + } + + void OnGUI() + { + DoContextMenu(); + + if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Return) + CreateSelectedShape(true); + + GUILayout.Label("Shape Selector", EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + + s_CurrentIndex.value = EditorGUILayout.Popup(s_CurrentIndex, m_ShapeTypes); + + GUILayout.BeginHorizontal(); + GUILayout.Label("Shape Settings", EditorStyles.boldLabel); + GUILayout.FlexibleSpace(); + if (GUILayout.Button(GUIContent.none, Styles.options)) + ShapeBuilderOptions(GetActiveShapeBuilder()); + GUILayout.EndHorizontal(); + + m_Scroll = EditorGUILayout.BeginScrollView(m_Scroll); + + var shape = GetActiveShapeBuilder(); + + shape.OnGUI(); + + EditorGUILayout.EndScrollView(); + + if (EditorGUI.EndChangeCheck()) + { + ProBuilderSettings.Save(); + SetPreviewMesh(shape.Build()); + } + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Build")) + CreateSelectedShape(); + } + + void CreateSelectedShape(bool forceCloseWindow = false) + { + var res = CreateActiveShape(); + ApplyPreviewTransform(res); + DestroyPreviewObject(true); + + if(forceCloseWindow || s_CloseWindowAfterCreateShape) + Close(); + else + ResetPreviewAfterShapeCreation(res); + } + + /// <summary> + /// Create a shape with the last set <see cref="ShapeEditor"/> parameters. + /// </summary> + /// <returns>A reference to the <see cref="ProBuilderMesh"/> of the newly created GameObject.</returns> + public static ProBuilderMesh CreateActiveShape() + { + var res = s_ShapeBuilders[PMath.Clamp(s_CurrentIndex, 0, s_ShapeBuilders.Length - 1)].Build(); + Undo.RegisterCreatedObjectUndo(res.gameObject, "Create Shape"); + EditorUtility.InitObject(res); + return res; + } + + // Reinitialize the shape preview and move it to the right a bit so that it is visible + void ResetPreviewAfterShapeCreation(ProBuilderMesh lastInstantiatedMesh) + { + RebuildPreview(); + + if(lastInstantiatedMesh != null) + { + var src = lastInstantiatedMesh.transform; + var dst = m_PreviewObject.transform; + dst.position = src.position + Vector3.right; + dst.localRotation = src.localRotation; + dst.localScale = src.localScale; + } + } + + void DestroyPreviewObject(bool immediate) + { + if (immediate) + DestroyPreviewObjectInternal(); + else + EditorApplication.delayCall += DestroyPreviewObjectInternal; + } + + void ShapeBuilderOptions(ShapeBuilder builder) + { + var menu = new GenericMenu(); + menu.AddItem(new GUIContent("Reset", "Reset the selected Shape parameters."), false, () => + { + builder.ResetParameters(); + RebuildPreview(); + }); + menu.ShowAsContext(); + } + + static ShapeBuilder GetActiveShapeBuilder() + { + return s_ShapeBuilders[PMath.Clamp(s_CurrentIndex, 0, s_ShapeBuilders.Length - 1)]; + } + + public void RebuildPreview() + { + SetPreviewMesh(GetActiveShapeBuilder().Build()); + } + + void DestroyPreviewObjectInternal() + { + if (m_PreviewObject != null) + { + if (Selection.Contains(m_PreviewObject.gameObject)) + MeshSelection.RemoveFromSelection(m_PreviewObject.gameObject); + + if (m_PreviewObject.GetComponent<MeshFilter>().sharedMesh != null) + DestroyImmediate(m_PreviewObject.GetComponent<MeshFilter>().sharedMesh); + + DestroyImmediate(m_PreviewObject); + + // When entering play mode the editor tracker isn't rebuilt before the Inspector redraws, meaning the + // preview object is still assumed to be in the selection. Flushing the selection changes by rebuilding + // active editor tracker fixes this. +#if UNITY_2019_3_OR_NEWER + ActiveEditorTracker.RebuildAllIfNecessary(); +#else + var rebuildAllTrackers = typeof(ActiveEditorTracker).GetMethod("Internal_RebuildAllIfNecessary", BindingFlags.Static | BindingFlags.NonPublic); + if(rebuildAllTrackers != null) + rebuildAllTrackers.Invoke(null, null); +#endif + } + } + + void SetPreviewMesh(ProBuilderMesh mesh) + { + ApplyPreviewTransform(mesh); + Mesh umesh = mesh.mesh; + if(umesh != null) + umesh.hideFlags = HideFlags.DontSave; + + if (m_PreviewObject) + { + if (!m_PreviewObject.TryGetComponent(out MeshFilter mf)) + mf = m_PreviewObject.AddComponent<MeshFilter>(); + if(mf.sharedMesh != null) + DestroyImmediate(mf.sharedMesh); + m_PreviewObject.GetComponent<MeshFilter>().sharedMesh = umesh; + mesh.preserveMeshAssetOnDestroy = true; + m_PreviewObject.name = mesh.gameObject.name; + if (!m_PreviewObject.name.EndsWith("-preview")) + m_PreviewObject.name += "-preview"; + DestroyImmediate(mesh.gameObject); + } + else + { + m_PreviewObject = mesh.gameObject; + m_PreviewObject.hideFlags = HideFlags.DontSave; + mesh.preserveMeshAssetOnDestroy = true; + DestroyImmediate(mesh); + Selection.activeTransform = m_PreviewObject.transform; + m_PreviewObject.name += "-preview"; + } + + m_PreviewObject.GetComponent<MeshRenderer>().sharedMaterial = EditorMaterialUtility.GetShapePreviewMaterial(); + EditorUtility.MoveToActiveScene(m_PreviewObject.gameObject); + } + + void ApplyPreviewTransform(ProBuilderMesh mesh) + { + var previous = m_PreviewObject != null; + + if (previous) + { + var trs = mesh.transform; + trs.position = m_PreviewObject.transform.position; + trs.localRotation = m_PreviewObject.transform.localRotation; + trs.localScale = m_PreviewObject.transform.localScale; + } + else + { + EditorUtility.ScreenCenter(mesh.gameObject); + EditorUtility.SetPivotLocationAndSnap(mesh); + } + } + + class Cube : ShapeBuilder + { + [SettingsKey("ShapeBuilder.Cube.s_CubeSize")] + static Pref<Vector3> s_CubeSize = new Pref<Vector3>("ShapeBuilder.Cube.s_CubeSize", Vector3.one, SettingsScope.User); + + public override void OnGUI() + { + s_CubeSize.value = EditorGUILayout.Vector3Field("Size", s_CubeSize); + s_CubeSize.value = Vector3.Min(Vector3.Max(s_CubeSize.value, k_MinShapeDimensions), k_MaxShapeDimensions); + } + + public override ProBuilderMesh Build(bool preview = false) + { + return ShapeGenerator.GenerateCube(EditorUtility.newShapePivotLocation, s_CubeSize); + } + } + + class Sprite : ShapeBuilder + { + [SettingsKey("ShapeBuilder.Sprite.s_Axis")] + static Pref<Axis> s_Axis = new Pref<Axis>("ShapeBuilder.Sprite.s_Axis", Axis.Forward, SettingsScope.User); + + public override void OnGUI() + { + s_Axis.value = (Axis)EditorGUILayout.EnumPopup("Axis", s_Axis); + } + + public override ProBuilderMesh Build(bool preview = false) + { + return ShapeGenerator.GeneratePlane(EditorUtility.newShapePivotLocation, 1, 1, 0, 0, s_Axis); + } + } + + class Prism : ShapeBuilder + { + [SettingsKey("ShapeBuilder.Prism.s_PrismSize")] + static Pref<Vector3> s_PrismSize = new Pref<Vector3>("ShapeBuilder.Prism.s_PrismSize", Vector3.one, SettingsScope.User); + + public override void OnGUI() + { + s_PrismSize.value = EditorGUILayout.Vector3Field("Size", s_PrismSize); + s_PrismSize.value = Vector3.Min(Vector3.Max(s_PrismSize.value, k_MinShapeDimensions), k_MaxShapeDimensions); + } + + public override ProBuilderMesh Build(bool preview = false) + { + return ShapeGenerator.GeneratePrism(EditorUtility.newShapePivotLocation, s_PrismSize); + } + } + + class Stair : ShapeBuilder + { + [SettingsKey("ShapeBuilder.Stair.s_Steps")] + static Pref<int> s_Steps = new Pref<int>("ShapeBuilder.Stair.s_Steps", 6, SettingsScope.User); + [SettingsKey("ShapeBuilder.Stair.s_Size")] + static Pref<Vector3> s_Size = new Pref<Vector3>("ShapeBuilder.Stair.s_Size", new Vector3(2f, 2.5f, 4f), SettingsScope.User); + [SettingsKey("ShapeBuilder.Stair.s_Circumference")] + static Pref<float> s_Circumference = new Pref<float>("ShapeBuilder.Stair.s_Circumference", 0f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Stair.s_Sides")] + static Pref<bool> s_Sides = new Pref<bool>("ShapeBuilder.Stair.s_Sides", true, SettingsScope.User); + [SettingsKey("ShapeBuilder.Stair.s_Mirror")] + static Pref<bool> s_Mirror = new Pref<bool>("ShapeBuilder.Stair.s_Mirror", false, SettingsScope.User); + + public override void OnGUI() + { + s_Steps.value = (int)Mathf.Max(UI.EditorGUIUtility.FreeSlider("Steps", s_Steps, 2, 64), 2); + s_Steps.value = PMath.Clamp(s_Steps, 2, 512); + s_Sides.value = EditorGUILayout.Toggle("Build Sides", s_Sides); + s_Circumference.value = EditorGUILayout.Slider("Curvature", s_Circumference, 0f, 360f); + + Vector3 size = s_Size.value; + + if (s_Circumference > 0f) + { + s_Mirror.value = EditorGUILayout.Toggle("Mirror", s_Mirror); + + size.x = + Mathf.Max( + UI.EditorGUIUtility.FreeSlider( + new GUIContent("Stair Width", "The width of an individual stair step."), size.x, + .01f, 10f), .01f); + size.y = + Mathf.Max( + UI.EditorGUIUtility.FreeSlider( + new GUIContent("Stair Height", + "The total height of this staircase. You may enter any value in the float field."), + size.y, .01f, 10f), .01f); + size.z = + Mathf.Max( + UI.EditorGUIUtility.FreeSlider( + new GUIContent("Inner Radius", "The distance from the center that stairs begin."), + size.z, 0f, 10f), 0f); + + s_Size.value = size; + } + else + { + size.x = UI.EditorGUIUtility.FreeSlider("Width", size.x, 0.01f, 10f); + size.y = UI.EditorGUIUtility.FreeSlider("Height", size.y, 0.01f, 10f); + size.z = UI.EditorGUIUtility.FreeSlider("Depth", size.z, 0.01f, 10f); + } + + s_Size.value = PMath.Clamp(size, k_MinShapeDimensions, k_MaxShapeDimensions); + } + + public override ProBuilderMesh Build(bool preview = false) + { + if (s_Circumference > 0f) + { + return ShapeGenerator.GenerateCurvedStair( + EditorUtility.newShapePivotLocation, + s_Size.value.x, + s_Size.value.y, + s_Size.value.z, + s_Mirror ? -s_Circumference : s_Circumference, + s_Steps, + s_Sides); + } + + return ShapeGenerator.GenerateStair( + EditorUtility.newShapePivotLocation, + s_Size, + s_Steps, + s_Sides); + } + } + + class Cylinder : ShapeBuilder + { + [SettingsKey("ShapeBuilder.Cylinder.s_AxisSegments")] + static Pref<int> s_AxisSegments = new Pref<int>("ShapeBuilder.Cylinder.s_AxisSegments", 8, SettingsScope.User); + [SettingsKey("ShapeBuilder.Cylinder.s_Radius")] + static Pref<float> s_Radius = new Pref<float>("ShapeBuilder.Cylinder.s_Radius", .5f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Cylinder.s_Height")] + static Pref<float> s_Height = new Pref<float>("ShapeBuilder.Cylinder.s_Height", 1f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Cylinder.s_HeightSegments")] + static Pref<int> s_HeightSegments = new Pref<int>("ShapeBuilder.Cylinder.s_HeightSegments", 0, SettingsScope.User); + [SettingsKey("ShapeBuilder.Cylinder.s_Smooth")] + static Pref<bool> s_Smooth = new Pref<bool>("ShapeBuilder.Cylinder.s_Smooth", true, SettingsScope.User); + + public override void OnGUI() + { + s_Radius.value = EditorGUILayout.FloatField("Radius", s_Radius); + s_Radius.value = Mathf.Clamp(s_Radius, k_MinShapeDimensions.x, k_MaxShapeDimensions.x); + + s_AxisSegments.value = EditorGUILayout.IntField("Number of Sides", s_AxisSegments); + s_AxisSegments.value = PMath.Clamp(s_AxisSegments, 4, 128); + + s_Height.value = EditorGUILayout.FloatField("Height", s_Height); + s_Height.value = Mathf.Clamp(s_Height.value, k_MinShapeDimensions.x, k_MaxShapeDimensions.x); + + s_HeightSegments.value = EditorGUILayout.IntField("Height Segments", s_HeightSegments); + s_HeightSegments.value = Mathf.Clamp(s_HeightSegments.value, 0, 128); + + s_Smooth.value = EditorGUILayout.Toggle("Smooth", s_Smooth); + + if (s_AxisSegments % 2 != 0) + s_AxisSegments.value++; + + if (s_HeightSegments < 0) + s_HeightSegments.value = 0; + } + + public override ProBuilderMesh Build(bool preview = false) + { + return ShapeGenerator.GenerateCylinder( + EditorUtility.newShapePivotLocation, + s_AxisSegments, + s_Radius, + s_Height, + s_HeightSegments, + s_Smooth ? 1 : -1); + } + } + + class Door : ShapeBuilder + { + [SettingsKey("ShapeBuilder.Door.s_Width")] + static Pref<float> s_Width = new Pref<float>("ShapeBuilder.Door.s_Width", 4.0f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Door.s_Height")] + static Pref<float> s_Height = new Pref<float>("ShapeBuilder.Door.s_Height", 4.0f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Door.s_LedgeHeight")] + static Pref<float> s_LedgeHeight = new Pref<float>("ShapeBuilder.Door.s_LedgeHeight", 1.0f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Door.s_LegWidth")] + static Pref<float> s_LegWidth = new Pref<float>("ShapeBuilder.Door.s_LegWidth", 1.0f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Door.s_Depth")] + static Pref<float> s_Depth = new Pref<float>("ShapeBuilder.Door.s_Depth", 0.5f, SettingsScope.User); + + public override void OnGUI() + { + s_Width.value = EditorGUILayout.FloatField("Total Width", s_Width); + s_Width.value = Mathf.Clamp(s_Width, 1.0f, 500.0f); + + s_Height.value = EditorGUILayout.FloatField("Total Height", s_Height); + s_Height.value = Mathf.Clamp(s_Height, 1.0f, 500.0f); + + s_Depth.value = EditorGUILayout.FloatField("Total Depth", s_Depth); + s_Depth.value = Mathf.Clamp(s_Depth, 0.01f, 500.0f); + + s_LedgeHeight.value = EditorGUILayout.FloatField("Door Height", s_LedgeHeight); + s_LedgeHeight.value = Mathf.Clamp(s_LedgeHeight, 0.01f, 500.0f); + + s_LegWidth.value = EditorGUILayout.FloatField("Leg Width", s_LegWidth); + s_LegWidth.value = Mathf.Clamp(s_LegWidth, 0.01f, 2.0f); + } + + public override ProBuilderMesh Build(bool preview = false) + { + return ShapeGenerator.GenerateDoor( + EditorUtility.newShapePivotLocation, + s_Width, + s_Height, + s_LedgeHeight, + s_LegWidth, + s_Depth); + } + } + + class Plane : ShapeBuilder + { + [SettingsKey("ShapeBuilder.Plane.s_Height")] + static Pref<float> s_Height = new Pref<float>("ShapeBuilder.Plane.s_Height", 10, SettingsScope.User); + [SettingsKey("ShapeBuilder.Plane.s_Width")] + static Pref<float> s_Width = new Pref<float>("ShapeBuilder.Plane.s_Width", 10, SettingsScope.User); + [SettingsKey("ShapeBuilder.Plane.s_HeightSegments")] + static Pref<int> s_HeightSegments = new Pref<int>("ShapeBuilder.Plane.s_HeightSegments", 3, SettingsScope.User); + [SettingsKey("ShapeBuilder.Plane.s_WidthSegments")] + static Pref<int> s_WidthSegments = new Pref<int>("ShapeBuilder.Plane.s_WidthSegments", 3, SettingsScope.User); + [SettingsKey("ShapeBuilder.Plane.s_Axis")] + static Pref<Axis> s_Axis = new Pref<Axis>("ShapeBuilder.Plane.s_Axis", Axis.Up, SettingsScope.User); + + public override void OnGUI() + { + s_Axis.value = (Axis)EditorGUILayout.EnumPopup("Axis", s_Axis); + + s_Width.value = EditorGUILayout.FloatField("Width", s_Width); + s_Height.value = EditorGUILayout.FloatField("Length", s_Height); + s_Width.value = Mathf.Clamp(s_Width.value, k_MinShapeDimensions.x, k_MaxShapeDimensions.x); + s_Height.value = Mathf.Clamp(s_Height.value, k_MinShapeDimensions.x, k_MaxShapeDimensions.x); + + s_WidthSegments.value = EditorGUILayout.IntField("Width Segments", s_WidthSegments); + s_HeightSegments.value = EditorGUILayout.IntField("Length Segments", s_HeightSegments); + + s_WidthSegments.value = PMath.Clamp(s_WidthSegments.value, 0, 512); + s_HeightSegments.value = PMath.Clamp(s_HeightSegments.value, 0, 512); + } + + public override ProBuilderMesh Build(bool preview = false) + { + return ShapeGenerator.GeneratePlane( + EditorUtility.newShapePivotLocation, + s_Height, + s_Width, + s_HeightSegments, + s_WidthSegments, + s_Axis); + } + } + + class Pipe : ShapeBuilder + { + [SettingsKey("ShapeBuilder.Pipe.s_Radius")] + static Pref<float> s_Radius = new Pref<float>("ShapeBuilder.Pipe.s_Radius", 1f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Pipe.s_Height")] + static Pref<float> s_Height = new Pref<float>("ShapeBuilder.Pipe.s_Height", 2f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Pipe.s_Thickness")] + static Pref<float> s_Thickness = new Pref<float>("ShapeBuilder.Pipe.s_Thickness", .2f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Pipe.s_AxisSegments")] + static Pref<int> s_AxisSegments = new Pref<int>("ShapeBuilder.Pipe.s_AxisSegments", 6, SettingsScope.User); + [SettingsKey("ShapeBuilder.Pipe.s_HeightSegments")] + static Pref<int> s_HeightSegments = new Pref<int>("ShapeBuilder.Pipe.s_HeightSegments", 1, SettingsScope.User); + + public override void OnGUI() + { + s_Radius.value = EditorGUILayout.FloatField("Radius", s_Radius); + s_Height.value = EditorGUILayout.FloatField("Height", s_Height); + s_Thickness.value = EditorGUILayout.FloatField("Thickness", s_Thickness); + s_AxisSegments.value = EditorGUILayout.IntField("Number of Sides", s_AxisSegments); + s_HeightSegments.value = EditorGUILayout.IntField("Height Segments", s_HeightSegments); + + s_Radius.value = Mathf.Clamp(s_Radius.value, k_MinShapeDimensions.x, k_MaxShapeDimensions.x); + s_Height.value = Mathf.Clamp(s_Height.value, k_MinShapeDimensions.x, k_MaxShapeDimensions.x); + s_HeightSegments.value = (int)Mathf.Clamp(s_HeightSegments, 0f, 32f); + s_Thickness.value = Mathf.Clamp(s_Thickness, .01f, s_Radius - .01f); + s_AxisSegments.value = PMath.Clamp(s_AxisSegments, 3, 64); + s_HeightSegments.value = PMath.Clamp(s_HeightSegments.value, 0, 128); + } + + public override ProBuilderMesh Build(bool preview = false) + { + return ShapeGenerator.GeneratePipe( + EditorUtility.newShapePivotLocation, + s_Radius, + s_Height, + s_Thickness, + s_AxisSegments, + s_HeightSegments + ); + } + } + + class Cone : ShapeBuilder + { + [SettingsKey("ShapeBuilder.Cone.s_Radius")] + static Pref<float> s_Radius = new Pref<float>("ShapeBuilder.Cone.s_Radius", 1f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Cone.s_Height")] + static Pref<float> s_Height = new Pref<float>("ShapeBuilder.Cone.s_Height", 2f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Cone.s_AxisSegments")] + static Pref<int> s_AxisSegments = new Pref<int>("ShapeBuilder.Cone.s_AxisSegments", 6, SettingsScope.User); + + public override void OnGUI() + { + s_Radius.value = EditorGUILayout.FloatField("Radius", s_Radius); + s_Height.value = EditorGUILayout.FloatField("Height", s_Height); + s_AxisSegments.value = EditorGUILayout.IntField("Number of Sides", s_AxisSegments); + + s_Radius.value = Mathf.Clamp(s_Radius.value, k_MinShapeDimensions.x, k_MaxShapeDimensions.x); + s_Height.value = Mathf.Clamp(s_Height.value, k_MinShapeDimensions.x, k_MaxShapeDimensions.x); + s_AxisSegments.value = PMath.Clamp(s_AxisSegments, 3, 64); + } + + public override ProBuilderMesh Build(bool preview = false) + { + return ShapeGenerator.GenerateCone( + EditorUtility.newShapePivotLocation, + s_Radius, + s_Height, + s_AxisSegments + ); + } + } + + class Arch : ShapeBuilder + { + [SettingsKey("ShapeBuilder.Arch.s_Angle")] + static Pref<float> s_Angle = new Pref<float>("ShapeBuilder.Arch.s_Angle", 180.0f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Arch.s_Radius")] + static Pref<float> s_Radius = new Pref<float>("ShapeBuilder.Arch.s_Radius", 3.0f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Arch.s_Width")] + static Pref<float> s_Width = new Pref<float>("ShapeBuilder.Arch.s_Width", 0.50f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Arch.s_Depth")] + static Pref<float> s_Depth = new Pref<float>("ShapeBuilder.Arch.s_Depth", 1f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Arch.s_RadiusSegments")] + static Pref<int> s_RadiusSegments = new Pref<int>("ShapeBuilder.Arch.s_RadiusSegments", 6, SettingsScope.User); + [SettingsKey("ShapeBuilder.Arch.s_EndCaps")] + static Pref<bool> s_EndCaps = new Pref<bool>("ShapeBuilder.Arch.s_EndCaps", true, SettingsScope.User); + + const bool k_InsideFaces = true; + const bool k_OutsideFaces = true; + const bool k_FrontFaces = true; + const bool k_BackFaces = true; + + public override void OnGUI() + { + s_Radius.value = EditorGUILayout.FloatField("Radius", s_Radius); + s_Radius.value = s_Radius <= 0f ? .01f : s_Radius; + + s_Width.value = EditorGUILayout.FloatField("Thickness", s_Width); + s_Width.value = Mathf.Clamp(s_Width, 0.01f, 100f); + + s_Depth.value = EditorGUILayout.FloatField("Depth", s_Depth); + s_Depth.value = Mathf.Clamp(s_Depth, 0.1f, 500.0f); + + s_RadiusSegments.value = EditorGUILayout.IntField("Number of Sides", s_RadiusSegments); + s_RadiusSegments.value = Mathf.Clamp(s_RadiusSegments, 2, 200); + + s_Angle.value = EditorGUILayout.FloatField("Arch Degrees", s_Angle); + s_Angle.value = Mathf.Clamp(s_Angle, 0.0f, 360.0f); + + if (s_Angle < 360f) + s_EndCaps.value = EditorGUILayout.Toggle("End Caps", s_EndCaps); + + if (s_Angle > 180f) + s_RadiusSegments.value = System.Math.Max(3, s_RadiusSegments); + } + + public override ProBuilderMesh Build(bool preview = false) + { + return ShapeGenerator.GenerateArch( + EditorUtility.newShapePivotLocation, + s_Angle, + s_Radius, + Mathf.Clamp(s_Width, 0.01f, s_Radius), + s_Depth, + s_RadiusSegments + 1, + k_InsideFaces, + k_OutsideFaces, + k_FrontFaces, + k_BackFaces, + s_EndCaps); + } + } + + class Sphere : ShapeBuilder + { + [SettingsKey("ShapeBuilder.Sphere.s_Radius")] + static Pref<float> s_Radius = new Pref<float>("ShapeBuilder.Sphere.s_Radius", 1f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Sphere.s_Subdivisions")] + static Pref<int> s_Subdivisions = new Pref<int>("ShapeBuilder.Sphere.s_Subdivisions", 1, SettingsScope.User); + + public override void OnGUI() + { + s_Radius.value = EditorGUILayout.FloatField("Radius", s_Radius.value); + s_Radius.value = Mathf.Clamp(s_Radius.value, k_MinShapeDimensions.x, k_MaxShapeDimensions.x); + s_Subdivisions.value = (int) EditorGUILayout.Slider("Subdivisions", s_Subdivisions, 0, 5); + } + + public override ProBuilderMesh Build(bool preview = false) + { + // To keep the preview snappy, shared indexes aren't built in IcosahadreonGenerator + var mesh = ShapeGenerator.GenerateIcosahedron( + EditorUtility.newShapePivotLocation, + s_Radius, + s_Subdivisions, + !preview); + + if (!preview) + UVEditing.ProjectFacesBox(mesh, mesh.facesInternal); + + for (int i = 0; i < mesh.facesInternal.Length; i++) + mesh.facesInternal[i].manualUV = true; + + return mesh; + } + } + + class Torus : ShapeBuilder + { + [SettingsKey("ShapeBuilder.Torus.s_Radius")] + static Pref<float> s_Radius = new Pref<float>("ShapeBuilder.Torus.s_Radius", 1f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Torus.s_TubeRadius")] + static Pref<float> s_TubeRadius = new Pref<float>("ShapeBuilder.Torus.s_TubeRadius", .3f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Torus.s_Rows")] + static Pref<int> s_Rows = new Pref<int>("ShapeBuilder.Torus.s_Rows", 16, SettingsScope.User); + [SettingsKey("ShapeBuilder.Torus.s_Columns")] + static Pref<int> s_Columns = new Pref<int>("ShapeBuilder.Torus.s_Columns", 24, SettingsScope.User); + [SettingsKey("ShapeBuilder.Torus.s_Smooth")] + static Pref<bool> s_Smooth = new Pref<bool>("ShapeBuilder.Torus.s_Smooth", true, SettingsScope.User); + [SettingsKey("ShapeBuilder.Torus.s_HorizontalCircumference")] + static Pref<float> s_HorizontalCircumference = new Pref<float>("ShapeBuilder.Torus.s_HorizontalCircumference", 360f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Torus.s_VerticalCircumference")] + static Pref<float> s_VerticalCircumference = new Pref<float>("ShapeBuilder.Torus.s_VerticalCircumference", 360f, SettingsScope.User); + [SettingsKey("ShapeBuilder.Torus.s_InnerOuter")] + static Pref<Vector2> s_InnerOuter = new Pref<Vector2>("ShapeBuilder.Torus.s_InnerOuter", new Vector2(1f, .7f), SettingsScope.User); + [SettingsKey("shape.torusDefinesInnerOuter")] + static Pref<bool> s_UseInnerOuterMethod = new Pref<bool>("shape.torusDefinesInnerOuter", false, SettingsScope.User); + + public override void OnGUI() + { + s_Rows.value = EditorGUILayout.IntSlider( + new GUIContent("Rows", "How many rows the torus will have. More equates to smoother geometry."), + s_Rows, 3, 32); + s_Columns.value = EditorGUILayout.IntSlider( + new GUIContent("Columns", + "How many columns the torus will have. More equates to smoother geometry."), s_Columns, 3, 64); + + s_UseInnerOuterMethod.value = EditorGUILayout.Toggle("Define Inner / Out Radius", s_UseInnerOuterMethod); + + if (!s_UseInnerOuterMethod) + { + s_Radius.value = EditorGUILayout.FloatField("Radius", s_Radius); + s_Radius.value = Mathf.Clamp(s_Radius.value, k_MinShapeDimensions.x, k_MaxShapeDimensions.x); + s_TubeRadius.value = UI.EditorGUIUtility.Slider(new GUIContent("Tube Radius", "How thick the donut will be."), s_TubeRadius, .01f, s_Radius); + s_TubeRadius.value = Mathf.Clamp(s_TubeRadius.value, k_MinShapeDimensions.x, k_MaxShapeDimensions.x); + } + else + { + Vector2 innerOuter = s_InnerOuter; + innerOuter.x = s_Radius; + innerOuter.y = s_Radius - (s_TubeRadius * 2f); + + innerOuter.x = EditorGUILayout.FloatField("Outer Radius", innerOuter.x); + innerOuter.y = UI.EditorGUIUtility.Slider(new GUIContent("Inner Radius", "Distance from center to inside of donut ring."), innerOuter.y, .001f, innerOuter.x); + + s_Radius.value = innerOuter.x; + s_TubeRadius.value = (innerOuter.x - innerOuter.y) * .5f; + s_InnerOuter.value = innerOuter; + } + + s_HorizontalCircumference.value = EditorGUILayout.Slider("Horizontal Circumference", s_HorizontalCircumference, .01f, 360f); + s_VerticalCircumference.value = EditorGUILayout.Slider("Vertical Circumference", s_VerticalCircumference, .01f, 360f); + + s_Smooth.value = EditorGUILayout.Toggle("Smooth", s_Smooth); + } + + public override ProBuilderMesh Build(bool isPreview = false) + { + var mesh = ShapeGenerator.GenerateTorus( + EditorUtility.newShapePivotLocation, + s_Rows, + s_Columns, + s_Radius, + s_TubeRadius, + s_Smooth, + s_HorizontalCircumference, + s_VerticalCircumference, + true); + + UVEditing.ProjectFacesBox(mesh, mesh.facesInternal); + + return mesh; + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ShapeEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ShapeEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..87bb28ba868d2e4a69d11803223c80c75ba1f976 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ShapeEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d47e951042beff44a9c47ab420266ffd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ShortcutManager.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ShortcutManager.cs new file mode 100644 index 0000000000000000000000000000000000000000..ea6d1d1dad81fc8ec7b0c0c7bc12243201b761c9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ShortcutManager.cs @@ -0,0 +1,115 @@ +#if UNITY_2019_1_OR_NEWER +#define SHORTCUT_MANAGER +#endif + +#if !SHORTCUT_MANAGER + +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEditor.SettingsManagement; + +namespace UnityEditor.ProBuilder +{ + static class ShortcutManager + { + const int k_ShortcutLineHeight = 20; + + static Shortcut[] s_Shortcuts; + static int s_SelectedIndex = 0; + static Vector2 s_ShortcutScroll; + + [UserSettingBlock("Shortcuts")] + static void ShortcutSettings(string searchContext) + { + if (!string.IsNullOrEmpty(searchContext)) + return; + + s_Shortcuts = ProBuilderEditor.s_Shortcuts; + + if (s_Shortcuts == null || s_Shortcuts.Length < 1) + ProBuilderEditor.s_Shortcuts.SetValue(s_Shortcuts = Shortcut.DefaultShortcuts().ToArray(), true); + + GUILayout.BeginHorizontal(); + GUILayout.BeginVertical(GUILayout.Width(EditorGUIUtility.labelWidth)); + ShortcutSelectPanel(); + GUILayout.EndVertical(); + GUILayout.BeginVertical(); + ShortcutEditPanel(); + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + + SettingsGUILayout.DoResetContextMenuForLastRect(ProBuilderEditor.s_Shortcuts); + } + + static void ShortcutSelectPanel() + { + GUILayout.Space(4); + GUI.contentColor = Color.white; + + GUIStyle labelStyle = GUIStyle.none; + + if (EditorGUIUtility.isProSkin) + labelStyle.normal.textColor = new Color(1f, 1f, 1f, .8f); + + labelStyle.alignment = TextAnchor.MiddleLeft; + labelStyle.contentOffset = new Vector2(4f, 0f); + + s_ShortcutScroll = EditorGUILayout.BeginScrollView(s_ShortcutScroll, false, true, GUILayout.MinHeight(150)); + + for (int n = 1; n < s_Shortcuts.Length; n++) + { + if (n == s_SelectedIndex) + { + GUI.backgroundColor = new Color(0.23f, .49f, .89f, 1f); + labelStyle.normal.background = EditorGUIUtility.whiteTexture; + Color oc = labelStyle.normal.textColor; + labelStyle.normal.textColor = Color.white; + GUILayout.Box(s_Shortcuts[n].action, labelStyle, GUILayout.MinHeight(k_ShortcutLineHeight), + GUILayout.MaxHeight(k_ShortcutLineHeight)); + labelStyle.normal.background = null; + labelStyle.normal.textColor = oc; + GUI.backgroundColor = Color.white; + } + else + { + if (GUILayout.Button(s_Shortcuts[n].action, labelStyle, GUILayout.MinHeight(k_ShortcutLineHeight), + GUILayout.MaxHeight(k_ShortcutLineHeight))) + { + s_SelectedIndex = n; + } + } + } + + EditorGUILayout.EndScrollView(); + } + + static void ShortcutEditPanel() + { + EditorGUI.BeginChangeCheck(); + s_SelectedIndex = Math.Min(Math.Max(0, s_SelectedIndex), s_Shortcuts.Length - 1); + + GUILayout.Label("Key", EditorStyles.boldLabel); + KeyCode key = s_Shortcuts[s_SelectedIndex].key; + key = (KeyCode)EditorGUILayout.EnumPopup(key, GUILayout.MaxWidth(128)); + s_Shortcuts[s_SelectedIndex].key = key; + + GUILayout.Label("Modifiers", EditorStyles.boldLabel); + + // EnumMaskField returns a bit-mask where the flags correspond to the indexes of the enum, not the enum values, + // so this isn't technically correct. + EventModifiers em = (EventModifiers)s_Shortcuts[s_SelectedIndex].eventModifiers; + s_Shortcuts[s_SelectedIndex].eventModifiers = (EventModifiers)EditorGUILayout.EnumFlagsField(em, GUILayout.MaxWidth(128)); + + GUILayout.Label("Description", EditorStyles.boldLabel); + + GUILayout.Label(s_Shortcuts[s_SelectedIndex].description, EditorStyles.wordWrappedLabel); + if (EditorGUI.EndChangeCheck()) + ProBuilderEditor.s_Shortcuts.ApplyModifiedProperties(); + } + } +} + +#endif diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ShortcutManager.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ShortcutManager.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..dd87e1823c90548f080a890df2805d97e787cce1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ShortcutManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24b30c1daa67ee44b81bb574fa122e05 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SmoothGroupEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SmoothGroupEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..f0e9f50f1fb46629556a8f3d9373465f09a9afde --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SmoothGroupEditor.cs @@ -0,0 +1,725 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder.UI; +using UnityEditor; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Smoothing groups editor window. + /// </summary> + sealed class SmoothGroupEditor : ConfigurableWindow + { + class SmoothGroupData : IDisposable + { + bool m_Disposed; + public bool isVisible; + public Dictionary<int, List<Face>> groups; + public Dictionary<int, Color> groupColors; + public HashSet<int> selected; + public Mesh previewMesh; + public Mesh normalsMesh; + + public SmoothGroupData(ProBuilderMesh pb) + { + groups = new Dictionary<int, List<Face>>(); + selected = new HashSet<int>(); + groupColors = new Dictionary<int, Color>(); + isVisible = true; + + previewMesh = new Mesh() + { + hideFlags = HideFlags.HideAndDontSave, + name = pb.name + "_SmoothingPreview" + }; + + normalsMesh = new Mesh() + { + hideFlags = HideFlags.HideAndDontSave, + name = pb.name + "_SmoothingNormals" + }; + + Rebuild(pb); + } + + public void Rebuild(ProBuilderMesh pb) + { + CacheGroups(pb); + CacheSelected(pb); + RebuildPreviewMesh(pb); + RebuildNormalsMesh(pb); + } + + public void CacheGroups(ProBuilderMesh pb) + { + groups.Clear(); + + foreach (Face face in pb.facesInternal) + { + List<Face> affected; + + if (!groups.TryGetValue(face.smoothingGroup, out affected)) + groups.Add(face.smoothingGroup, new List<Face>() {face}); + else + affected.Add(face); + } + } + + public void CacheSelected(ProBuilderMesh pb) + { + selected.Clear(); + + foreach (Face face in pb.selectedFacesInternal) + selected.Add(face.smoothingGroup); + } + + void RebuildPreviewMesh(ProBuilderMesh pb) + { + List<int> indexes = new List<int>(); + Color32[] colors = new Color32[pb.vertexCount]; + groupColors.Clear(); + + foreach (KeyValuePair<int, List<Face>> smoothGroup in groups) + { + if (smoothGroup.Key > Smoothing.smoothingGroupNone) + { + Color32 color = GetDistinctColor(smoothGroup.Key); + groupColors.Add(smoothGroup.Key, color); + var groupIndexes = smoothGroup.Value.SelectMany(y => y.indexesInternal); + indexes.AddRange(groupIndexes); + foreach (int i in groupIndexes) + colors[i] = color; + } + } + + previewMesh.Clear(); + previewMesh.vertices = pb.positionsInternal; + previewMesh.colors32 = colors; + previewMesh.triangles = indexes.ToArray(); + } + + public void RebuildNormalsMesh(ProBuilderMesh pb) + { + normalsMesh.Clear(); + Vector3[] srcPositions = pb.mesh.vertices; + Vector3[] srcNormals = pb.mesh.normals; + int vertexCount = System.Math.Min(ushort.MaxValue / 2, pb.mesh.vertexCount); + Vector3[] positions = new Vector3[vertexCount * 2]; + Vector4[] tangents = new Vector4[vertexCount * 2]; + int[] indexes = new int[vertexCount * 2]; + for (int i = 0; i < vertexCount; i++) + { + int a = i * 2, b = i * 2 + 1; + + positions[a] = srcPositions[i]; + positions[b] = srcPositions[i]; + tangents[a] = new Vector4(srcNormals[i].x, srcNormals[i].y, srcNormals[i].z, 0f); + tangents[b] = new Vector4(srcNormals[i].x, srcNormals[i].y, srcNormals[i].z, 1f); + indexes[a] = a; + indexes[b] = b; + } + normalsMesh.vertices = positions; + normalsMesh.tangents = tangents; + normalsMesh.subMeshCount = 1; + normalsMesh.SetIndices(indexes, MeshTopology.Lines, 0); + } + + void Dispose(bool disposing) + { + if (!disposing && !m_Disposed) + { + if (previewMesh) + DestroyImmediate(previewMesh); + + if (normalsMesh) + DestroyImmediate(normalsMesh); + + m_Disposed = true; + } + } + + public void Dispose() + { + Dispose(true); + } + } + + static Material s_FaceMaterial = null; + static Material smoothPreviewMaterial + { + get + { + if (s_FaceMaterial == null) + { + s_FaceMaterial = new Material(Shader.Find("Hidden/ProBuilder/SmoothingPreview")); + s_FaceMaterial.hideFlags = HideFlags.HideAndDontSave; + } + + return s_FaceMaterial; + } + } + + static Material s_NormalPreviewMaterial = null; + static Material normalPreviewMaterial + { + get + { + if (s_NormalPreviewMaterial == null) + s_NormalPreviewMaterial = new Material(Shader.Find("Hidden/ProBuilder/NormalPreview")); + return s_NormalPreviewMaterial; + } + } + + static GUIStyle s_GroupButtonStyle = null; + static GUIStyle s_GroupButtonSelectedStyle = null; + static GUIStyle s_GroupButtonInUseStyle = null; + static GUIStyle s_GroupButtonMixedSelectionStyle = null; + static GUIStyle s_ColorKeyStyle = null; + static GUIStyle s_WordWrappedRichText = null; + + static GUIStyle groupButtonStyle + { + get + { + if (s_GroupButtonStyle == null) + { + s_GroupButtonStyle = new GUIStyle(GUI.skin.GetStyle("Button")); + s_GroupButtonStyle.normal.background = IconUtility.GetIcon("Toolbar/Background/RoundedRect_Normal"); + s_GroupButtonStyle.hover.background = IconUtility.GetIcon("Toolbar/Background/RoundedRect_Hover"); + s_GroupButtonStyle.active.background = IconUtility.GetIcon("Toolbar/Background/RoundedRect_Pressed"); + Font asap = FileUtility.LoadInternalAsset<Font>("About/Font/Asap-Regular.otf"); + if (asap != null) + { + s_GroupButtonStyle.font = asap; + s_GroupButtonStyle.fontSize = 12; + s_GroupButtonStyle.padding = new RectOffset(2, 2, 2, 2); + } + s_GroupButtonStyle.border = new RectOffset(3, 3, 3, 3); + s_GroupButtonStyle.margin = new RectOffset(4, 4, 4, 6); + s_GroupButtonStyle.alignment = TextAnchor.MiddleCenter; + s_GroupButtonStyle.fixedWidth = IconWidth; + s_GroupButtonStyle.fixedHeight = IconHeight; + + // todo Move text & background colors to a global settings file + s_GroupButtonStyle.normal.textColor = EditorGUIUtility.isProSkin ? new Color(.9f, .9f, .9f) : new Color(.3f, .3f, .3f); + s_GroupButtonStyle.hover.textColor = EditorGUIUtility.isProSkin ? new Color(.9f, .9f, .9f) : new Color(.3f, .3f, .3f); + s_GroupButtonStyle.active.textColor = EditorGUIUtility.isProSkin ? new Color(.9f, .9f, .9f) : new Color(.3f, .3f, .3f); + } + return s_GroupButtonStyle; + } + } + + static GUIStyle groupButtonSelectedStyle + { + get + { + if (s_GroupButtonSelectedStyle == null) + { + s_GroupButtonSelectedStyle = new GUIStyle(groupButtonStyle); + s_GroupButtonSelectedStyle.normal.background = + IconUtility.GetIcon("Toolbar/Background/RoundedRect_Normal_Blue"); + s_GroupButtonSelectedStyle.hover.background = + IconUtility.GetIcon("Toolbar/Background/RoundedRect_Hover_Blue"); + s_GroupButtonSelectedStyle.active.background = + IconUtility.GetIcon("Toolbar/Background/RoundedRect_Pressed_Blue"); + } + + return s_GroupButtonSelectedStyle; + } + } + + static GUIStyle groupButtonInUseStyle + { + get + { + if (s_GroupButtonInUseStyle == null) + { + s_GroupButtonInUseStyle = new GUIStyle(groupButtonStyle); + s_GroupButtonInUseStyle.normal.background = + IconUtility.GetIcon("Toolbar/Background/RoundedRect_Normal_BlueSteel"); + s_GroupButtonInUseStyle.hover.background = + IconUtility.GetIcon("Toolbar/Background/RoundedRect_Hover_BlueSteel"); + s_GroupButtonInUseStyle.active.background = + IconUtility.GetIcon("Toolbar/Background/RoundedRect_Pressed_BlueSteel"); + } + + return s_GroupButtonInUseStyle; + } + } + + static GUIStyle groupButtonMixedSelectionStyle + { + get + { + if (s_GroupButtonMixedSelectionStyle == null) + { + s_GroupButtonMixedSelectionStyle = new GUIStyle(groupButtonStyle); + s_GroupButtonMixedSelectionStyle.normal.background = + IconUtility.GetIcon("Toolbar/Background/RoundedRect_Normal_Orange"); + s_GroupButtonMixedSelectionStyle.hover.background = + IconUtility.GetIcon("Toolbar/Background/RoundedRect_Hover_Orange"); + s_GroupButtonMixedSelectionStyle.active.background = + IconUtility.GetIcon("Toolbar/Background/RoundedRect_Pressed_Orange"); + } + + return s_GroupButtonMixedSelectionStyle; + } + } + + static GUIStyle colorKeyStyle + { + get + { + if (s_ColorKeyStyle == null) + { + s_ColorKeyStyle = new GUIStyle(groupButtonStyle); + s_ColorKeyStyle.fixedWidth = IconWidth; + s_ColorKeyStyle.fixedHeight = 3; + s_ColorKeyStyle.padding = new RectOffset(4, 4, 0, 4); + s_ColorKeyStyle.normal.background = EditorGUIUtility.whiteTexture; + } + return s_ColorKeyStyle; + } + } + + static GUIStyle wordWrappedRichText + { + get + { + if (s_WordWrappedRichText == null) + { + s_WordWrappedRichText = new GUIStyle(EditorStyles.wordWrappedLabel); + s_WordWrappedRichText.richText = true; + s_WordWrappedRichText.alignment = TextAnchor.LowerLeft; + } + return s_WordWrappedRichText; + } + } + + const int IconWidth = 24; + const int IconHeight = 24; + + GUIContent m_GroupKeyContent = + new GUIContent("21", "Smoothing Group.\n\nRight Click to Select all faces matching this group."); + Vector2 m_Scroll = Vector2.zero; + GUIContent m_HelpIcon = null; + GUIContent m_BreakSmoothingContent = null; + GUIContent m_SelectFacesWithSmoothGroupSelectionContent = null; + Dictionary<ProBuilderMesh, SmoothGroupData> m_SmoothGroups = new Dictionary<ProBuilderMesh, SmoothGroupData>(); + + static bool s_IsMovingVertices = false; + + static Pref<bool> s_ShowPreview = new Pref<bool>("smoothing.showPreview", false); + static Pref<bool> s_ShowNormals = new Pref<bool>("smoothing.showNormals", false); + static Pref<bool> s_ShowHelp = new Pref<bool>("smoothing.showHelp", false); + static Pref<float> s_NormalsSize = new Pref<float>("smoothing.NormalsSize", 0.1f); + static Pref<float> s_PreviewOpacity = new Pref<float>("smoothing.PreviewOpacity", .5f); + static Pref<bool> s_PreviewDither = new Pref<bool>("smoothing.previewDither", false); + static Pref<bool> s_ShowSettings = new Pref<bool>("smoothing.showSettings", false); + + public static void MenuOpenSmoothGroupEditor() + { + GetWindow<SmoothGroupEditor>("Smooth Group Editor"); + } + + void OnEnable() + { + ProBuilderEditor.selectMode = SelectMode.Face; + +#if UNITY_2019_1_OR_NEWER + SceneView.duringSceneGui += OnSceneGUI; +#else + SceneView.onSceneGUIDelegate += OnSceneGUI; +#endif + MeshSelection.objectSelectionChanged += OnSelectionChanged; + Undo.undoRedoPerformed += OnSelectionChanged; + ProBuilderMesh.elementSelectionChanged += OnElementSelectionChanged; + VertexManipulationTool.beforeMeshModification += OnBeginVertexMovement; + VertexManipulationTool.afterMeshModification += OnFinishVertexMovement; + autoRepaintOnSceneChange = true; + m_HelpIcon = new GUIContent(IconUtility.GetIcon("Toolbar/Help"), "Open Documentation"); + m_BreakSmoothingContent = new GUIContent(IconUtility.GetIcon("Toolbar/Face_BreakSmoothing"), + "Clear the selected faces of their smoothing groups"); + m_SelectFacesWithSmoothGroupSelectionContent = new GUIContent(IconUtility.GetIcon("Toolbar/Selection_SelectBySmoothingGroup"), + "Expand the face selection by selecting all faces matching the currently selected face groups"); + MeshSelection.OnObjectSelectionChanged(); + OnSelectionChanged(); + } + + void OnDisable() + { +#if UNITY_2019_1_OR_NEWER + SceneView.duringSceneGui -= OnSceneGUI; +#else + SceneView.onSceneGUIDelegate -= OnSceneGUI; +#endif + MeshSelection.objectSelectionChanged -= OnSelectionChanged; + Undo.undoRedoPerformed -= OnSelectionChanged; + ProBuilderMesh.elementSelectionChanged -= OnElementSelectionChanged; + ClearSmoothGroupData(); + } + + void OnDestroy() + { + ClearSmoothGroupData(); + } + + void ClearSmoothGroupData() + { + foreach (var v in m_SmoothGroups) + v.Value.Dispose(); + m_SmoothGroups.Clear(); + } + + void OnBeginVertexMovement(IEnumerable<ProBuilderMesh> selection) + { + s_IsMovingVertices = true; + } + + void OnFinishVertexMovement(IEnumerable<ProBuilderMesh> selection) + { + s_IsMovingVertices = false; + OnSelectionChanged(); + } + + void OnSelectionChanged() + { + ClearSmoothGroupData(); + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + m_SmoothGroups.Add(pb, new SmoothGroupData(pb)); + + this.Repaint(); + } + + void OnElementSelectionChanged(ProBuilderMesh pb) + { + SmoothGroupData data; + + if (!m_SmoothGroups.TryGetValue(pb, out data)) + m_SmoothGroups.Add(pb, data = new SmoothGroupData(pb)); + else + data.CacheSelected(pb); + } + + void OnGUI() + { + DoContextMenu(); + + GUILayout.BeginHorizontal(EditorStyles.toolbar); + + EditorGUI.BeginChangeCheck(); + s_ShowSettings.value = GUILayout.Toggle(s_ShowSettings.value, "Settings", EditorStyles.toolbarButton); + s_ShowPreview.value = GUILayout.Toggle(s_ShowPreview.value, "Preview", EditorStyles.toolbarButton); + s_ShowNormals.value = GUILayout.Toggle(s_ShowNormals.value, "Normals", EditorStyles.toolbarButton); + if(EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + + if (s_ShowNormals) + { + EditorGUI.BeginChangeCheck(); + + s_NormalsSize.value = GUILayout.HorizontalSlider( + s_NormalsSize, + .001f, + 1f, + GUILayout.MinWidth(30f), + GUILayout.MaxWidth(100f)); + + if (EditorGUI.EndChangeCheck()) + { + ProBuilderSettings.Save(); + + foreach (var kvp in m_SmoothGroups) + kvp.Value.RebuildNormalsMesh(kvp.Key); + SceneView.RepaintAll(); + } + } + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button(m_HelpIcon, UI.EditorStyles.toolbarHelpIcon)) + s_ShowHelp.SetValue(!s_ShowHelp, true); + GUILayout.EndHorizontal(); + + if (s_ShowSettings) + { + GUILayout.BeginVertical(UI.EditorStyles.settingsGroup); + + EditorGUIUtility.labelWidth = 100; + + EditorGUI.BeginChangeCheck(); + + s_PreviewOpacity.value = EditorGUILayout.Slider("Preview Opacity", s_PreviewOpacity, .001f, 1f); + s_PreviewDither.value = EditorGUILayout.Toggle("Preview Dither", s_PreviewDither); + + if (EditorGUI.EndChangeCheck()) + { + ProBuilderSettings.Save(); + smoothPreviewMaterial.SetFloat("_Opacity", s_PreviewOpacity); + smoothPreviewMaterial.SetFloat("_Dither", s_PreviewDither ? 1f : 0f); + SceneView.RepaintAll(); + } + + EditorGUIUtility.labelWidth = 0; + + GUILayout.EndVertical(); + } + + m_Scroll = EditorGUILayout.BeginScrollView(m_Scroll); + + if (s_ShowHelp) + { + GUILayout.BeginVertical(UI.EditorStyles.settingsGroup); + + GUILayout.Label("Create and Clear Smoothing Groups", EditorStyles.boldLabel); + + GUILayout.Label("Adjacent faces with the same smoothing group will appear to have a soft adjoining edge.", wordWrappedRichText); + GUILayout.Space(2); + GUILayout.Label("<b>To smooth</b> a selected group of faces, click one of the Smooth Group buttons.", wordWrappedRichText); + GUILayout.Label("<b>To clear</b> selected faces of their smooth group, click the [Break] icon.", wordWrappedRichText); + GUILayout.Label("<b>To select</b> all faces in a group, Right+Click or Alt+Click a smooth group button.", wordWrappedRichText); + GUILayout.Space(2); + + global::UnityEditor.ProBuilder.UI.EditorGUILayout.BeginRow(); + GUILayout.Button("1", groupButtonStyle); + GUILayout.Label("An unused smooth group", wordWrappedRichText); + global::UnityEditor.ProBuilder.UI.EditorGUILayout.EndRow(); + + global::UnityEditor.ProBuilder.UI.EditorGUILayout.BeginRow(); + GUILayout.Button("1", groupButtonInUseStyle); + GUILayout.Label("A smooth group that is in use, but not in the current selection", wordWrappedRichText); + global::UnityEditor.ProBuilder.UI.EditorGUILayout.EndRow(); + + global::UnityEditor.ProBuilder.UI.EditorGUILayout.BeginRow(); + GUILayout.Button("1", groupButtonSelectedStyle); + GUILayout.Label("A smooth group that is currently selected", wordWrappedRichText); + global::UnityEditor.ProBuilder.UI.EditorGUILayout.EndRow(); + + global::UnityEditor.ProBuilder.UI.EditorGUILayout.BeginRow(); + GUILayout.Button("1", groupButtonMixedSelectionStyle); + GUI.backgroundColor = Color.white; + GUILayout.Label("A smooth group is selected, but the selection also contains non-grouped faces", wordWrappedRichText); + global::UnityEditor.ProBuilder.UI.EditorGUILayout.EndRow(); + + if (GUILayout.Button("Open Documentation")) + Application.OpenURL("https://docs.unity3d.com/Packages/com.unity.probuilder@latest/index.html?subfolder=/manual/workflow-edit-smoothing.html"); + + GUILayout.EndVertical(); + } + + // border style is 4 margin, 4 pad, 1px content. inner is accounted for by btn size + btn margin. + float area = (position.width - 10); + float margin = Mathf.Max(groupButtonStyle.margin.left, groupButtonStyle.margin.right); + int columns = (int)(area / (groupButtonStyle.CalcSize(m_GroupKeyContent).x + margin)) - 1; + + if (m_SmoothGroups.Count < 1) + { + GUILayout.BeginVertical(); + GUILayout.FlexibleSpace(); + GUILayout.Label("Select a ProBuilder Mesh", UI.EditorGUIUtility.CenteredGreyMiniLabel); + GUILayout.FlexibleSpace(); + GUILayout.EndVertical(); + } + else + { + foreach (var mesh in m_SmoothGroups) + { + ProBuilderMesh pb = mesh.Key; + SmoothGroupData data = mesh.Value; + + GUILayout.BeginVertical(UI.EditorStyles.settingsGroup); + + GUILayout.BeginHorizontal(); + + if (GUILayout.Button(pb.name, UI.EditorStyles.headerLabel)) + data.isVisible = !data.isVisible; + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button(m_SelectFacesWithSmoothGroupSelectionContent, + UI.EditorStyles.buttonStyle)) + SelectGroups(pb, new HashSet<int>(pb.selectedFacesInternal.Select(x => x.smoothingGroup))); + + if (GUILayout.Button(m_BreakSmoothingContent, + UI.EditorStyles.buttonStyle)) + SetGroup(pb, Smoothing.smoothingGroupNone); + + GUILayout.EndHorizontal(); + + bool isMixedSelection = data.selected.Contains(Smoothing.smoothingGroupNone); + + if (data.isVisible) + { + int column = 0; + bool anySmoothGroups = data.groups.Any(x => x.Key > Smoothing.smoothingGroupNone); + + GUILayout.BeginHorizontal(); + + for (int i = 1; i < Smoothing.smoothRangeMax; i++) + { + bool isSelected = data.selected.Contains(i); + + GUIStyle stateStyle = isSelected ? + (isMixedSelection ? groupButtonMixedSelectionStyle : groupButtonSelectedStyle) : + data.groups.ContainsKey(i) ? groupButtonInUseStyle : groupButtonStyle; + + if (s_ShowPreview && anySmoothGroups) + GUILayout.BeginVertical(GUILayout.MaxWidth(IconWidth)); + + m_GroupKeyContent.text = i.ToString(); + + if (GUILayout.Button(m_GroupKeyContent, stateStyle)) + { + // if right click or alt click select the faces instead of setting a group + if ((Event.current.modifiers & EventModifiers.Alt) == EventModifiers.Alt || + Event.current.button != 0) + SelectGroups(pb, new HashSet<int>() { i }); + else + SetGroup(pb, i); + } + + if (s_ShowPreview && anySmoothGroups) + { + GUI.backgroundColor = data.groupColors.ContainsKey(i) ? data.groupColors[i] : Color.clear; + GUILayout.Label("", colorKeyStyle); + GUILayout.EndVertical(); + GUI.backgroundColor = Color.white; + } + + if (++column > columns) + { + column = 0; + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + } + } + + GUILayout.EndHorizontal(); + } + + GUILayout.EndVertical(); + } + } + + EditorGUILayout.EndScrollView(); + + // This isn't great, but we need hover previews to work + if (mouseOverWindow == this) + Repaint(); + } + + void OnSceneGUI(SceneView view) + { + if (m_SmoothGroups.Count > 1) + { + using (new HandleGUI()) + { + foreach (var kvp in m_SmoothGroups) + Handles.Label(kvp.Key.transform.position, kvp.Key.name, EditorStyles.boldLabel); + } + } + + Event evt = Event.current; + + if (!s_IsMovingVertices && evt.type == EventType.Repaint) + { + foreach (var kvp in m_SmoothGroups) + { + if (s_ShowPreview) + { + Mesh m = kvp.Value.previewMesh; + + if (m != null) + { + smoothPreviewMaterial.SetPass(0); + Graphics.DrawMeshNow(m, kvp.Key.transform.localToWorldMatrix); + } + } + + if (s_ShowNormals) + { + Mesh m = kvp.Value.normalsMesh; + + if (m != null) + { + Transform trs = kvp.Key.transform; + normalPreviewMaterial.SetFloat("_Scale", s_NormalsSize * HandleUtility.GetHandleSize(trs.GetComponent<MeshRenderer>().bounds.center)); + normalPreviewMaterial.SetPass(0); + Graphics.DrawMeshNow(m, trs.localToWorldMatrix); + } + } + } + } + } + + static void SelectGroups(ProBuilderMesh pb, HashSet<int> groups) + { + UndoUtility.RecordSelection(pb, "Select with Smoothing Group"); + + if ((Event.current.modifiers & EventModifiers.Shift) == EventModifiers.Shift || + (Event.current.modifiers & EventModifiers.Control) == EventModifiers.Control) + pb.SetSelectedFaces(pb.facesInternal.Where(x => groups.Contains(x.smoothingGroup) || pb.selectedFacesInternal.Contains(x))); + else + pb.SetSelectedFaces(pb.facesInternal.Where(x => groups.Contains(x.smoothingGroup))); + ProBuilderEditor.Refresh(); + } + + void SetGroup(ProBuilderMesh pb, int index) + { + UndoUtility.RecordObject(pb, "Set Smoothing Group"); + + foreach (Face face in pb.selectedFaceCount < 1 ? pb.facesInternal : pb.selectedFacesInternal) + face.smoothingGroup = index; + + // todo pb.Rebuild + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + + SmoothGroupData data; + + if (!m_SmoothGroups.TryGetValue(pb, out data)) + m_SmoothGroups.Add(pb, new SmoothGroupData(pb)); + else + data.Rebuild(pb); + + ProBuilderEditor.Refresh(); + } + + static Color32 GetDistinctColor(int index) + { + return s_KellysMaxContrastSet[index % s_KellysMaxContrastSet.Length]; + } + + static readonly Color32[] s_KellysMaxContrastSet = new Color32[] + { + new Color32(230, 25, 75, 255), // Red + new Color32(60, 180, 75, 255), // Green + new Color32(255, 225, 25, 255), // Yellow + new Color32(0, 130, 200, 255), // Blue + new Color32(245, 130, 48, 255), // Orange + new Color32(145, 30, 180, 255), // Purple + new Color32(70, 240, 240, 255), // Cyan + new Color32(240, 50, 230, 255), // Magenta + new Color32(210, 245, 60, 255), // Lime + new Color32(250, 190, 190, 255), // Pink + new Color32(0, 128, 128, 255), // Teal + new Color32(230, 190, 255, 255), // Lavender + new Color32(170, 110, 40, 255), // Brown + new Color32(255, 250, 200, 255), // Beige + new Color32(128, 0, 0, 255), // Maroon + new Color32(170, 255, 195, 255), // Mint + new Color32(128, 128, 0, 255), // Olive + new Color32(255, 215, 180, 255), // Coral + new Color32(0, 0, 128, 255), // Navy + new Color32(128, 128, 128, 255), // Grey + new Color32(255, 255, 255, 255), // White + new Color32(0, 0, 0, 255), // Black + }; + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SmoothGroupEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SmoothGroupEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b96647cfd18aa2cf4746f54a0d180244255b427d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/SmoothGroupEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1fa9c1c880d9b724f978f610d18852e7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/StripProBuilderScripts.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/StripProBuilderScripts.cs new file mode 100644 index 0000000000000000000000000000000000000000..54098fd426d04c64e0957dbc8c52b0f29c7e2356 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/StripProBuilderScripts.cs @@ -0,0 +1,129 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; +using EditorUtility = UnityEditor.ProBuilder.EditorUtility; + +namespace UnityEditor.ProBuilder.Actions +{ + /// <summary> + /// Menu items for stripping ProBuilder scripts from GameObjects. + /// </summary> + /// @TODO MOVE TO ACTIONS + sealed class StripProBuilderScripts : Editor + { + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Actions/Strip All ProBuilder Scripts in Scene")] + public static void StripAllScenes() + { + if (!UnityEditor.EditorUtility.DisplayDialog("Strip ProBuilder Scripts", "This will remove all ProBuilder scripts in the scene. You will no longer be able to edit these objects. There is no undo, please exercise caution!\n\nAre you sure you want to do this?", "Okay", "Cancel")) + return; + + ProBuilderMesh[] all = (ProBuilderMesh[])Resources.FindObjectsOfTypeAll(typeof(ProBuilderMesh)); + + Strip(all); + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Actions/Strip ProBuilder Scripts in Selection", true, 0)] + public static bool VerifyStripSelection() + { + return InternalUtility.GetComponents<ProBuilderMesh>(Selection.transforms).Length > 0; + } + + [MenuItem("Tools/" + PreferenceKeys.pluginTitle + "/Actions/Strip ProBuilder Scripts in Selection")] + public static void StripAllSelected() + { + if (!UnityEditor.EditorUtility.DisplayDialog("Strip ProBuilder Scripts", "This will remove all ProBuilder scripts on the selected objects. You will no longer be able to edit these objects. There is no undo, please exercise caution!\n\nAre you sure you want to do this?", "Okay", "Cancel")) + return; + + foreach (Transform t in Selection.transforms) + { + foreach (ProBuilderMesh pb in t.GetComponentsInChildren<ProBuilderMesh>(true)) + DoStrip(pb); + } + MeshSelection.OnObjectSelectionChanged(); + } + + public static void Strip(ProBuilderMesh[] all) + { + for (int i = 0; i < all.Length; i++) + { + if (UnityEditor.EditorUtility.DisplayCancelableProgressBar( + "Stripping ProBuilder Scripts", + "Working over " + all[i].id + ".", + ((float)i / all.Length))) + break; + + DoStrip(all[i]); + } + + UnityEditor.EditorUtility.ClearProgressBar(); + UnityEditor.EditorUtility.DisplayDialog("Strip ProBuilder Scripts", "Successfully stripped out all ProBuilder components.", "Okay"); + + ProBuilderEditor.Refresh(); + MeshSelection.OnObjectSelectionChanged(); + } + + public static void DoStrip(ProBuilderMesh pb) + { + try + { + GameObject go = pb.gameObject; + + Renderer ren = go.GetComponent<Renderer>(); + + if (ren != null) + EditorUtility.SetSelectionRenderState(ren, EditorSelectedRenderState.Highlight | EditorSelectedRenderState.Wireframe); + + if (EditorUtility.IsPrefabAsset(go)) + return; + + EditorUtility.SynchronizeWithMeshFilter(pb); + + + if (go.TryGetComponent(out PolyShape polyShape)) + DestroyImmediate(polyShape); + + if (go.TryGetComponent(out BezierShape bezierShape)) + DestroyImmediate(bezierShape); + + if (pb.mesh == null) + { + DestroyImmediate(pb); + + if (go.TryGetComponent(out Entity entity)) + DestroyImmediate(entity); + + return; + } + + string cachedMeshPath; + Mesh cachedMesh; + + // if meshes are assets and the mesh cache is valid don't duplicate the mesh to an instance. + if (Experimental.meshesAreAssets && EditorMeshUtility.GetCachedMesh(pb, out cachedMeshPath, out cachedMesh)) + { + pb.preserveMeshAssetOnDestroy = true; + DestroyImmediate(pb); + if (go.TryGetComponent(out Entity entity)) + DestroyImmediate(entity); + } + else + { + Mesh m = UnityEngine.ProBuilder.MeshUtility.DeepCopy(pb.mesh); + + DestroyImmediate(pb); + + if (go.TryGetComponent(out Entity entity)) + DestroyImmediate(entity); + + go.GetComponent<MeshFilter>().sharedMesh = m; + if (go.TryGetComponent(out MeshCollider meshCollider)) + meshCollider.sharedMesh = m; + } + } + catch {} + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/StripProBuilderScripts.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/StripProBuilderScripts.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2d8ce45354a4a386b13e2892526badae6f3fa099 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/StripProBuilderScripts.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c114c138e13b8248ae37c8cf12c6979 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureMoveTool.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureMoveTool.cs new file mode 100644 index 0000000000000000000000000000000000000000..eb50643f0fa2903ed74a9515bf33be112516a43f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureMoveTool.cs @@ -0,0 +1,136 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder +{ + class TextureMoveTool : TextureTool + { + static readonly float k_Vector3Magnitude = Vector3.one.magnitude; + + Vector3 m_Position = Vector3.zero; + + protected class TranslateTextureSelection : MeshAndTextures + { + SimpleTuple<Face, Vector2>[] m_FaceAndScale; + + public SimpleTuple<Face, Vector2>[] faceAndScale + { + get { return m_FaceAndScale; } + } + + public TranslateTextureSelection(ProBuilderMesh mesh, PivotPoint pivot) + : base(mesh, pivot) + { + var faces = mesh.faces; + + m_FaceAndScale = mesh.selectedFaceIndexes.Select(x => + new SimpleTuple<Face, Vector2>(faces[x], UVEditing.GetUVTransform(mesh, faces[x]).scale)) + .ToArray(); + } + } + + internal override MeshAndElementSelection GetElementSelection(ProBuilderMesh mesh, PivotPoint pivot) + { + return new TranslateTextureSelection(mesh, pivot); + } + + protected override void DoTool(Vector3 handlePosition, Quaternion handleRotation) + { + if (!isEditing) + m_Position = Vector3.zero; + + EditorHandleUtility.PushMatrix(); + + Handles.matrix = Matrix4x4.TRS(handlePosition, handleRotation, Vector3.one); + + EditorGUI.BeginChangeCheck(); + + Handles.color = Color.blue; + + m_Position = Handles.Slider2D(m_Position, + Vector3.forward, + Vector3.right, + Vector3.up, + HandleUtility.GetHandleSize(m_Position) * .2f, + Handles.RectangleHandleCap, + 0f, + false); + + Handles.color = Color.green; + + m_Position = Handles.Slider(m_Position, Vector3.up); + + Handles.color = Color.red; + + m_Position = Handles.Slider(m_Position, Vector3.right); + + Handles.color = Color.white; + + if (EditorGUI.EndChangeCheck()) + { + if (!isEditing) + BeginEdit("Translate Textures"); + + if (relativeSnapEnabled) + { + m_Position.x = ProBuilderSnapping.SnapValue(m_Position.x, ProBuilderSnapSettings.incrementalSnapMoveValue.x); + m_Position.y = ProBuilderSnapping.SnapValue(m_Position.y, ProBuilderSnapSettings.incrementalSnapMoveValue.y); + } + else if (worldSnapEnabled) + { + m_Position.x = ProBuilderSnapping.SnapValue(m_Position.x, snapValue.x); + m_Position.y = ProBuilderSnapping.SnapValue(m_Position.y, snapValue.y); + } + + // invert `y` because to users it's confusing that "up" in UV space visually moves the texture down + var delta = new Vector4(m_Position.x, -m_Position.y, 0f, 0f); + + foreach (var value in elementSelection) + { + var selection = value as TranslateTextureSelection; + + if (selection == null) + continue; + + // Account for object scale + delta *= k_Vector3Magnitude / selection.mesh.transform.lossyScale.magnitude; + + var origins = selection.origins; + var positions = selection.textures; + + // Translating faces is treated as a special case because we want the textures in scene to visually + // match the movement of the translation handle. When UVs are scaled, they have the appearance of + // moving faster or slower (even though they are translating the correct distances). To avoid this, + // we cache the UV scale of each face and modify the translation delta accordingly. This isn't perfect, + // as it will not be able to find the scale for sheared or otherwise distorted face UVs. However, for + // most cases it maps quite well. + if (ProBuilderEditor.selectMode == SelectMode.TextureFace) + { + foreach (var face in selection.faceAndScale) + { + var faceDelta = new Vector4(delta.x / face.item2.x, delta.y / face.item2.y, 0f, 0f); + + foreach (var index in face.item1.distinctIndexes) + positions[index] = origins[index] + faceDelta; + } + } + else + { + foreach (var group in value.elementGroups) + { + foreach (var index in group.indices) + positions[index] = origins[index] + delta; + } + } + + selection.mesh.mesh.SetUVs(k_TextureChannel, positions); + } + } + + EditorHandleUtility.PopMatrix(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureMoveTool.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureMoveTool.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..0e63e5018e568d5a88772b8edacdb206df2f9610 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureMoveTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ebc93f048090074f80a100718d5a585 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureRotateTool.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureRotateTool.cs new file mode 100644 index 0000000000000000000000000000000000000000..1509d983372d9ba102eaea19f154b83c2b7847e7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureRotateTool.cs @@ -0,0 +1,64 @@ +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + class TextureRotateTool : TextureTool + { + float m_Rotation; + Vector3 m_Euler; + Quaternion m_Quaternion; + + protected override void DoTool(Vector3 handlePosition, Quaternion handleRotation) + { + if (!isEditing) + m_Rotation = 0f; + + EditorGUI.BeginChangeCheck(); + + var size = HandleUtility.GetHandleSize(handlePosition); + + EditorHandleUtility.PushMatrix(); + + Handles.matrix = Matrix4x4.TRS(handlePosition, handleRotation, Vector3.one); + + Handles.color = Color.blue; + m_Euler.z = m_Rotation; + m_Quaternion = Quaternion.Euler(m_Euler); + m_Quaternion = Handles.Disc(m_Quaternion, Vector3.zero, Vector3.forward, size, relativeSnapEnabled, ProBuilderSnapSettings.incrementalSnapRotateValue); + m_Euler = m_Quaternion.eulerAngles; + m_Rotation = m_Euler.z; + + EditorHandleUtility.PopMatrix(); + + if (EditorGUI.EndChangeCheck()) + { + if (!isEditing) + BeginEdit("Rotate Textures"); + + if (relativeSnapEnabled) + m_Rotation = ProBuilderSnapping.SnapValue(m_Rotation, ProBuilderSnapSettings.incrementalSnapRotateValue); + + foreach (var mesh in elementSelection) + { + if (!(mesh is MeshAndTextures)) + continue; + var mat = (MeshAndTextures) mesh; + + var origins = mat.origins; + var positions = mat.textures; + + foreach (var group in mat.elementGroups) + { + foreach (var index in group.indices) + positions[index] = mat.postApplyMatrix.MultiplyPoint( + Math.RotateAroundPoint( + mat.preApplyMatrix.MultiplyPoint3x4(origins[index]), Vector2.zero, -m_Rotation)); + } + + mesh.mesh.mesh.SetUVs(k_TextureChannel, positions); + } + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureRotateTool.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureRotateTool.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a9d6d37fbfa9a24118c46ee2790dbc6c1be4c371 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureRotateTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 85900fb5729b6db42a6e417ad0d4c0f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureScaleTool.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureScaleTool.cs new file mode 100644 index 0000000000000000000000000000000000000000..ed43d1f5cb754ba6c42b57965530348f71260c02 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureScaleTool.cs @@ -0,0 +1,73 @@ +using UnityEngine; + +namespace UnityEditor.ProBuilder +{ + class TextureScaleTool : TextureTool + { + Vector2 m_Scale; + float m_UniformScale; + + protected override void DoTool(Vector3 handlePosition, Quaternion handleRotation) + { + if (!isEditing) + { + m_Scale.x = 1f; + m_Scale.y = 1f; + m_UniformScale = 1f; + } + + EditorGUI.BeginChangeCheck(); + + var size = HandleUtility.GetHandleSize(handlePosition); + + EditorHandleUtility.PushMatrix(); + + Handles.matrix = Matrix4x4.TRS(handlePosition, handleRotation, Vector3.one); + + var snap = relativeSnapEnabled + ? Vector3.one * ProBuilderSnapSettings.incrementalSnapScaleValue + : worldSnapEnabled ? snapValue : Vector3.zero; + + Handles.color = Color.red; + m_Scale.x = Handles.ScaleSlider(m_Scale.x, Vector3.zero, Vector3.right, Quaternion.identity, size, snap.x); + + Handles.color = Color.green; + m_Scale.y = Handles.ScaleSlider(m_Scale.y, Vector3.zero, Vector3.up, Quaternion.identity, size, snap.y); + + Handles.color = Color.blue; + m_UniformScale = Handles.ScaleValueHandle(m_UniformScale, Vector3.zero, Quaternion.identity, size, Handles.CubeHandleCap, snap.x); + + EditorHandleUtility.PopMatrix(); + + if (EditorGUI.EndChangeCheck()) + { + if (!isEditing) + BeginEdit("Scale Textures"); + + var delta = m_Scale * m_UniformScale; + + delta.x = 1f / delta.x; + delta.y = 1f / delta.y; + + foreach (var mesh in elementSelection) + { + if (!(mesh is MeshAndTextures)) + continue; + + var mat = (MeshAndTextures) mesh; + var origins = mat.origins; + var positions = mat.textures; + + foreach (var group in mesh.elementGroups) + { + foreach (var index in group.indices) + positions[index] = mat.postApplyMatrix.MultiplyPoint( + Vector2.Scale(mat.preApplyMatrix.MultiplyPoint3x4(origins[index]), delta)); + } + + mesh.mesh.mesh.SetUVs(k_TextureChannel, positions); + } + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureScaleTool.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureScaleTool.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..583b85f9fc51d9ec92d7826613454c6586ecc8a2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureScaleTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ffea9638e10c9644aab23c2652f86279 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureTool.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureTool.cs new file mode 100644 index 0000000000000000000000000000000000000000..9dfe0fdc451d9ae4bda4f30104751d9b639918dd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureTool.cs @@ -0,0 +1,114 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder +{ + abstract class TextureTool : VertexManipulationTool + { + const bool k_CollectCoincidentVertices = false; + protected const int k_TextureChannel = 0; + + protected class MeshAndTextures : MeshAndElementSelection + { + List<Vector4> m_Origins; + List<Vector4> m_Textures; + + Matrix4x4 m_PreApplyMatrix; + Matrix4x4 m_PostApplyMatrix; + + public Matrix4x4 preApplyMatrix + { + get + { + return m_PreApplyMatrix; + } + + private set + { + m_PreApplyMatrix = value; + m_PostApplyMatrix = value.inverse; + } + } + + public Matrix4x4 postApplyMatrix + { + get + { + return m_PostApplyMatrix; + } + + private set + { + m_PostApplyMatrix = value; + m_PreApplyMatrix = value.inverse; + } + } + + public List<Vector4> textures + { + get { return m_Textures; } + } + + public List<Vector4> origins + { + get { return m_Origins; } + } + + public MeshAndTextures(ProBuilderMesh mesh, PivotPoint pivot) : base(mesh, k_CollectCoincidentVertices) + { + m_Textures = new List<Vector4>(); + mesh.GetUVs(k_TextureChannel, m_Textures); + m_Origins = new List<Vector4>(m_Textures); + preApplyMatrix = Matrix4x4.Translate(-Bounds2D.Center(m_Origins, mesh.selectedIndexesInternal)); + } + } + + protected override void OnToolEngaged() + { + MeshSelection.InvalidateElementSelection(); + } + + protected override void OnToolDisengaged() + { + var isFaceMode = ProBuilderEditor.selectMode.ContainsFlag(SelectMode.TextureFace | SelectMode.Face); + + foreach (var mesh in elementSelection) + { + if (!(mesh is MeshAndTextures)) + continue; + + var textures = ((MeshAndTextures)mesh).textures; + mesh.mesh.SetUVs(k_TextureChannel, textures); + + if (isFaceMode) + { + UVEditing.SetAutoAndAlignUnwrapParamsToUVs(mesh.mesh, mesh.mesh.selectedFacesInternal.Where(x => !x.manualUV)); + } + else + { + var indices = new HashSet<int>(mesh.elementGroups.SelectMany(x => x.indices)); + + foreach (var face in mesh.mesh.facesInternal) + { + foreach (var index in face.distinctIndexesInternal) + { + if (indices.Contains(index)) + { + face.manualUV = true; + break; + } + } + } + } + } + } + + internal override MeshAndElementSelection GetElementSelection(ProBuilderMesh mesh, PivotPoint pivot) + { + return new MeshAndTextures(mesh, pivot); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureTool.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureTool.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..600f166bc9fb2c6bcaf5d7826c70adab26c76f0a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TextureTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7fd9f5ac1b5cea54386d6497a518c29f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ToolbarGroup.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ToolbarGroup.cs new file mode 100644 index 0000000000000000000000000000000000000000..5bbcf3e8ef5eedea43aaae4e6c723902664bc7ce --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ToolbarGroup.cs @@ -0,0 +1,120 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// Defines what area of the ProBuilder toolbar a MenuAction should be grouped into. + /// </summary> + public enum ToolbarGroup + { + /// <summary> + /// A tool that opens it's own window. Example, UV Editor, Smoothing Groups, Vertex Color Painter, etc. + /// </summary> + Tool = 0, + /// <summary> + /// This is an interface toggle or an element selection action. + /// </summary> + Selection = 1, + /// <summary> + /// This action affects objects (as opposed to mesh attributes like vertex or face). + /// </summary> + Object = 2, + /// <summary> + /// This action affects geometry elements (vertices, edges, faces). + /// </summary> + Geometry = 3, + /// <summary> + /// An action for creating or modifying @"UnityEngine.ProBuilder.EntityBehaviour" types. + /// </summary> + Entity = 4, + /// <summary> + /// This action exports meshes. + /// </summary> + Export = 5 + } + + static class ToolbarGroupUtility + { + static readonly Color ToolColor = new Color(0.6666f, 0.4f, 0.2f, 1f); + static readonly Color SelectionColor = new Color(0.1411f, 0.4941f, 0.6392f, 1f); + static readonly Color ObjectColor = new Color(0.4f, 0.6f, 0.1333f, 1f); + static readonly Color GeometryColor = new Color(0.7333f, 0.1333f, 0.2f, 1f); + + public static Color GetColor(ToolbarGroup group) + { + if (group == ToolbarGroup.Tool) + return ToolColor; + else if (group == ToolbarGroup.Selection) + return SelectionColor; + else if (group == ToolbarGroup.Object || group == ToolbarGroup.Entity) + return ObjectColor; + else if (group == ToolbarGroup.Geometry) + return GeometryColor; + + return Color.white; + } + + private static GUIStyle CreateBackgroundStyleTemplate() + { + GUIStyle style = new GUIStyle(); + style.normal.textColor = EditorGUIUtility.isProSkin ? MenuActionStyles.TEXT_COLOR_WHITE_NORMAL : Color.black; + style.hover.textColor = EditorGUIUtility.isProSkin ? MenuActionStyles.TEXT_COLOR_WHITE_HOVER : Color.black; + style.active.textColor = EditorGUIUtility.isProSkin ? MenuActionStyles.TEXT_COLOR_WHITE_ACTIVE : Color.black; + style.alignment = TextAnchor.MiddleCenter; + style.border = new RectOffset(3, 3, 3, 3); + style.stretchWidth = true; + style.stretchHeight = false; + return style; + } + + private static Dictionary<string, GUIStyle> s_IconBackgroundStyles = new Dictionary<string, GUIStyle>(); + + /** + * Where @group corresponds to: + * - Geo + * - Object + * - Selection + * - Tool + */ + private static GUIStyle GetBackgroundStyle(string group, bool isHorizontal) + { + GUIStyle style; + + string groupKey = string.Format("{0}_{1}", group, isHorizontal ? "_horizontal" : "_vertical"); + + if (s_IconBackgroundStyles.TryGetValue(groupKey, out style)) + return style; + + style = CreateBackgroundStyleTemplate(); + + style.normal.background = IconUtility.GetIcon( + string.Format("Toolbar/Background/{0}_Normal_{1}", group, isHorizontal ? "Horizontal" : "Vertical")); + style.hover.background = IconUtility.GetIcon( + string.Format("Toolbar/Background/{0}_Hover_{1}", group, isHorizontal ? "Horizontal" : "Vertical")); + style.active.background = IconUtility.GetIcon( + string.Format("Toolbar/Background/{0}_Pressed_{1}", group, isHorizontal ? "Horizontal" : "Vertical")); + + s_IconBackgroundStyles.Add(groupKey, style); + style.margin = isHorizontal ? new RectOffset(4, 4, 4, 5) : new RectOffset(4, 3, 4, 4); + style.padding = isHorizontal ? new RectOffset(3, 3, 6, 3) : new RectOffset(6, 3, 3, 3); + + return style; + } + + /** + * Get the background button style for a toolbar group. + */ + public static GUIStyle GetStyle(ToolbarGroup group, bool isHorizontal) + { + if (group == ToolbarGroup.Tool) + return GetBackgroundStyle("Tool", isHorizontal); + else if (group == ToolbarGroup.Selection) + return GetBackgroundStyle("Selection", isHorizontal); + else if (group == ToolbarGroup.Object || group == ToolbarGroup.Entity) + return GetBackgroundStyle("Object", isHorizontal); + else // if( group == pb_ToolbarGroup.Geometry ) + return GetBackgroundStyle("Geo", isHorizontal); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ToolbarGroup.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ToolbarGroup.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..48809babf0bdfed0585bdd694a73ca616bacb1dc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/ToolbarGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1edc484acd18fdb42b4421d1b707caaa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TooltipContent.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TooltipContent.cs new file mode 100644 index 0000000000000000000000000000000000000000..5895a2bc704a482a244414e80977353f63d414d0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TooltipContent.cs @@ -0,0 +1,254 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder.UI; +using System; + +namespace UnityEditor.ProBuilder +{ + /// <inheritdoc /> + /// <summary> + /// An extended tooltip for use in MenuAction. + /// </summary> + [Serializable] + public sealed class TooltipContent : IEquatable<TooltipContent> + { + static GUIStyle TitleStyle { get { if (_titleStyle == null) InitStyles(); return _titleStyle; } } + static GUIStyle ShortcutStyle { get { if (_shortcutStyle == null) InitStyles(); return _shortcutStyle; } } + static GUIStyle _titleStyle = null; + static GUIStyle _shortcutStyle = null; + + const float k_MinWidth = 128; + const float k_MaxWidth = 330; + const float k_MinHeight = 0; + + static void InitStyles() + { + _titleStyle = new GUIStyle(); + _titleStyle.margin = new RectOffset(4, 4, 4, 4); + _titleStyle.padding = new RectOffset(4, 4, 4, 4); + _titleStyle.fontSize = 14; + _titleStyle.fontStyle = FontStyle.Bold; + _titleStyle.normal.textColor = EditorGUIUtility.isProSkin ? Color.white : Color.black; + _titleStyle.richText = true; + + _shortcutStyle = new GUIStyle(_titleStyle); + _shortcutStyle.fontSize = 14; + _shortcutStyle.fontStyle = FontStyle.Normal; + _shortcutStyle.normal.textColor = EditorGUIUtility.isProSkin ? new Color(.5f, .5f, .5f, 1f) : new Color(.3f, .3f, .3f, 1f); + + EditorStyles.wordWrappedLabel.richText = true; + } + + static readonly Color separatorColor = new Color(.65f, .65f, .65f, .5f); + + /// <summary> + /// The title to show in the tooltip window. + /// </summary> + /// <value> + /// The header text for this tooltip. + /// </value> + public string title { get; set; } + + /// <summary> + /// A brief summary of what this menu action does. + /// </summary> + /// <value> + /// The body of the summary text. + /// </value> + public string summary { get; set; } + + /// <summary> + /// The shortcut assigned to this menu item. + /// </summary> + /// <value> + /// A text representation of the optional shortcut. + /// </value> + public string shortcut { get; set; } + + internal static TooltipContent TempContent = new TooltipContent("", ""); + + /// <summary> + /// Create a new tooltip. + /// </summary> + /// <param name="title">The header text for this tooltip.</param> + /// <param name="summary">The body of the tooltip text. This should be kept brief.</param> + /// <param name="shortcut">A set of keys to be displayed as the shortcut for this action.</param> + public TooltipContent(string title, string summary, params char[] shortcut) : this(title, summary, "") + { + if (shortcut != null && shortcut.Length > 0) + { + this.shortcut = string.Empty; + + for (int i = 0; i < shortcut.Length - 1; i++) + { + if (!EditorUtility.IsUnix()) + this.shortcut += InternalUtility.ControlKeyString(shortcut[i]) + " + "; + else + this.shortcut += shortcut[i] + " + "; + } + + if (!EditorUtility.IsUnix()) + this.shortcut += InternalUtility.ControlKeyString(shortcut[shortcut.Length - 1]); + else + this.shortcut += shortcut[shortcut.Length - 1]; + } + } + + /// <summary> + /// Create a new tooltip. + /// </summary> + /// <param name="title">The header text for this tooltip.</param> + /// <param name="summary">The body of the tooltip text. This should be kept brief.</param> + /// <param name="shortcut">A set of keys to be displayed as the shortcut for this action.</param> + public TooltipContent(string title, string summary, string shortcut = "") + { + this.title = title; + this.summary = summary; + this.shortcut = shortcut; + } + + /// <summary> + /// Get the size required in GUI space to render this tooltip. + /// </summary> + /// <returns></returns> + internal Vector2 CalcSize() + { + const float pad = 8; + Vector2 total = new Vector2(k_MinWidth, k_MinHeight); + + bool hastitle = !string.IsNullOrEmpty(title); + bool hasSummary = !string.IsNullOrEmpty(summary); + bool hasShortcut = !string.IsNullOrEmpty(shortcut); + + if (hastitle) + { + Vector2 ns = TitleStyle.CalcSize(UI.EditorGUIUtility.TempContent(title)); + + if (hasShortcut) + { + ns.x += EditorStyles.boldLabel.CalcSize(UI.EditorGUIUtility.TempContent(shortcut)).x + pad; + } + + total.x += Mathf.Max(ns.x, 256); + total.y += ns.y; + } + + if (hasSummary) + { + if (!hastitle) + { + Vector2 sumSize = EditorStyles.wordWrappedLabel.CalcSize(UI.EditorGUIUtility.TempContent(summary)); + total.x = Mathf.Min(sumSize.x, k_MaxWidth); + } + + float summaryHeight = EditorStyles.wordWrappedLabel.CalcHeight(UI.EditorGUIUtility.TempContent(summary), total.x); + total.y += summaryHeight; + } + + if (hastitle && hasSummary) + total.y += 16; + + total.x += pad; + total.y += pad; + + return total; + } + + internal void Draw() + { + if (!string.IsNullOrEmpty(title)) + { + if (!string.IsNullOrEmpty(shortcut)) + { + GUILayout.BeginHorizontal(); + GUILayout.Label(title, TitleStyle); + GUILayout.FlexibleSpace(); + GUILayout.Label(shortcut, ShortcutStyle); + GUILayout.EndHorizontal(); + } + else + { + GUILayout.Label(title, TitleStyle); + } + + UI.EditorGUIUtility.DrawSeparator(1, separatorColor); + GUILayout.Space(2); + } + + if (!string.IsNullOrEmpty(summary)) + { + GUILayout.Label(summary, EditorStyles.wordWrappedLabel); + } + } + + /// <summary> + /// Equality check is performed by comparing the title property of each tooltip. + /// </summary> + /// <param name="other">The ToolTip content to compare.</param> + /// <returns>True if title is the same, false otherwise.</returns> + public bool Equals(TooltipContent other) + { + return other != null && other.title != null && other.title.Equals(this.title); + } + + /// <summary> + /// Equality check is performed by comparing the title property of each tooltip. + /// </summary> + /// <param name="obj">The ToolTip content to compare.</param> + /// <returns>True if title is the same, false otherwise.</returns> + public override bool Equals(object obj) + { + return obj is TooltipContent && ((TooltipContent)obj).title.Equals(title); + } + + public override int GetHashCode() + { + return title.GetHashCode(); + } + + /// <summary> + /// Convert a tooltip to a string. + /// </summary> + /// <param name="content">The Tooltip to convert.</param> + /// <returns>The title of content.</returns> + /// <exception cref="ArgumentNullException">content is null.</exception> + public static explicit operator string(TooltipContent content) + { + if (content == null) + throw new ArgumentNullException("content"); + return content.title; + } + + /// <summary> + /// Create a Tooltip with a title. + /// </summary> + /// <param name="title">The title to apply to the new Tooltip.</param> + /// <returns>A new Tooltip with title and no content.</returns> + public static explicit operator TooltipContent(string title) + { + return new TooltipContent(title, ""); + } + + /// <summary> + /// Convert a Tooltip to a string. + /// </summary> + /// <returns>The title of the Tooltip.</returns> + public override string ToString() + { + return title; + } + + /// <summary> + /// Create a new tooltip with title. + /// </summary> + /// <param name="title">The title to apply to the new Tooltip.</param> + /// <returns>A new Tooltip with title and no content.</returns> + public static TooltipContent FromString(string title) + { + return new TooltipContent(title, ""); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TooltipContent.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TooltipContent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..284b3caa0e3ead435a0bffa7d94fc191fb0b3aae --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TooltipContent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7208f6e564fc928478322837a693d724 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TooltipEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TooltipEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..fd189aa0d7038db59652159586dfbac32fc7fae9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TooltipEditor.cs @@ -0,0 +1,112 @@ +#if !UNITY_2019_1_OR_NEWER +using System; +using System.Reflection; +#endif +using UnityEngine; + +namespace UnityEditor.ProBuilder +{ + /// <inheritdoc /> + /// <summary> + /// Tooltip window implementation. + /// </summary> + sealed class TooltipEditor : EditorWindow + { +#if !UNITY_2019_1_OR_NEWER + static TooltipEditor() + { + s_ShowModeEnum = ReflectionUtility.GetType("UnityEditor.ShowMode"); + + s_ShowPopupWithModeMethod = typeof(EditorWindow).GetMethod( + "ShowPopupWithMode", + BindingFlags.NonPublic | BindingFlags.Instance); + } + + static readonly Type s_ShowModeEnum; + static readonly MethodInfo s_ShowPopupWithModeMethod; +#endif + + static readonly Color BasicBackgroundColor = new Color(.87f, .87f, .87f, 1f); + const int k_PositionPadding = 4; + + static TooltipEditor s_Instance; + static Rect s_WindowRect = new Rect(0, 0, 0, 0); + + // much like highlander, there can only be one + public static TooltipEditor instance() + { + if (s_Instance == null) + { + s_Instance = CreateInstance<TooltipEditor>(); + s_Instance.minSize = Vector2.zero; + s_Instance.maxSize = Vector2.zero; + s_Instance.hideFlags = HideFlags.HideAndDontSave; +#if UNITY_2019_1_OR_NEWER + s_Instance.ShowTooltip(); + s_Instance.m_Parent.window.SetAlpha(1f); +#else + if (s_ShowPopupWithModeMethod != null && s_ShowModeEnum != null) + s_ShowPopupWithModeMethod.Invoke(s_Instance, new [] { Enum.ToObject(s_ShowModeEnum, 1), false}); + else + s_Instance.ShowPopup(); +#endif + + object parent = ReflectionUtility.GetValue(s_Instance, s_Instance.GetType(), "m_Parent"); + object window = ReflectionUtility.GetValue(parent, parent.GetType(), "window"); + ReflectionUtility.SetValue(parent, "mouseRayInvisible", true); + ReflectionUtility.SetValue(window, "m_DontSaveToLayout", true); + } + + return s_Instance; + } + + public static void Hide() + { + if (s_Instance != null) + s_Instance.Close(); + } + + public static void Show(Rect rect, TooltipContent content) + { + instance().ShowInternal(rect, content); + } + + public void ShowInternal(Rect rect, TooltipContent content) + { + this.content = content; + Vector2 size = content.CalcSize(); + + Vector2 p = new Vector2(rect.x + rect.width + k_PositionPadding, rect.y); + if(((p.x % Screen.currentResolution.width) + size.x) > Screen.currentResolution.width) + p.x = rect.x - k_PositionPadding - size.x; + + minSize = size; + maxSize = size; + + position = new Rect( + p.x, + p.y, + size.x, + size.y); + + s_WindowRect = new Rect(0, 0, size.x, size.y); + } + + public TooltipContent content = null; + + void OnGUI() + { + if (!EditorGUIUtility.isProSkin) + { + GUI.backgroundColor = BasicBackgroundColor; + GUI.Box(s_WindowRect, ""); + GUI.backgroundColor = Color.white; + } + + if (content == null) + return; + + content.Draw(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TooltipEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TooltipEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f5d8b8aed4fad577cdf0434f308e67231c0108fd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/TooltipEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d540a5c12642c5e40ba3b88fc8ae6c50 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UVEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UVEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..6ec41a2ab0d4ed37220e617bff9088c513e1137c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UVEditor.cs @@ -0,0 +1,3510 @@ +#if UNITY_2019_1_OR_NEWER +#define SHORTCUT_MANAGER +#endif + +#if UNITY_5_5_OR_NEWER +#define RETINA_ENABLED +#endif + +using UnityEngine; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; +using UnityEditor.SettingsManagement; +#if SHORTCUT_MANAGER +using UnityEditor.ShortcutManagement; +#endif + +namespace UnityEditor.ProBuilder +{ + sealed class UVEditor : ConfigurableWindow + { + #region Fields + + ProBuilderEditor editor + { + get { return ProBuilderEditor.instance; } + } + + public override void AddItemsToMenu(GenericMenu menu) + { + base.AddItemsToMenu(menu); + +#if PB_DEBUG + menu.AddItem(new GUIContent("Show UV Coordinate Labels"), s_DebugDrawCoordinateLabels.value, () => + { + s_DebugDrawCoordinateLabels.SetValue(!s_DebugDrawCoordinateLabels.value, true); + }); +#endif + } + public static UVEditor instance; + + const int LEFT_MOUSE_BUTTON = 0; + const int RIGHT_MOUSE_BUTTON = 1; + const int MIDDLE_MOUSE_BUTTON = 2; + const int PAD = 4; + const float SCROLL_MODIFIER = 1f; + const float ALT_SCROLL_MODIFIER = .07f; + const int DOT_SIZE = 6; + const int HALF_DOT = 3; + const int HANDLE_SIZE = 128; + const int MIN_ACTION_WINDOW_SIZE = 128; + const float MIN_GRAPH_SCALE = .0001f; + const float MAX_GRAPH_SCALE = 250f; + // Max canvas zoom + const float MAX_GRAPH_SCALE_SCROLL = 20f; + // When scrolling use this value to taper the scroll effect + const float MAX_PROXIMITY_SNAP_DIST_UV = .15f; + // The maximum allowable distance magnitude between coords to be considered for proximity snapping (UV coordinates) + const float MAX_PROXIMITY_SNAP_DIST_CANVAS = 12f; + // The maximum allowable distance magnitude between coords to be considered for proximity snapping (Canvas coordinates) + const float MIN_DIST_MOUSE_EDGE = 8f; + + // todo Support Range/Min/Max property decorators + [UserSetting] + static Pref<float> s_GridSnapIncrement = new Pref<float>("uv.uvEditorGridSnapIncrement", .125f, SettingsScope.Project); + + [UserSettingBlock("UV Editor")] + static void UVEditorSettings(string searchContext) + { + s_GridSnapIncrement.value = SettingsGUILayout.SettingsSlider(UI.EditorGUIUtility.TempContent("Grid Size"), s_GridSnapIncrement, .015625f, 2f, searchContext); + } + +#if SHORTCUT_MANAGER + [Shortcut("ProBuilder/UV Editor/Reset Canvas", typeof(UVEditor), KeyCode.Alpha0)] + static void ResetCanvasShortcut() + { + if(instance != null) + instance.ResetCanvas(); + } +#endif + + static readonly Color DRAG_BOX_COLOR_BASIC = new Color(0f, .7f, 1f, .2f); + static readonly Color DRAG_BOX_COLOR_PRO = new Color(0f, .7f, 1f, 1f); + + static Color DRAG_BOX_COLOR + { + get { return EditorGUIUtility.isProSkin ? DRAG_BOX_COLOR_PRO : DRAG_BOX_COLOR_BASIC; } + } + + static readonly Color HOVER_COLOR_MANUAL = new Color(1f, .68f, 0f, .23f); + static readonly Color HOVER_COLOR_AUTO = new Color(0f, 1f, 1f, .23f); + + static readonly Color SELECTED_COLOR_MANUAL = new Color(1f, .68f, 0f, .39f); + static readonly Color SELECTED_COLOR_AUTO = new Color(0f, .785f, 1f, .39f); + +#if UNITY_STANDALONE_OSX + public bool ControlKey { get { return Event.current.modifiers == EventModifiers.Command; } } + #else + public bool ControlKey + { + get { return Event.current.modifiers == EventModifiers.Control; } + } +#endif + public bool ShiftKey + { + get { return Event.current.modifiers == EventModifiers.Shift; } + } + + Pref<bool> m_ShowPreviewMaterial = new Pref<bool>("UVEditor.showPreviewMaterial", true, SettingsScope.Project); + bool m_ShowPreviewMaterialCacheDuringScreenshot; + + // Show a preview texture for the first selected face in UV space 0,1? +#if PB_DEBUG + List<Texture2D> m_DebugUVRenderScreens = new List<Texture2D>(); + #endif + Color GridColorPrimary; + Color BasicBackgroundColor; + Color UVColorPrimary, UVColorSecondary, UVColorGroupIndicator; + + Texture2D dot, + icon_textureMode_on, + icon_textureMode_off, + icon_sceneUV_on, + icon_sceneUV_off; + + GUIContent gc_SceneViewUVHandles = new GUIContent("", (Texture2D)null, "Lock the SceneView handle tools to UV manipulation mode. This allows you to move UV coordinates directly on your 3d object."); + GUIContent gc_ShowPreviewTexture = new GUIContent("", (Texture2D)null, "When toggled on, a preview image of the first selected face's material will be drawn from coordinates 0,0 - 1,1.\n\nNote that this depends on the Material's shader having a _mainTexture property."); + + GUIContent gc_ConvertToManual = new GUIContent("Convert to Manual", "There are 2 methods of unwrapping UVs in ProBuilder; Automatic unwrapping and Manual. Auto unwrapped UVs are generated dynamically using a set of parameters, which may be set. Manual UVs are akin to traditional UV unwrapping, in that once you set them they will not be updated as your mesh changes."); + GUIContent gc_ConvertToAuto = new GUIContent("Convert to Auto", "There are 2 methods of unwrapping UVs in ProBuilder; Automatic unwrapping and Manual. Auto unwrapped UVs are generated dynamically using a set of parameters, which may be set. Manual UVs are akin to traditional UV unwrapping, in that once you set them they will not be updated as your mesh changes."); + GUIContent gc_NoUvSelected = new GUIContent("No UVs Selected"); + + GUIContent gc_RenderUV = new GUIContent((Texture2D)null, "Renders the current UV workspace from coordinates {0,0} to {1,1} to a 256px image."); + + // Full grid size in pixels (-1, 1) + int uvGridSize = 256; + float uvGraphScale = 1f; + + enum UVMode + { + Auto, + Manual, + Mixed, + NoSelection, + }; + + UVMode mode = UVMode.Auto; + + int[] UV_CHANNELS = new int[] { 0, 1, 2, 3 }; + string[] UV_CHANNELS_STR = new string[] { "UV 1", "UV 2 (read-only)", "UV 3 (read-only)", "UV 4 (read-only)" }; + +#if PB_DEBUG + static Pref<bool> s_DebugDrawCoordinateLabels = new Pref<bool>("uv.drawDebugCoordLabels", false, SettingsScope.User); + #endif + + // what uv channel to modify + int channel = 0; + + private Vector2 uvGraphOffset = Vector2.zero; + + /// inspected data + ProBuilderMesh[] selection; + int[][] m_DistinctIndexesSelection; + + List<Face[]>[] incompleteTextureGroupsInSelection = new List<Face[]>[0]; + List<List<Vector2>> incompleteTextureGroupsInSelection_CoordCache = new List<List<Vector2>>(); + + int screenWidth, screenHeight; + + // true when uvs are being moved around + bool modifyingUVs = false; + + // work around a bug in GUI where a named control can lose focus after "delete" + bool eatNextKeyUp = false; + + // The first selected face's material. Used to draw texture preview in 0,0 - 1,1 space. + Material m_PreviewMaterial; + + Tool tool = Tool.Move; + + GUIContent[] ToolIcons; + + struct ObjectElementIndex + { + public int objectIndex; + public int elementIndex; + public int elementSubIndex; + public bool valid; + + public void Clear() + { + this.objectIndex = -1; + this.elementIndex = -1; + this.elementSubIndex = -1; + this.valid = false; + } + + public ObjectElementIndex(int obj, int elem, int sub) + { + this.objectIndex = obj; + this.elementIndex = elem; + this.elementSubIndex = sub; + this.valid = false; + } + + public bool Equals(ObjectElementIndex oei) + { + return this.objectIndex == oei.objectIndex && + this.elementIndex == oei.elementIndex && + this.elementSubIndex == oei.elementSubIndex && + this.valid == oei.valid; + } + + public override string ToString() + { + return valid ? objectIndex + " : " + elementIndex + " -> " + elementSubIndex : "Invalid"; + } + } + + ObjectElementIndex nearestElement = new ObjectElementIndex(-1, -1, -1); + #endregion + #region Menu + + public static void MenuOpenUVEditor() + { + GetWindow<UVEditor>("UV Editor"); + } + + void ScreenshotMenu() + { +#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX + +// On Mac ShowAsDropdown and ShowAuxWindow both throw stack pop exceptions when initialized. + UVRenderOptions renderOptions = EditorWindow.GetWindow<UVRenderOptions>(true, "Save UV Image", true); + renderOptions.position = new Rect(this.position.x + (this.position.width / 2f - 128), + this.position.y + (this.position.height / 2f - 76), + 256f, + 152f); + renderOptions.screenFunc = InitiateScreenshot; +#else + UVRenderOptions renderOptions = (UVRenderOptions)ScriptableObject.CreateInstance(typeof(UVRenderOptions)); + renderOptions.screenFunc = InitiateScreenshot; + renderOptions.ShowAsDropDown(new Rect(this.position.x + 348, + this.position.y + 32, + 0, + 0), + new Vector2(256, 172)); +#endif + } + + #endregion + #region Enable + + void OnEnable() + { + this.minSize = new Vector2(520f, 300f); + + InitGUI(); + + this.wantsMouseMove = true; + this.autoRepaintOnSceneChange = true; + + MeshSelection.objectSelectionChanged += ObjectSelectionChanged; + ProBuilderEditor.selectModeChanged += SelectModeChanged; + ProBuilderMesh.elementSelectionChanged += ElementSelectionChanged; + ProBuilderMeshEditor.onGetFrameBoundsEvent += OnGetFrameBoundsEvent; + Undo.undoRedoPerformed += ObjectSelectionChanged; + + ObjectSelectionChanged(); + instance = this; + nearestElement.Clear(); + } + + void OnDisable() + { + instance = null; + + if (ProBuilderEditor.selectMode == SelectMode.TextureFace) + ProBuilderEditor.ResetToLastSelectMode(); + + if (uv2Editor != null) + DestroyImmediate(uv2Editor); + + MeshSelection.objectSelectionChanged -= ObjectSelectionChanged; + ProBuilderMesh.elementSelectionChanged -= ElementSelectionChanged; + ProBuilderEditor.selectModeChanged -= SelectModeChanged; + ProBuilderMeshEditor.onGetFrameBoundsEvent -= OnGetFrameBoundsEvent; + Undo.undoRedoPerformed -= ObjectSelectionChanged; + } + + /** + * Loads icons, sets default colors using prefs, etc. + */ + void InitGUI() + { + bool isProSkin = true; + + GridColorPrimary = isProSkin ? new Color(1f, 1f, 1f, .2f) : new Color(0f, 0f, 0f, .2f); + UVColorPrimary = isProSkin ? Color.green : new Color(0f, .8f, 0f, 1f); + UVColorSecondary = isProSkin ? new Color(1f, 1f, 1f, .7f) : Color.blue; + UVColorGroupIndicator = isProSkin ? new Color(0f, 1f, .2f, .15f) : new Color(0f, 1f, .2f, .3f); + BasicBackgroundColor = new Color(.24f, .24f, .24f, 1f); + + dot = EditorGUIUtility.whiteTexture; + + MethodInfo loadIconMethod = typeof(EditorGUIUtility).GetMethod("LoadIcon", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy); + + isProSkin = EditorGUIUtility.isProSkin; + + Texture2D moveIcon = (Texture2D)loadIconMethod.Invoke(null, new object[] { "MoveTool" }); + Texture2D rotateIcon = (Texture2D)loadIconMethod.Invoke(null, new object[] { "RotateTool" }); + Texture2D scaleIcon = (Texture2D)loadIconMethod.Invoke(null, new object[] { "ScaleTool" }); + Texture2D viewIcon = (Texture2D)loadIconMethod.Invoke(null, new object[] { "ViewToolMove" }); + + icon_textureMode_on = IconUtility.GetIcon("UVEditor/ProBuilderGUI_UV_ShowTexture_On", IconSkin.Pro); + icon_textureMode_off = IconUtility.GetIcon("UVEditor/ProBuilderGUI_UV_ShowTexture_Off", IconSkin.Pro); + + icon_sceneUV_on = IconUtility.GetIcon("UVEditor/ProBuilderGUI_UV_Manip_On", IconSkin.Pro); + icon_sceneUV_off = IconUtility.GetIcon("UVEditor/ProBuilderGUI_UV_Manip_Off", IconSkin.Pro); + + gc_RenderUV.image = IconUtility.GetIcon("UVEditor/camera-64x64"); + + ToolIcons = new GUIContent[4] + { + new GUIContent(viewIcon, "View Tool"), + new GUIContent(moveIcon, "Move Tool"), + new GUIContent(rotateIcon, "Rotate Tool"), + new GUIContent(scaleIcon, "Scale Tool") + }; + } + + #endregion + #region GUI Loop + + const int k_UVInspectorWidthMinManual = 100; + const int k_UVInspectorWidthMinAuto = 240; + const int k_UVInspectorWidth = 240; + //Following values were determined empirically + const int k_UVInspectorHeightMinManual = 50; + const int k_UVInspectorHeightMinAuto = 100; + + int minimumInspectorWidth + { + get { return (mode == UVMode.Auto ? k_UVInspectorWidthMinAuto : k_UVInspectorWidthMinManual); } + } + + int minimumInspectorHeight + { + get { return (mode == UVMode.Auto ? k_UVInspectorHeightMinAuto : k_UVInspectorHeightMinManual); } + } + Rect graphRect, + toolbarRect, + actionWindowRect = new Rect(6, 64, k_UVInspectorWidth, 340); + + Vector2 mousePosition_initial; + + Rect dragRect = new Rect(0, 0, 0, 0); + bool m_mouseDragging = false; + + bool needsRepaint = false; + Rect ScreenRect = new Rect(0f, 0f, 0f, 0f); + + enum ScreenshotStatus + { + PrepareCanvas, + CanvasReady, + RenderComplete, + Done + } + + ScreenshotStatus screenshotStatus = ScreenshotStatus.Done; + + void OnGUI() + { + if (screenshotStatus != ScreenshotStatus.Done) + { + minSize = new Vector2(ScreenRect.width, ScreenRect.height); + maxSize = new Vector2(ScreenRect.width, ScreenRect.height); + + UI.EditorGUIUtility.DrawSolidColor(new Rect(-1, -1, ScreenRect.width + 10, ScreenRect.height + 10), screenshot_backgroundColor); + + DrawUVGraph(graphRect); + + if (screenshotStatus == ScreenshotStatus.PrepareCanvas) + { + if (Event.current.type == EventType.Repaint) + { + screenshotStatus = ScreenshotStatus.CanvasReady; + DoScreenshot(); + } + + return; + } + else + { + DoScreenshot(); + } + } + + if (tool == Tool.View || m_draggingCanvas) + EditorGUIUtility.AddCursorRect(new Rect(0, toolbarRect.y + toolbarRect.height, screenWidth, screenHeight), MouseCursor.Pan); + + ScreenRect.width = this.position.width; + ScreenRect.height = this.position.height; + + // if basic skin, manually tint the background + if (!EditorGUIUtility.isProSkin) + { + GUI.backgroundColor = BasicBackgroundColor; //new Color(.13f, .13f, .13f, .7f); + GUI.Box(ScreenRect, ""); + GUI.backgroundColor = Color.white; + } + + if (!Math.Approx(position.width, screenWidth) || !Math.Approx(position.height, screenHeight)) + OnScreenResize(); + + toolbarRect = new Rect(PAD, PAD, this.position.width - PAD * 2, 29); + graphRect = new Rect(PAD, PAD, this.position.width - PAD * 2, this.position.height - PAD * 2); + + actionWindowRect.x = (int)Mathf.Clamp(actionWindowRect.x, PAD, position.width - PAD - PAD - actionWindowRect.width); + actionWindowRect.y = (int)Mathf.Clamp(actionWindowRect.y, PAD, position.height - MIN_ACTION_WINDOW_SIZE); + if (actionWindowRect.y + actionWindowRect.height > position.height) + actionWindowRect.height = position.height - actionWindowRect.y - 24; + if (actionWindowRect.width < minimumInspectorWidth) + actionWindowRect.width = minimumInspectorWidth; + + // Mouse drags, canvas movement, etc + HandleInput(); + + DrawUVGraph(graphRect); + + // Draw AND update translation handles + if (channel == 0 && selection != null && MeshSelection.selectedVertexCount > 0) + { + switch (tool) + { + case Tool.Move: + MoveTool(); + break; + + case Tool.Rotate: + RotateTool(); + break; + + case Tool.Scale: + ScaleTool(); + break; + } + } + + if (GUIUtility.hotControl == 0 && channel == 0 && UpdateNearestElement(Event.current.mousePosition)) + Repaint(); + + if (m_mouseDragging && EditorHandleUtility.CurrentID < 0 && !m_draggingCanvas && !m_rightMouseDrag) + { + Color oldColor = GUI.backgroundColor; + GUI.backgroundColor = DRAG_BOX_COLOR; + GUI.Box(dragRect, ""); + GUI.backgroundColor = oldColor; + } + + DrawUVTools(toolbarRect); + + // for now only uv channels 0 and 1 are editable in any way + if (channel == 0 || channel == 1) + { + BeginWindows(); + actionWindowRect = GUILayout.Window(1, actionWindowRect, DrawActionWindow, "Actions"); + EndWindows(); + } + + if (needsRepaint) + { + Repaint(); + needsRepaint = false; + } + } + + #endregion + #region Editor Delegate and Event + + void SelectModeChanged(SelectMode mode) + { + UpdateMode(); + } + + void ElementSelectionChanged(ProBuilderMesh mesh) + { + ObjectSelectionChanged(); + } + + void ObjectSelectionChanged() + { + selection = MeshSelection.top.ToArray(); + + SetSelectedUVsWithSceneView(); + + RefreshUVCoordinates(); + + // get incompletely selected texture groups + int len = selection == null ? 0 : selection.Count(); + + incompleteTextureGroupsInSelection = new List<Face[]>[len]; + incompleteTextureGroupsInSelection_CoordCache.Clear(); + + for (int i = 0; i < len; i++) + { + incompleteTextureGroupsInSelection[i] = GetIncompleteTextureGroups(selection[i], selection[i].selectedFacesInternal); + + if (incompleteTextureGroupsInSelection[i].Count < 1) + { + continue; + } + else + { + ProBuilderMesh pb = selection[i]; + + foreach (Face[] incomplete_group in incompleteTextureGroupsInSelection[i]) + { + if (incomplete_group == null || incomplete_group.Length < 1) + continue; + + List<Vector2> coords = new List<Vector2>(); + + foreach (Face face in incomplete_group) + coords.Add(Bounds2D.Center(pb.texturesInternal.ValuesWithIndexes(face.distinctIndexesInternal))); + + coords.Insert(0, Bounds2D.Center(coords.ToArray())); + + incompleteTextureGroupsInSelection_CoordCache.Add(coords); + } + } + } + + Repaint(); + } + + /** + * Automatically select textureGroup buddies, and copy origins of all UVs. + * Also resets the mesh to PB data, removing vertices appended by + * UV2 generation. + */ + internal void OnBeginUVModification() + { + Lightmapping.PushGIWorkflowMode(); + + modifyingUVs = true; + GUI.FocusControl(string.Empty); + bool update = false; + + // Make sure all TextureGroups are auto-selected + for (int i = 0; i < selection.Length; i++) + { + if (selection[i].selectedFaceCount > 0) + { + int fc = selection[i].selectedFaceCount; + selection[i].SetSelectedFaces(SelectTextureGroups(selection[i], selection[i].selectedFacesInternal)); + + // kinda lame... this will cause setSelectedUVsWithSceneView to be called again. + if (fc != selection[i].selectedFaceCount) + update = true; + } + + selection[i].ToMesh(); // Reset the Mesh to PB data only. + selection[i].Refresh(); + } + + if (update) + { + // UpdateSelection clears handlePosition + Vector2 storedHandlePosition = handlePosition; + ProBuilderEditor.Refresh(); + SetHandlePosition(storedHandlePosition, true); + } + + CopySelectionUVs(out uv_origins); + uvOrigin = handlePosition; + + m_AutoUnwrapSettingsPreModification = new AutoUnwrapSettings[selection.Length][]; + for (int i = 0, c = m_AutoUnwrapSettingsPreModification.Length; i < c; i++) + { + int[] selected = selection[i].selectedFaceIndicesInternal; + Face[] faces = selection[i].facesInternal; + m_AutoUnwrapSettingsPreModification[i] = new AutoUnwrapSettings[selected.Length]; + for (int n = 0, fc = selected.Length; n < fc; n++) + m_AutoUnwrapSettingsPreModification[i][n] = faces[selected[n]].uv; + } + } + + /** + * Internal because pb_Editor needs to call this sometimes. + */ + internal void OnFinishUVModification() + { + Lightmapping.PopGIWorkflowMode(); + + modifyingUVs = false; + + if ((tool == Tool.Rotate || tool == Tool.Scale) && userPivot) + SetHandlePosition(handlePosition, true); + + // Regenerate UV2s + foreach (ProBuilderMesh pb in selection) + { + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + } + } + + void SetSelectedUVsWithSceneView() + { + if (selection == null) + { + m_DistinctIndexesSelection = new int[0][]; + return; + } + + m_DistinctIndexesSelection = new int[selection.Length][]; + + // Append shared UV indexes to SelectedTriangles array (if necessary) + for (int i = 0; i < selection.Length; i++) + { + List<int> selectedTris = new List<int>(selection[i].selectedIndexesInternal); + + SharedVertex[] sharedUVs = selection[i].sharedTextures; + + // put sewn UVs into the selection if they aren't already + if (sharedUVs != null) + { + foreach (var arr in sharedUVs) + { + if (System.Array.Exists(arr.arrayInternal, element => System.Array.IndexOf(selection[i].selectedIndexesInternal, element) > -1)) + { + selectedTris.AddRange(arr); + } + } + } + + m_DistinctIndexesSelection[i] = selectedTris.Distinct().ToArray(); + } + } + + void OnGetFrameBoundsEvent() + { + FrameSelection(); + Repaint(); + } + + void OnScreenResize() + { + screenWidth = (int)this.position.width; + screenHeight = (int)this.position.height; + RefreshUVCoordinates(); + Repaint(); + } + + bool IsCopyUVSettingsModifiers(EventModifiers modifiers) + { +#if UNITY_STANDALONE_OSX + return (modifiers == (EventModifiers.Command | EventModifiers.Shift)); +#else + return (modifiers == (EventModifiers.Control | EventModifiers.Shift)); +#endif + } + + /** + * returns true if a copy of UV settings occured from the first selected face to the target face + */ + bool CopyFaceUVSettings(ProBuilderMesh pb, Face targetFace) + { + // get first selected UV face + ProBuilderMesh firstObj = MeshSelection.activeMesh; + Face sourceFace = MeshSelection.activeFace; + Face[] destination = new Face[1]; + if (sourceFace == null) + return false; + + UndoUtility.RecordObject(pb, "Copy UV Settings"); + bool destinationWasManualUV = targetFace.manualUV; + bool sourceWasManualUV = sourceFace.manualUV; + + pb.ToMesh(); + if (destinationWasManualUV) + { + //We are going to paste auto settings therefore target face + //should be in auto prior to paste + destination[0] = targetFace; + UVEditing.SetAutoUV(pb, destination, true); + } + + targetFace.uv = UVEditing.GetAutoUnwrapSettings(firstObj, sourceFace); + destination[0] = targetFace; + targetFace.submeshIndex = sourceFace.submeshIndex; + EditorUtility.ShowNotification("Copy UV Settings"); + pb.Refresh(); + + if (sourceWasManualUV) + { + //Ensure UV mode of target face matches source face UV mode. + destination[0] = targetFace; + pb.ToMesh(); + UVEditing.SetAutoUV(pb, destination, false); + pb.Refresh(); + } + pb.Optimize(); + + RefreshUVCoordinates(); + Repaint(); + + return true; + } + + /** + * return true if shortcut should eat the event + */ + internal bool ClickShortcutCheck(ProBuilderMesh pb, Face selectedFace) + { + Event e = Event.current; + + // Copy UV settings + if (IsCopyUVSettingsModifiers(e.modifiers)) + { + return CopyFaceUVSettings(pb, selectedFace); + } + else if (e.modifiers == EventModifiers.Control) + { + int len = pb.selectedFacesInternal == null ? 0 : pb.selectedFacesInternal.Length; + + if (len < 1) + return false; + + Face anchor = pb.selectedFacesInternal[len - 1]; + + if (anchor == selectedFace) + return false; + + UndoUtility.RecordObject(pb, "AutoStitch"); + + pb.ToMesh(); + + bool success = UVEditing.AutoStitch(pb, anchor, selectedFace, channel); + + if (success) + { + RefreshElementGroups(pb); + + pb.SetSelectedFaces(new Face[] { selectedFace }); + + // // only need to do this for one pb_Object... + // for(int i = 0; i < selection.Length; i++) + // selection[i].RefreshUV( editor.SelectedFacesInEditZone[i] ); + + pb.Refresh(); + pb.Optimize(); + + SetSelectedUVsWithSceneView(); + + RefreshUVCoordinates(); + + EditorUtility.ShowNotification("Autostitch"); + + ProBuilderEditor.Refresh(); + + Repaint(); + } + else + { + pb.Refresh(); + pb.Optimize(); + } + + return success; + } + + return false; + } + + #endregion + #region Key and Handle Input + + bool m_ignore = false; + bool m_rightMouseDrag = false; + bool m_draggingCanvas = false; + bool m_doubleClick = false; + + void HandleInput() + { + Event e = Event.current; + + if (e.isKey) + { + HandleKeyInput(e); + return; + } + + switch (e.type) + { + case EventType.MouseDown: + + if (toolbarRect.Contains(e.mousePosition) || actionWindowRect.Contains(e.mousePosition)) + { + m_ignore = true; + return; + } + + if (e.clickCount > 1) + m_doubleClick = true; + + mousePosition_initial = e.mousePosition; + + break; + + case EventType.MouseDrag: + + if (m_ignore || (e.mousePosition.y <= toolbarRect.y && !m_mouseDragging)) + break; + + m_mouseDragging = true; + + if (e.button == RIGHT_MOUSE_BUTTON || (e.button == LEFT_MOUSE_BUTTON && e.alt)) + m_rightMouseDrag = true; + + needsRepaint = true; + + /* If no handle is selected, do other stuff */ + if (EditorHandleUtility.CurrentID < 0) + { + if ((e.alt && e.button == LEFT_MOUSE_BUTTON) || e.button == MIDDLE_MOUSE_BUTTON || Tools.current == Tool.View) + { + m_draggingCanvas = true; + uvGraphOffset += e.delta; + } + else if (e.button == LEFT_MOUSE_BUTTON) + { + dragRect.x = mousePosition_initial.x < e.mousePosition.x ? mousePosition_initial.x : e.mousePosition.x; + dragRect.y = mousePosition_initial.y > e.mousePosition.y ? e.mousePosition.y : mousePosition_initial.y; + dragRect.width = Mathf.Abs(mousePosition_initial.x - e.mousePosition.x); + dragRect.height = Mathf.Abs(mousePosition_initial.y - e.mousePosition.y); + } + else if (e.alt && e.button == RIGHT_MOUSE_BUTTON) + { + SetCanvasScale(uvGraphScale + (e.delta.x - e.delta.y) * ((uvGraphScale / MAX_GRAPH_SCALE_SCROLL) * ALT_SCROLL_MODIFIER)); + } + } + + break; + + case EventType.Ignore: + case EventType.MouseUp: + + modifyingUVs_AutoPanel = false; + + if (m_ignore) + { + m_ignore = false; + m_mouseDragging = false; + m_draggingCanvas = false; + m_doubleClick = false; + needsRepaint = true; + return; + } + + if (e.button == LEFT_MOUSE_BUTTON && !m_rightMouseDrag && !modifyingUVs && !m_draggingCanvas) + { + Vector2 hp = handlePosition; + + if (m_mouseDragging) + { + OnMouseDrag(); + } + else + { + if ((ProBuilderEditor.selectMode == SelectMode.Face || ProBuilderEditor.selectMode == SelectMode.TextureFace) && + editor && IsCopyUVSettingsModifiers(e.modifiers)) + { + Face targetFace; + for (int i = 0; i < selection.Length; i++) + { + if (GetFaceFromMousePosition(e.mousePosition, selection[i], out targetFace)) + { + CopyFaceUVSettings(selection[i], targetFace); + return; + } + } + break; + } + + UndoUtility.RecordSelection(selection, "Change Selection"); + + if (Event.current.modifiers == (EventModifiers)0 && editor) + editor.ClearElementSelection(); + + OnMouseClick(e.mousePosition); + + if (m_doubleClick) + SelectUVShell(); + } + + if (!e.shift || !userPivot) + SetHandlePosition(UVSelectionBounds().center, false); + else + SetHandlePosition(hp, true); + } + + if (e.button != RIGHT_MOUSE_BUTTON) + m_rightMouseDrag = false; + + m_mouseDragging = false; + m_doubleClick = false; + m_draggingCanvas = false; + + if (modifyingUVs) + OnFinishUVModification(); + + uvRotation = 0f; + uvScale = Vector2.one; + + needsRepaint = true; + break; + + case EventType.ScrollWheel: + if (!actionWindowRect.Contains(e.mousePosition)) + { + SetCanvasScale(uvGraphScale - e.delta.y * ((uvGraphScale / MAX_GRAPH_SCALE_SCROLL) * SCROLL_MODIFIER)); + e.Use(); + needsRepaint = true; + } + + break; + + case EventType.ContextClick: + + if (!m_rightMouseDrag) + { + var menu = new GenericMenu(); + menu.AddItem(new GUIContent("Selection/Select Island", ""), false, Menu_SelectUVIsland); + menu.AddItem(new GUIContent("Selection/Select Face", ""), false, Menu_SelectUVFace); + menu.AddSeparator(""); + AddItemsToMenu(menu); + menu.ShowAsContext(); + } + else + m_rightMouseDrag = false; + + break; + + default: + return; + } + } + + void HandleKeyInput(Event e) + { + if (e.type != EventType.KeyUp || eatNextKeyUp) + { + eatNextKeyUp = false; + return; + } + +#if SHORTCUT_MANAGER + } +#else + bool used = false; + + switch (e.keyCode) + { + case KeyCode.Keypad0: + case KeyCode.Alpha0: + ResetCanvas(); + e.Use(); + needsRepaint = true; + used = true; + break; + + case KeyCode.Q: + SetTool_Internal(Tool.View); + used = true; + break; + + case KeyCode.W: + SetTool_Internal(Tool.Move); + used = true; + break; + + case KeyCode.E: + SetTool_Internal(Tool.Rotate); + used = true; + break; + + case KeyCode.R: + SetTool_Internal(Tool.Scale); + used = true; + break; + + case KeyCode.F: + FrameSelection(); + used = true; + break; + } + + if (!used && ProBuilderEditor.instance) + ProBuilderEditor.instance.ShortcutCheck(e); + } +#endif + + /** + * Finds the nearest edge to the mouse and sets the `nearestEdge` struct with it's info + */ + bool UpdateNearestElement(Vector2 mousePosition) + { + if (selection == null || m_mouseDragging || modifyingUVs || tool == Tool.View) // || pb_Handle_Utility.CurrentID > -1) + { + if (nearestElement.valid) + { + nearestElement.valid = false; + return true; + } + else + { + return false; + } + } + + Vector2 mpos = GUIToUVPoint(mousePosition); + Vector2[] uv; + Vector2 x, y; + ObjectElementIndex oei = nearestElement; + nearestElement.valid = false; + + switch (ProBuilderEditor.selectMode) + { + case SelectMode.Edge: + case SelectMode.TextureEdge: + float dist, best = 100f; + + try + { + for (int i = 0; i < selection.Length; i++) + { + ProBuilderMesh pb = selection[i]; + uv = pb.texturesInternal; + + for (int n = 0; n < pb.facesInternal.Length; n++) + { + for (int p = 0; p < pb.facesInternal[n].edgesInternal.Length; p++) + { + x = uv[pb.facesInternal[n].edgesInternal[p].a]; + y = uv[pb.facesInternal[n].edgesInternal[p].b]; + + dist = Math.DistancePointLineSegment(mpos, x, y); + + if (dist < best) + { + nearestElement.objectIndex = i; + nearestElement.elementIndex = n; + nearestElement.elementSubIndex = p; + best = dist; + } + } + } + } + } + catch {} + + nearestElement.valid = best < MIN_DIST_MOUSE_EDGE; + break; + + case SelectMode.Face: + case SelectMode.TextureFace: + + try + { + bool superBreak = false; + for (int i = 0; i < selection.Length; i++) + { + uv = selection[i].texturesInternal; + + for (int n = 0; n < selection[i].facesInternal.Length; n++) + { + if (Math.PointInPolygon(uv, mpos, selection[i].facesInternal[n].edgesInternal.AllTriangles())) + { + nearestElement.objectIndex = i; + nearestElement.elementIndex = n; + nearestElement.elementSubIndex = -1; + nearestElement.valid = true; + superBreak = true; + break; + } + + if (superBreak) + break; + } + } + } + catch {} + + break; + } + + return !nearestElement.Equals(oei); + } + + /** + * Allows another window to set the current tool. + * Does *not* update any other editor windows. + */ + public void SetTool(Tool tool) + { + this.tool = tool; + nearestElement.Clear(); + Repaint(); + } + + /** + * Sets the global Tool.current and updates any other windows. + */ + private void SetTool_Internal(Tool tool) + { + SetTool(tool); + + if (tool == Tool.View) + Tools.current = Tool.View; + else + Tools.current = Tool.None; + + if (editor) + { + editor.SetTool(tool); + SceneView.RepaintAll(); + } + } + + bool GetFaceFromMousePosition(Vector2 mousePosition, ProBuilderMesh pb, out Face faceSelected) + { + Vector2 mpos = GUIToUVPoint(mousePosition); + for (int i = 0; i < pb.facesInternal.Length; i++) + { + if (Math.PointInPolygon(pb.texturesInternal, mpos, pb.facesInternal[i].edgesInternal.AllTriangles())) + { + faceSelected = pb.facesInternal[i]; + return true; + } + } + faceSelected = new Face(); + return false; + } + + void OnMouseClick(Vector2 mousePosition) + { + if (selection == null) + return; + + switch (ProBuilderEditor.selectMode) + { + case SelectMode.Edge: + case SelectMode.TextureEdge: + if (nearestElement.valid) + { + ProBuilderMesh mesh = selection[nearestElement.objectIndex]; + + Edge edge = mesh.facesInternal[nearestElement.elementIndex].edgesInternal[nearestElement.elementSubIndex]; + int ind = mesh.IndexOf(mesh.selectedEdges, edge); + + if (ind > -1) + mesh.SetSelectedEdges(mesh.selectedEdges.ToArray().RemoveAt(ind)); + else + mesh.SetSelectedEdges(mesh.selectedEdges.ToArray().Add(edge)); + } + + break; + + case SelectMode.Face: + case SelectMode.TextureFace: + + Face tempFace; + for (int i = 0; i < selection.Length; i++) + { + if (GetFaceFromMousePosition(mousePosition, selection[i], out tempFace)) + { + HashSet<Face> selectedFaces = new HashSet<Face>(selection[i].selectedFacesInternal); + if (selectedFaces.Contains(tempFace)) + selectedFaces.Remove(tempFace); + else + selectedFaces.Add(tempFace); + + selection[i].SetSelectedFaces(selectedFaces.ToArray()); + break; + } + } + break; + + case SelectMode.Vertex: + case SelectMode.TextureVertex: + RefreshUVCoordinates(new Rect(mousePosition.x - 8, mousePosition.y - 8, 16, 16), true); + break; + } + + if (editor) + { + ProBuilderEditor.Refresh(); + SceneView.RepaintAll(); + } + else + { + RefreshSelectedUVCoordinates(); + } + } + + void OnMouseDrag() + { + Event e = Event.current; + + if (editor && !e.shift && !e.control && !e.command) + { + UndoUtility.RecordSelection(selection, "Change Selection"); + editor.ClearElementSelection(); + } + + RefreshUVCoordinates(dragRect, false); + e.Use(); + } + + #endregion + #region Tools + + // tool properties + float uvRotation = 0f; + Vector2 uvOrigin = Vector2.zero; + + Vector2[][] uv_origins = null; + AutoUnwrapSettings[][] m_AutoUnwrapSettingsPreModification; + Vector2 handlePosition = Vector2.zero, + handlePosition_origin = Vector2.zero, + handlePosition_offset = Vector2.zero; + + /** + * Draw an interactive 2d Move tool that affects the current selection of UV coordinates. + */ + void MoveTool() + { + Event e = Event.current; + + Vector2 t_handlePosition = UVToGUIPoint(handlePosition); + + EditorHandleUtility.limitToLeftButton = false; // enable right click drag + t_handlePosition = EditorHandleUtility.PositionHandle2d(1, t_handlePosition, HANDLE_SIZE); + t_handlePosition = GUIToUVPoint(t_handlePosition); + EditorHandleUtility.limitToLeftButton = true; + + if (!e.isMouse) + return; + + // Setting a custom pivot + if ((e.button == RIGHT_MOUSE_BUTTON || (e.alt && e.button == LEFT_MOUSE_BUTTON)) && !Math.Approx2(t_handlePosition, handlePosition, .0001f)) + { + userPivot = true; // flag the handle as having been user set. + + if (ControlKey) + { + handlePosition = ProBuilderSnapping.SnapValue(t_handlePosition, (Vector3) new Vector3Mask((handlePosition - t_handlePosition), Math.handleEpsilon) * s_GridSnapIncrement); + } + else + { + handlePosition = t_handlePosition; + + /** + * Attempt vertex proximity snap if shift key is held + */ + if (ShiftKey) + { + float dist, minDist = MAX_PROXIMITY_SNAP_DIST_CANVAS; + Vector2 offset = Vector2.zero; + for (int i = 0; i < selection.Length; i++) + { + // todo reset MAX_PROXIMITY_SNAP_DIST + int index = EditorHandleUtility.NearestPoint(handlePosition, selection[i].texturesInternal, MAX_PROXIMITY_SNAP_DIST_CANVAS); + + if (index < 0) + continue; + + dist = Vector2.Distance(selection[i].texturesInternal[index], handlePosition); + + if (dist < minDist) + { + minDist = dist; + offset = selection[i].texturesInternal[index] - handlePosition; + } + } + + handlePosition += offset; + } + } + + SetHandlePosition(handlePosition, true); + + return; + } + + // Tool activated - moving some UVs around. + // Unlike rotate and scale tools, if the selected faces are Auto the pb_UV changes will be applied + // in OnFinishUVModification, not at real time. + if (!Math.Approx2(t_handlePosition, handlePosition, Math.handleEpsilon)) + { + // Start of move UV operation + if (!modifyingUVs) + { + UndoUtility.RecordSelection(selection, "Translate UVs"); + handlePosition_origin = handlePosition; + OnBeginUVModification(); + } + + needsRepaint = true; + + Vector2 newUVPosition = t_handlePosition; + + if (ControlKey) + newUVPosition = ProBuilderSnapping.SnapValue(newUVPosition, new Vector3Mask((handlePosition - t_handlePosition), Math.handleEpsilon) * s_GridSnapIncrement); + + for (int n = 0; n < selection.Length; n++) + { + ProBuilderMesh pb = selection[n]; + Vector2[] uvs = UVEditing.GetUVs(pb, channel); + + foreach (int i in m_DistinctIndexesSelection[n]) + uvs[i] = newUVPosition - (uvOrigin - uv_origins[n][i]); + + // set uv positions before figuring snap dist stuff + UVEditing.ApplyUVs(pb, uvs, channel, (!ShiftKey || ControlKey) && channel == 0); + } + + // Proximity snapping + if (ShiftKey && !ControlKey) + { + Vector2 nearestDelta = Vector2.one; + + for (int i = 0; i < selection.Length; i++) + { + Vector2[] sel = UnityEngine.ProBuilder.ArrayUtility.ValuesWithIndexes(UVEditing.GetUVs(selection[i], channel), m_DistinctIndexesSelection[i]); + + for (int n = 0; n < selection.Length; n++) + { + Vector2 offset; + if (EditorHandleUtility.NearestPointDelta(sel, UVEditing.GetUVs(selection[n], channel), i == n ? m_DistinctIndexesSelection[i] : null, MAX_PROXIMITY_SNAP_DIST_UV, out offset)) + { + if (EditorHandleUtility.CurrentAxisConstraint.Mask(offset).sqrMagnitude < nearestDelta.sqrMagnitude) + nearestDelta = offset; + } + } + } + + if (nearestDelta.sqrMagnitude < .003f) + { + nearestDelta = EditorHandleUtility.CurrentAxisConstraint.Mask(nearestDelta); + + for (int i = 0; i < selection.Length; i++) + { + Vector2[] uvs = UVEditing.GetUVs(selection[i], channel); + + foreach (int n in m_DistinctIndexesSelection[i]) + uvs[n] += nearestDelta; + + UVEditing.ApplyUVs(selection[i], uvs, channel); + } + + handlePosition = newUVPosition + nearestDelta; + } + else + { + if (channel == 0) + { + for (int i = 0; i < selection.Length; i++) + { + selection[i].mesh.uv = selection[i].texturesInternal; + } + } + } + } + + RefreshSelectedUVCoordinates(); + + // Update the auto uv parameters + for(int i = 0, c = selection.Length; i < c; i++) + { + var mesh = selection[i]; + var selected = mesh.selectedFaceIndicesInternal; + var faces = mesh.facesInternal; + for(int n = 0, f = mesh.selectedFaceCount; n < f; n++) + { + var face = faces[selected[n]]; + if (face.manualUV) + continue; + var uv = face.uv; + uv.offset = m_AutoUnwrapSettingsPreModification[i][n].offset - (handlePosition - handlePosition_origin); + face.uv = uv; + } + } + } + } + + private static readonly Vector3 Vec3_Zero = Vector3.zero; + + internal void SceneMoveTool(Vector2 delta) + { + /** + * Tool activated - moving some UVs around. + * Unlike rotate and scale tools, if the selected faces are Auto the pb_UV changes will be applied + * in OnFinishUVModification, not at real time. + */ + if (!Math.Approx2(delta, Vec3_Zero, .000001f)) + { + // Start of move UV operation + if (!modifyingUVs) + { + UndoUtility.RecordSelection(selection, "Move UVs"); + OnBeginUVModification(); + uvOrigin = handlePosition; // have to set this one special + handlePosition_origin = handlePosition; + } + + handlePosition.x += delta.x; + handlePosition.y += delta.y; + + if (ControlKey) + handlePosition = ProBuilderSnapping.SnapValue(handlePosition, new Vector3Mask((handlePosition - handlePosition), Math.handleEpsilon) * s_GridSnapIncrement); + + for (int n = 0; n < selection.Length; n++) + { + ProBuilderMesh pb = selection[n]; + Vector2[] uvs = UVEditing.GetUVs(pb, channel); + + foreach (int i in m_DistinctIndexesSelection[n]) + uvs[i] += delta; + + UVEditing.ApplyUVs(pb, uvs, channel); + } + + RefreshSelectedUVCoordinates(); + } + } + + void RotateTool() + { + float t_uvRotation = uvRotation; + + uvRotation = EditorHandleUtility.RotationHandle2d(0, UVToGUIPoint(handlePosition), uvRotation, 128); + + if (!Math.Approx(uvRotation, t_uvRotation)) + { + if (!modifyingUVs) + { + UndoUtility.RecordSelection(selection, "Rotate UVs"); + OnBeginUVModification(); + } + + if (ControlKey) + uvRotation = ProBuilderSnapping.SnapValue(uvRotation, 15f); + + // Do rotation around the handle pivot in manual mode + if (mode == UVMode.Mixed || mode == UVMode.Manual) + { + for (int n = 0; n < selection.Length; n++) + { + ProBuilderMesh pb = selection[n]; + Vector2[] uvs = UVEditing.GetUVs(pb, channel); + + foreach (int i in m_DistinctIndexesSelection[n]) + uvs[i] = uv_origins[n][i].RotateAroundPoint(uvOrigin, uvRotation); + + UVEditing.ApplyUVs(pb, uvs, channel); + } + } + + // Then apply per-face rotation for auto mode + if (mode == UVMode.Mixed || mode == UVMode.Auto) + { + for (int n = 0; n < selection.Length; n++) + { + Face[] autoFaces = System.Array.FindAll(selection[n].selectedFacesInternal, x => !x.manualUV); + + foreach (Face face in autoFaces) + { + var uv = face.uv; + uv.rotation += uvRotation - t_uvRotation; + if (uv.rotation > 360f) + uv.rotation = uv.rotation % 360f; + else if (uv.rotation < 0f) + uv.rotation = 360f + (uv.rotation % 360f); + face.uv = uv; + } + + selection[n].RefreshUV(autoFaces); + } + + RefreshSelectedUVCoordinates(); + } + + nearestElement.valid = false; + } + + needsRepaint = true; + } + + internal void SceneRotateTool(float rotation) + { + if (rotation != uvRotation) + { + if (ControlKey) + rotation = ProBuilderSnapping.SnapValue(rotation, 15f); + + float delta = rotation - uvRotation; + uvRotation = rotation; + + if (!modifyingUVs) + { + UndoUtility.RecordSelection(selection, "Rotate UVs"); + OnBeginUVModification(); + delta = 0f; + } + + // Do rotation around the handle pivot in manual mode + if (mode == UVMode.Mixed || mode == UVMode.Manual) + { + for (int n = 0; n < selection.Length; n++) + { + ProBuilderMesh pb = selection[n]; + Vector2[] uvs = UVEditing.GetUVs(pb, channel); + + foreach (int i in m_DistinctIndexesSelection[n]) + uvs[i] = uv_origins[n][i].RotateAroundPoint(uvOrigin, uvRotation); + + UVEditing.ApplyUVs(pb, uvs, channel); + } + } + + // Then apply per-face rotation for auto mode + if (mode == UVMode.Mixed || mode == UVMode.Auto) + { + for (int n = 0; n < selection.Length; n++) + { + Face[] autoFaces = System.Array.FindAll(selection[n].selectedFacesInternal, x => !x.manualUV); + + foreach (Face face in autoFaces) + { + var uv = face.uv; + uv.rotation += delta; + face.uv = uv; + } + + selection[n].RefreshUV(autoFaces); + } + + RefreshSelectedUVCoordinates(); + } + + nearestElement.valid = false; + } + } + + Vector2 uvScale = Vector2.one; + + void ScaleTool() + { + Vector2 t_uvScale = uvScale; + uvScale = EditorHandleUtility.ScaleHandle2d(2, UVToGUIPoint(handlePosition), uvScale, 128); + + if (ControlKey) + uvScale = ProBuilderSnapping.SnapValue(uvScale, s_GridSnapIncrement); + + if (Math.Approx(uvScale.x, 0f, Mathf.Epsilon)) + uvScale.x = .0001f; + if (Math.Approx(uvScale.y, 0f, Mathf.Epsilon)) + uvScale.y = .0001f; + + if (t_uvScale != uvScale) + { + if (!modifyingUVs) + { + UndoUtility.RecordSelection(selection, "Scale UVs"); + OnBeginUVModification(); + } + + if (mode == UVMode.Mixed || mode == UVMode.Manual) + { + for (int n = 0; n < selection.Length; n++) + { + ProBuilderMesh pb = selection[n]; + Vector2[] uvs = UVEditing.GetUVs(pb, channel); + + foreach (int i in m_DistinctIndexesSelection[n]) + { + uvs[i] = uv_origins[n][i].ScaleAroundPoint(uvOrigin, uvScale); + } + + UVEditing.ApplyUVs(pb, uvs, channel); + } + } + + /** + * Auto mode scales UVs prior to rotation, so we have to do it separately here. + */ + if (mode == UVMode.Mixed || mode == UVMode.Auto) + { + Vector2 scale = uvScale.DivideBy(t_uvScale); + for (int n = 0; n < selection.Length; n++) + { + Face[] autoFaces = System.Array.FindAll(selection[n].selectedFacesInternal, x => !x.manualUV); + foreach (Face face in autoFaces) + { + var uv = face.uv; + uv.scale = Vector2.Scale(face.uv.scale, scale); + face.uv = uv; + } + + selection[n].RefreshUV(autoFaces); + } + + RefreshSelectedUVCoordinates(); + } + + nearestElement.valid = false; + needsRepaint = true; + } + } + + /** + * New scale, previous scale + */ + internal void SceneScaleTool(Vector2 textureScale, Vector2 previousScale) + { + textureScale.x = 1f / textureScale.x; + textureScale.y = 1f / textureScale.y; + + previousScale.x = 1f / previousScale.x; + previousScale.y = 1f / previousScale.y; + + if (ControlKey) + textureScale = ProBuilderSnapping.SnapValue(textureScale, s_GridSnapIncrement); + + if (!modifyingUVs) + { + UndoUtility.RecordSelection(selection, "Scale UVs"); + OnBeginUVModification(); + } + + if (mode == UVMode.Mixed || mode == UVMode.Manual) + { + for (int n = 0; n < selection.Length; n++) + { + ProBuilderMesh pb = selection[n]; + Vector2[] uvs = UVEditing.GetUVs(pb, channel); + + foreach (int i in m_DistinctIndexesSelection[n]) + { + uvs[i] = uv_origins[n][i].ScaleAroundPoint(uvOrigin, textureScale); + } + + UVEditing.ApplyUVs(pb, uvs, channel); + } + } + + // Auto mode scales UVs prior to rotation, so we have to do it separately here. + if (mode == UVMode.Mixed || mode == UVMode.Auto) + { + Vector2 delta = textureScale.DivideBy(previousScale); + + for (int n = 0; n < selection.Length; n++) + { + Face[] autoFaces = System.Array.FindAll(selection[n].selectedFacesInternal, x => !x.manualUV); + foreach (Face face in autoFaces) + { + var uv = face.uv; + uv.scale = Vector2.Scale(face.uv.scale, delta); + face.uv = uv; + } + + selection[n].RefreshUV(autoFaces); + } + + RefreshSelectedUVCoordinates(); + } + + nearestElement.valid = false; + needsRepaint = true; + } + + #endregion + #region UV Graph Drawing + + Vector2 UVGraphCenter = Vector2.zero; + + // private class UVGraphCoordinates + // { + // Remember that Unity GUI coordinates Y origin is the bottom + internal static Vector2 UpperLeft = new Vector2(0f, -1f); + internal static Vector2 UpperRight = new Vector2(1f, -1f); + internal static Vector2 LowerLeft = new Vector2(0f, 0f); + internal static Vector2 LowerRight = new Vector2(1f, 0f); + + private Rect UVGraphZeroZero = new Rect(0, 0, 40, 40); + private Rect UVGraphOneOne = new Rect(0, 0, 40, 40); + + /** + * Must be called inside GL immediate mode context + */ + internal void DrawUVGrid(Color gridColor) + { + Color col = GUI.color; + gridColor.a = .1f; + + if (Event.current.type == EventType.Repaint) + { + GL.PushMatrix(); + EditorHandleUtility.handleMaterial.SetPass(0); + GL.MultMatrix(Handles.matrix); + + GL.Begin(GL.LINES); + GL.Color(gridColor); + + // Grid temp vars + int GridLines = 64; + float StepSize = s_GridSnapIncrement; // In UV coordinates + + // Exponentially scale grid size + while (StepSize * uvGridSize * uvGraphScale < uvGridSize / 10) + StepSize *= 2f; + + // Calculate what offset the grid should be (different from uvGraphOffset in that we always want to render the grid) + Vector2 gridOffset = uvGraphOffset; + gridOffset.x = gridOffset.x % (StepSize * uvGridSize * uvGraphScale); // (uvGridSize * uvGraphScale); + gridOffset.y = gridOffset.y % (StepSize * uvGridSize * uvGraphScale); // (uvGridSize * uvGraphScale); + + Vector2 p0 = Vector2.zero, p1 = Vector2.zero; + + ///==== X axis lines + p0.x = ((StepSize * (GridLines / 2) * uvGridSize) * uvGraphScale) + UVGraphCenter.x + gridOffset.x; + p1.x = ((-StepSize * (GridLines / 2) * uvGridSize) * uvGraphScale) + UVGraphCenter.x + gridOffset.x; + + for (int i = 0; i < GridLines + 1; i++) + { + p0.y = (((StepSize * i) - ((GridLines * StepSize) / 2)) * uvGridSize) * uvGraphScale + UVGraphCenter.y + gridOffset.y; + p1.y = p0.y; + + GL.Vertex(p0); + GL.Vertex(p1); + } + + ///==== Y axis lines + p0.y = ((StepSize * (GridLines / 2) * uvGridSize) * uvGraphScale) + UVGraphCenter.y + gridOffset.y; + p1.y = ((-StepSize * (GridLines / 2) * uvGridSize) * uvGraphScale) + UVGraphCenter.y + gridOffset.y; + + for (int i = 0; i < GridLines + 1; i++) + { + p0.x = (((StepSize * i) - ((GridLines * StepSize) / 2)) * uvGridSize) * uvGraphScale + UVGraphCenter.x + gridOffset.x; + p1.x = p0.x; + + GL.Vertex(p0); + GL.Vertex(p1); + } + + // Box + if (screenshotStatus == ScreenshotStatus.Done) + { + GL.Color(Color.gray); + + GL.Vertex(UVGraphCenter + (UpperLeft * uvGridSize) * uvGraphScale + uvGraphOffset); + GL.Vertex(UVGraphCenter + (UpperRight * uvGridSize) * uvGraphScale + uvGraphOffset); + + GL.Vertex(UVGraphCenter + (UpperRight * uvGridSize) * uvGraphScale + uvGraphOffset); + GL.Vertex(UVGraphCenter + (LowerRight * uvGridSize) * uvGraphScale + uvGraphOffset); + + GL.Color(PreferenceKeys.proBuilderBlue); + + GL.Vertex(UVGraphCenter + (LowerRight * uvGridSize) * uvGraphScale + uvGraphOffset); + GL.Vertex(UVGraphCenter + (LowerLeft * uvGridSize) * uvGraphScale + uvGraphOffset); + + GL.Vertex(UVGraphCenter + (LowerLeft * uvGridSize) * uvGraphScale + uvGraphOffset); + GL.Vertex(UVGraphCenter + (UpperLeft * uvGridSize) * uvGraphScale + uvGraphOffset); + } + + GL.End(); + GL.PopMatrix(); // Pop pop! + } + + GUI.color = gridColor; + + UVGraphZeroZero.x = UVRectIdentity.x + 4; + UVGraphZeroZero.y = UVRectIdentity.y + UVRectIdentity.height + 1; + + UVGraphOneOne.x = UVRectIdentity.x + UVRectIdentity.width + 4; + UVGraphOneOne.y = UVRectIdentity.y; + + Handles.BeginGUI(); + GUI.Label(UVGraphZeroZero, "0, 0"); + GUI.Label(UVGraphOneOne, "1, 1"); + Handles.EndGUI(); + + GUI.color = col; + } + + Rect UVRectIdentity = new Rect(0, 0, 1, 1); + + // re-usable rect for drawing graphs + Rect r = new Rect(0, 0, 0, 0); + + private void DrawUVGraph(Rect rect) + { + var evt = Event.current; + + UVGraphCenter = rect.center; + + UVRectIdentity.width = uvGridSize * uvGraphScale; + UVRectIdentity.height = UVRectIdentity.width; + + UVRectIdentity.x = UVGraphCenter.x + uvGraphOffset.x; + UVRectIdentity.y = UVGraphCenter.y + uvGraphOffset.y - UVRectIdentity.height; + + var texture = EditorMaterialUtility.GetPreviewTexture(m_PreviewMaterial); + + if (m_ShowPreviewMaterial && m_PreviewMaterial && texture != null) + EditorGUI.DrawPreviewTexture(UVRectIdentity, texture, null, ScaleMode.StretchToFill, 0); + + if ((screenshotStatus != ScreenshotStatus.PrepareCanvas && screenshotStatus != ScreenshotStatus.CanvasReady) || !screenshot_hideGrid) + { + DrawUVGrid(GridColorPrimary); + } + + if (selection == null || selection.Length < 1) + return; + + // Draw regular old outlines + Vector2 p = Vector2.zero; + Vector2[] uv; + r.width = DOT_SIZE; + r.height = DOT_SIZE; + + // Draw all vertices if in vertex mode + if (ProBuilderEditor.selectMode.ContainsFlag(SelectMode.Vertex | SelectMode.TextureVertex) && screenshotStatus == ScreenshotStatus.Done) + { + for (int i = 0; i < selection.Length; i++) + { + uv = UVEditing.GetUVs(selection[i], channel); + + if (uv == null) + continue; + + GUI.color = UVColorSecondary; + for (int n = 0; n < uv.Length; n++) + { + p = UVToGUIPoint(uv[n]); + r.x = p.x - HALF_DOT; + r.y = p.y - HALF_DOT; + GUI.DrawTexture(r, dot, ScaleMode.ScaleToFit); + } + + GUI.color = UVColorPrimary; + + if (channel < 1) + { + foreach (int index in selection[i].selectedIndexesInternal) + { + p = UVToGUIPoint(uv[index]); + r.x = p.x - HALF_DOT; + r.y = p.y - HALF_DOT; + GUI.DrawTexture(r, dot, ScaleMode.ScaleToFit); + } + } + } + } + + Handles.color = UVColorGroupIndicator; + + foreach (List<Vector2> lines in incompleteTextureGroupsInSelection_CoordCache) + for (int i = 1; i < lines.Count; i++) + Handles.CircleHandleCap(-1, UVToGUIPoint(lines[i]), Quaternion.identity, 8f, evt.type); + +#if PB_DEBUG + if (s_DebugDrawCoordinateLabels) + { + Handles.BeginGUI(); + r.width = 256f; + r.height = 40f; + + foreach (var mesh in selection) + { + foreach (int i in mesh.selectedIndexesInternal) + { + Vector2 v = mesh.texturesInternal[i]; + Vector2 sv = UVToGUIPoint(v); + r.x = sv.x; + r.y = sv.y; + GUI.Label(r, v.ToString("F2")); + } + } + Handles.EndGUI(); + } +#endif + + GUI.color = Color.white; + + if (evt.type == EventType.Repaint) + { + GL.PushMatrix(); + EditorHandleUtility.handleMaterial.SetPass(0); + GL.MultMatrix(Handles.matrix); + + /** + * Draw incomplete texture group indicators (unless taking a screenshot) + */ + if (screenshotStatus == ScreenshotStatus.Done) + { + GL.Begin(GL.LINES); + GL.Color(UVColorGroupIndicator); + + foreach (List<Vector2> lines in incompleteTextureGroupsInSelection_CoordCache) + { + Vector2 cen = lines[0]; + + for (int i = 1; i < lines.Count; i++) + { + GL.Vertex(UVToGUIPoint(cen)); + GL.Vertex(UVToGUIPoint(lines[i])); + } + } + + GL.End(); + } + + GL.Begin(GL.LINES); + + if (screenshotStatus != ScreenshotStatus.Done) + GL.Color(screenshot_lineColor); + else + GL.Color(UVColorSecondary); + + Vector2 x = Vector2.zero, y = Vector2.zero; + + if (channel == 0) + { + for (int i = 0; i < selection.Length; i++) + { + ProBuilderMesh pb = selection[i]; + uv = pb.texturesInternal; + + for (int n = 0; n < pb.facesInternal.Length; n++) + { + Face face = pb.facesInternal[n]; + + foreach (Edge edge in face.edgesInternal) + { + x = UVToGUIPoint(uv[edge.a]); + y = UVToGUIPoint(uv[edge.b]); + + GL.Vertex3(x.x, x.y, 0f); + GL.Vertex3(y.x, y.y, 0f); + } + } + } + } + else + { + Vector2 z = Vector2.zero; + + for (int i = 0; i < selection.Length; i++) + { + uv = UVEditing.GetUVs(selection[i], channel); + + if (uv == null || uv.Length != selection[i].mesh.vertexCount) + continue; + + int[] triangles = selection[i].mesh.triangles; + + for (int n = 0; n < triangles.Length; n += 3) + { + x = UVToGUIPoint(uv[triangles[n]]); + y = UVToGUIPoint(uv[triangles[n + 1]]); + z = UVToGUIPoint(uv[triangles[n + 2]]); + + GL.Vertex3(x.x, x.y, 0f); + GL.Vertex3(y.x, y.y, 0f); + + GL.Vertex3(y.x, y.y, 0f); + GL.Vertex3(z.x, z.y, 0f); + + GL.Vertex3(z.x, z.y, 0f); + GL.Vertex3(x.x, x.y, 0f); + } + } + } + + GL.End(); + + /** + * Draw selected UVs with shiny green color and dots + */ + if (screenshotStatus != ScreenshotStatus.Done) + { + GL.PopMatrix(); + return; + } + + // If in read-only mode (anything other than UV0) don't render selection stuff + if (channel == 0) + { + GL.Begin(GL.LINES); + GL.Color(UVColorPrimary); + + for (int i = 0; i < selection.Length; i++) + { + ProBuilderMesh pb = selection[i]; + uv = pb.texturesInternal; + + if (pb.selectedEdgeCount > 0) + { + foreach (Edge edge in pb.selectedEdgesInternal) + { + x = UVToGUIPoint(uv[edge.a]); + y = UVToGUIPoint(uv[edge.b]); + + GL.Vertex3(x.x, x.y, 0f); + GL.Vertex3(y.x, y.y, 0f); + + // #if PB_DEBUG + // GUI.Label( new Rect(x.x, x.y, 120, 20), pb.uv[edge.x].ToString() ); + // GUI.Label( new Rect(y.x, y.y, 120, 20), pb.uv[edge.y].ToString() ); + // #endif + } + } + } + + GL.End(); + + switch (ProBuilderEditor.selectMode) + { + case SelectMode.Edge: + case SelectMode.TextureEdge: + + GL.Begin(GL.LINES); + GL.Color(Color.red); + if (nearestElement.valid && nearestElement.elementSubIndex > -1 && !modifyingUVs) + { + Edge edge = selection[nearestElement.objectIndex].facesInternal[nearestElement.elementIndex].edgesInternal[nearestElement.elementSubIndex]; + GL.Vertex(UVToGUIPoint(selection[nearestElement.objectIndex].texturesInternal[edge.a])); + GL.Vertex(UVToGUIPoint(selection[nearestElement.objectIndex].texturesInternal[edge.b])); + } + + GL.End(); + + break; + + case SelectMode.Face: + case SelectMode.TextureFace: + { + Vector3 v = Vector3.zero; + + if (nearestElement.valid && !m_mouseDragging) + { + GL.Begin(GL.TRIANGLES); + + GL.Color(selection[nearestElement.objectIndex].facesInternal[nearestElement.elementIndex].manualUV ? HOVER_COLOR_MANUAL : HOVER_COLOR_AUTO); + int[] tris = selection[nearestElement.objectIndex].facesInternal[nearestElement.elementIndex].indexesInternal; + + for (int i = 0; i < tris.Length; i += 3) + { + v = UVToGUIPoint(selection[nearestElement.objectIndex].texturesInternal[tris[i + 0]]); + GL.Vertex3(v.x, v.y, 0f); + v = UVToGUIPoint(selection[nearestElement.objectIndex].texturesInternal[tris[i + 1]]); + GL.Vertex3(v.x, v.y, 0f); + v = UVToGUIPoint(selection[nearestElement.objectIndex].texturesInternal[tris[i + 2]]); + GL.Vertex3(v.x, v.y, 0f); + } + + GL.End(); + } + + GL.Begin(GL.TRIANGLES); + for (int i = 0; i < selection.Length; i++) + { + foreach (Face face in selection[i].selectedFacesInternal) + { + GL.Color(face.manualUV ? SELECTED_COLOR_MANUAL : SELECTED_COLOR_AUTO); + + int[] tris = face.indexesInternal; + + for (int n = 0; n < tris.Length; n += 3) + { + v = UVToGUIPoint(selection[i].texturesInternal[tris[n + 0]]); + GL.Vertex3(v.x, v.y, 0f); + v = UVToGUIPoint(selection[i].texturesInternal[tris[n + 1]]); + GL.Vertex3(v.x, v.y, 0f); + v = UVToGUIPoint(selection[i].texturesInternal[tris[n + 2]]); + GL.Vertex3(v.x, v.y, 0f); + } + } + } + + GL.End(); + } + break; + } + } + + GL.PopMatrix(); + } + } + + #endregion + #region UV Canvas Operations + + /** + * Zooms in on the current UV selection + */ + void FrameSelection() + { + needsRepaint = true; + + if (selection == null || selection.Length < 1 || (editor && MeshSelection.selectedVertexCount < 1)) + { + SetCanvasCenter(Event.current.mousePosition - UVGraphCenter - uvGraphOffset); + return; + } + + SetCanvasCenter(selectedGuiBounds.center - uvGraphOffset - UVGraphCenter); + + if (UVSelectionBounds().size.sqrMagnitude > 0f) + { + Bounds2D bounds = UVSelectionBounds(); + + float x = (float)screenWidth / ((bounds.size.x * uvGridSize) * 1.5f); + float y = (float)(screenHeight - 96) / ((bounds.size.y * uvGridSize) * 1.5f); + + SetCanvasScale(Mathf.Min(x, y)); + } + } + + /** + * Sets the canvas scale. 1 is full size, .1 is super zoomed, and 2 would be 2x out. + */ + void SetCanvasScale(float zoom) + { + Vector2 center = -(uvGraphOffset / uvGraphScale); + uvGraphScale = Mathf.Clamp(zoom, MIN_GRAPH_SCALE, MAX_GRAPH_SCALE); + SetCanvasCenter(center * uvGraphScale); + } + + /** + * Center the canvas on this point. Should be in GUI coordinates. + */ + void SetCanvasCenter(Vector2 center) + { + uvGraphOffset = center; + uvGraphOffset.x = -uvGraphOffset.x; + uvGraphOffset.y = -uvGraphOffset.y; + } + + void ResetCanvas() + { + uvGraphScale = 1f; + SetCanvasCenter(new Vector2(.5f, -.5f) * uvGridSize * uvGraphScale); + uvGraphOffset = Vector2.zero; + } + + /** + * Set the handlePosition to this UV coordinate. + */ + bool userPivot = false; + + void SetHandlePosition(Vector2 uvPoint, bool isUserSet) + { + if (float.IsNaN(uvPoint.x) || float.IsNaN(uvPoint.y)) + return; + + userPivot = isUserSet; + handlePosition_offset = UVSelectionBounds().center - uvPoint; + handlePosition = uvPoint; + } + + /** + * Used by pb_Editor to reset the pivot offset when adding or removing faces in the scenview. + */ + public void ResetUserPivot() + { + handlePosition_offset = Vector2.zero; + } + + Bounds2D GetBounds(int i, int f, Vector2[][] array) + { + return new Bounds2D(UnityEngine.ProBuilder.ArrayUtility.ValuesWithIndexes(array[i], selection[i].facesInternal[f].distinctIndexesInternal)); + } + + /** + * Convert a point on the UV canvas (0,1 scaled to guisize) to a GUI coordinate. + */ + Vector2 UVToGUIPoint(Vector2 v) + { + Vector2 p = new Vector2(v.x, -v.y); + return UVGraphCenter + (p * uvGridSize * uvGraphScale) + uvGraphOffset; + } + + Vector2 GUIToUVPoint(Vector2 v) + { + Vector2 p = (v - (UVGraphCenter + uvGraphOffset)) / (uvGraphScale * uvGridSize); + p.y = -p.y; + return p; + } + + Vector3 CanvasToGUIPoint(Vector2 v) + { + v.x = UVGraphCenter.x + (v.x * uvGraphScale + uvGraphOffset.x); + v.y = UVGraphCenter.y + (v.y * uvGraphScale + uvGraphOffset.y); + return v; + } + + /** + * Convert a mouse position in GUI space to a canvas relative point + */ + Vector2 GUIToCanvasPoint(Vector2 v) + { + return ((v - UVGraphCenter) - uvGraphOffset) / uvGraphScale; + } + + private Bounds2D _selected_gui_bounds = new Bounds2D(Vector2.zero, Vector2.zero); + + /** + * Returns the bounds of the current selection in GUI space. + */ + Bounds2D selectedGuiBounds + { + get + { + Bounds2D uvBounds = UVSelectionBounds(); + _selected_gui_bounds.center = UVToGUIPoint(uvBounds.center); + _selected_gui_bounds.size = uvBounds.size * uvGridSize * uvGraphScale; + return _selected_gui_bounds; + } + } + + /// <summary> + /// Returns the bounds of the current selection in UV space + /// </summary> + /// <returns></returns> + Bounds2D UVSelectionBounds() + { + float xMin = 0f, xMax = 0f, yMin = 0f, yMax = 0f; + bool first = true; + for (int n = 0; n < selection.Length; n++) + { + Vector2[] uv = selection[n].texturesInternal; + + foreach (int i in m_DistinctIndexesSelection[n]) + { + if (first) + { + xMin = uv[i].x; + xMax = xMin; + yMin = uv[i].y; + yMax = yMin; + first = false; + } + else + { + xMin = Mathf.Min(xMin, uv[i].x); + yMin = Mathf.Min(yMin, uv[i].y); + + xMax = Mathf.Max(xMax, uv[i].x); + yMax = Mathf.Max(yMax, uv[i].y); + } + } + } + + return new Bounds2D(new Vector2((xMin + xMax) / 2f, (yMin + yMax) / 2f), new Vector2(xMax - xMin, yMax - yMin)); + } + + /// <summary> + /// Returns the minimal u and v values of the current selection in UV space. + /// </summary> + /// <returns></returns> + internal Vector2 UVSelectionMinimalUV() + { + Vector2 minimalUV = Vector2.zero; + for (int n = 0; n < selection.Length; n++) + { + Vector2[] uv = selection[n].texturesInternal; + minimalUV = UVEditing.FindMinimalUV(uv, m_DistinctIndexesSelection[n], minimalUV.x, minimalUV.y); + } + + return minimalUV; + } + + #endregion + #region Refresh / Set + + void UpdateMode() + { + switch (ProBuilderEditor.selectMode) + { + case SelectMode.Face: + case SelectMode.TextureFace: + bool hasSelectedFaces = false; + for (int i = 0; i < selection.Length; ++i) + { + if (selection[i].selectedFaceCount > 0) + { + hasSelectedFaces = true; + break; + } + } + + if (hasSelectedFaces) + { + // @todo write a more effecient method for this + List<bool> manual = new List<bool>(); + for (int i = 0; i < selection.Length; i++) + manual.AddRange(selection[i].selectedFacesInternal.Select(x => x.manualUV).ToList()); + int c = manual.Distinct().Count(); + if (c > 1) + mode = UVMode.Mixed; + else if (c > 0) + mode = manual[0] ? UVMode.Manual : UVMode.Auto; + } + else + { + mode = UVMode.NoSelection; + } + break; + + case SelectMode.Edge: + case SelectMode.TextureEdge: + bool hasEdgeSelected = false; + for (int i = 0; i < selection.Length; ++i) + { + if (selection[i].selectedEdgeCount > 0) + { + hasEdgeSelected = true; + break; + } + } + + mode = hasEdgeSelected ? UVMode.Manual : UVMode.NoSelection; + break; + + case SelectMode.Vertex: + case SelectMode.TextureVertex: + bool hasVertexSelected = false; + for (int i = 0; i < selection.Length; ++i) + { + if (selection[i].selectedVertexCount > 0) + { + hasVertexSelected = true; + break; + } + } + + mode = hasVertexSelected ? UVMode.Manual : UVMode.NoSelection; + break; + + default: + mode = UVMode.NoSelection; + break; + } + } + + // Doesn't call Repaint for you + void RefreshUVCoordinates() + { + RefreshUVCoordinates(null, false); + } + + /** + * If dragRect is null, the selected UV array will be derived using the selected ProBuilder faces. + * If it ain't null, selected UVs will be set to the UV coordinates contained within the drag rect. + */ + void RefreshUVCoordinates(Rect? dragRect, bool isClick) + { + if (editor == null || selection == null) + return; + + // Convert dragrect from Unity GUI space to UV coordinates + Bounds2D dragBounds; + + if (dragRect != null) + dragBounds = new Bounds2D(GUIToUVPoint(((Rect)dragRect).center), new Vector2(((Rect)dragRect).width, ((Rect)dragRect).height) / (uvGraphScale * uvGridSize)); + else + dragBounds = new Bounds2D(Vector2.zero, Vector2.zero); + + for (int i = 0; i < selection.Length; i++) + { + ProBuilderMesh pb = selection[i]; + + Vector2[] mshUV = UVEditing.GetUVs(pb, channel); + + // if this is the uv0 channel and the count doesn't match pb vertex count, reset + if (channel == 0 && (mshUV == null || mshUV.Length != pb.vertexCount || mshUV.Any(x => float.IsNaN(x.x) || float.IsNaN(x.y)))) + { + mshUV = new Vector2[pb.vertexCount]; + UVEditing.ApplyUVs(pb, mshUV, channel); + } + + int len = mshUV != null ? mshUV.Length : 0; + + // this should be separate from RefreshUVCoordinates + if (dragRect != null && channel == 0) + { + switch (ProBuilderEditor.selectMode) + { + case SelectMode.Vertex: + case SelectMode.TextureVertex: + List<int> selectedTris = new List<int>(pb.selectedIndexesInternal); + + for (int j = 0; j < len; j++) + { + if (dragBounds.ContainsPoint(mshUV[j])) + { + int indx = selectedTris.IndexOf(j); + + if (indx > -1) + selectedTris.RemoveAt(indx); + else + selectedTris.Add(j); + + // if this is a click, only do one thing per-click + if (isClick) + break; + } + } + + pb.SetSelectedVertices(selectedTris.ToArray()); + break; + + case SelectMode.Edge: + case SelectMode.TextureEdge: + List<Edge> selectedEdges = new List<Edge>(pb.selectedEdges); + + for (int n = 0; n < pb.facesInternal.Length; n++) + { + for (int p = 0; p < pb.facesInternal[n].edgesInternal.Length; p++) + { + Edge edge = pb.facesInternal[n].edgesInternal[p]; + + if (dragBounds.IntersectsLineSegment(mshUV[edge.a], mshUV[edge.b])) + { + if (!selectedEdges.Contains(edge)) + selectedEdges.Add(edge); + else + selectedEdges.Remove(edge); + } + } + } + + pb.SetSelectedEdges(selectedEdges.ToArray()); + break; + + /** + * Check if any of the faces intersect with the mousedrag rect. + */ + case SelectMode.Face: + case SelectMode.TextureFace: + + HashSet<Face> selectedFaces = new HashSet<Face>(selection[i].selectedFacesInternal); + + for (int n = 0; n < pb.facesInternal.Length; n++) + { + Face face = pb.facesInternal[n]; + + int[] distinctIndexes = pb.facesInternal[n].distinctIndexesInternal; + + bool allPointsContained = true; + + for (int t = 0; t < distinctIndexes.Length; t++) + { + if (!dragBounds.ContainsPoint(mshUV[distinctIndexes[t]])) + { + allPointsContained = false; + break; + } + } + + if (allPointsContained) + { + if (selectedFaces.Contains(face)) + selectedFaces.Remove(face); + else + selectedFaces.Add(face); + } + } + + selection[i].SetSelectedFaces(selectedFaces.ToArray()); + + break; + } + + ProBuilderEditor.Refresh(); + SceneView.RepaintAll(); + } + } + + m_PreviewMaterial = EditorMaterialUtility.GetActiveSelection(); + + UpdateMode(); + + handlePosition = UVSelectionBounds().center - handlePosition_offset; + } + + /** + * Refresh only the selected UV coordinates. + */ + void RefreshSelectedUVCoordinates() + { + handlePosition = UVSelectionBounds().center - handlePosition_offset; + } + + #endregion + #region UV Toolbar + + Rect toolbarRect_tool = new Rect(PAD, PAD, 130f, 24f); + Rect toolbarRect_select = new Rect(PAD + 130 + PAD, PAD, 130f, 24f); + + GUIStyle commandStyle = null; + + void DrawUVTools(Rect rect) + { + GUI.BeginGroup(rect); + + if (commandStyle == null) + commandStyle = EditorGUIUtility.GetBuiltinSkin(EditorSkin.Inspector).FindStyle("Command"); + + EditorGUI.BeginChangeCheck(); + + tool = (Tool)GUI.Toolbar(toolbarRect_tool, (int)tool < 0 ? 0 : (int)tool, ToolIcons, "Command"); + + if (EditorGUI.EndChangeCheck()) + { + SetTool_Internal(tool); + SceneView.RepaintAll(); + } + + ProBuilderEditor.selectMode = UI.EditorGUIUtility.DoElementModeToolbar(toolbarRect_select, ProBuilderEditor.selectMode); + + // begin Editor pref toggles (Show Texture, Lock UV sceneview handle, etc) + Rect editor_toggles_rect = new Rect(toolbarRect_select.x + 140, PAD - 1, 36f, 22f); + + if (editor) + { + gc_SceneViewUVHandles.image = ProBuilderEditor.selectMode.IsTextureMode() ? icon_sceneUV_on : icon_sceneUV_off; + + if (GUI.Button(editor_toggles_rect, gc_SceneViewUVHandles)) + { + if (ProBuilderEditor.selectMode.IsTextureMode()) + ProBuilderEditor.selectMode = ProBuilderEditor.selectMode.GetPositionMode(); + else + { + VertexManipulationTool.handleOrientation = HandleOrientation.ActiveElement; + ProBuilderEditor.selectMode = ProBuilderEditor.selectMode.GetTextureMode(); + } + + SceneView.RepaintAll(); + } + } + + GUI.enabled = true; + + editor_toggles_rect.x += editor_toggles_rect.width + PAD; + + gc_ShowPreviewTexture.image = m_ShowPreviewMaterial ? icon_textureMode_on : icon_textureMode_off; + + if (GUI.Button(editor_toggles_rect, gc_ShowPreviewTexture)) + m_ShowPreviewMaterial.SetValue(!m_ShowPreviewMaterial, true); + + editor_toggles_rect.x += editor_toggles_rect.width + PAD; + + if (GUI.Button(editor_toggles_rect, gc_RenderUV)) + ScreenshotMenu(); + + int t_channel = channel; + + Rect channelRect = new Rect( + this.position.width - (108 + 8), + editor_toggles_rect.y + 3, + 108f, + 20f); + + channel = EditorGUI.IntPopup(channelRect, channel, UV_CHANNELS_STR, UV_CHANNELS); + + if (channel != t_channel) + { + if (t_channel == 0) + { + foreach (ProBuilderMesh pb in selection) + pb.SetSelectedVertices(new int[0] {}); + } + + RefreshUVCoordinates(); + } + + GUI.EndGroup(); + } + + static Rect ActionWindowDragRect = new Rect(0, 6, 10000, 30); + static Editor uv2Editor = null; + + void DrawActionWindow(int windowIndex) + { + if (channel == 0) + { + if (mode != UVMode.NoSelection) + GUILayout.Label("UV Mode: " + mode, EditorStyles.boldLabel); + + switch (mode) + { + case UVMode.Auto: + DrawAutoModeUI(); + break; + + case UVMode.Manual: + DrawManualModeUI(); + break; + + case UVMode.Mixed: + + if (GUILayout.Button(gc_ConvertToManual, EditorStyles.miniButton)) + Menu_SetManualUV(); + + if (GUILayout.Button(gc_ConvertToAuto, EditorStyles.miniButton)) + Menu_SetAutoUV(); + + break; + + case UVMode.NoSelection: + GUILayout.Label(gc_NoUvSelected, EditorStyles.centeredGreyMiniLabel, GUILayout.ExpandHeight(true)); + break; + } + } + else if (channel == 1) + { + EditorUtility.CreateCachedEditor<UnwrapParametersEditor>(selection, ref uv2Editor); + + if (uv2Editor != null) + { + GUILayout.Space(4); + uv2Editor.hideFlags = HideFlags.HideAndDontSave; + uv2Editor.OnInspectorGUI(); + } + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Rebuild Selected UV2")) + { + foreach (var mesh in selection) + mesh.Optimize(true); + } + + GUILayout.Space(5); + } + + GUI.DragWindow(ActionWindowDragRect); + actionWindowRect = UI.EditorGUILayout.DoResizeHandle(actionWindowRect, minimumInspectorWidth, minimumInspectorHeight); + } + + bool modifyingUVs_AutoPanel = false; + + void DrawAutoModeUI() + { + if (GUILayout.Button("Convert to Manual", EditorStyles.miniButton)) + Menu_SetManualUV(); + + bool isKeyDown = Event.current.type == EventType.KeyDown; + + if (AutoUVEditor.OnGUI(selection, (int)actionWindowRect.width)) + { + if (!modifyingUVs_AutoPanel) + { + modifyingUVs_AutoPanel = true; + + foreach (ProBuilderMesh pb in selection) + { + pb.ToMesh(); + pb.Refresh(); + } + } + + foreach (var kvp in MeshSelection.selectedFacesInEditZone) + kvp.Key.RefreshUV(kvp.Value); + + RefreshSelectedUVCoordinates(); + } + +#if UNITY_2017_3_OR_NEWER + if (isKeyDown && Event.current.type == EventType.Used) +#else + if (isKeyDown && Event.current.type == EventType.used) +#endif + eatNextKeyUp = true; + } + + bool tool_weldButton = false; + + Vector2 scroll = Vector2.zero; + + void DrawManualModeUI() + { + GUI.enabled = MeshSelection.selectedFaceCount > 0; + + if (GUILayout.Button(gc_ConvertToAuto, EditorStyles.miniButton)) + Menu_SetAutoUV(); + + // Allowd scrollview to be enabled. + // Otherwise, we won't be able to use the scrollbar without selecting a face. + GUI.enabled = true; + scroll = EditorGUILayout.BeginScrollView(scroll); + GUI.enabled = MeshSelection.selectedFaceCount > 0; + + /** + * Projection Methods + */ + GUILayout.Label("Project UVs", EditorStyles.miniBoldLabel); + + GUILayout.BeginHorizontal(); + + if (GUILayout.Button("Planar", EditorStyles.miniButton)) + Menu_PlanarProject(); + + if (GUILayout.Button("Box", EditorStyles.miniButton)) + Menu_BoxProject(); + + GUILayout.EndHorizontal(); + + /** + * Selection + */ + GUI.enabled = MeshSelection.selectedVertexCount > 0; + GUILayout.Label("Selection", EditorStyles.miniBoldLabel); + + if (GUILayout.Button("Select Island", EditorStyles.miniButton)) + Menu_SelectUVIsland(); + + GUI.enabled = MeshSelection.selectedVertexCount > 0 && ProBuilderEditor.selectMode != SelectMode.Face; + if (GUILayout.Button("Select Face", EditorStyles.miniButton)) + Menu_SelectUVFace(); + + /** + * Edit + */ + GUILayout.Label("Edit", EditorStyles.miniBoldLabel); + + GUI.enabled = MeshSelection.selectedVertexCount > 1; + + tool_weldButton = UI.EditorGUIUtility.ToolSettingsGUI("Weld", "Merge selected vertices that are within a specified distance of one another.", + tool_weldButton, + Menu_SewUVs, + WeldButtonGUI, + selection); + + if (GUILayout.Button("Collapse UVs", EditorStyles.miniButton)) + Menu_CollapseUVs(); + + GUI.enabled = MeshSelection.selectedVertexCount > 1; + if (GUILayout.Button("Split UVs", EditorStyles.miniButton)) + Menu_SplitUVs(); + + GUILayout.Space(4); + + if (GUILayout.Button("Flip Horizontal", EditorStyles.miniButton)) + Menu_FlipUVs(Vector2.up); + + if (GUILayout.Button("Flip Vertical", EditorStyles.miniButton)) + Menu_FlipUVs(Vector2.right); + + GUILayout.Space(4); + + if (GUILayout.Button("Fit UVs", EditorStyles.miniButton)) + Menu_FitUVs(); + + GUI.enabled = true; + + EditorGUILayout.EndScrollView(); + } + + const float k_MinimumSewUVDistance = .001f; + Pref<float> m_WeldDistance = new Pref<float>("UVEditor.weldDistance", .01f); + + void WeldButtonGUI() + { + EditorGUI.BeginChangeCheck(); + + EditorGUIUtility.labelWidth = 30f; + m_WeldDistance.value = EditorGUILayout.FloatField(new GUIContent("Max", "The maximum distance between two vertices in order to be welded together."), m_WeldDistance); + EditorGUIUtility.labelWidth = 0f; + + if (m_WeldDistance <= k_MinimumSewUVDistance) + m_WeldDistance.value = k_MinimumSewUVDistance; + + if (EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + } + + #endregion + #region UV Selection + + /** + * Given selected tris, return an array of all indexes attached to face + */ + private void SelectUVShell() + { + if (selection == null || selection.Length < 1) + return; + + foreach (ProBuilderMesh pb in selection) + { + Face[] faces = GetFaces(pb, pb.selectedIndexesInternal); + + List<int> elementGroups = new List<int>(); + List<int> textureGroups = new List<int>(); + + foreach (Face f in faces) + { + if (f.manualUV) + elementGroups.Add(f.elementGroup); + else + textureGroups.Add(f.textureGroup); + } + + IEnumerable<Face> matches = System.Array.FindAll(pb.facesInternal, x => + (x.manualUV && x.elementGroup > -1 && elementGroups.Contains(x.elementGroup)) || + (!x.manualUV && x.textureGroup > 0 && textureGroups.Contains(x.textureGroup))); + + pb.SetSelectedFaces(faces.Union(matches).ToArray()); + ProBuilderEditor.Refresh(); + } + } + + /** + * If any of the faces in @selection are AutoUV and in a texture group, this + * augments the texture group buddies to the selection and returns it. + */ + private Face[] SelectTextureGroups(ProBuilderMesh pb, Face[] selection) + { + List<int> texGroups = selection.Select(x => x.textureGroup).Where(x => x > 0).Distinct().ToList(); + Face[] sel = System.Array.FindAll(pb.facesInternal, x => !x.manualUV && texGroups.Contains(x.textureGroup)); + + return selection.Union(sel).ToArray(); + } + + /** + * If selection contains faces that are part of a texture group, and not all of those group faces are in the selection, + * return a pb_Face[] of that entire group so that we can show the user some indication of that groupage. + */ + private List<Face[]> GetIncompleteTextureGroups(ProBuilderMesh pb, Face[] selection) + { + // get distinct list of all selected texture groups + List<int> groups = selection.Select(x => x.textureGroup).Where(x => x > 0).Distinct().ToList(); + List<Face[]> incompleteGroups = new List<Face[]>(); + + // figure out how many + for (int i = 0; i < groups.Count; i++) + { + Face[] whole_group = System.Array.FindAll(pb.facesInternal, x => !x.manualUV && groups[i] == x.textureGroup); + int inSelection = System.Array.FindAll(selection, x => x.textureGroup == groups[i]).Length; + + if (inSelection != whole_group.Length) + incompleteGroups.Add(whole_group); + } + + return incompleteGroups; + } + + /** + * Sets the SceneView and UV selection to include any faces with currently selected indexes. + */ + private void SelectUVFace() + { + if (selection == null || selection.Length < 1) + return; + + foreach (ProBuilderMesh pb in selection) + { + Face[] faces = GetFaces(pb, pb.selectedIndexesInternal); + pb.SetSelectedFaces(faces); + ProBuilderEditor.Refresh(); + } + } + + /** + * Element Groups are used to associate faces that share UV seams. In this + * way, we can easily select UV shells by grouping all elements as opposed + * to iterating through and checking nearby faces every time. + */ + // todo Remove elementGroup and use WingedEdge instead + void RefreshElementGroups(ProBuilderMesh pb) + { + foreach (Face f in pb.facesInternal) + f.elementGroup = -1; + + SharedVertex[] sharedUVs = pb.sharedTextures; + + int eg = 0; + foreach (SharedVertex sharedVertex in sharedUVs) + { + if (sharedVertex.arrayInternal.Length < 2) + continue; + + Face[] faces = GetFaces(pb, sharedVertex); + + int cur = pb.UnusedElementGroup(eg++); + + foreach (Face f in faces) + { + if (f.elementGroup > -1) + { + int g = f.elementGroup; + + foreach (Face fin in pb.facesInternal) + if (fin.elementGroup == g) + fin.elementGroup = cur; + } + + f.elementGroup = cur; + } + } + } + + /** + * Get all faces that contain any of the passed vertex indexes. + */ + Face[] GetFaces(ProBuilderMesh pb, IEnumerable<int> indexes) + { + List<Face> faces = new List<Face>(); + + foreach (Face f in pb.facesInternal) + { + foreach (int i in f.distinctIndexesInternal) + { + if (indexes.Contains(i)) + { + faces.Add(f); + break; + } + } + } + + return faces.Distinct().ToArray(); + } + + /// <summary> + /// Finds all faces attached to the current selection and marks the faces as having been manually modified. + /// </summary> + /// <param name="mesh"></param> + void FlagSelectedFacesAsManual(ProBuilderMesh mesh) + { + // Mark selected UV faces manualUV flag true + foreach (Face f in GetFaces(mesh, mesh.selectedIndexesInternal)) + { + f.textureGroup = -1; + f.manualUV = true; + } + } + + /// <summary> + /// Creates a copy of each msh.uv array in a jagged array, and stores the average of all points. + /// </summary> + /// <param name="uvCopy"></param> + void CopySelectionUVs(out Vector2[][] uvCopy) + { + uvCopy = new Vector2[selection.Length][]; + for (int i = 0; i < selection.Length; i++) + { + ProBuilderMesh pb = selection[i]; + uvCopy[i] = new Vector2[pb.vertexCount]; + System.Array.Copy(UVEditing.GetUVs(pb, channel), uvCopy[i], pb.vertexCount); + } + } + + #endregion + #region Menu Commands + + /// <summary> + /// Planar project UVs on all selected faces in selection. + /// </summary> + internal void Menu_PlanarProject() + { + UndoUtility.RecordSelection(selection, "Planar Project Faces"); + int projected = 0; + + for (int i = 0; i < selection.Length; i++) + { + if (selection[i].selectedFacesInternal.Length > 0) + { + selection[i].ToMesh(); // Remove UV2 modifications + UVEditing.SplitUVs(selection[i], selection[i].selectedIndexesInternal); + UVEditing.ProjectFacesAuto(selection[i], selection[i].selectedFacesInternal, channel); + + foreach (Face f in selection[i].selectedFacesInternal) + f.manualUV = true; + + RefreshElementGroups(selection[i]); + + projected++; + } + } + + SetSelectedUVsWithSceneView(); + + if (projected > 0) + { + CenterUVsAtPoint(UVSelectionMinimalUV(), LowerLeft); + ResetUserPivot(); + } + + foreach (ProBuilderMesh pb in selection) + { + pb.Refresh(); + pb.Optimize(); + } + + EditorUtility.ShowNotification(this, projected > 0 ? "Planar Project" : "Nothing Selected"); + + // Special case + RefreshUVCoordinates(); + needsRepaint = true; + } + + /** + * Box project all selected faces in selection. + */ + public void Menu_BoxProject() + { + int p = 0; + UndoUtility.RegisterCompleteObjectUndo(selection, "Box Project Faces"); + + for (int i = 0; i < selection.Length; i++) + { + selection[i].ToMesh(); + + if (selection[i].selectedFacesInternal.Length > 0) + { + UVEditing.ProjectFacesBox(selection[i], selection[i].selectedFacesInternal, LowerLeft, channel); + p++; + } + } + + SetSelectedUVsWithSceneView(); + + if (p > 0) + { + ResetUserPivot(); + } + + foreach (ProBuilderMesh pb in selection) + { + pb.Refresh(); + pb.Optimize(); + } + + EditorUtility.ShowNotification(this, "Box Project UVs"); + + // Special case + RefreshUVCoordinates(); + needsRepaint = true; + } + + /** + * Spherically project all selected indexes in selection. + */ + public void Menu_SphericalProject() + { + int p = 0; + UndoUtility.RegisterCompleteObjectUndo(selection, "Spherical Project UVs"); + + for (int i = 0; i < selection.Length; i++) + { + selection[i].ToMesh(); + + if (selection[i].selectedVertexCount > 0) + { + UVEditing.ProjectFacesSphere(selection[i], selection[i].selectedIndexesInternal, channel); + p++; + } + } + + SetSelectedUVsWithSceneView(); + + if (p > 0) + { + CenterUVsAtPoint(UVSelectionBounds().center, handlePosition); + ResetUserPivot(); + } + + foreach (ProBuilderMesh pb in selection) + { + pb.Refresh(); + pb.Optimize(); + } + + EditorUtility.ShowNotification(this, "Spherical Project UVs"); + + // Special case + RefreshUVCoordinates(); + needsRepaint = true; + } + + /** + * Reset all selected faces to use the default Automatic unwrapping. Removes + * any modifications made by the user. + */ + public void Menu_SetAutoUV() + { + SetIsManual(false); + } + + /** + * Sets all faces to manual UV mode. + */ + public void Menu_SetManualUV() + { + SetIsManual(true); + } + + public void SetIsManual(bool isManual) + { + UndoUtility.RegisterCompleteObjectUndo(selection, isManual ? "Set Faces Manual" : "Set Faces Auto"); + + foreach (ProBuilderMesh pb in selection) + { + pb.ToMesh(); + UVEditing.SetAutoUV(pb, pb.selectedFacesInternal, !isManual); + pb.Refresh(); + pb.Optimize(); + } + + SetSelectedUVsWithSceneView(); + RefreshUVCoordinates(); + + EditorUtility.ShowNotification(this, "Set " + MeshSelection.selectedFaceCount + " Faces " + (isManual ? "Manual" : "Auto")); + } + + public void Menu_SelectUVIsland() + { + UndoUtility.RecordSelection(selection, "Select Island"); + + SelectUVShell(); + EditorUtility.ShowNotification(this, "Select UV Island"); + } + + public void Menu_SelectUVFace() + { + UndoUtility.RecordSelection(selection, "Select Face"); + + SelectUVFace(); + EditorUtility.ShowNotification(this, "Select UV Face"); + } + + public void Menu_CollapseUVs() + { + if (channel == 1) + { + EditorUtility.ShowNotification(this, "Invalid UV2 Operation"); + return; + } + + UndoUtility.RecordSelection(selection, "Collapse UVs"); + + for (int i = 0; i < selection.Length; i++) + { + selection[i].ToMesh(); + + selection[i].CollapseUVs(m_DistinctIndexesSelection[i]); + + selection[i].Refresh(); + selection[i].Optimize(); + } + + RefreshSelectedUVCoordinates(); + + EditorUtility.ShowNotification(this, "Collapse UVs"); + } + + public ActionResult Menu_SewUVs(ProBuilderMesh[] selection) + { + if (channel == 1) + { + EditorUtility.ShowNotification(this, "Invalid UV2 Operation"); + return new ActionResult(ActionResult.Status.Canceled, "Invalid UV2 Operation"); + } + + float weldDistance = m_WeldDistance; + + UndoUtility.RecordSelection(selection, "Sew UV Seams"); + for (int i = 0; i < selection.Length; i++) + { + selection[i].ToMesh(); + + selection[i].SewUVs(m_DistinctIndexesSelection[i], weldDistance); + RefreshElementGroups(selection[i]); + + selection[i].Refresh(); + selection[i].Optimize(); + } + + RefreshSelectedUVCoordinates(); + + EditorUtility.ShowNotification(this, "Weld UVs"); + return new ActionResult(ActionResult.Status.Success, "Invalid UV2 Operation"); + } + + public void Menu_SplitUVs() + { + if (channel == 1) + { + EditorUtility.ShowNotification(this, "Invalid UV2 Operation"); + return; + } + + UndoUtility.RecordSelection(selection, "Split UV Seams"); + + foreach (ProBuilderMesh pb in selection) + { + pb.ToMesh(); + + pb.SplitUVs(pb.selectedIndexesInternal); + RefreshElementGroups(pb); + + pb.Refresh(); + pb.Optimize(); + } + + SetSelectedUVsWithSceneView(); + RefreshSelectedUVCoordinates(); + + EditorUtility.ShowNotification(this, "Split UVs"); + } + + /** + * Flips UVs across the provided direction. The current pivot position is used as origin. Can be horizontal, vertical, or anything in between. + */ + public void Menu_FlipUVs(Vector2 direction) + { + UndoUtility.RecordSelection(selection, "Flip " + direction); + + Vector2 center = handlePosition; + + for (int i = 0; i < selection.Length; i++) + { + selection[i].ToMesh(); + + selection[i].SplitUVs(selection[i].selectedIndexesInternal); + + Vector2[] uv = channel == 0 ? selection[i].texturesInternal : selection[i].mesh.uv2; + + foreach (int n in selection[i].selectedIndexesInternal.Distinct()) + uv[n] = Math.ReflectPoint(uv[n], center, center + direction); + + UVEditing.ApplyUVs(selection[i], uv, channel); + + RefreshElementGroups(selection[i]); + + selection[i].Refresh(); + selection[i].Optimize(); + } + + SetSelectedUVsWithSceneView(); + RefreshSelectedUVCoordinates(); + + if (direction == Vector2.right) + { + EditorUtility.ShowNotification(this, "Flip UVs Vertically"); + } + else if (direction == Vector2.up) + { + EditorUtility.ShowNotification(this, "Flip UVs Horizontally"); + } + else + { + EditorUtility.ShowNotification(this, "Flip UVs"); + } + } + + /// <summary> + /// Fit selected UVs to 0,1 space. + /// </summary> + public void Menu_FitUVs() + { + UndoUtility.RecordSelection(selection, "Fit UVs"); + + for (var i = 0; i < selection.Length; i++) + { + if (selection[i].selectedVertexCount < 3) + continue; + + selection[i].ToMesh(); + + Vector2[] uv = UVEditing.GetUVs(selection[i], channel); + Vector2[] uvs = UnityEngine.ProBuilder.ArrayUtility.ValuesWithIndexes(uv, m_DistinctIndexesSelection[i]); + + uvs = UVEditing.FitUVs(uvs); + + for (int n = 0; n < uvs.Length; n++) + uv[m_DistinctIndexesSelection[i][n]] = uvs[n]; + + UVEditing.ApplyUVs(selection[i], uv, channel); + + selection[i].Refresh(); + selection[i].Optimize(); + } + + RefreshSelectedUVCoordinates(); + EditorUtility.ShowNotification(this, "Fit UVs"); + } + + /// <summary> + /// Moves the selected UVs to where the anchor is now point, where both anchor_position and point are in UV space. Does not call ToMesh or Refresh. + /// </summary> + /// <param name="anchorPosition"></param> + /// <param name="point"></param> + void CenterUVsAtPoint(Vector2 anchorPosition, Vector2 point) + { + Vector2 delta = anchorPosition - point; + + for (int i = 0; i < selection.Length; i++) + { + var pb = selection[i]; + Vector2[] uv = UVEditing.GetUVs(pb, channel); + + foreach (int n in selection[i].selectedIndexesInternal.Distinct()) + { + uv[n] -= delta; + } + + UVEditing.ApplyUVs(pb, uv, channel); + } + } + + #endregion + #region Screenshot Rendering + + float curUvScale = 0f; + // Store the user set positioning and scale before modifying them for a screenshot + Vector2 curUvPosition = Vector2.zero; + Texture2D screenshot; + Rect screenshotCanvasRect = new Rect(0, 0, 0, 0); + Vector2 screenshotTexturePosition = Vector2.zero; + + // settings + int screenshot_size = 1024; + bool screenshot_hideGrid = true; + bool screenshot_transparentBackground; + Color screenshot_lineColor = Color.green; + Color screenshot_backgroundColor = Color.black; + string screenShotPath = ""; + + readonly Color UV_FILL_COLOR = new Color(.192f, .192f, .192f, 1f); + + // This is the default background of the UV editor - used to compare bacground pixels when rendering UV template + void InitiateScreenshot(int ImageSize, bool HideGrid, Color LineColor, bool TransparentBackground, Color BackgroundColor, bool RenderTexture) + { + screenshot_size = ImageSize; + screenshot_hideGrid = HideGrid; + screenshot_lineColor = LineColor; + screenshot_transparentBackground = TransparentBackground; + screenshot_backgroundColor = TransparentBackground ? UV_FILL_COLOR : BackgroundColor; + + // if line color and background color are the same but we want transparent backgruond, + // make sure that the background fill will be distinguishable from the lines during the + // opacity wipe + if (TransparentBackground && (screenshot_lineColor.ApproxC(screenshot_backgroundColor, .001f))) + { + screenshot_backgroundColor.r += screenshot_backgroundColor.r < .9f ? .1f : -.1f; + screenshot_backgroundColor.g += screenshot_backgroundColor.g < .9f ? .1f : -.1f; + screenshot_backgroundColor.b += screenshot_backgroundColor.b < .9f ? .1f : -.1f; + } + + screenShotPath = UnityEditor.EditorUtility.SaveFilePanel("Save UV Template", Application.dataPath, "", "png"); + + if (string.IsNullOrEmpty(screenShotPath)) + return; + + m_ShowPreviewMaterialCacheDuringScreenshot = m_ShowPreviewMaterial; + m_ShowPreviewMaterial.value = RenderTexture; + screenshotStatus = ScreenshotStatus.Done; + DoScreenshot(); + } + + void DoScreenshot() + { + switch (screenshotStatus) + { + // A new screenshot has been initiated + case ScreenshotStatus.Done: + curUvScale = uvGraphScale; + curUvPosition = uvGraphOffset; + + uvGraphScale = screenshot_size / 256; + +#if RETINA_ENABLED + uvGraphScale /= EditorGUIUtility.pixelsPerPoint; +#endif + + // always begin texture grabs at bottom left + uvGraphOffset = new Vector2(-ScreenRect.width / 2f, ScreenRect.height / 2f); + + screenshot = new Texture2D(screenshot_size, screenshot_size); + screenshot.hideFlags = (HideFlags)(1 | 2 | 4); + screenshotStatus = ScreenshotStatus.PrepareCanvas; + + // set the current rect pixel bounds to the largest possible size. if some parts are out of focus, they'll be grabbed in subsequent passes + if ((bool)ReflectionUtility.GetValue(this, this.GetType(), "docked")) + screenshotCanvasRect = new Rect(4, 2, (int)Mathf.Min(screenshot_size, ScreenRect.width - 4), (int)Mathf.Min(screenshot_size, ScreenRect.height - 2)); + else + screenshotCanvasRect = new Rect(0, 0, (int)Mathf.Min(screenshot_size, ScreenRect.width), (int)Mathf.Min(screenshot_size, ScreenRect.height)); + + screenshotTexturePosition = new Vector2(0, 0); + + this.ShowNotification(new GUIContent("Rendering UV Graph\n...")); + + Repaint(); + + return; + + case ScreenshotStatus.CanvasReady: + + // take screenshots vertically, then move right, repeat if necessary + if (screenshotTexturePosition.y < screenshot_size) + { + screenshot.ReadPixels(screenshotCanvasRect, (int)screenshotTexturePosition.x, (int)screenshotTexturePosition.y); + + screenshotTexturePosition.y += screenshotCanvasRect.height; + + if (screenshotTexturePosition.y < screenshot_size) + { + // reposition canvas +#if RETINA_ENABLED + uvGraphOffset.y += screenshotCanvasRect.height / EditorGUIUtility.pixelsPerPoint; +#else + uvGraphOffset.y += screenshotCanvasRect.height; + #endif + screenshotCanvasRect.height = (int)Mathf.Min(screenshot_size - screenshotTexturePosition.y, ScreenRect.height - 12); + screenshotStatus = ScreenshotStatus.PrepareCanvas; + Repaint(); + return; + } + else + { + screenshotTexturePosition.x += screenshotCanvasRect.width; + + if (screenshotTexturePosition.x < screenshot_size) + { + // Move right, reset Y +#if RETINA_ENABLED + uvGraphOffset.x -= screenshotCanvasRect.width / EditorGUIUtility.pixelsPerPoint; + uvGraphOffset.y = (ScreenRect.height / 2f); +#else + uvGraphOffset.x -= screenshotCanvasRect.width; + uvGraphOffset.y = ScreenRect.height / 2f; + #endif + screenshotCanvasRect.width = (int)Mathf.Min(screenshot_size - screenshotTexturePosition.x, ScreenRect.width); + screenshotTexturePosition.y = 0; + screenshotCanvasRect.height = (int)Mathf.Min(screenshot_size - screenshotTexturePosition.y, ScreenRect.height - 12); + screenshotStatus = ScreenshotStatus.PrepareCanvas; + Repaint(); + return; + } + } + } + + // reset the canvas to it's original position and scale + uvGraphScale = curUvScale; + uvGraphOffset = curUvPosition; + + this.RemoveNotification(); + screenshotStatus = ScreenshotStatus.RenderComplete; + Repaint(); + break; + + case ScreenshotStatus.RenderComplete: + + if (screenshot_transparentBackground) + { + Color[] px = screenshot.GetPixels(0); + + for (int i = 0; i < px.Length; i++) + if (Mathf.Abs(px[i].r - UV_FILL_COLOR.r) < .01f && + Mathf.Abs(px[i].g - UV_FILL_COLOR.g) < .01f && + Mathf.Abs(px[i].b - UV_FILL_COLOR.b) < .01f) + px[i] = Color.clear; + + screenshot.SetPixels(px); + screenshot.Apply(); + } + + this.minSize = Vector2.zero; + this.maxSize = Vector2.one * 100000f; + EditorApplication.delayCall += SaveUVRender; // don't run the save image stuff in the UI loop + screenshotStatus = ScreenshotStatus.Done; + break; + } + } + + void SaveUVRender() + { + m_ShowPreviewMaterial.value = m_ShowPreviewMaterialCacheDuringScreenshot; + if (screenshot && !string.IsNullOrEmpty(screenShotPath)) + { + FileUtility.SaveTexture(screenshot, screenShotPath); + DestroyImmediate(screenshot); + } + } + + #endregion + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UVEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UVEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a654195ec5df95718c468d23c7580a921e332f9e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UVEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1e5ea3aa2689d948af3903d68647ca0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UVRenderOptions.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UVRenderOptions.cs new file mode 100644 index 0000000000000000000000000000000000000000..4f05228171ac256cd24a357037d7e821e6297f00 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UVRenderOptions.cs @@ -0,0 +1,66 @@ +using UnityEngine.ProBuilder; +using UnityEngine; + +namespace UnityEditor.ProBuilder +{ + /// <inheritdoc /> + /// <summary> + /// Popup window in UV editor with the "Render UV Template" options. + /// </summary> + sealed class UVRenderOptions : EditorWindow + { + Pref<ImageSize> m_ImageSize = new Pref<ImageSize>("UVRenderOptions.imageSize", ImageSize._1024, SettingsScope.User); + Pref<Color> m_LineColor = new Pref<Color>("UVRenderOptions.lineColor", Color.green, SettingsScope.User); + Pref<Color> m_BackgroundColor = new Pref<Color>("UVRenderOptions.backgroundColor", Color.black, SettingsScope.User); + Pref<bool> m_TransparentBackground = new Pref<bool>("UVRenderOptions.transparentBackground", false, SettingsScope.User); + Pref<bool> m_HideGrid = new Pref<bool>("UVRenderOptions.hideGrid", true, SettingsScope.User); + Pref<bool> m_RenderTexture = new Pref<bool>("UVRenderOptions.renderTexture", true, SettingsScope.User); + + enum ImageSize + { + _256 = 256, + _512 = 512, + _1024 = 1024, + _2048 = 2048, + _4096 = 4096, + }; + + public delegate void ScreenshotFunc(int ImageSize, bool HideGrid, Color LineColor, bool TransparentBackground, Color BackgroundColor, bool RenderTexture); + public ScreenshotFunc screenFunc; + Vector2 m_Scroll; + + void OnGUI() + { + m_Scroll = EditorGUILayout.BeginScrollView(m_Scroll); + GUILayout.Label("Render UVs", EditorStyles.boldLabel); + GUILayout.Space(2); + + m_ImageSize.value = (ImageSize)EditorGUILayout.EnumPopup(new GUIContent("Image Size", "The pixel size of the image to be rendered."), m_ImageSize); + m_HideGrid.value = EditorGUILayout.Toggle(new GUIContent("Hide Grid", "Hide or show the grid lines."), m_HideGrid); + m_LineColor.value = EditorGUILayout.ColorField(new GUIContent("Line Color", "The color of the template lines."), m_LineColor); + m_RenderTexture.value = EditorGUILayout.Toggle(new GUIContent("Include Texture", "If true, a preview image of the first selected face's material will be rendered as part of the UV template.\n\nNote that this depends on the Material's shader having a _mainTexture property."), m_RenderTexture); + m_TransparentBackground.value = EditorGUILayout.Toggle(new GUIContent("Transparent Background", "If true, only the template lines will be rendered, leaving the background fully transparent."), m_TransparentBackground); + + GUI.enabled = !m_TransparentBackground; + EditorGUI.indentLevel++; + m_BackgroundColor.value = EditorGUILayout.ColorField(new GUIContent("Background Color", "If `TransparentBackground` is off, this will be the fill color of the image."), m_BackgroundColor); + EditorGUI.indentLevel--; + GUI.enabled = true; + + if (GUILayout.Button("Save UV Template")) + { + if (ProBuilderEditor.instance == null || MeshSelection.selectedObjectCount < 1) + { + Debug.LogWarning("Abandoning UV render because no ProBuilder objects are selected."); + Close(); + return; + } + + screenFunc((int)m_ImageSize.value, m_HideGrid, m_LineColor, m_TransparentBackground, m_BackgroundColor, m_RenderTexture); + Close(); + } + + EditorGUILayout.EndScrollView(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UVRenderOptions.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UVRenderOptions.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b32c523e5b5be63b7e5e24363a8adebc2f61138d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UVRenderOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 168b876617d5b904ab8d161bbcc20900 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UndoUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UndoUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..f54191a831acb325fcf3938d15787b35e0278ab8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UndoUtility.cs @@ -0,0 +1,202 @@ +using System.Collections.Generic; +using UnityEngine; +using System.Linq; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + [InitializeOnLoad] + static class UndoUtility + { + static UndoUtility() + { + Undo.undoRedoPerformed += UndoRedoPerformed; + } + + static void UndoRedoPerformed() + { + // material preview when dragging in scene-view is done by applying then undoing changes. we don't want to + // rebuild the mesh every single frame when dragging. + if (SceneDragAndDropListener.isDragging) + { + return; + } + + // Synchronize just checks that the mesh is not null, and UV2 is still valid. This should be very cheap except + // for the FindObjectsOfType call. + foreach (var mesh in Object.FindObjectsOfType<ProBuilderMesh>()) + { + EditorUtility.SynchronizeWithMeshFilter(mesh); + mesh.InvalidateCaches(); + } + + foreach (var mesh in InternalUtility.GetComponents<ProBuilderMesh>(Selection.transforms)) + { + mesh.InvalidateCaches(); + mesh.Rebuild(); + mesh.Optimize(); + } + + ProBuilderEditor.Refresh(); + SceneView.RepaintAll(); + } + + /** + * Since Undo calls can potentially hang the main thread, store states when the diff + * will large. + */ + public static void RecordSelection(ProBuilderMesh pb, string msg) + { + if (pb.vertexCount > 256) + RegisterCompleteObjectUndo(pb, msg); + else + Undo.RecordObject(pb, msg); + } + + internal static void RecordSelection(string message) + { + RecordSelection(MeshSelection.topInternal.ToArray(), message); + } + + internal static void RecordMeshAndTransformSelection(string message) + { + var count = MeshSelection.selectedObjectCount; + var res = new Object[count * 2]; + var selection = MeshSelection.topInternal; + + for (int i = 0, c = count; i < c; i++) + { + res[i] = selection[i]; + res[i + c] = selection[i].transform; + } + + Undo.RegisterCompleteObjectUndo(res, message); + } + + /** + * Tests if any pb_Object in the selection has more than 512 vertices, and if so records the entire object + * instead of diffing the serialized object (which is very slow for large arrays). + */ + public static void RecordSelection(ProBuilderMesh[] pb, string msg) + { + if (pb == null || pb.Length < 1) + return; + + if (pb.Any(x => { return x.vertexCount > 256; })) + RegisterCompleteObjectUndo(pb, msg); + else + Undo.RecordObjects(pb, msg); + } + + /** + * Record an object for Undo. + */ + public static void RecordObject(Object obj, string msg) + { + if (obj is ProBuilderMesh && ((ProBuilderMesh)obj).vertexCount > 256) + { +#if PB_DEBUG + Debug.LogWarning("RecordObject() -> " + ((pb_Object)obj).vertexCount); +#endif + RegisterCompleteObjectUndo(obj as ProBuilderMesh, msg); + } + else + { + Undo.RecordObject(obj, msg); + } + } + + /** + * Record objects for Undo. + */ + public static void RecordObjects(IEnumerable<Object> objs, string msg) + { + if (objs == null) + return; + + Object[] obj = objs.Where(x => !(x is ProBuilderMesh)).ToArray(); + ProBuilderMesh[] pb = objs.Where(x => x is ProBuilderMesh).Cast<ProBuilderMesh>().ToArray(); + + if (obj.Any()) + Undo.RecordObjects(obj, msg); + + RecordSelection(pb, msg); + } + + /** + * Undo.RegisterCompleteObjectUndo + */ + public static void RegisterCompleteObjectUndo(Object objs, string msg) + { + Undo.RegisterCompleteObjectUndo(objs, msg); + } + + /** + * Undo.RegisterCompleteObjectUndo + */ + public static void RegisterCompleteObjectUndo(Object[] objs, string msg) + { + Undo.RegisterCompleteObjectUndo(objs, msg); + } + + /** + * Record object prior to deletion. + */ + public static void DestroyImmediate(Object obj) + { + Undo.DestroyObjectImmediate(obj); + } + + public static void RegisterCreatedObjectUndo(Object obj, string msg) + { + Undo.RegisterCreatedObjectUndo(obj, msg); + } + + public static void RecordComponents<T0, T1>(IEnumerable<Component> objs, string message) + where T0 : Component + where T1 : Component + { + List<Object> targets = new List<Object>(); + + foreach (var o in objs) + { + var t = o.GetComponent<T0>(); + var k = o.GetComponent<T1>(); + + if (t != null) + targets.Add(t); + + if (k != null) + targets.Add(k); + } + + RecordObjects(targets, message); + } + + public static void RecordComponents<T0, T1, T2>(IEnumerable<Component> objs, string message) + where T0 : Component + where T1 : Component + where T2 : Component + { + List<Object> targets = new List<Object>(); + + foreach (var o in objs) + { + var t0 = o.GetComponent<T0>(); + var t1 = o.GetComponent<T1>(); + var t2 = o.GetComponent<T2>(); + + if (t0 != null) + targets.Add(t0); + + if (t1 != null) + targets.Add(t1); + + if (t2 != null) + targets.Add(t2); + } + + RecordObjects(targets, message); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UndoUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UndoUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..10b311fc8d7575516b57999907028ce14b09120f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UndoUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e41489573d46a4d039759c1808b22f3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UnityScenePostProcessor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UnityScenePostProcessor.cs new file mode 100644 index 0000000000000000000000000000000000000000..163e1e67c5e3ebadd2ee441bc1a0167b44de09f4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UnityScenePostProcessor.cs @@ -0,0 +1,107 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.Callbacks; +using UnityEngine.ProBuilder.MeshOperations; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.SettingsManagement; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// When building the project, remove all references to <see cref="ProBuilderMesh"/> and <see cref="EntityBehaviour"/>. + /// </summary> + static class UnityScenePostProcessor + { + [UserSetting("General", "Script Stripping", "If true, when building an executable all ProBuilder scripts will be stripped from your built product.")] + static Pref<bool> m_ScriptStripping = new Pref<bool>("editor.stripProBuilderScriptsOnBuild", true); + + [PostProcessScene] + public static void OnPostprocessScene() + { + var invisibleFaceMaterial = Resources.Load<Material>("Materials/InvisibleFace"); + + // Hide nodraw faces if present. + foreach (var pb in Object.FindObjectsOfType<ProBuilderMesh>()) + { + if (pb.GetComponent<MeshRenderer>() == null) + continue; + + if (pb.GetComponent<MeshRenderer>().sharedMaterials.Any(x => x != null && x.name.Contains("NoDraw"))) + { + Material[] mats = pb.GetComponent<MeshRenderer>().sharedMaterials; + + for (int i = 0; i < mats.Length; i++) + { + if (mats[i].name.Contains("NoDraw")) + mats[i] = invisibleFaceMaterial; + } + + pb.GetComponent<MeshRenderer>().sharedMaterials = mats; + } + } + + if (EditorApplication.isPlayingOrWillChangePlaymode) + return; + + foreach (var entity in Resources.FindObjectsOfTypeAll<EntityBehaviour>()) + { + if (entity.manageVisibility) + entity.OnEnterPlayMode(); + } + + foreach (var mesh in Object.FindObjectsOfType<ProBuilderMesh>()) + { + EditorUtility.SynchronizeWithMeshFilter(mesh); + + if (mesh.mesh == null) + continue; + + GameObject gameObject = mesh.gameObject; + var entity = ProcessLegacyEntity(gameObject); + +#if ENABLE_DRIVEN_PROPERTIES + // clear editor-only HideFlags and serialization ignores + mesh.ClearDrivenProperties(); + var filter = gameObject.DemandComponent<MeshFilter>(); + filter.hideFlags = HideFlags.None; + mesh.mesh.hideFlags = HideFlags.None; + + // Reassign the MeshFilter and MeshCollider properties _after_ clearing HideFlags and driven properties + // to ensure that they are dirtied for serialization and thus included in the build + filter.sharedMesh = mesh.mesh; + if (mesh.TryGetComponent(out MeshCollider collider)) + collider.sharedMesh = mesh.mesh; +#endif + + // early out if we're not planning to remove the ProBuilderMesh component + if (m_ScriptStripping == false) + continue; + + if(mesh.TryGetComponent<BezierShape>(out BezierShape bezier)) + Object.DestroyImmediate(bezier); + + if(mesh.TryGetComponent<PolyShape>(out PolyShape poly)) + Object.DestroyImmediate(poly); + + mesh.preserveMeshAssetOnDestroy = true; + Object.DestroyImmediate(mesh); + Object.DestroyImmediate(entity); + } + } + + static Entity ProcessLegacyEntity(GameObject go) + { + // Entity is deprecated - remove someday + Entity entity = go.GetComponent<Entity>(); + + if (entity == null) + return null; + + if (entity.entityType == EntityType.Collider || entity.entityType == EntityType.Trigger) + go.GetComponent<MeshRenderer>().enabled = false; + + return entity; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UnityScenePostProcessor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UnityScenePostProcessor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e5ef38eacfef103666ed016a4f7ef499185d8074 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UnityScenePostProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b1602c6e6ff5bde4f9dfa91f8b5c85e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UnwrapParametersEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UnwrapParametersEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..94b3f32f7d4879b8ce9b017cc5df0448bb178683 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UnwrapParametersEditor.cs @@ -0,0 +1,36 @@ +using UnityEngine; +using UnityEditor; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + /// <inheritdoc /> + /// <summary> + /// Inspector for working with lightmap UV generation params. + /// </summary> + [CanEditMultipleObjects] + sealed class UnwrapParametersEditor : Editor + { + SerializedProperty m_UnwrapParametersProperty; + GUIContent m_UnwrapParametersContent = new GUIContent("Lightmap UV Settings", "Settings for how Unity unwraps the UV2 (lightmap) UVs"); + + void OnEnable() + { + m_UnwrapParametersProperty = serializedObject.FindProperty("m_UnwrapParameters"); + } + + public override void OnInspectorGUI() + { +#if UNITY_2019_1_OR_NEWER + if (!serializedObject.isValid) + return; +#else + if (serializedObject.targetObject == null) + return; +#endif + serializedObject.Update(); + EditorGUILayout.PropertyField(m_UnwrapParametersProperty, m_UnwrapParametersContent, true); + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UnwrapParametersEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UnwrapParametersEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d224be5d4f3f468a112ba10c3e2c51f8601d5712 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/UnwrapParametersEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5beb7cb1a6d016b4a856f5112f2048fd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Version.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Version.cs new file mode 100644 index 0000000000000000000000000000000000000000..cb136101a61c4dd42d3939c2f69b664ad28443c5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Version.cs @@ -0,0 +1,45 @@ +#if UNITY_2019_2_OR_NEWER +using System.Reflection; +#else +using System.IO; +#endif +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + static class Version + { +#if !UNITY_2019_2_OR_NEWER + struct PackageInfo + { +#pragma warning disable 649 + public string version; +#pragma warning restore 649 + } +#endif + + internal static bool TryGetPackageVersion(out SemVer version) + { + version = new SemVer(); + +#if UNITY_2019_2_OR_NEWER + var assembly = Assembly.GetExecutingAssembly(); + var info = PackageManager.PackageInfo.FindForAssembly(assembly); + return SemVer.TryGetVersionInfo(info.version, out version); +#else + try + { + var packageInfo = FileUtility.GetProBuilderInstallDirectory() + "/package.json"; + var contents = File.ReadAllText(packageInfo); + var info = JsonUtility.FromJson<PackageInfo>(contents); + return SemVer.TryGetVersionInfo(info.version, out version); + } + catch + { + return false; + } +#endif + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Version.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Version.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..19dca886a2a8fbe42155b772d462f98ec4f7b162 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/Version.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c33579cdea5c8442e90e443cf7bcfee9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VersionValidator.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VersionValidator.cs new file mode 100644 index 0000000000000000000000000000000000000000..c3794275d4d0db361237cb90b872a5db34c634c9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VersionValidator.cs @@ -0,0 +1,73 @@ +using UnityEngine; +using UnityEngine.ProBuilder.AssetIdRemapUtility; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + [InitializeOnLoad] + class VersionValidator + { + static readonly SemVer k_ProBuilder4_0_0 = new SemVer(4, 0, 0); + + const string k_UpgradeDialog = "ProBuilder 2.x and 3.x assets are incompatible with 4.0.0+ and need to be upgraded.* Would you like to convert your project to the new version of ProBuilder?\n\n*Future updates will not require this conversion."; + const string k_UpgradeLaterText = "\n\nIf you choose \"No\" this dialog may be accessed again at any time through the \"Tools/ProBuilder/Repair/Convert to ProBuilder 4\" menu item."; + const string k_AssetStoreUpgradeTitle = "Old ProBuilder Install Found"; + const string k_DeprecatedGuidsTitle = "Broken ProBuilder References Found in Project"; + + static Pref<SemVer> s_StoredVersionInfo = new Pref<SemVer>("about.identifier", new SemVer(), SettingsScope.Project); + + static VersionValidator() + { + EditorApplication.delayCall += ValidateVersion; + } + + [MenuItem("Tools/ProBuilder/Repair/Check for Broken ProBuilder References")] + internal static void OpenConversionEditor() + { + CheckForUpgradeableAssets(true, true); + } + + static void ValidateVersion() + { + SemVer currentVersion; + + if (!Version.TryGetPackageVersion(out currentVersion)) + return; + + var oldVersion = (SemVer) s_StoredVersionInfo; + bool isNewVersion = currentVersion != oldVersion; + + if (isNewVersion) + { + PreferencesUpdater.CheckEditorPrefsVersion(); + s_StoredVersionInfo.SetValue(currentVersion, true); + + if (oldVersion < k_ProBuilder4_0_0) + CheckForUpgradeableAssets(true); + } + } + + static void CheckForUpgradeableAssets(bool checkForDeprecatedGuids, bool calledFromMenu = false) + { + bool pre4PackageFound = PackageImporter.IsPreProBuilder4InProject(); + bool deprecatedGuidsFound = !pre4PackageFound && checkForDeprecatedGuids && PackageImporter.DoesProjectContainDeprecatedGUIDs(); + + if (pre4PackageFound || deprecatedGuidsFound) + { + if (UnityEditor.EditorUtility.DisplayDialog( + pre4PackageFound ? k_AssetStoreUpgradeTitle : k_DeprecatedGuidsTitle, + k_UpgradeDialog + k_UpgradeLaterText, + "Yes", "No")) + EditorApplication.delayCall += AssetIdRemapEditor.OpenConversionEditor; + } + else if(calledFromMenu) + { + UnityEditor.EditorUtility.DisplayDialog( + "Project is up to date", + "No missing or broken references found.", + "Okay" + ); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VersionValidator.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VersionValidator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9e1f697134b6ebedefb14b953adb166d33d6b2a1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VersionValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89809d92ed2419a43b46b08b6f4237ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexColorPalette.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexColorPalette.cs new file mode 100644 index 0000000000000000000000000000000000000000..7670d00fb5a89a22e9151c1f56e25a76d865dfe5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexColorPalette.cs @@ -0,0 +1,222 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; +using System.Collections.Generic; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using ColorUtility = UnityEngine.ProBuilder.ColorUtility; + +namespace UnityEditor.ProBuilder +{ + sealed class VertexColorPalette : ConfigurableWindow + { + // Older versions of probuilder stored a fixed size array of colors in EditorPrefs. + const int k_EditorPrefsColorPaletteCount = 10; + const string pbVertexColorPrefs = "pbVertexColorPrefs"; + + static Pref<string> m_PreviousColorPalette = new Pref<string>("VertexColorPalette.previousColorPalette", ""); + + static VertexColorPalette s_Instance = null; + + [SerializeField] + ColorPalette m_ColorPalette = null; + + ColorPalette colorPalette + { + get { return m_ColorPalette; } + } + + /// <summary> + /// Older versions of probuilder stored a fixed size array of colors in EditorPrefs. Use this function to get a + /// pb_ColorPalette from the older version. + /// </summary> + /// <returns> + /// </returns> + static void CopyColorsFromEditorPrefs(ColorPalette target) + { + List<Color> colors = new List<Color>(); + + for (int i = 0; i < k_EditorPrefsColorPaletteCount; i++) + { + Color color = Color.white; + + if (InternalUtility.TryParseColor(EditorPrefs.GetString(pbVertexColorPrefs + i), ref color)) + colors.Add(color); + } + + if (colors.Count > 0) + { + target.SetColors(colors); + UnityEditor.EditorUtility.SetDirty(target); + } + } + + /// <summary> + /// Initialize this window. + /// </summary> + public static void MenuOpenWindow() + { + GetWindow<VertexColorPalette>("Vertex Colors"); + } + + static ColorPalette GetLastUsedColorPalette() + { + // serialized copy? + ColorPalette palette = s_Instance != null ? s_Instance.m_ColorPalette : null; + + if (palette != null) + return palette; + + // last set asset path? + palette = AssetDatabase.LoadAssetAtPath<ColorPalette>(m_PreviousColorPalette); + + if (palette != null) + return palette; + + // any existing palette in project? + palette = FileUtility.FindAssetOfType<ColorPalette>(); + + if (palette != null) + { + m_PreviousColorPalette.SetValue(AssetDatabase.GetAssetPath(palette), true); + return palette; + } + + // create new default + m_PreviousColorPalette.SetValue(FileUtility.GetLocalDataDirectory() + "Default Color Palette.asset", true); + palette = FileUtility.LoadRequired<ColorPalette>(m_PreviousColorPalette); + CopyColorsFromEditorPrefs(palette); + + return palette; + } + + void OnEnable() + { + s_Instance = this; + m_ColorPalette = GetLastUsedColorPalette(); + } + + Vector2 m_Scroll = Vector2.zero; + const int k_Padding = 4; + const int k_ButtonWidth = 58; + GUIContent m_ColorPaletteGuiContent = new GUIContent("Color Palette"); + + void OnGUI() + { + var palette = GetLastUsedColorPalette(); + + DoContextMenu(); + + GUILayout.BeginHorizontal(EditorStyles.toolbar); + + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Reset", EditorStyles.toolbarButton)) + ResetColors(); + + GUILayout.EndHorizontal(); + + m_ColorPalette = (ColorPalette)EditorGUILayout.ObjectField(m_ColorPaletteGuiContent, m_ColorPalette, typeof(ColorPalette), false); + + if (m_ColorPalette == null) + { + GUILayout.Label("Please Select a Color Palette", EditorStyles.centeredGreyMiniLabel, GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true)); + return; + } + + m_Scroll = EditorGUILayout.BeginScrollView(m_Scroll); + + for (int i = 0; i < palette.Count; i++) + { + GUILayout.Space(4); + + GUILayout.BeginHorizontal(); + + if (GUILayout.Button("Apply", GUILayout.ExpandWidth(false), GUILayout.MinWidth(60))) + SetFaceColors(palette[i]); + + EditorGUI.BeginChangeCheck(); + palette[i] = EditorGUILayout.ColorField(palette[i]); + if (EditorGUI.EndChangeCheck()) + UnityEditor.EditorUtility.SetDirty(palette); + + GUILayout.EndHorizontal(); + } + + EditorGUILayout.EndScrollView(); + } + + void ResetColors() + { + if (m_ColorPalette == null) + m_ColorPalette = GetLastUsedColorPalette(); + + m_ColorPalette.SetDefaultValues(); + UnityEditor.EditorUtility.SetDirty(m_ColorPalette); + } + + public static void SetFaceColors(int index) + { + var palette = GetLastUsedColorPalette(); + SetFaceColors(palette[index]); + } + + public static void SetFaceColors(Color col) + { + col = PlayerSettings.colorSpace == ColorSpace.Linear ? col.linear : col; + + ProBuilderMesh[] selection = InternalUtility.GetComponents<ProBuilderMesh>(Selection.transforms); + + UndoUtility.RecordSelection(selection, "Apply Vertex Colors"); + + ProBuilderEditor editor = ProBuilderEditor.instance; + + if (editor && ProBuilderEditor.selectMode.ContainsFlag(SelectMode.Vertex | SelectMode.Edge | SelectMode.Face)) + { + switch (ProBuilderEditor.selectMode) + { + case SelectMode.Face: + case SelectMode.TextureFace: + foreach (ProBuilderMesh mesh in selection) + { + Color[] colors = mesh.GetColors(); + + foreach (int i in mesh.selectedIndexesInternal) + colors[i] = col; + + mesh.colors = colors; + } + break; + case SelectMode.Edge: + case SelectMode.Vertex: + foreach (var mesh in selection) + { + Color[] colors = mesh.GetColors(); + + foreach (int i in mesh.GetCoincidentVertices(mesh.selectedIndexesInternal)) + colors[i] = col; + + mesh.colors = colors; + } + break; + } + } + else + { + foreach (ProBuilderMesh pb in selection) + { + foreach (Face face in pb.facesInternal) + pb.SetFaceColor(face, col); + } + } + + foreach (ProBuilderMesh pb in selection) + { + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + } + + EditorUtility.ShowNotification("Set Vertex Colors\n" + ColorUtility.GetColorName(col)); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexColorPalette.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexColorPalette.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..cd1eb939ecfc54ebbdf0036e31ccad4ab8a70fb5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexColorPalette.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48979d80dfe00104da221c9a1d70964a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexManipulationTool.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexManipulationTool.cs new file mode 100644 index 0000000000000000000000000000000000000000..f816fa23d538682854abe4719d551ffd1b90cbf0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexManipulationTool.cs @@ -0,0 +1,409 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; +using UnityEditor.SettingsManagement; + +#if !UNITY_2018_3_OR_NEWER +using UnityEditor.SettingsManagement; +#endif + +#if DEBUG_HANDLES +using UnityEngine.Rendering; +#endif + +namespace UnityEditor.ProBuilder +{ + abstract class VertexManipulationTool + { + const float k_DefaultSnapValue = .25f; + + static Pref<HandleOrientation> s_HandleOrientation = new Pref<HandleOrientation>("editor.handleOrientation", HandleOrientation.World, SettingsScope.User); + static Pref<PivotPoint> s_PivotPoint = new Pref<PivotPoint>("editor.pivotPoint", PivotPoint.Center, SettingsScope.User); + + [UserSetting(UserSettingsProvider.developerModeCategory, "PivotMode.Pivot", "Set the behavior of the \"Pivot\" handle mode when editing mesh elements.")] + static Pref<PivotPoint> s_PivotModePivotEquivalent = new Pref<PivotPoint>("editor.pivotModePivotEquivalent", PivotPoint.ActiveElement, SettingsScope.User); + + [UserSetting(UserSettingsProvider.developerModeCategory, "Show Internal Pivot and Orientation")] + static Pref<bool> s_ShowHandleSettingsInScene = new Pref<bool>("developer.showHandleSettingsInScene", false, SettingsScope.User); + + internal static PivotPoint pivotModePivotEquivalent + { + get { return s_PivotModePivotEquivalent; } + set { s_PivotModePivotEquivalent.SetValue(value); } + } + + internal static bool showHandleSettingsInScene + { + get { return s_ShowHandleSettingsInScene; } + } + + // Store PivotRotation so that we can detect changes and update our handles appropriately + static PivotRotation s_PivotRotation; + + /// <value> + /// Where the handle is positioned relative to the current selection. + /// </value> + /// <remarks> + /// Relates to the UnityEditor.PivotMode enum, with additional options. + /// </remarks> + public static PivotPoint pivotPoint + { + get + { + SyncPivotPoint(); + + return Tools.pivotMode == PivotMode.Pivot + ? pivotModePivotEquivalent + : PivotPoint.Center; + } + } + + static void SyncPivotPoint() + { + var unity = s_PivotPoint.value == PivotPoint.Center ? PivotMode.Center : PivotMode.Pivot; + + if (Tools.pivotMode != unity) + { + s_PivotPoint.SetValue(Tools.pivotMode == PivotMode.Center ? PivotPoint.Center : s_PivotModePivotEquivalent.value, true); + MeshSelection.InvalidateElementSelection(); + } + } + + /// <value> + /// How the handle is rotated relative to the current selection. + /// </value> + public static HandleOrientation handleOrientation + { + get + { + SyncPivotRotation(); + return s_HandleOrientation; + } + set + { + s_HandleOrientation.SetValue(value, true); + + if (value != HandleOrientation.ActiveElement) + Tools.pivotRotation = value == HandleOrientation.ActiveObject + ? PivotRotation.Local + : PivotRotation.Global; + + MeshSelection.InvalidateElementSelection(); + + var toolbar = typeof(EditorWindow).Assembly.GetType("UnityEditor.Toolbar"); + var repaint = toolbar.GetMethod("RepaintToolbar", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public); + repaint.Invoke(null, null); + } + } + + // Sync ProBuilder HandleOrientation to the current Tools.PivotRotation + static void SyncPivotRotation() + { + if (s_PivotRotation != Tools.pivotRotation) + { + s_HandleOrientation.SetValue(Tools.pivotRotation == PivotRotation.Global + ? HandleOrientation.World + : HandleOrientation.ActiveObject); + s_PivotRotation = Tools.pivotRotation; + MeshSelection.InvalidateElementSelection(); + return; + } + + var value = s_HandleOrientation.value; + var unity = value == HandleOrientation.ActiveObject ? PivotRotation.Local : PivotRotation.Global; + + if (value != HandleOrientation.ActiveElement) + { + if (unity != Tools.pivotRotation) + { + s_HandleOrientation.SetValue(Tools.pivotRotation == PivotRotation.Global + ? HandleOrientation.World + : HandleOrientation.ActiveObject, + true); + MeshSelection.InvalidateElementSelection(); + } + } + } + + /// <value> + /// Called when vertex modifications are complete. + /// </value> + public static event Action<IEnumerable<ProBuilderMesh>> afterMeshModification; + + /// <value> + /// Called immediately prior to beginning vertex modifications. The ProBuilderMesh will be in un-altered state at this point (meaning ProBuilderMesh.ToMesh and ProBuilderMesh.Refresh have been called, but not Optimize). + /// </value> + public static event Action<IEnumerable<ProBuilderMesh>> beforeMeshModification; + + internal static Pref<bool> s_ExtrudeEdgesAsGroup = new Pref<bool>("editor.extrudeEdgesAsGroup", true); + internal static Pref<ExtrudeMethod> s_ExtrudeMethod = new Pref<ExtrudeMethod>("editor.extrudeMethod", ExtrudeMethod.FaceNormal); + + Vector3 m_HandlePosition; + Quaternion m_HandleRotation; + Vector3 m_HandlePositionOrigin; + Quaternion m_HandleRotationOrigin; + bool m_IsEditing; + + Vector3 m_MoveSnapValue = new Vector3(k_DefaultSnapValue, k_DefaultSnapValue, k_DefaultSnapValue); + bool m_SnapAxisConstraint = true; + bool m_WorldSnapEnabled; + + static bool s_Initialized; + static FieldInfo s_VertexDragging; + static MethodInfo s_FindNearestVertex; + static object[] s_FindNearestVertexArguments = new object[] { null, null, null }; + + internal IEnumerable<MeshAndElementSelection> elementSelection + { + get { return MeshSelection.elementSelection; } + } + + protected static bool vertexDragging + { + get + { + Init(); + return s_VertexDragging != null && (bool)s_VertexDragging.GetValue(null); + } + } + + protected bool isEditing + { + get { return m_IsEditing; } + } + + protected Event currentEvent { get; private set; } + + protected Vector3 handlePositionOrigin + { + get { return m_HandlePositionOrigin; } + } + + protected Quaternion handleRotationOriginInverse { get; private set; } + + protected Quaternion handleRotationOrigin + { + get { return m_HandleRotationOrigin; } + } + + protected Vector3 snapValue + { + get { return m_MoveSnapValue; } + } + + protected bool snapAxisConstraint + { + get { return m_SnapAxisConstraint; } + } + + protected bool worldSnapEnabled + { + get { return m_WorldSnapEnabled; } + } + + protected bool relativeSnapEnabled + { + get { return ProBuilderSnapSettings.snapMode == SnapMode.Relative; } + } + + protected float GetSnapValueForAxis(Vector3Mask axes) + { + return UnityEngine.ProBuilder.Math.Sum(axes * snapValue); + } + + static void Init() + { + if (s_Initialized) + return; + s_Initialized = true; + s_VertexDragging = typeof(Tools).GetField("vertexDragging", BindingFlags.NonPublic | BindingFlags.Static); + s_FindNearestVertex = typeof(HandleUtility).GetMethod("FindNearestVertex", + BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance); + } + + internal abstract MeshAndElementSelection GetElementSelection(ProBuilderMesh mesh, PivotPoint pivot); + + public void OnSceneGUI(Event evt) + { + // necessary because there is no callback on toolbar changes + SyncPivotPoint(); + SyncPivotRotation(); + + currentEvent = evt; + + if (evt.type == EventType.MouseUp || evt.type == EventType.Ignore) + FinishEdit(); + + switch (ProBuilderEditor.selectMode) + { + case SelectMode.Face: + case SelectMode.TextureFace: + if (MeshSelection.selectedFaceCount < 1) + return; + break; + + case SelectMode.Edge: + case SelectMode.TextureEdge: + if (MeshSelection.selectedEdgeCount < 1) + return; + break; + + case SelectMode.Vertex: + case SelectMode.TextureVertex: + if (MeshSelection.selectedVertexCount < 1) + return; + break; + } + + if (!m_IsEditing) + { + m_HandlePosition = MeshSelection.GetHandlePosition(); + m_HandleRotation = MeshSelection.GetHandleRotation(); + + m_HandlePositionOrigin = m_HandlePosition; + m_HandleRotationOrigin = m_HandleRotation; + handleRotationOriginInverse = Quaternion.Inverse(m_HandleRotation); + } + + DoTool(m_HandlePosition, m_HandleRotation); + } + + protected abstract void DoTool(Vector3 handlePosition, Quaternion handleRotation); + + protected virtual void OnToolEngaged() {} + + protected virtual void OnToolDisengaged() {} + + protected void BeginEdit(string undoMessage) + { + if (m_IsEditing) + return; + + // Disable iterative lightmapping + Lightmapping.PushGIWorkflowMode(); + + var selection = MeshSelection.topInternal.ToArray(); + + UndoUtility.RegisterCompleteObjectUndo(selection, string.IsNullOrEmpty(undoMessage) ? "Modify Vertices" : undoMessage); + + if (beforeMeshModification != null) + beforeMeshModification(selection); + + if (currentEvent.shift) + Extrude(); + + m_IsEditing = true; + + m_WorldSnapEnabled = ProBuilderSnapSettings.snapMode == SnapMode.World; + m_SnapAxisConstraint = ProBuilderSnapSettings.snapMethod == SnapAxis.ActiveAxis; ProGridsInterface.UseAxisConstraints(); + m_MoveSnapValue = m_WorldSnapEnabled ? ProBuilderSnapSettings.worldSnapMoveValue : ProBuilderSnapSettings.incrementalSnapMoveValue; + + foreach (var mesh in selection) + { + mesh.ToMesh(); + mesh.Refresh(); + } + + OnToolEngaged(); + } + + protected void FinishEdit() + { + if (!m_IsEditing) + return; + + Lightmapping.PopGIWorkflowMode(); + + OnToolDisengaged(); + + var selection = MeshSelection.topInternal.ToArray(); + + foreach (var mesh in selection) + { + mesh.ToMesh(); + mesh.Refresh(); + mesh.Optimize(); + } + + ProBuilderEditor.Refresh(); + + if (afterMeshModification != null) + afterMeshModification(selection); + + m_IsEditing = false; + } + + static void Extrude() + { + int ef = 0; + + var selection = MeshSelection.topInternal; + var selectMode = ProBuilderEditor.selectMode; + + foreach (var mesh in selection) + { + switch (selectMode) + { + case SelectMode.Edge: + if (mesh.selectedFaceCount > 0) + goto default; + + Edge[] newEdges = mesh.Extrude(mesh.selectedEdges, + 0.0001f, + s_ExtrudeEdgesAsGroup, + ProBuilderEditor.s_AllowNonManifoldActions); + + if (newEdges != null) + { + ef += newEdges.Length; + mesh.SetSelectedEdges(newEdges); + } + break; + + default: + int len = mesh.selectedFacesInternal.Length; + + if (len > 0) + { + mesh.Extrude(mesh.selectedFacesInternal, s_ExtrudeMethod, 0.0001f); + mesh.SetSelectedFaces(mesh.selectedFacesInternal); + ef += len; + } + + break; + } + + mesh.ToMesh(); + mesh.Refresh(); + } + + if (ef > 0) + { + EditorUtility.ShowNotification("Extrude"); + ProBuilderEditor.Refresh(); + } + } + + /// <summary> + /// Find the nearest vertex among all visible objects. + /// </summary> + /// <param name="mousePosition"></param> + /// <param name="vertex"></param> + /// <returns></returns> + protected static bool FindNearestVertex(Vector2 mousePosition, out Vector3 vertex) + { + s_FindNearestVertexArguments[0] = mousePosition; + + if (s_FindNearestVertex == null) + s_FindNearestVertex = typeof(HandleUtility).GetMethod("findNearestVertex", + BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance); + + object result = s_FindNearestVertex.Invoke(null, s_FindNearestVertexArguments); + vertex = (bool)result ? (Vector3)s_FindNearestVertexArguments[2] : Vector3.zero; + return (bool)result; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexManipulationTool.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexManipulationTool.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..14316b76f794b98fbb9bfa394912ab24c39ccd7f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexManipulationTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e4919131c75b7914b99be1a9252658bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexManipulationToolSettings.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexManipulationToolSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..0338f0b9535650f622812e450b3b20eda03db6ef --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexManipulationToolSettings.cs @@ -0,0 +1,57 @@ +using UnityEngine; + +namespace UnityEditor.ProBuilder +{ + [InitializeOnLoad] + static class VertexManipulationToolSettings + { + const bool k_EnableHandleSettingInput = true; + + static VertexManipulationToolSettings() + { +#if UNITY_2019_1_OR_NEWER + SceneView.duringSceneGui += OnSceneGUI; +#else + SceneView.onSceneGUIDelegate += OnSceneGUI; +#endif + } + + static void OnSceneGUI(SceneView view) + { + if (!EditorUtility.IsDeveloperMode() + || !VertexManipulationTool.showHandleSettingsInScene + || view != SceneView.lastActiveSceneView) + return; + + DoHandleSettings(new Rect( + 8, + view.position.height - 40, + 400f, + 48f)); + } + + static void DoHandleSettings(Rect rect) + { + Handles.BeginGUI(); + using (new EditorGUI.DisabledScope(k_EnableHandleSettingInput)) + { + GUILayout.BeginArea(rect); + EditorGUI.BeginChangeCheck(); + + GUILayout.BeginHorizontal(); + EditorGUIUtility.labelWidth = 80; + + EditorGUILayout.EnumPopup("Pivot Point", VertexManipulationTool.pivotPoint); + EditorGUILayout.EnumPopup("Orientation", VertexManipulationTool.handleOrientation); + + EditorGUIUtility.labelWidth = 0; + GUILayout.EndHorizontal(); + + if (EditorGUI.EndChangeCheck()) + ProBuilderEditor.Refresh(); + GUILayout.EndArea(); + } + Handles.EndGUI(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexManipulationToolSettings.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexManipulationToolSettings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3eccb60faabe2393a5e0ab1f278a3840ab6e90d5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexManipulationToolSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d123c179cb7a941d0993a60fe2e20cff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexPositionEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexPositionEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..753af6770f85b0c73b07f6a732ad97a6be2c1831 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexPositionEditor.cs @@ -0,0 +1,255 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder.UI; + +namespace UnityEditor.ProBuilder +{ + /// <summary> + /// A simple line-item editor for vertex positions. + /// </summary> + sealed class VertexPositionEditor : ConfigurableWindow + { + const int k_MaxSelectableVertices = 100; + Dictionary<ProBuilderMesh, VertexEditorSelection> m_Selection = new Dictionary<ProBuilderMesh, VertexEditorSelection>(); + static Color s_EvenColor; + static Color s_OddColor; + + Vector2 m_Scroll = Vector2.zero; + bool m_IsActive; + public bool m_WorldSpace = true; + + class VertexEditorSelection + { + public bool isVisible; + public IEnumerable<int> common; + + public VertexEditorSelection(ProBuilderMesh mesh, bool visible, IEnumerable<int> indexes) + { + isVisible = visible; + common = mesh.GetSharedVertexHandles(indexes); + } + } + + public static void MenuOpenVertexEditor() + { + EditorWindow.GetWindow<VertexPositionEditor>(true, "Positions Editor", true); + } + + void OnEnable() + { + s_EvenColor = EditorGUIUtility.isProSkin ? new Color(.18f, .18f, .18f, 1f) : new Color(.85f, .85f, .85f, 1f); + s_OddColor = EditorGUIUtility.isProSkin ? new Color(.15f, .15f, .15f, 1f) : new Color(.80f, .80f, .80f, 1f); + + ProBuilderEditor.selectionUpdated += OnSelectionUpdate; +#if UNITY_2019_1_OR_NEWER + SceneView.duringSceneGui += OnSceneGUI; +#else + SceneView.onSceneGUIDelegate += OnSceneGUI; +#endif + + if (ProBuilderEditor.instance != null) + OnSelectionUpdate(ProBuilderEditor.instance.selection); + } + + void OnDisable() + { + ProBuilderEditor.selectionUpdated -= OnSelectionUpdate; +#if UNITY_2019_1_OR_NEWER + SceneView.duringSceneGui -= OnSceneGUI; +#else + SceneView.onSceneGUIDelegate -= OnSceneGUI; +#endif + } + + void OnSelectionUpdate(IEnumerable<ProBuilderMesh> newSelection) + { + if (newSelection == null) + { + if (m_Selection != null) + m_Selection.Clear(); + + return; + } + + var res = new Dictionary<ProBuilderMesh, VertexEditorSelection>(); + + foreach (var mesh in newSelection) + { + VertexEditorSelection sel; + + if (m_Selection.TryGetValue(mesh, out sel)) + { + sel.common = mesh.GetSharedVertexHandles(mesh.selectedIndexesInternal); + res.Add(mesh, sel); + } + else + { + res.Add(mesh, new VertexEditorSelection(mesh, true, mesh.selectedIndexesInternal)); + } + } + + m_Selection = res; + + this.Repaint(); + } + + void OnVertexMovementBegin(ProBuilderMesh pb) + { + m_IsActive = true; + pb.ToMesh(); + pb.Refresh(); + } + + void OnVertexMovementFinish() + { + m_IsActive = false; + + foreach (var kvp in m_Selection) + { + kvp.Key.ToMesh(); + kvp.Key.Refresh(); + kvp.Key.Optimize(); + } + } + + void OnGUI() + { + DoContextMenu(); + + GUILayout.BeginHorizontal(EditorStyles.toolbar); + + GUILayout.FlexibleSpace(); + + GUIStyle style = m_WorldSpace ? EditorStyles.toolbarButton : UI.EditorGUIUtility.GetOnStyle(EditorStyles.toolbarButton); + + if (GUILayout.Button(m_WorldSpace ? "World Space" : "Model Space", style)) + m_WorldSpace = !m_WorldSpace; + + GUILayout.EndHorizontal(); + + if (m_Selection == null || m_Selection.Count < 1 || !m_Selection.Any(x => x.Key.selectedVertexCount > 0)) + { + GUILayout.FlexibleSpace(); + GUILayout.Label("Select a ProBuilder Mesh", UI.EditorGUIUtility.CenteredGreyMiniLabel); + GUILayout.FlexibleSpace(); + return; + } + + Event e = Event.current; + + if (m_IsActive) + { + if (e.type == EventType.Ignore || + e.type == EventType.MouseUp) + OnVertexMovementFinish(); + } + + m_Scroll = EditorGUILayout.BeginScrollView(m_Scroll); + + foreach (var kvp in m_Selection) + { + ProBuilderMesh mesh = kvp.Key; + VertexEditorSelection sel = kvp.Value; + + bool open = sel.isVisible; + + EditorGUI.BeginChangeCheck(); + open = EditorGUILayout.Foldout(open, mesh.name); + if (EditorGUI.EndChangeCheck()) + sel.isVisible = open; + + if (open) + { + int index = 0; + + bool wasWideMode = EditorGUIUtility.wideMode; + EditorGUIUtility.wideMode = true; + Color background = GUI.backgroundColor; + Transform transform = mesh.transform; + + foreach (int u in sel.common) + { + GUI.backgroundColor = index % 2 == 0 ? s_EvenColor : s_OddColor; + GUILayout.BeginHorizontal(UI.EditorGUIUtility.solidBackgroundStyle); + GUI.backgroundColor = background; + + GUILayout.Label(u.ToString(), GUILayout.MinWidth(32), GUILayout.MaxWidth(32)); + + Vector3 v = mesh.positionsInternal[mesh.sharedVerticesInternal[u][0]]; + + if (m_WorldSpace) v = transform.TransformPoint(v); + + EditorGUI.BeginChangeCheck(); + + v = EditorGUILayout.Vector3Field("", v); + + if (EditorGUI.EndChangeCheck()) + { + if (!m_IsActive) + OnVertexMovementBegin(mesh); + + UndoUtility.RecordObject(mesh, "Set Vertex Postion"); + + mesh.SetSharedVertexPosition(u, m_WorldSpace ? transform.InverseTransformPoint(v) : v); + + if (ProBuilderEditor.instance != null) + { + mesh.RefreshUV(MeshSelection.selectedFacesInEditZone[mesh]); + mesh.Refresh(RefreshMask.Normals); + mesh.mesh.RecalculateBounds(); + ProBuilderEditor.Refresh(); + } + } + index++; + GUILayout.EndHorizontal(); + } + + GUI.backgroundColor = background; + EditorGUIUtility.wideMode = wasWideMode; + } + } + + EditorGUILayout.EndScrollView(); + } + + void OnSceneGUI(SceneView sceneView) + { + if (m_Selection == null) + return; + + int labelCount = 0; + + Handles.BeginGUI(); + + // Only show dropped down probuilder objects. + foreach (KeyValuePair<ProBuilderMesh, VertexEditorSelection> selected in m_Selection) + { + ProBuilderMesh mesh = selected.Key; + VertexEditorSelection sel = selected.Value; + + if (!sel.isVisible) + continue; + + Vector3[] positions = mesh.positionsInternal; + + foreach (int i in sel.common) + { + var indexes = mesh.sharedVerticesInternal[i]; + + Vector3 point = mesh.transform.TransformPoint(positions[indexes[0]]); + + Vector2 cen = HandleUtility.WorldToGUIPoint(point); + + UI.EditorGUIUtility.SceneLabel(i.ToString(), cen); + + if (++labelCount > k_MaxSelectableVertices) break; + } + } + Handles.EndGUI(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexPositionEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexPositionEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..415220a0d64161172b80896e241399be8be4c674 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/VertexPositionEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6274bb00b150de45a17cdf581bc41f5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/pb_ObjectArray.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/pb_ObjectArray.cs new file mode 100644 index 0000000000000000000000000000000000000000..8f5ec4e5dbf24bcf910fda64e0766d658bf62e01 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/pb_ObjectArray.cs @@ -0,0 +1,69 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder +{ + /** + * Used to store arrays of materials. Made obsolete by pb_MaterialArray. + * + * Notes: + * - In the Editor folder because WebGL doesn't like ProceduralMaterial types. + * - Named pb_ObjectArray because this was initially intended to be a base type for + * other save-able object types. It is only used for materials, but changing the name + * to something more suitable would mean breaking existing material palettes for + * lots of people. + */ + [System.Obsolete( + "pb_ObjectArray is deprecated. ProBuilder Material Editor now saves material palettes as pb_MaterialArray. You may safely delete this asset.")] + [System.Serializable] + // ReSharper disable once InconsistentNaming + sealed class pb_ObjectArray : ScriptableObject, IHasDefault + { + // Stored as object for backwards compatibility. + [SerializeField] public Object[] array; + + public T[] GetArray<T>() + { + T[] arr = new T[array.Length]; + + for (int i = 0; i < array.Length; i++) + { + if (array[i] is ProceduralMaterial) + { + arr[i] = (T)System.Convert.ChangeType(array[i], typeof(ProceduralMaterial)); + } + else + { + if (array[i] is T) + { + arr[i] = (T)System.Convert.ChangeType(array[i], typeof(T)); + } + else + { + arr[i] = default(T); + } + } + } + + return (T[])arr; + } + + public void SetDefaultValues() + { + array = new Material[10] + { + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + }; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/pb_ObjectArray.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/pb_ObjectArray.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c9a0aef3e3ceaec4e1186563031cc4dac341c851 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/EditorCore/pb_ObjectArray.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c8a5a39fbad44b97b5f27e8a2e28aecf +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions.meta new file mode 100644 index 0000000000000000000000000000000000000000..cebd0de246860b5cc3fbe42adb5f505bc305ea47 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e326e0ab55c74e9c9bf4ad656a17c4c0 +folderAsset: yes +timeCreated: 1457449387 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors.meta new file mode 100644 index 0000000000000000000000000000000000000000..29cbbe6c1e5af91e08673ec330b8119c46be7860 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6e6cb02037fc4e95952dd035e688eb3d +folderAsset: yes +timeCreated: 1457452380 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/NewBezierShape.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/NewBezierShape.cs new file mode 100644 index 0000000000000000000000000000000000000000..825bc5348ab88162b5d64aff5538d180467110bd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/NewBezierShape.cs @@ -0,0 +1,47 @@ +using UnityEngine.ProBuilder; +using UnityEngine; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class NewBezierShape : MenuAction + { + const string k_IconPath = "Toolbar/NewBezierSpline"; + + public override ToolbarGroup group { get { return ToolbarGroup.Tool; } } + public override Texture2D icon { get { return IconUtility.GetIcon(k_IconPath, IconSkin.Pro); } } + public override TooltipContent tooltip { get { return _tooltip; } } + public override string menuTitle { get { return "New Bezier Shape"; } } + public override int toolbarPriority { get { return 1; } } + + static readonly TooltipContent _tooltip = new TooltipContent + ( + "New Bezier Shape", + "Creates a new shape that is built by extruding along a bezier spline." + ); + + public override bool hidden + { + get { return !Experimental.experimentalFeaturesEnabled; } + } + + public override bool enabled + { + get { return true; } + } + + public override ActionResult DoAction() + { + GameObject go = new GameObject(); + var bezier = go.AddComponent<BezierShape>(); + go.GetComponent<MeshRenderer>().sharedMaterial = EditorMaterialUtility.GetUserMaterial(); + bezier.Init(); + bezier.Refresh(); + EditorUtility.InitObject(bezier.GetComponent<ProBuilderMesh>()); + MeshSelection.SetSelection(go); + UndoUtility.RegisterCreatedObjectUndo(go, "Create Bezier Shape"); + bezier.isEditing = true; + + return new ActionResult(ActionResult.Status.Success, "Create Bezier Shape"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/NewBezierShape.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/NewBezierShape.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..778e52dcd6997a835a4fcf2ad1379b85e8ef880d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/NewBezierShape.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ed8e5003f1d14f718326765fbb042572 +timeCreated: 1487278078 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/NewPolyShape.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/NewPolyShape.cs new file mode 100644 index 0000000000000000000000000000000000000000..937553148f3a0a85447a3dc9acd2017e2bd524cb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/NewPolyShape.cs @@ -0,0 +1,123 @@ +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine; +using UnityEditor; +using System.Reflection; +using UnityEngine.ProBuilder.MeshOperations; +using UnityEditor.ProBuilder.UI; +using EditorUtility = UnityEditor.ProBuilder.EditorUtility; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class NewPolyShape : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Tool; } } + public override Texture2D icon { get { return IconUtility.GetIcon("Toolbar/NewPolyShape", IconSkin.Pro); } } + public override TooltipContent tooltip { get { return _tooltip; } } + public override string menuTitle { get { return "New Poly Shape"; } } + public override int toolbarPriority { get { return 1; } } + + static readonly TooltipContent _tooltip = new TooltipContent + ( + "New Polygon Shape", + "Creates a new shape by clicking around a perimeter and extruding." + ); + + public override bool hidden + { + get { return false; } + } + + public override bool enabled + { + get { return true; } + } + + static bool CanCreateNewPolyShape() + { + //If inspector is locked we cannot create new PolyShape. + //First created inspector seems to hold a specific semantic where + //if not unlocked no matter how many inspectors are present they will + //not allow the creation of new PolyShape. +#if UNITY_2019_1_OR_NEWER + var inspWindows = InspectorWindow.GetInspectors(); + + if (inspWindows.Any(x => x.isLocked)) + { + if (UnityEditor.EditorUtility.DisplayDialog( + L10n.Tr("Inspector Locked"), + L10n.Tr("To create new Poly Shape you need access to all Inspectors, which are currently locked. Do you wish to unlock all Inpsectors?"), + L10n.Tr("Unlock"), + L10n.Tr("Cancel"))) + { + foreach (var insp in inspWindows) + insp.isLocked = false; + } + else + { + return false; + } + } +#else + var inspectorType = typeof(Editor).Assembly.GetType("UnityEditor.InspectorWindow"); + var inspWindows = Resources.FindObjectsOfTypeAll(inspectorType); + var isLocked = inspectorType.GetProperty("isLocked", BindingFlags.Instance | BindingFlags.Public); + bool someInspectorLocked = false; + foreach (var insp in inspWindows) + { + if ((bool)isLocked.GetGetMethod().Invoke(insp, null)) + { + someInspectorLocked = true; + break; + } + } + if (someInspectorLocked == true) + { + if (UnityEditor.EditorUtility.DisplayDialog( + "Inspector Locked", + "To create new Poly Shape you need access to all Inspectors, which are currently locked. Do you wish to unlock all Inpsectors?", + "Unlock", + "Cancel")) + { + foreach (var insp in inspWindows) + { + isLocked.GetSetMethod().Invoke(insp, new object[] { false }); + } + } + else + { + return false; + } + } +#endif + return true; + } + + public override ActionResult DoAction() + { + if (!CanCreateNewPolyShape()) + return new ActionResult(ActionResult.Status.Canceled, "Canceled Create Poly Shape"); + + GameObject go = new GameObject(); + UndoUtility.RegisterCreatedObjectUndo(go, "Create Poly Shape"); + PolyShape poly = Undo.AddComponent<PolyShape>(go); + ProBuilderMesh pb = Undo.AddComponent<ProBuilderMesh>(go); + pb.CreateShapeFromPolygon(poly.m_Points, poly.extrude, poly.flipNormals); + EditorUtility.InitObject(pb); + + // Special case - we don't want to reset the grid pivot because we rely on it to set the active plane for + // interaction, regardless of whether snapping is enabled or not. + if (ProGridsInterface.SnapEnabled() || ProGridsInterface.GridVisible()) + { + Vector3 pivot; + if (ProGridsInterface.GetPivot(out pivot)) + go.transform.position = pivot; + } + MeshSelection.SetSelection(go); + poly.polyEditMode = PolyShape.PolyEditMode.Path; + + return new ActionResult(ActionResult.Status.Success, "Create Poly Shape"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/NewPolyShape.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/NewPolyShape.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..23745e1477d6f5ec29d2bc91f7d42ea43295bacd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/NewPolyShape.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2fa1f4bc90f143d5acde8c0a1e024a61 +timeCreated: 1488561495 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenLightmapUVEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenLightmapUVEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..5ba627e4daf92155964904937a2f82bb930eb388 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenLightmapUVEditor.cs @@ -0,0 +1,35 @@ +using UnityEngine.ProBuilder; +using UnityEngine; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class OpenLightmapUVEditor : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Tool; } } + public override Texture2D icon { get { return null; } } + public override TooltipContent tooltip { get { return s_Tooltip; } } + public override string menuTitle { get { return "Lightmap UV Editor"; } } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Lightmap UV Editor", + "" + ); + + public override bool enabled + { + get { return true; } + } + + public override bool hidden + { + get { return true; } + } + + public override ActionResult DoAction() + { + EditorWindow.GetWindow<LightmapUVEditor>(true, "Lightmap UV Editor", true).position = LightmapUVEditor.desiredPosition; + return new ActionResult(ActionResult.Status.Success, "Open Lightmap UV Editor Window"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenLightmapUVEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenLightmapUVEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ebbc9840220343b95a79f84918f6d6618660c66a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenLightmapUVEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c851f089cbc73c141be8cc62b5dc057a +timeCreated: 1474046557 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenMaterialEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenMaterialEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..62de2bd976fd7d210ad8173b983cd82c2d640b3f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenMaterialEditor.cs @@ -0,0 +1,29 @@ +using UnityEngine.ProBuilder; +using UnityEngine; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class OpenMaterialEditor : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Tool; } } + public override Texture2D icon { get { return IconUtility.GetIcon("Toolbar/Panel_Materials", IconSkin.Pro); } } + public override TooltipContent tooltip { get { return s_Tooltip; } } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Material Editor", + "Opens the Material Editor window.\n\nThe Material Editor window applies materials to selected faces or objects." + ); + + public override bool enabled + { + get { return ProBuilderEditor.instance != null; } + } + + public override ActionResult DoAction() + { + MaterialEditor.MenuOpenMaterialEditor(); + return new ActionResult(ActionResult.Status.Success, "Open Materials Window"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenMaterialEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenMaterialEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..842ec565773bdeb7f6dc2c1880af393873f4b80e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenMaterialEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2b43eb0a521a4a6a90bde45149e1c656 +timeCreated: 1457452380 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenShapeEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenShapeEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..040c5395b4671a6095f000c90ae151e39e6bd99a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenShapeEditor.cs @@ -0,0 +1,46 @@ +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class OpenShapeEditor : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Tool; } } + public override Texture2D icon { get { return IconUtility.GetIcon("Toolbar/Panel_Shapes", IconSkin.Pro); } } + public override TooltipContent tooltip { get { return s_Tooltip; } } + public override string menuTitle { get { return "New Shape"; } } + public override int toolbarPriority { get { return 0; } } + protected override bool hasFileMenuEntry { get { return false; } } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "New Shape Tool", + "Opens the Shape Editor window.\n\nThe Shape Editor is a window that allows you to interactively create new 3d primitives.", + keyCommandSuper, keyCommandShift, 'K' + ); + + public override bool enabled + { + get { return true; } + } + + protected override MenuActionState optionsMenuState + { + get { return MenuActionState.VisibleAndEnabled; } + } + + public override ActionResult DoAction() + { + ShapeEditor.CreateActiveShape(); + return new ActionResult(ActionResult.Status.Success, "Create Shape"); + } + + protected override void DoAlternateAction() + { + ShapeEditor.MenuOpenShapeCreator(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenShapeEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenShapeEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..68a2c44b0a3a66b3e51e5a1feb83e3c4a0b5d1fb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenShapeEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 22bc27ec00c948759f18d3b55ad227eb +timeCreated: 1457452380 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenShapeEditorMenuItem.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenShapeEditorMenuItem.cs new file mode 100644 index 0000000000000000000000000000000000000000..da41421e85886020812481e0a4f38e3c6884e957 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenShapeEditorMenuItem.cs @@ -0,0 +1,36 @@ +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class OpenShapeEditorMenuItem : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Tool; } } + public override Texture2D icon { get { return null; } } + public override TooltipContent tooltip { get { return s_Tooltip; } } + public override string menuTitle { get { return "New Shape"; } } + public override int toolbarPriority { get { return 0; } } + protected override bool hasFileMenuEntry { get { return true; } } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "New Shape Tool", + "Opens the Shape Editor window.\n\nThe Shape Editor is a window that allows you to interactively create new 3d primitives.", + keyCommandSuper, keyCommandShift, 'K' + ); + + public override bool enabled + { + get { return true; } + } + + public override ActionResult DoAction() + { + ShapeEditor.MenuOpenShapeCreator(); + return new ActionResult(ActionResult.Status.Success, "Open Shape Editor"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenShapeEditorMenuItem.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenShapeEditorMenuItem.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9318179296813a434a5aa9fc6cf9cb93759fcbca --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenShapeEditorMenuItem.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f41728d29935ac14ea77acad92405db0 +timeCreated: 1457452380 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenSmoothingEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenSmoothingEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..07cca4e4cfc037540b1b6fb7c5dd290dfbbc9689 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenSmoothingEditor.cs @@ -0,0 +1,35 @@ +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class OpenSmoothingEditor : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Tool; } } + public override Texture2D icon { get { return IconUtility.GetIcon("Toolbar/Panel_Smoothing", IconSkin.Pro); } } + public override TooltipContent tooltip { get { return s_Tooltip; } } + public override string menuTitle { get { return "Smoothing"; } } + public override int toolbarPriority { get { return 2; } } + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Smoothing Groups Editor", + @"Opens the Smoothing Group Editor. + +Smoothing groups average the vertex normals with neighboring planes. This allows lighting to behave in a more realistic manner when dealing with edges that are intended to be smooth. + +ProBuilder decides which edges should be smoothed by checking for neighboring faces that are in the same group. It also checks for Hard groups, which hardens edges of neighboring faces." + ); + + public override bool enabled + { + get { return ProBuilderEditor.instance != null; } + } + + public override ActionResult DoAction() + { + SmoothGroupEditor.MenuOpenSmoothGroupEditor(); + return new ActionResult(ActionResult.Status.Success, "Open Smoothing Groups Editor"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenSmoothingEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenSmoothingEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..95fd1d87b008ee7fb6e67b50463ffc18db3347cf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenSmoothingEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 40af14f295f2434f9cfda219da2645a0 +timeCreated: 1457452380 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenUVEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenUVEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..d8722db20e774fa87141c4cf88073699bdfd47d3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenUVEditor.cs @@ -0,0 +1,32 @@ +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class OpenUVEditor : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Tool; } } + public override Texture2D icon { get { return IconUtility.GetIcon("Toolbar/Panel_UVEditor", IconSkin.Pro); } } + public override TooltipContent tooltip { get { return s_Tooltip; } } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "UV Editor", + "Opens the UV Editor window.\n\nThe UV Editor allows you to change how textures are rendered on this mesh." + ); + + public override bool enabled + { + get { return ProBuilderEditor.instance != null; } + } + + public override ActionResult DoAction() + { + UVEditor.MenuOpenUVEditor(); + return new ActionResult(ActionResult.Status.Success, "Open UV Window"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenUVEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenUVEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5cef3f1c7347bcb92ccb67e0ba9cdcfde2bd6c49 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenUVEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e985069a91a74567a338b55beddbf74c +timeCreated: 1457452380 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenVertexColorEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenVertexColorEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..39de838d7fa86d13771e95e266ea2d6347ee7279 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenVertexColorEditor.cs @@ -0,0 +1,30 @@ +using UnityEngine.ProBuilder; +using UnityEngine; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class OpenVertexColorEditor : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Tool; } } + public override Texture2D icon { get { return IconUtility.GetIcon("Toolbar/Panel_VertColors", IconSkin.Pro); } } + public override TooltipContent tooltip { get { return s_Tooltip; } } + public override string menuTitle { get { return "Vertex Colors"; } } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Vertex Colors Editor", + "Opens the Vertex Color Palette.\n\nApply using Face mode for hard-edged colors.\nApply using Edge or Vertex mode for soft, blended colors." + ); + + public override bool enabled + { + get { return ProBuilderEditor.instance != null; } + } + + public override ActionResult DoAction() + { + VertexColorPalette.MenuOpenWindow(); + return new ActionResult(ActionResult.Status.Success, "Open Vertex Color Window"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenVertexColorEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenVertexColorEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c9fdbec4cca995b30784ae1eed1fa725ed79e45b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenVertexColorEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c8e7f2a60420444ba31322510285d625 +timeCreated: 1457452380 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenVertexPositionEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenVertexPositionEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..097463f7d6471fb873f800630d923ca863a7c661 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenVertexPositionEditor.cs @@ -0,0 +1,38 @@ +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class OpenVertexPositionEditor : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Tool; } } + public override Texture2D icon { get { return null; } } + public override TooltipContent tooltip { get { return s_Tooltip; } } + public override string menuTitle { get { return "Vertex Editor"; } } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Vertex Position Editor", + "Opens the vertex positions editor window." + ); + + public override bool enabled + { + get { return ProBuilderEditor.instance != null; } + } + + public override bool hidden + { + get { return true; } + } + + public override ActionResult DoAction() + { + VertexPositionEditor.MenuOpenVertexEditor(); + return new ActionResult(ActionResult.Status.Success, "Open Vertex Editor Window"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenVertexPositionEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenVertexPositionEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..bb11e69848b71e3ed6bf25143737417e63414180 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Editors/OpenVertexPositionEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0af7522e3732400388ebc019d869caf2 +timeCreated: 1474046557 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export.meta new file mode 100644 index 0000000000000000000000000000000000000000..3db236867c6a4509d8553f4213446e4bb0995ed2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 27d2963a2a5b4b0884f376976f4f34eb +folderAsset: yes +timeCreated: 1472831757 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/Export.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/Export.cs new file mode 100644 index 0000000000000000000000000000000000000000..061b363d84ccb0f2be9a7809150fbf3184b8b2c5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/Export.cs @@ -0,0 +1,237 @@ +using System; +using UnityEngine; +using System.Linq; +using System.Collections.Generic; +using UnityEngine.ProBuilder.Stl; +using UnityEngine.ProBuilder; +using Object = UnityEngine.Object; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class Export : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Object; } } + public override Texture2D icon { get { return IconUtility.GetIcon("Toolbar/Object_Export", IconSkin.Pro); } } + public override TooltipContent tooltip { get { return m_Tooltip; } } + protected override bool hasFileMenuEntry { get { return false; } } + + GUIContent gc_ExportFormat = new GUIContent("Export Format", "The type of file to export the current selection as."); + GUIContent gc_ExportRecursive = new GUIContent("Include Children", "Should the exporter include children of the current selection when searching for meshes to export?"); + GUIContent gc_ObjExportRightHanded = new GUIContent("Right Handed", "Unity coordinate space is left handed, where most other major 3D modeling softwares are right handed. Usually this option should be left enabled."); + GUIContent gc_ExportAsGroup = new GUIContent("Export As Group", "If enabled all selected meshes will be combined to a single model. If not, each mesh will be exported individually."); + GUIContent gc_ObjApplyTransform = new GUIContent("Apply Transforms", "If enabled each mesh will have it's Transform applied prior to export. This is useful when you want to retain the correct placement of objects when re-importing to Unity (just set the imported mesh to { 0, 0, 0 }). If not enabled meshes are exported in local space."); + GUIContent gc_ObjExportCopyTextures = new GUIContent("Copy Textures", "With Copy Textures enabled the exporter will copy material textures to the destination directory. If false the material library will point to the texture path within the Unity project. If you're exporting models with the intention of editing in an external 3D modeler then re-importing, disable this option to avoid duplicate textures in your project."); + GUIContent gc_ObjExportVertexColors = new GUIContent("Vertex Colors", "Some 3D modeling applications will read and write vertex colors as an unofficial extension to the OBJ format.\n\nWarning! Enabling this can break compatibility with some other 3D modeling applications."); + GUIContent gc_ObjTextureOffsetScale = new GUIContent("Texture Offset, Scale", "Write texture map offset and scale to the material library. Not all 3D modeling applications support this specificiation, and some will fail to load materials that define these values."); + GUIContent gc_ObjQuads = new GUIContent("Export Quads", "Where possible, faces will be exported as quads instead of triangles. Note that this can result in a larger exported mesh (ProBuilder will not merge shared vertices with this option enabled)."); + GUIContent gc_ExportAssetInPlace = new GUIContent("Replace Source", "Remove the ProBuilder component and replace the MeshFilter mesh with the exported asset."); + + Pref<ExportFormat> m_ExportFormat = new Pref<ExportFormat>("export.format", k_DefaultFormat); + Pref<bool> m_ExportRecursive = new Pref<bool>("export.exportRecursive", false); + Pref<bool> m_ExportAsGroup = new Pref<bool>("export.exportAsGroup", false); + + // obj specific + Pref<bool> m_ObjExportRightHanded = new Pref<bool>("export.objExportRightHanded", true); + Pref<bool> m_ObjExportCopyTextures = new Pref<bool>("export.objExportCopyTextures", true); + Pref<bool> m_ObjApplyTransform = new Pref<bool>("export.objApplyTransform", false); + Pref<bool> m_ObjExportVertexColors = new Pref<bool>("export.objExportVertexColors", false); + Pref<bool> m_ObjTextureOffsetScale = new Pref<bool>("export.objTextureOffsetScale", false); + Pref<bool> m_ObjQuads = new Pref<bool>("export.objQuads", true); + + // stl specific + Pref<FileType> m_StlExportFormat = new Pref<FileType>("export.stlExportFormat", FileType.Ascii); + + // ply specific + Pref<bool> m_PlyExportIsRightHanded = new Pref<bool>("export.plyExportIsRightHanded", true); + Pref<bool> m_PlyApplyTransform = new Pref<bool>("export.plyApplyTransform", true); + Pref<bool> m_PlyQuads = new Pref<bool>("export.plyQuads", true); + Pref<bool> m_PlyNGons = new Pref<bool>("export.plyNGons", false); + + public enum ExportFormat + { + Obj, + Stl, + Ply, + Asset, + Prefab + } + + const ExportFormat k_DefaultFormat = ExportFormat.Obj; + + static readonly TooltipContent m_Tooltip = new TooltipContent + ( + "Export", + "Export the selected ProBuilder objects as a model file." + ); + + public override bool hidden + { + get { return false; } + } + + public override bool enabled + { + get { return MeshSelection.selectedObjectCount > 0; } + } + + protected override MenuActionState optionsMenuState + { + get { return MenuActionState.VisibleAndEnabled; } + } + + protected override void OnSettingsGUI() + { + GUILayout.Label("Export Settings", EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + + EditorGUI.BeginChangeCheck(); + m_ExportFormat.value = (ExportFormat)EditorGUILayout.EnumPopup(gc_ExportFormat, m_ExportFormat); + if (EditorGUI.EndChangeCheck()) + { + if (m_ExportFormat.value == ExportFormat.Asset || m_ExportFormat.value == ExportFormat.Prefab) + { + var opt = ExportAsset.s_ExportAssetOptions.value; + opt.makePrefab = m_ExportFormat.value == ExportFormat.Prefab; + ExportAsset.s_ExportAssetOptions.SetValue(opt); + } + } + + m_ExportRecursive.value = EditorGUILayout.Toggle(gc_ExportRecursive, m_ExportRecursive); + + if (m_ExportFormat != ExportFormat.Asset + && m_ExportFormat != ExportFormat.Prefab + && m_ExportFormat != ExportFormat.Stl) + { + m_ExportAsGroup.value = EditorGUILayout.Toggle(gc_ExportAsGroup, m_ExportAsGroup); + } + + if (m_ExportFormat == ExportFormat.Obj) + ObjExportOptions(); + else if (m_ExportFormat == ExportFormat.Stl) + StlExportOptions(); + else if (m_ExportFormat == ExportFormat.Ply) + PlyExportOptions(); + else if (m_ExportFormat == ExportFormat.Asset || m_ExportFormat == ExportFormat.Prefab) + AssetExportOptions(); + + if (EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Export")) + EditorUtility.ShowNotification(DoAction().notification); + } + + void ObjExportOptions() + { + EditorGUI.BeginDisabledGroup(m_ExportAsGroup); + + if (m_ExportAsGroup) + EditorGUILayout.Toggle("Apply Transforms", true); + else + m_ObjApplyTransform.value = EditorGUILayout.Toggle(gc_ObjApplyTransform, m_ObjApplyTransform); + + EditorGUI.EndDisabledGroup(); + + m_ObjExportRightHanded.value = EditorGUILayout.Toggle(gc_ObjExportRightHanded, m_ObjExportRightHanded); + m_ObjExportCopyTextures.value = EditorGUILayout.Toggle(gc_ObjExportCopyTextures, m_ObjExportCopyTextures); + m_ObjExportVertexColors.value = EditorGUILayout.Toggle(gc_ObjExportVertexColors, m_ObjExportVertexColors); + m_ObjTextureOffsetScale.value = EditorGUILayout.Toggle(gc_ObjTextureOffsetScale, m_ObjTextureOffsetScale); + m_ObjQuads.value = EditorGUILayout.Toggle(gc_ObjQuads, m_ObjQuads); + } + + void StlExportOptions() + { + m_StlExportFormat.value = (UnityEngine.ProBuilder.Stl.FileType)EditorGUILayout.EnumPopup("Stl Format", m_StlExportFormat); + } + + void PlyExportOptions() + { + EditorGUI.BeginDisabledGroup(m_ExportAsGroup); + + if (m_ExportAsGroup) + EditorGUILayout.Toggle("Apply Transforms", true); + else + m_PlyApplyTransform.value = EditorGUILayout.Toggle(gc_ObjApplyTransform, m_PlyApplyTransform); + EditorGUI.EndDisabledGroup(); + + m_PlyExportIsRightHanded.value = EditorGUILayout.Toggle("Right Handed", m_PlyExportIsRightHanded); + m_PlyQuads.value = EditorGUILayout.Toggle("Quads", m_PlyQuads); + } + + void AssetExportOptions() + { + var options = ExportAsset.s_ExportAssetOptions.value; + + EditorGUI.BeginChangeCheck(); + options.replaceOriginal = EditorGUILayout.Toggle(gc_ExportAssetInPlace, options.replaceOriginal); + if(EditorGUI.EndChangeCheck()) + ExportAsset.s_ExportAssetOptions.SetValue(options); + } + + public override ActionResult DoAction() + { + string res = null; + + List<ProBuilderMesh> meshes = m_ExportRecursive ? MeshSelection.deep.ToList() : MeshSelection.topInternal; + + if (meshes == null || !meshes.Any()) + return new ActionResult(ActionResult.Status.Canceled, "No ProBuilder Mesh"); + + if (m_ExportFormat == ExportFormat.Obj) + { + res = ExportObj.ExportWithFileDialog(meshes, + m_ExportAsGroup, + m_ObjQuads, + new ObjOptions() { + handedness = m_ObjExportRightHanded ? ObjOptions.Handedness.Right : ObjOptions.Handedness.Left, + copyTextures = m_ObjExportCopyTextures, + applyTransforms = m_ExportAsGroup || m_ObjApplyTransform.value, + vertexColors = m_ObjExportVertexColors, + textureOffsetScale = m_ObjTextureOffsetScale + }); + } + else if (m_ExportFormat == ExportFormat.Stl) + { + res = ExportStlAscii.ExportWithFileDialog(meshes.Select(x => x.gameObject).ToArray(), m_StlExportFormat); + } + else if (m_ExportFormat == ExportFormat.Ply) + { + res = ExportPly.ExportWithFileDialog(meshes, m_ExportAsGroup, new PlyOptions() { + isRightHanded = m_PlyExportIsRightHanded, + applyTransforms = m_PlyApplyTransform, + quads = m_PlyQuads, + ngons = m_PlyNGons + }); + } + else if (m_ExportFormat == ExportFormat.Asset || m_ExportFormat == ExportFormat.Prefab) + { + res = ExportAsset.ExportWithFileDialog(meshes, ExportAsset.s_ExportAssetOptions.value); + } + + if (string.IsNullOrEmpty(res)) + return new ActionResult(ActionResult.Status.Canceled, "Canceled"); + + PingExportedModel(res); + + return new ActionResult(ActionResult.Status.Success, "Exported " + m_ExportFormat.value); + } + + internal static void PingExportedModel(string path) + { + var local = path.Replace("\\", "/"); + var dataPath = Application.dataPath.Replace("\\", "/"); + + if (local.Contains(dataPath)) + { + AssetDatabase.Refresh(); + var assetPath = "Assets" + local.Replace(dataPath, ""); + var o = AssetDatabase.LoadAssetAtPath<Object>(assetPath); + if (o != null) + EditorGUIUtility.PingObject(o); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/Export.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/Export.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7604771e59916f3f6cebb954f96f1884ab7134ed --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/Export.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 736319124efd40fda31c36ae2599181a +timeCreated: 1496775583 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportAsset.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportAsset.cs new file mode 100644 index 0000000000000000000000000000000000000000..2925fed539d97deeb41108a7a7020f7b29174150 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportAsset.cs @@ -0,0 +1,320 @@ +using System; +using UnityEngine; +using System.Linq; +using System.Collections.Generic; +using System.IO; +using UnityEngine.ProBuilder; +using Object = UnityEngine.Object; + +namespace UnityEditor.ProBuilder.Actions +{ + [Serializable] + struct ExportAssetOptions + { + public bool makePrefab; + public bool replaceOriginal; + + public static readonly ExportAssetOptions defaults = new ExportAssetOptions() + { + makePrefab = false, + replaceOriginal = false + }; + } + + sealed class ExportAsset : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Export; } } + public override Texture2D icon { get { return null; } } + public override TooltipContent tooltip { get { return s_Tooltip; } } + + internal static Pref<ExportAssetOptions> s_ExportAssetOptions =new Pref<ExportAssetOptions>("export.assetOptions", ExportAssetOptions.defaults); + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Export Asset", + "Export a Unity mesh asset file." + ); + + public override bool enabled + { + get { return MeshSelection.selectedObjectCount > 0; } + } + + public override bool hidden + { + get { return true; } + } + + public override ActionResult DoAction() + { + var opt = s_ExportAssetOptions.value; + var res = ExportWithFileDialog(MeshSelection.topInternal, opt); + Export.PingExportedModel(res); + return new ActionResult(ActionResult.Status.Success, opt.makePrefab ? "Make Prefab" : "Make Asset"); + } + + /// <summary> + /// Export meshes to a Unity asset. + /// </summary> + /// <param name="meshes"></param> + /// <returns></returns> + public static string ExportWithFileDialog(IList<ProBuilderMesh> meshes, ExportAssetOptions options) + { + if (meshes == null || !meshes.Any()) + return ""; + + string res = null; + + if (meshes.Count() < 2) + { + ProBuilderMesh first = meshes.FirstOrDefault(); + + if (first == null) + return null; + + res = options.makePrefab + ? ExportPrefab(first, options.replaceOriginal) + : ExportMesh(first, options.replaceOriginal); + } + else + { + string path = UnityEditor.EditorUtility.SaveFolderPanel("Export to Asset", "Assets", ""); + + if (string.IsNullOrEmpty(path) || !Directory.Exists(path)) + return null; + + meshes = meshes.ToList(); + for (int i = 0, c = meshes.Count; i < c; i++) + { + var pb = meshes[i]; + var assetPath = string.Format("{0}/{1}.asset", path, pb.name); + + if (options.makePrefab) + { + res = ExportPrefab(assetPath, pb, options.replaceOriginal, true); + } + else + { + res = ExportMesh(assetPath, pb, options.replaceOriginal, true); + + if (options.replaceOriginal) + { + pb.preserveMeshAssetOnDestroy = true; + Undo.DestroyObjectImmediate(pb); + } + + } + } + } + AssetDatabase.Refresh(); + + return res; + } + + static string AssetPathFromFullPath(string path, string extension) + { + if (string.IsNullOrEmpty(path)) return null; + + string directory = Path.GetDirectoryName(path).Replace("\\", "/"); + string name = Path.GetFileNameWithoutExtension(path); + string relativeDirectory = string.Format("Assets{0}", directory.Replace(Application.dataPath, "")); + return !string.IsNullOrEmpty(extension) + ? string.Format("{0}/{1}.{2}", relativeDirectory, name, extension) + : string.Format("{0}/{1}", relativeDirectory, name); + } + + static string AskForPath(string fileName, string extension) + { + return UnityEditor.EditorUtility.SaveFilePanel("Export to Asset", "Assets", fileName, extension); + } + + static string AskForAssetPath(string fileName, string extension) + { + return AssetPathFromFullPath(AskForPath(fileName, extension), extension); + } + + static string PickDifferentAssetPath(string previousAssetPath) + { + var extension = Path.GetExtension(previousAssetPath); + if (extension != null && extension.StartsWith(".")) + { + extension = extension.Substring(1); + } + var newPath = AskForAssetPath( + Path.GetFileNameWithoutExtension(previousAssetPath), + extension + ); + return !string.IsNullOrEmpty(newPath) + ? newPath + : AssetDatabase.GenerateUniqueAssetPath(previousAssetPath); + } + + static string ExportPrefab(ProBuilderMesh mesh, bool replaceOriginal) + { + string path = AskForPath(mesh.name, "prefab"); + + if (string.IsNullOrEmpty(path)) + return null; + + return ExportPrefab(path, mesh, replaceOriginal, false); + } + + static string ExportMesh(ProBuilderMesh mesh, bool replaceOriginal) + { + string path = AskForPath(mesh.name, "asset"); + + if (string.IsNullOrEmpty(path)) + return null; + + ExportMesh(path, mesh, replaceOriginal, false); + + if (replaceOriginal) + { + mesh.preserveMeshAssetOnDestroy = true; + Undo.DestroyObjectImmediate(mesh); + } + else + { + mesh.mesh = null; + EditorUtility.SynchronizeWithMeshFilter(mesh); + } + + return path; + } + + static string ExportPrefab(string path, ProBuilderMesh pb, bool replaceOriginal, bool batchExport) + { + string name = Path.GetFileNameWithoutExtension(path); + string basePath = AssetPathFromFullPath(path, null); + + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + + string meshPath = string.Format("{0}.asset", basePath); + string prefabPath = string.Format("{0}.prefab", basePath); + + if (batchExport) + { + // Never overwrite during batch export. + meshPath = AssetDatabase.GenerateUniqueAssetPath(meshPath); + prefabPath = AssetDatabase.GenerateUniqueAssetPath(prefabPath); + } + else + { + var existingMesh = AssetDatabase.LoadAssetAtPath<Mesh>(meshPath); + if (existingMesh) + { + // Overwriting mesh. + var existingPrefab = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath); + if (existingPrefab) + { + // Overwriting prefab as well. + var meshFilter = existingPrefab.GetComponent<MeshFilter>(); + if (!meshFilter || meshFilter.sharedMesh != existingMesh) + { + // Prefab and mesh being overwritten are not related, pick different path. + meshPath = PickDifferentAssetPath(meshPath); + } + // Else allow overwrite both as they are related. + } + else + { + // Unrelated mesh is being overriden, pick different path. + meshPath = PickDifferentAssetPath(meshPath); + } + } + } + + Mesh meshAsset = pb.mesh; + meshAsset.name = name; + meshAsset = CreateOrReplaceAsset(meshAsset, meshPath); + + var go = replaceOriginal ? pb.gameObject : Object.Instantiate(pb.gameObject); + + var component = go.GetComponent<ProBuilderMesh>(); + Undo.RecordObject(component, "Export ProBuilderMesh as Replacement"); + component.preserveMeshAssetOnDestroy = true; + Undo.DestroyObjectImmediate(component); + + go.GetComponent<MeshFilter>().sharedMesh = meshAsset; + var meshCollider = go.GetComponent<MeshCollider>(); + if (meshCollider) + { + meshCollider.sharedMesh = meshAsset; + } + +#if UNITY_2018_3_OR_NEWER + if (replaceOriginal) + PrefabUtility.SaveAsPrefabAssetAndConnect(go, prefabPath, InteractionMode.UserAction); + else + PrefabUtility.SaveAsPrefabAsset(go, prefabPath); +#else + PrefabUtility.CreatePrefab(prefabPath, go, ReplacePrefabOptions.Default); +#endif + if (!replaceOriginal) + { + pb.mesh = null; + EditorUtility.SynchronizeWithMeshFilter(pb); + Object.DestroyImmediate(go); + } + + return meshPath; + } + + static string ExportMesh(string path, ProBuilderMesh mesh, bool replaceOriginal, bool batchExport) + { + var existing = AssetDatabase.GetAssetPath(mesh.mesh); + + if (!string.IsNullOrEmpty(existing)) + return existing; + + string name = Path.GetFileNameWithoutExtension(path); + string meshPath = AssetPathFromFullPath(path, "asset"); + if (batchExport) + { + // Never replace assets during batch export. + meshPath = AssetDatabase.GenerateUniqueAssetPath(meshPath); + } + + mesh.ToMesh(); + mesh.Refresh(); + mesh.Optimize(); + + var meshAsset = mesh.mesh; + meshAsset.name = name; + + meshAsset = CreateOrReplaceAsset(meshAsset, meshPath); + + if (replaceOriginal) + { + mesh.GetComponent<MeshFilter>().sharedMesh = meshAsset; + var meshCollider = mesh.GetComponent<MeshCollider>(); + if (meshCollider) + { + meshCollider.sharedMesh = meshAsset; + } + } + + return meshPath; + } + + static T CreateOrReplaceAsset<T>(T asset, string path) where T : Object + { + T existingAsset = AssetDatabase.LoadAssetAtPath<T>(path); + if (existingAsset == null) + { + AssetDatabase.CreateAsset(asset, path); + return asset; + } + else + { + var tempPath = AssetDatabase.GenerateUniqueAssetPath(path); + AssetDatabase.CreateAsset(asset, tempPath); + FileUtil.ReplaceFile(tempPath, path); + AssetDatabase.DeleteAsset(tempPath); + return existingAsset; + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportAsset.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportAsset.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..aafac00f71dbc396cf408d228e278b9aae17b229 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportAsset.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cc401b52b64c4b7b87078d8ae3e29b68 +timeCreated: 1472836657 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportObj.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportObj.cs new file mode 100644 index 0000000000000000000000000000000000000000..f49220791954e6be40b093ab66d66bb42c555f7e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportObj.cs @@ -0,0 +1,131 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class ExportObj : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Export; } } + public override Texture2D icon { get { return null; } } + public override TooltipContent tooltip { get { return _tooltip; } } + + static readonly TooltipContent _tooltip = new TooltipContent + ( + "Export Obj", + "Export a Wavefront OBJ file." + ); + + public override bool hidden + { + get { return true; } + } + + public override bool enabled + { + get { return MeshSelection.selectedObjectCount > 0; } + } + + public override ActionResult DoAction() + { + string res = ExportWithFileDialog(MeshSelection.topInternal); + + if (string.IsNullOrEmpty(res)) + return new ActionResult(ActionResult.Status.Canceled, "User Canceled"); + + Export.PingExportedModel(res); + + return new ActionResult(ActionResult.Status.Success, "Export OBJ"); + } + + // Prompt user for a save file location and export meshes as Obj. + public static string ExportWithFileDialog(IEnumerable<ProBuilderMesh> meshes, bool asGroup = true, bool allowQuads = true, ObjOptions options = null) + { + if (meshes == null || !meshes.Any()) + return null; + + IEnumerable<Model> models = allowQuads + ? meshes.Select(x => new Model(x.gameObject.name, x)) + : meshes.Select(x => new Model(x.gameObject.name, x.mesh, x.GetComponent<MeshRenderer>().sharedMaterials, x.transform.localToWorldMatrix)); + + string path = null, res = null; + + if (asGroup || models.Count() < 2) + { + ProBuilderMesh first = meshes.FirstOrDefault(); + string name = first != null ? first.name : "ProBuilderModel"; + path = UnityEditor.EditorUtility.SaveFilePanel("Export to Obj", "Assets", name, "obj"); + + if (string.IsNullOrEmpty(path)) + return null; + + res = DoExport(path, models, options); + } + else + { + path = UnityEditor.EditorUtility.SaveFolderPanel("Export to Obj", "Assets", ""); + + if (string.IsNullOrEmpty(path) || !Directory.Exists(path)) + return null; + + foreach (Model model in models) + res = DoExport(string.Format("{0}/{1}.obj", path, model.name), new List<Model>() { model }, options); + } + + return res; + } + + internal static string DoExport(string path, IEnumerable<Model> models, ObjOptions options) + { + string name = Path.GetFileNameWithoutExtension(path); + string directory = Path.GetDirectoryName(path); + + List<string> textures = null; + string obj, mat; + + if (ObjExporter.Export(name, models, out obj, out mat, out textures, options)) + { + try + { + FileUtility.WriteAllText(string.Format("{0}/{1}.obj", directory, name), obj); + FileUtility.WriteAllText(string.Format("{0}/{1}.mtl", directory, name.Replace(" ", "_")), mat); + CopyTextures(textures, directory); + } + catch (System.Exception e) + { + Debug.LogWarning(string.Format("Failed writing obj to path: {0}\n{1}", string.Format("{0}/{1}.obj", path, name), e.ToString())); + return null; + } + } + else + { + Debug.LogWarning("No meshes selected."); + return null; + } + + return path; + } + + // Copy files from their path to a destination directory. + static void CopyTextures(List<string> textures, string destination) + { + foreach (string path in textures) + { + string dest = string.Format("{0}/{1}", destination, Path.GetFileName(path)); + + if (!File.Exists(path)) + { + Log.Warning("OBJ Export: Could not find texture \"" + path + ",\" it will not be copied."); + continue; + } + + if (!File.Exists(dest)) + File.Copy(path, dest); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportObj.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportObj.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..22ee05e340b963d40dbff6b796384ad07b548d09 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportObj.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 23fb6d4a102f4c2188ef8afe61eb58e4 +timeCreated: 1472833007 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportPly.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportPly.cs new file mode 100644 index 0000000000000000000000000000000000000000..bd1b2bb587508e2575f5c37a9a6a33b3721a28d1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportPly.cs @@ -0,0 +1,111 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using UnityEngine.ProBuilder.Stl; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using EditorUtility = UnityEditor.EditorUtility; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class ExportPly : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Export; } } + public override Texture2D icon { get { return null; } } + public override TooltipContent tooltip { get { return _tooltip; } } + + static readonly TooltipContent _tooltip = new TooltipContent + ( + "Export Ply", + "Export a Stanford PLY file." + ); + + public override bool hidden + { + get { return true; } + } + + public override bool enabled + { + get { return MeshSelection.selectedObjectCount > 0; } + } + + public override ActionResult DoAction() + { + string res = ExportWithFileDialog(MeshSelection.topInternal); + + if (string.IsNullOrEmpty(res)) + return new ActionResult(ActionResult.Status.Canceled, "User Canceled"); + + Export.PingExportedModel(res); + + return new ActionResult(ActionResult.Status.Success, "Export PLY"); + } + + /** + * Prompt user for a save file location and export meshes as Obj. + */ + public static string ExportWithFileDialog(IEnumerable<ProBuilderMesh> meshes, bool asGroup = true, PlyOptions options = null) + { + if (meshes == null || meshes.Count() < 1) + return null; + + string path = null, res = null; + + if (asGroup || meshes.Count() < 2) + { + ProBuilderMesh first = meshes.FirstOrDefault(); + string name = first != null ? first.name : "ProBuilderModel"; + path = UnityEditor.EditorUtility.SaveFilePanel("Export as PLY", "Assets", name, "ply"); + + if (string.IsNullOrEmpty(path)) + return null; + + res = DoExport(path, meshes, options); + } + else + { + path = UnityEditor.EditorUtility.SaveFolderPanel("Export to PLY", "Assets", ""); + + if (string.IsNullOrEmpty(path) || !Directory.Exists(path)) + return null; + + foreach (ProBuilderMesh model in meshes) + res = DoExport(string.Format("{0}/{1}.ply", path, model.name), new List<ProBuilderMesh>() { model }, options); + } + + return res; + } + + static string DoExport(string path, IEnumerable<ProBuilderMesh> models, PlyOptions options) + { + string name = Path.GetFileNameWithoutExtension(path); + string directory = Path.GetDirectoryName(path); + + string ply; + + if (PlyExporter.Export(models, out ply, options)) + { + try + { + FileUtility.WriteAllText(string.Format("{0}/{1}.ply", directory, name), ply); + } + catch (System.Exception e) + { + Debug.LogWarning(string.Format("Failed writing PLY to path: {0}\n{1}", string.Format("{0}/{1}.ply", path, name), e.ToString())); + return null; + } + } + else + { + Debug.LogWarning("No meshes selected."); + return null; + } + + return path; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportPly.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportPly.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7bc07a8d61e65c852c2e6c2ea95a381d90024c52 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportPly.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ac7a7f49f26f45b29857e71b0d156fff +timeCreated: 1497030443 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportStlAscii.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportStlAscii.cs new file mode 100644 index 0000000000000000000000000000000000000000..d88e62ee3bcc6730879504f6132d89532c87a778 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportStlAscii.cs @@ -0,0 +1,90 @@ +using System; +using System.Globalization; +using UnityEngine; +using UnityEditor; +using System.Linq; +using System.Threading; +using UnityEngine.ProBuilder.Stl; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using EditorUtility = UnityEditor.EditorUtility; +using Object = UnityEngine.Object; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class ExportStlAscii : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Export; } } + public override Texture2D icon { get { return null; } } + public override TooltipContent tooltip { get { return _tooltip; } } + + static readonly TooltipContent _tooltip = new TooltipContent + ( + "Export Stl", + @"Export an Stl model file." + ); + + public override bool hidden + { + get { return true; } + } + + public override bool enabled + { + get { return MeshSelection.selectedObjectCount > 0; } + } + + public override ActionResult DoAction() + { + var res = ExportWithFileDialog(Selection.gameObjects, FileType.Ascii); + + if (string.IsNullOrEmpty(res)) + return new ActionResult(ActionResult.Status.Canceled, "User Canceled"); + + Export.PingExportedModel(res); + + return new ActionResult(ActionResult.Status.Success, "Export STL"); + } + + public static string ExportWithFileDialog(GameObject[] gameObjects, FileType type) + { + GameObject first = gameObjects.FirstOrDefault(x => x.GetComponent<ProBuilderMesh>() != null); + + string name = first != null ? first.name : "Mesh"; + string path = UnityEditor.EditorUtility.SaveFilePanel("Save Mesh to STL", "", name, "stl"); + + var res = false; + var currentCulture = Thread.CurrentThread.CurrentCulture; + + try + { + // pb_Stl is an external lib + Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; + res = pb_Stl_Exporter.Export(path, gameObjects, type); + } + finally + { + Thread.CurrentThread.CurrentCulture = currentCulture; + } + + + if (res) + { + string full = path.Replace("\\", "/"); + + // if the file was saved in project, ping it + if (full.Contains(Application.dataPath)) + { + string relative = full.Replace(Application.dataPath, "Assets"); + Object o = AssetDatabase.LoadAssetAtPath(relative, typeof(Object)); + if (o != null) + EditorGUIUtility.PingObject(o); + AssetDatabase.Refresh(); + } + return path; + } + + return null; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportStlAscii.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportStlAscii.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..73f217e100943602febc441f5d1dbc684a28a650 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportStlAscii.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 48b3897a5481441a8c9468e28fd54c53 +timeCreated: 1472831854 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportStlBinary.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportStlBinary.cs new file mode 100644 index 0000000000000000000000000000000000000000..091a32c268943c97cbfbe9f5c3c581dc8c809992 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportStlBinary.cs @@ -0,0 +1,45 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using System.Linq; +using UnityEngine.ProBuilder.Stl; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class ExportStlBinary : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Export; } } + public override Texture2D icon { get { return null; } } + public override TooltipContent tooltip { get { return _tooltip; } } + + static readonly TooltipContent _tooltip = new TooltipContent + ( + "Export Stl", + @"Export an Stl model file." + ); + + public override bool hidden + { + get { return true; } + } + + public override bool enabled + { + get { return MeshSelection.selectedObjectCount > 0; } + } + + public override ActionResult DoAction() + { + var res = ExportStlAscii.ExportWithFileDialog(Selection.gameObjects, FileType.Binary); + + if (string.IsNullOrEmpty(res)) + return new ActionResult(ActionResult.Status.Canceled, "User Canceled"); + + Export.PingExportedModel(res); + + return new ActionResult(ActionResult.Status.Success, "Export STL"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportStlBinary.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportStlBinary.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..601bb071b13dec94bbf781cf4b22a7bc0475e7b1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Export/ExportStlBinary.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b04279a9fe7348798c260ea6516c1a4c +timeCreated: 1472832591 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry.meta new file mode 100644 index 0000000000000000000000000000000000000000..fe7ebd98dd3c3c4a9fce3ca2f81f8a7a98ea577b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8dd93277e78748079ee5467a543c0416 +folderAsset: yes +timeCreated: 1457564631 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/BevelEdges.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/BevelEdges.cs new file mode 100644 index 0000000000000000000000000000000000000000..80271af2cf20a1815ee28eed47f227e0c53ed7d7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/BevelEdges.cs @@ -0,0 +1,85 @@ +using UnityEngine; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class BevelEdges : MenuAction + { + Pref<float> m_BevelSize = new Pref<float>("BevelEdges.size", .2f); + + public override ToolbarGroup group { get { return ToolbarGroup.Geometry; } } + public override Texture2D icon { get { return IconUtility.GetIcon("Toolbar/Edge_Bevel", IconSkin.Pro); } } + public override TooltipContent tooltip { get { return s_Tooltip; } } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Bevel", + @"Smooth the selected edges by adding a slanted face connecting the two adjacent faces." + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Edge | SelectMode.Face; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedEdgeCount > 0; } + } + + protected override MenuActionState optionsMenuState + { + get { return MenuActionState.VisibleAndEnabled; } + } + + protected override void OnSettingsGUI() + { + GUILayout.Label("Bevel Edge Settings", EditorStyles.boldLabel); + + EditorGUILayout.HelpBox("Amount determines how much space the bevel takes up. Bigger value means more bevel action.", MessageType.Info); + + EditorGUI.BeginChangeCheck(); + + m_BevelSize.value = UI.EditorGUIUtility.FreeSlider("Distance", m_BevelSize, .001f, .99f); + + if (m_BevelSize < .001f) + m_BevelSize.value = .001f; + + if (EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Bevel Edges")) + DoAction(); + } + + public override ActionResult DoAction() + { + ActionResult res = ActionResult.NoSelection; + + UndoUtility.RecordSelection("Bevel Edges"); + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + pb.ToMesh(); + + List<Face> faces = Bevel.BevelEdges(pb, pb.selectedEdges, m_BevelSize); + res = faces != null ? new ActionResult(ActionResult.Status.Success, "Bevel Edges") : new ActionResult(ActionResult.Status.Failure, "Failed Bevel Edges"); + + if (res) + pb.SetSelectedFaces(faces); + + pb.Refresh(); + pb.Optimize(); + } + + ProBuilderEditor.Refresh(); + + return res; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/BevelEdges.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/BevelEdges.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..102d64a6450a68c5b1a0e388fc8ef19fe2c2ca82 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/BevelEdges.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b7bd43b2e3e547199420eec1d903ff30 +timeCreated: 1466191810 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/BridgeEdges.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/BridgeEdges.cs new file mode 100644 index 0000000000000000000000000000000000000000..db9d49516f3c127e7c96c3b79527aa40dec71bed --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/BridgeEdges.cs @@ -0,0 +1,77 @@ +using UnityEngine; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class BridgeEdges : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Geometry; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Edge_Bridge", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Bridge Edges", + @"Add a new face connecting two edges.", + keyCommandAlt, 'B' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Edge; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.topInternal.Any(x => x.selectedEdgeCount == 2); } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Bridge Edges"); + + bool success = false; + + foreach (var mesh in MeshSelection.topInternal) + { + if (mesh.selectedEdgeCount == 2) + { + if (mesh.Bridge(mesh.selectedEdges[0], mesh.selectedEdges[1], ProBuilderEditor.s_AllowNonManifoldActions) != null) + { + success = true; + mesh.ToMesh(); + mesh.Refresh(); + mesh.Optimize(); + } + } + } + + if (success) + { + ProBuilderEditor.Refresh(); + return new ActionResult(ActionResult.Status.Success, "Bridge Edges"); + } + else + { + Debug.LogWarning("Failed Bridge Edges. Bridge Edges requires that only 2 edges be selected, and they must both only have one connecting face (non-manifold)."); + return new ActionResult(ActionResult.Status.Failure, "Bridge Edges requires that only 2 edges be selected, and they must both only have one connecting face (non-manifold)."); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/BridgeEdges.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/BridgeEdges.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d10e0ab87d35f3dc4af717c09be96355285c9a95 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/BridgeEdges.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 066d50a96f4a480fac834bf3b64a8c26 +timeCreated: 1457564631 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/CollapseVertices.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/CollapseVertices.cs new file mode 100644 index 0000000000000000000000000000000000000000..24fbefd9a75759734391ebc078ffb55bf8874edd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/CollapseVertices.cs @@ -0,0 +1,109 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; +using EditorGUILayout = UnityEditor.EditorGUILayout; +using EditorStyles = UnityEditor.EditorStyles; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class CollapseVertices : MenuAction + { + Pref<bool> m_CollapseToFirst = new Pref<bool>("CollapseVertices.collapseToFirst", false); + + public override ToolbarGroup group + { + get { return ToolbarGroup.Geometry; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Vert_Collapse", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Collapse Vertices", + @"Merge all selected vertices into a single vertex, centered at the average of all selected points.", + keyCommandAlt, 'C' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Vertex; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedSharedVertexCountObjectMax > 1; } + } + + protected override MenuActionState optionsMenuState + { + get { return MenuActionState.VisibleAndEnabled; } + } + + protected override void OnSettingsGUI() + { + GUILayout.Label("Collapse Vertices Settings", EditorStyles.boldLabel); + + EditorGUILayout.HelpBox("Collapse To First setting decides where the collapsed vertex will be placed.\n\nIf True, the new vertex will be placed at the position of the first selected vertex. If false, the new vertex is placed at the average position of all selected vertices.", MessageType.Info); + + EditorGUI.BeginChangeCheck(); + + m_CollapseToFirst.value = EditorGUILayout.Toggle("Collapse To First", m_CollapseToFirst); + + if (EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Collapse Vertices")) + DoAction(); + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + bool success = false; + + bool collapseToFirst = m_CollapseToFirst; + + UndoUtility.RecordSelection("Collapse Vertices"); + + foreach (var mesh in MeshSelection.topInternal) + { + if (mesh.selectedIndexesInternal.Length > 1) + { + int newIndex = mesh.MergeVertices(mesh.selectedIndexesInternal, collapseToFirst); + + success = newIndex > -1; + + if (success) + mesh.SetSelectedVertices(new int[] { newIndex }); + + mesh.ToMesh(); + mesh.Refresh(); + mesh.Optimize(); + } + } + + ProBuilderEditor.Refresh(); + + if (success) + return new ActionResult(ActionResult.Status.Success, "Collapse Vertices"); + + return new ActionResult(ActionResult.Status.Failure, "Collapse Vertices\nNo Vertices Selected"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/CollapseVertices.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/CollapseVertices.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f2057d64d7ad7c801b5ffb3648bdff96ba2b9111 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/CollapseVertices.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d1e3d0e26dcfcb438a45fbbf9f23e92 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConformFaceNormals.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConformFaceNormals.cs new file mode 100644 index 0000000000000000000000000000000000000000..a1181226b46911af76fbb5f324a77dc49376baec --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConformFaceNormals.cs @@ -0,0 +1,60 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class ConformFaceNormals : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Geometry; } } + public override Texture2D icon { get { return IconUtility.GetIcon("Toolbar/Face_ConformNormals", IconSkin.Pro); } } + public override TooltipContent tooltip { get { return s_TooltipContent; } } + public override string menuTitle { get { return "Conform Normals"; } } + + static readonly TooltipContent s_TooltipContent = new TooltipContent + ( + "Conform Face Normals", + @"Orients all selected faces to face the same direction." + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Face; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedFaceCountObjectMax > 1; } + } + + public override ActionResult DoAction() + { + var selection = MeshSelection.topInternal; + + UndoUtility.RecordSelection("Conform " + (MeshSelection.selectedFaceCount > 0 ? "Face" : "Object") + " Normals."); + + ActionResult res = ActionResult.NoSelection; + + foreach (ProBuilderMesh pb in selection) + { + var faces = pb.GetSelectedFaces(); + + if (faces == null) + continue; + + res = UnityEngine.ProBuilder.MeshOperations.SurfaceTopology.ConformNormals(pb, faces); + + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + } + + ProBuilderEditor.Refresh(); + + return res; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConformFaceNormals.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConformFaceNormals.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e8ddd64cfacee15fc1eac997c9a63facc05cb2ff --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConformFaceNormals.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1fdc9faa599347a3b697e785ac4719b3 +timeCreated: 1457564636 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConnectEdges.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConnectEdges.cs new file mode 100644 index 0000000000000000000000000000000000000000..b97b1e729618818a985a003c00e7c7f2779426fd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConnectEdges.cs @@ -0,0 +1,57 @@ +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class ConnectEdges : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Geometry; } } + public override Texture2D icon { get { return IconUtility.GetIcon("Toolbar/Edge_Connect", IconSkin.Pro); } } + public override TooltipContent tooltip { get { return s_Tooltip; } } + protected override bool hasFileMenuEntry { get { return false; } } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Connect Edges", + "Inserts a new edge connecting the center points of all selected edges. See also \"Subdivide.\"", + keyCommandAlt, 'E' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Edge; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedEdgeCountObjectMax > 1; } + } + + public override ActionResult DoAction() + { + ActionResult res = ActionResult.NoSelection; + + UndoUtility.RecordSelection("Connect Edges"); + + foreach (var mesh in MeshSelection.topInternal) + { + Edge[] connections; + Face[] faces; + + res = ConnectElements.Connect(mesh, mesh.selectedEdges, out faces, out connections, true, true); + + if (connections != null) + { + if (connections.Length != 0) + mesh.SetSelectedEdges(connections); + mesh.Refresh(); + mesh.Optimize(); + } + } + + ProBuilderEditor.Refresh(); + return res; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConnectEdges.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConnectEdges.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..99d15d389b3dfabbf220452b3f45d209e857d3f4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConnectEdges.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9eda47df4ab94d8a8174832a11359a8a +timeCreated: 1457564631 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConnectVertices.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConnectVertices.cs new file mode 100644 index 0000000000000000000000000000000000000000..fd447de90005217d30b8335982b86c6f9368c213 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConnectVertices.cs @@ -0,0 +1,59 @@ +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class ConnectVertices : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Geometry; } } + public override Texture2D icon { get { return IconUtility.GetIcon("Toolbar/Vert_Connect", IconSkin.Pro); } } + public override TooltipContent tooltip { get { return _tooltip; } } + protected override bool hasFileMenuEntry { get { return false; } } + + static readonly TooltipContent _tooltip = new TooltipContent + ( + "Connect Vertices", + @"Adds edges connecting all selected vertices.", + keyCommandAlt, 'E' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Vertex; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedSharedVertexCount > 1; } + } + + public override ActionResult DoAction() + { + ActionResult res = ActionResult.NoSelection; + + UndoUtility.RecordSelection("Connect Vertices"); + + foreach (var mesh in MeshSelection.topInternal) + { + mesh.ToMesh(); + int[] splits = mesh.Connect(mesh.selectedIndexesInternal); + + if (splits != null) + { + mesh.Refresh(); + mesh.Optimize(); + mesh.SetSelectedVertices(splits); + res = new ActionResult(ActionResult.Status.Success, "Connect Edges"); + } + else + { + res = new ActionResult(ActionResult.Status.Failure, "Failed Connecting Edges"); + } + } + ProBuilderEditor.Refresh(); + + return res; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConnectVertices.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConnectVertices.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5486be77f924064b9f43abe7ac7186f3ea5b7eb9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ConnectVertices.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c6d73444bb8cc9b468d5ff190d7de759 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DeleteFaces.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DeleteFaces.cs new file mode 100644 index 0000000000000000000000000000000000000000..cfd33f52d744111aa7d588b9f1fb43c3982caa24 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DeleteFaces.cs @@ -0,0 +1,76 @@ +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + [MenuActionShortcut(typeof(SceneView), KeyCode.Backspace)] + sealed class DeleteFaces : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Geometry; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Face_Delete", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Delete Faces", + @"Delete all selected faces.", + keyCommandDelete + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Face; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedFaceCount > 0; } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Delete Face"); + + int count = 0; + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + if (pb.selectedFaceCount == pb.facesInternal.Length) + { + Debug.LogWarning("Attempting to delete all faces on this mesh... I'm afraid I can't let you do that."); + continue; + } + + pb.DeleteFaces(pb.selectedFacesInternal); + count += pb.selectedFaceCount; + + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + } + + MeshSelection.ClearElementSelection(); + ProBuilderEditor.Refresh(); + + if (count > 0) + return new ActionResult(ActionResult.Status.Success, "Delete " + count + " Faces"); + + return new ActionResult(ActionResult.Status.Failure, "No Faces Selected"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DeleteFaces.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DeleteFaces.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..99dc9ff03879c2b6c4b8222fb0b952ac3daf050a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DeleteFaces.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b0c8bf4cfa4d461cb01b12bb9e3e42f9 +timeCreated: 1457564631 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DetachFaces.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DetachFaces.cs new file mode 100644 index 0000000000000000000000000000000000000000..17a6bf34782bfbba82198ff7d19ae654cf457f9d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DetachFaces.cs @@ -0,0 +1,166 @@ +using System.Collections.Generic; +using UnityEngine; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class DetachFaces : MenuAction + { + Pref<DetachSetting> m_DetachSetting = new Pref<DetachSetting>("DetachFaces.target", DetachSetting.GameObject); + + public override ToolbarGroup group { get { return ToolbarGroup.Geometry; } } + public override Texture2D icon { get { return IconUtility.GetIcon("Toolbar/Face_Detach", IconSkin.Pro); } } + public override TooltipContent tooltip { get { return s_Tooltip; } } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Detach Faces", + "Creates a new object (or submesh) from the selected faces." + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Face; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedFaceCount > 0; } + } + + protected override MenuActionState optionsMenuState + { + get { return MenuActionState.VisibleAndEnabled; } + } + + enum DetachSetting + { + GameObject, + Submesh + }; + + protected override void OnSettingsGUI() + { + GUILayout.Label("Detach Face Settings", EditorStyles.boldLabel); + + EditorGUILayout.HelpBox("Detach Faces can separate the selection into either a new GameObject or a submesh.", MessageType.Info); + + EditorGUI.BeginChangeCheck(); + + m_DetachSetting.value = (DetachSetting)EditorGUILayout.EnumPopup("Detach To", m_DetachSetting); + + if (EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Detach Selection")) + EditorUtility.ShowNotification(DoAction().notification); + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Detach Face(s)"); + + if (m_DetachSetting == DetachSetting.GameObject) + return DetachFacesToObject(); + + return DetachFacesToSubmesh(); + } + + static ActionResult DetachFacesToSubmesh() + { + int count = 0; + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + pb.ToMesh(); + List<Face> res = pb.DetachFaces(pb.selectedFacesInternal); + pb.Refresh(); + pb.Optimize(); + + pb.SetSelectedFaces(res.ToArray()); + + count += pb.selectedFaceCount; + } + + ProBuilderEditor.Refresh(); + + if (count > 0) + return new ActionResult(ActionResult.Status.Success, "Detach " + count + (count > 1 ? " Faces" : " Face")); + + return new ActionResult(ActionResult.Status.Success, "Detach Faces"); + } + + static ActionResult DetachFacesToObject() + { + int detachedFaceCount = 0; + List<GameObject> detached = new List<GameObject>(); + + foreach (ProBuilderMesh mesh in MeshSelection.topInternal) + { + if (mesh.selectedFaceCount < 1 || mesh.selectedFaceCount == mesh.facesInternal.Length) + continue; + + var primary = mesh.selectedFaceIndexes; + detachedFaceCount += primary.Count; + + List<int> inverse = new List<int>(); + + for (int i = 0; i < mesh.facesInternal.Length; i++) + if (!primary.Contains(i)) + inverse.Add(i); + + ProBuilderMesh copy = Object.Instantiate(mesh.gameObject, mesh.transform.parent).GetComponent<ProBuilderMesh>(); + EditorUtility.SynchronizeWithMeshFilter(copy); + +#if !UNITY_2018_3_OR_NEWER + // if is prefab, break connection and destroy children + if (EditorUtility.IsPrefabInstance(copy.gameObject) || EditorUtility.IsPrefabAsset(copy.gameObject)) + PrefabUtility.DisconnectPrefabInstance(copy.gameObject); +#endif + + if (copy.transform.childCount > 0) + { + for (int i = copy.transform.childCount - 1; i > -1; i--) + Object.DestroyImmediate(copy.transform.GetChild(i).gameObject); + + foreach (var child in mesh.transform.GetComponentsInChildren<ProBuilderMesh>()) + EditorUtility.SynchronizeWithMeshFilter(child); + } + + Undo.RegisterCreatedObjectUndo(copy.gameObject, "Detach Selection"); + + mesh.DeleteFaces(primary); + copy.DeleteFaces(inverse); + + mesh.Rebuild(); + copy.Rebuild(); + + mesh.Optimize(); + copy.Optimize(); + + mesh.ClearSelection(); + copy.ClearSelection(); + + copy.SetSelectedFaces(copy.faces); + + copy.gameObject.name = GameObjectUtility.GetUniqueNameForSibling(mesh.transform.parent, mesh.gameObject.name); ; + detached.Add(copy.gameObject); + } + + MeshSelection.SetSelection(detached); + ProBuilderEditor.Refresh(); + + if (detachedFaceCount > 0) + return new ActionResult(ActionResult.Status.Success, "Detach " + detachedFaceCount + " faces to new Object"); + + return new ActionResult(ActionResult.Status.Failure, "No Faces Selected"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DetachFaces.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DetachFaces.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2f4af930ffce3e251635c90a905282e7447fd128 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DetachFaces.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d9930631c9404fb0b63a91644558eb39 +timeCreated: 1457564631 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DuplicateFaces.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DuplicateFaces.cs new file mode 100644 index 0000000000000000000000000000000000000000..b854b50d5c4c7bca5bd4a527a9a0f14e4b923f0e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DuplicateFaces.cs @@ -0,0 +1,159 @@ +using System.Collections.Generic; +using UnityEngine; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class DuplicateFaces : MenuAction + { + Pref<DuplicateFaceSetting> m_DuplicateFaceSetting = new Pref<DuplicateFaceSetting>("DuplicateFaces.target", DuplicateFaceSetting.GameObject); + + public override ToolbarGroup group { get { return ToolbarGroup.Geometry; } } + public override Texture2D icon { get { return IconUtility.GetIcon("Toolbar/Face_Duplicate", IconSkin.Pro); } } //icon to be replaced + public override TooltipContent tooltip { get { return s_Tooltip; } } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Duplicate Faces", + "Makes an exact copy of the selected faces, and either adds them to this mesh or creates a new Game Object" + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Face; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedFaceCount > 0; } + } + + protected override MenuActionState optionsMenuState + { + get { return MenuActionState.VisibleAndEnabled; } + } + + internal enum DuplicateFaceSetting + { + GameObject, + Submesh + }; + + protected override void OnSettingsGUI() + { + GUILayout.Label("Duplicate Face Settings", EditorStyles.boldLabel); + + EditorGUILayout.HelpBox("You can create a new Game Object with the selected face(s), or keep them as part of this object by using a Submesh.", MessageType.Info); + + EditorGUI.BeginChangeCheck(); + + m_DuplicateFaceSetting.value = (DuplicateFaceSetting)EditorGUILayout.EnumPopup("Duplicate To", m_DuplicateFaceSetting); + + if (EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Duplicate Selection")) + EditorUtility.ShowNotification(DoAction().notification); + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Duplicate Face(s)"); + + if (m_DuplicateFaceSetting == DuplicateFaceSetting.GameObject) + return DuplicateFacesToObject(); + + return DuplicateFacesToSubmesh(); + } + + static ActionResult DuplicateFacesToSubmesh() + { + int count = 0; + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + pb.ToMesh(); + List<Face> res = pb.DetachFaces(pb.selectedFacesInternal, false); + pb.Refresh(); + pb.Optimize(); + + pb.SetSelectedFaces(res.ToArray()); + + count += pb.selectedFaceCount; + } + + ProBuilderEditor.Refresh(); + + if (count > 0) + return new ActionResult(ActionResult.Status.Success, "Duplicate " + count + (count > 1 ? " Faces" : " Face")); + + return new ActionResult(ActionResult.Status.Success, "Duplicate Faces"); + } + + static ActionResult DuplicateFacesToObject() + { + int duplicatedFaceCount = 0; + List<GameObject> duplicated = new List<GameObject>(); + + foreach (ProBuilderMesh mesh in MeshSelection.topInternal) + { + if (mesh.selectedFaceCount < 1) + continue; + + var primary = mesh.selectedFaceIndexes; + duplicatedFaceCount += primary.Count; + + List<int> inverse = new List<int>(); + + for (int i = 0; i < mesh.facesInternal.Length; i++) + if (!primary.Contains(i)) + inverse.Add(i); + + ProBuilderMesh copy = Object.Instantiate(mesh.gameObject, mesh.transform.parent).GetComponent<ProBuilderMesh>(); + EditorUtility.SynchronizeWithMeshFilter(copy); + +#if !UNITY_2018_3_OR_NEWER + // if is prefab, break connection and destroy children + if (EditorUtility.IsPrefabInstance(copy.gameObject) || EditorUtility.IsPrefabAsset(copy.gameObject)) + PrefabUtility.DisconnectPrefabInstance(copy.gameObject); +#endif + + if (copy.transform.childCount > 0) + { + for (int i = copy.transform.childCount - 1; i > -1; i--) + Object.DestroyImmediate(copy.transform.GetChild(i).gameObject); + + foreach (var child in mesh.transform.GetComponentsInChildren<ProBuilderMesh>()) + EditorUtility.SynchronizeWithMeshFilter(child); + } + + Undo.RegisterCreatedObjectUndo(copy.gameObject, "Duplicate Selection"); + + copy.DeleteFaces(inverse); + copy.Rebuild(); + copy.Optimize(); + mesh.ClearSelection(); + copy.ClearSelection(); + copy.SetSelectedFaces(copy.faces); + + copy.gameObject.name = GameObjectUtility.GetUniqueNameForSibling(mesh.transform.parent, mesh.gameObject.name); + duplicated.Add(copy.gameObject); + } + + MeshSelection.SetSelection(duplicated); + ProBuilderEditor.Refresh(); + + if (duplicatedFaceCount > 0) + return new ActionResult(ActionResult.Status.Success, "Duplicate " + duplicatedFaceCount + " faces to new Object"); + + return new ActionResult(ActionResult.Status.Failure, "No Faces Selected"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DuplicateFaces.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DuplicateFaces.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5a3e49129339f65149f13f69bd401aa2f8be65bf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/DuplicateFaces.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 172d21c82259a0c428b3924edd908358 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/Extrude.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/Extrude.cs new file mode 100644 index 0000000000000000000000000000000000000000..40e1cb5bfee84926a4d2362b0c155f2f93d1f68d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/Extrude.cs @@ -0,0 +1,71 @@ +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; + +namespace UnityEditor.ProBuilder.Actions +{ + // The menu bar entry for Extrude delegates to Face/Edge as appropriate. + sealed class Extrude : MenuAction + { + public override ToolbarGroup @group + { + get { return ToolbarGroup.Geometry; } + } + + public override Texture2D icon + { + get { return null; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Extrude", "", + keyCommandSuper, 'E' + ); + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + public override SelectMode validSelectModes + { + get { return SelectMode.Face | SelectMode.Edge; } + } + + public override bool enabled + { + get + { + switch (ProBuilderEditor.selectMode) + { + case SelectMode.Edge: + return EditorToolbarLoader.GetInstance<ExtrudeEdges>().enabled; + case SelectMode.Face: + return EditorToolbarLoader.GetInstance<ExtrudeFaces>().enabled; + default: + return false; + } + } + } + + public override bool hidden + { + get { return true; } + } + + public override ActionResult DoAction() + { + switch (ProBuilderEditor.selectMode) + { + case SelectMode.Edge: + return EditorToolbarLoader.GetInstance<ExtrudeEdges>().DoAction(); + case SelectMode.Face: + return EditorToolbarLoader.GetInstance<ExtrudeFaces>().DoAction(); + + default: + return ActionResult.NoSelection; + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/Extrude.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/Extrude.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..38202edb7bb9d674ec8eb0eaa09f4c09a66fcf58 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/Extrude.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9b24935f60532d7428cbcb5df316e359 +timeCreated: 1457564631 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ExtrudeEdges.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ExtrudeEdges.cs new file mode 100644 index 0000000000000000000000000000000000000000..1092b10ed738e0c778e53a89396c202f2687c674 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ExtrudeEdges.cs @@ -0,0 +1,102 @@ +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class ExtrudeEdges : MenuAction + { + Pref<float> m_ExtrudeEdgeDistance = new Pref<float>("ExtrudeEdges.distance", .5f); + + public override ToolbarGroup group { get { return ToolbarGroup.Geometry; } } + public override Texture2D icon { get { return IconUtility.GetIcon("Toolbar/Edge_Extrude", IconSkin.Pro); } } + public override TooltipContent tooltip { get { return s_Tooltip; } } + protected override bool hasFileMenuEntry { get { return false; } } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Extrude Edges", + @"Adds a new face extending from the currently selected edges. Edges must have an open side to be extruded.", + keyCommandSuper, 'E' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Edge; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedEdgeCount > 0; } + } + + protected override MenuActionState optionsMenuState + { + get { return MenuActionState.VisibleAndEnabled; } + } + + protected override void OnSettingsGUI() + { + GUILayout.Label("Extrude Settings", EditorStyles.boldLabel); + + EditorGUILayout.HelpBox("Extrude Amount determines how far an edge will be moved along it's normal when extruding. This value can be negative.\n\nExtrude as Group determines whether or not adjacent faces stay attached to one another when extruding.", MessageType.Info); + + EditorGUI.BeginChangeCheck(); + + VertexManipulationTool.s_ExtrudeEdgesAsGroup.value = EditorGUILayout.Toggle("As Group", VertexManipulationTool.s_ExtrudeEdgesAsGroup); + + m_ExtrudeEdgeDistance.value = EditorGUILayout.FloatField("Distance", m_ExtrudeEdgeDistance); + + if (EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Extrude Edges")) + DoAction(); + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Extrude"); + + int extrudedFaceCount = 0; + bool success = false; + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + pb.ToMesh(); + pb.Refresh(RefreshMask.Normals); + + if (pb.selectedEdgeCount < 1) + continue; + + extrudedFaceCount += pb.selectedEdgeCount; + + Edge[] newEdges = pb.Extrude(pb.selectedEdges, + m_ExtrudeEdgeDistance, + VertexManipulationTool.s_ExtrudeEdgesAsGroup, + ProBuilderEditor.s_AllowNonManifoldActions); + + success |= newEdges != null; + + if (success) + pb.SetSelectedEdges(newEdges); + else + extrudedFaceCount -= pb.selectedEdgeCount; + + pb.Rebuild(); + } + + ProBuilderEditor.Refresh(); + + if (extrudedFaceCount > 0) + return new ActionResult(ActionResult.Status.Success, "Extrude"); + + return new ActionResult(ActionResult.Status.Canceled, "Extrude\nEmpty Selection"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ExtrudeEdges.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ExtrudeEdges.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..875ce5e2b00a8fc5b3314899453246903c2a8ecc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ExtrudeEdges.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 97626f417dcf4f68a68db312995f9e6b +timeCreated: 1457564631 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ExtrudeFaces.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ExtrudeFaces.cs new file mode 100644 index 0000000000000000000000000000000000000000..6f925c2c2caff90b5810af4ea9c5cf4429535619 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ExtrudeFaces.cs @@ -0,0 +1,146 @@ +using UnityEngine; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class ExtrudeFaces : MenuAction + { + Pref<float> m_ExtrudeDistance = new Pref<float>("ExtrudeFaces.distance", .5f); + + ExtrudeMethod extrudeMethod + { + get { return VertexManipulationTool.s_ExtrudeMethod; } + set { VertexManipulationTool.s_ExtrudeMethod.value = value; } + } + + static string GetExtrudeIconString(ExtrudeMethod m) + { + return m == ExtrudeMethod.VertexNormal ? "Toolbar/ExtrudeFace_VertexNormals" + : m == ExtrudeMethod.FaceNormal ? "Toolbar/ExtrudeFace_FaceNormals" + : "Toolbar/ExtrudeFace_Individual"; + } + + public override ToolbarGroup group + { + get { return ToolbarGroup.Geometry; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon(GetExtrudeIconString(extrudeMethod), IconSkin.Pro); } + } + + protected override Texture2D disabledIcon + { + get { return IconUtility.GetIcon(string.Format("{0}_disabled", GetExtrudeIconString(extrudeMethod)), IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + protected override bool hasFileMenuEntry + { + get { return false; } + } + + Texture2D[] m_Icons = null; + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Extrude Faces", + "Extrude selected faces, either as a group or individually.\n\nAlt + Click this button to show additional Extrude options.", + keyCommandSuper, 'E' + ); + + public ExtrudeFaces() + { + m_Icons = new Texture2D[3]; + m_Icons[(int)ExtrudeMethod.IndividualFaces] = IconUtility.GetIcon("Toolbar/ExtrudeFace_Individual", IconSkin.Pro); + m_Icons[(int)ExtrudeMethod.VertexNormal] = IconUtility.GetIcon("Toolbar/ExtrudeFace_VertexNormals", IconSkin.Pro); + m_Icons[(int)ExtrudeMethod.FaceNormal] = IconUtility.GetIcon("Toolbar/ExtrudeFace_FaceNormals", IconSkin.Pro); + } + + public override SelectMode validSelectModes + { + get { return SelectMode.Face; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedFaceCount > 0; } + } + + protected override MenuActionState optionsMenuState + { + get { return MenuActionState.VisibleAndEnabled; } + } + + protected override void OnSettingsGUI() + { + GUILayout.Label("Extrude Settings", EditorStyles.boldLabel); + + EditorGUILayout.HelpBox("Extrude Amount determines how far a face will be moved along it's normal when extruding. This value can be negative.\n\nYou may also choose to Extrude by Face Normal, Vertex Normal, or as Individual Faces.", MessageType.Info); + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + GUILayout.Label(m_Icons[(int)extrudeMethod]); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + EditorGUI.BeginChangeCheck(); + + extrudeMethod = (ExtrudeMethod)EditorGUILayout.EnumPopup("Extrude By", extrudeMethod); + m_ExtrudeDistance.value = EditorGUILayout.FloatField("Distance", m_ExtrudeDistance); + + if (EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Extrude Faces")) + DoAction(); + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Extrude"); + + int extrudedFaceCount = 0; + + foreach (ProBuilderMesh mesh in MeshSelection.topInternal) + { + mesh.ToMesh(); + mesh.Refresh(RefreshMask.Normals); + + if (mesh.selectedFaceCount < 1) + continue; + + extrudedFaceCount += mesh.selectedFaceCount; + var selectedFaces = mesh.GetSelectedFaces(); + + mesh.Extrude(selectedFaces, + VertexManipulationTool.s_ExtrudeMethod, + m_ExtrudeDistance); + + mesh.SetSelectedFaces(selectedFaces); + + mesh.Rebuild(); + mesh.Optimize(); + } + + ProBuilderEditor.Refresh(); + + if (extrudedFaceCount > 0) + return new ActionResult(ActionResult.Status.Success, "Extrude"); + + return new ActionResult(ActionResult.Status.Canceled, "Extrude\nEmpty Selection"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ExtrudeFaces.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ExtrudeFaces.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3f7c5b95127f57818ded9f86aa7a8e1790f44507 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/ExtrudeFaces.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d790e5dd7e634bac936d5dc0e026ae20 +timeCreated: 1457564631 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FillHole.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FillHole.cs new file mode 100644 index 0000000000000000000000000000000000000000..d987db8941fc9ad07d70723fb6b67fd1edf5f678 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FillHole.cs @@ -0,0 +1,175 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; +using EditorGUILayout = UnityEditor.EditorGUILayout; +using EditorStyles = UnityEditor.EditorStyles; +using EditorUtility = UnityEditor.ProBuilder.EditorUtility; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class FillHole : MenuAction + { + Pref<bool> m_SelectEntirePath = new Pref<bool>("FillHole.selectEntirePath", true); + + public override ToolbarGroup group + { + get { return ToolbarGroup.Geometry; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Edge_FillHole", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Fill Hole", + @"Create a new face connecting all selected vertices." + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Edge | SelectMode.Vertex; } + } + + public override bool enabled + { + get { return base.enabled && (MeshSelection.selectedEdgeCount > 0 || MeshSelection.selectedSharedVertexCount > 0); } + } + + protected override MenuActionState optionsMenuState + { + get { return MenuActionState.VisibleAndEnabled; } + } + + protected override void OnSettingsGUI() + { + GUILayout.Label("Fill Hole Settings", EditorStyles.boldLabel); + + EditorGUILayout.HelpBox("Fill Hole can optionally fill entire holes (default) or just the selected vertices on the hole edges.\n\nIf no elements are selected, the entire object will be scanned for holes.", MessageType.Info); + + EditorGUI.BeginChangeCheck(); + + m_SelectEntirePath.value = EditorGUILayout.Toggle("Fill Entire Hole", m_SelectEntirePath); + + if (EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Fill Hole")) + EditorUtility.ShowNotification(DoAction().notification); + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Fill Hole"); + + ActionResult res = new ActionResult(ActionResult.Status.NoChange, "No Holes Found"); + int filled = 0; + bool wholePath = m_SelectEntirePath; + + foreach (ProBuilderMesh mesh in MeshSelection.topInternal) + { + bool selectAll = mesh.selectedIndexesInternal == null || mesh.selectedIndexesInternal.Length < 1; + IEnumerable<int> indexes = selectAll ? mesh.facesInternal.SelectMany(x => x.indexes) : mesh.selectedIndexesInternal; + + mesh.ToMesh(); + + List<WingedEdge> wings = WingedEdge.GetWingedEdges(mesh); + HashSet<int> common = mesh.GetSharedVertexHandles(indexes); + List<List<WingedEdge>> holes = ElementSelection.FindHoles(wings, common); + + HashSet<Face> appendedFaces = new HashSet<Face>(); + + foreach (List<WingedEdge> hole in holes) + { + List<int> holeIndexes; + Face face; + + if (wholePath) + { + // if selecting whole path and in edge mode, make sure the path contains + // at least one complete edge from the selection. + if (ProBuilderEditor.selectMode == SelectMode.Edge && + !hole.Any(x => common.Contains(x.edge.common.a) && + common.Contains(x.edge.common.b))) + continue; + + holeIndexes = hole.Select(x => x.edge.local.a).ToList(); + face = AppendElements.CreatePolygon(mesh, holeIndexes, false); + } + else + { + IEnumerable<WingedEdge> selected = hole.Where(x => common.Contains(x.edge.common.a)); + holeIndexes = selected.Select(x => x.edge.local.a).ToList(); + face = AppendElements.CreatePolygon(mesh, holeIndexes, true); + } + + if (face != null) + { + filled++; + appendedFaces.Add(face); + } + } + + mesh.SetSelectedFaces(appendedFaces); + + wings = WingedEdge.GetWingedEdges(mesh); + + // make sure the appended faces match the first adjacent face found + // both in winding and face properties + foreach (var appendedFace in appendedFaces) + { + var wing = wings.FirstOrDefault(x => x.face == appendedFace); + + if (wing == null) + continue; + + using (var it = new WingedEdgeEnumerator(wing)) + { + while (it.MoveNext()) + { + if (it.Current == null) + continue; + + var currentWing = it.Current; + var oppositeFace = it.Current.opposite != null ? it.Current.opposite.face : null; + + if (oppositeFace != null && !appendedFaces.Contains(oppositeFace)) + { + currentWing.face.submeshIndex = oppositeFace.submeshIndex; + currentWing.face.uv = new AutoUnwrapSettings(oppositeFace.uv); + SurfaceTopology.ConformOppositeNormal(currentWing.opposite); + break; + } + } + } + } + + mesh.ToMesh(); + mesh.Refresh(); + mesh.Optimize(); + } + + ProBuilderEditor.Refresh(); + + if (filled > 0) + res = new ActionResult(ActionResult.Status.Success, filled > 1 ? string.Format("Filled {0} Holes", filled) : "Fill Hole"); + return res; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FillHole.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FillHole.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e1455a51e376fda52aa735ae4ff7268494ca9d70 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FillHole.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2871f338d8894523bcde8a078df337c2 +timeCreated: 1466443265 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FlipFaceEdge.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FlipFaceEdge.cs new file mode 100644 index 0000000000000000000000000000000000000000..2616d7e11e222d505bc8dd3fe45c069ebb2255d0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FlipFaceEdge.cs @@ -0,0 +1,72 @@ +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class FlipFaceEdge : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Geometry; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Face_FlipTri", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Flip Face Edge", + @"Reverses the direction of the middle edge in a quad. Use this to fix ridges in quads with varied height corners." + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Face; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedFaceCount > 0; } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Flip Face Edges"); + int success = 0; + int attempts = 0; + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + foreach (Face face in pb.selectedFacesInternal) + { + if (pb.FlipEdge(face)) + success++; + } + + attempts++; + + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + } + + ProBuilderEditor.Refresh(); + + if (success > 0) + return new ActionResult(ActionResult.Status.Success, "Flipped " + success + " Edges"); + + return new ActionResult(ActionResult.Status.Failure, string.Format("Flip Edges\n{0}", attempts > 0 ? "Faces Must Be Quads" : "No Faces Selected")); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FlipFaceEdge.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FlipFaceEdge.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..38ee6dadfd1210a53f451daddcab57968d8f62c5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FlipFaceEdge.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4e7e1880876747d1823604bc506e3772 +timeCreated: 1457564632 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FlipFaceNormals.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FlipFaceNormals.cs new file mode 100644 index 0000000000000000000000000000000000000000..14bf711ba17ae03b0ac9916011979524e6356f21 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FlipFaceNormals.cs @@ -0,0 +1,83 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class FlipFaceNormals : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Geometry; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Face_FlipNormals", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Flip Face Normals", + @"Reverses the direction of all faces in selection.", + keyCommandAlt, 'N' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Face; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedFaceCount > 0; } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Flip Face Normals"); + + int c = 0; + int faceCount = MeshSelection.selectedFaceCount; + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + if (pb.selectedFaceCount < 1 && faceCount < 1) + { + foreach (var face in pb.facesInternal) + face.Reverse(); + + c += pb.facesInternal.Length; + } + else + { + foreach (var face in pb.GetSelectedFaces()) + face.Reverse(); + + c += pb.selectedFaceCount; + } + + + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + } + + if (c > 0) + return new ActionResult(ActionResult.Status.Success, "Flip " + c + (c > 1 ? " Face Normals" : " Face Normal")); + + return new ActionResult(ActionResult.Status.Canceled, "Flip Normals\nNo Faces Selected"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FlipFaceNormals.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FlipFaceNormals.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9e8ef4cda98837c84a87a7601a6c08889ce87a34 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/FlipFaceNormals.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 71cfb4d65045470facb2a2e1e41bec03 +timeCreated: 1457564631 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/InsertEdgeLoop.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/InsertEdgeLoop.cs new file mode 100644 index 0000000000000000000000000000000000000000..39207b103d907ae3e880e9b3800993521845f453 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/InsertEdgeLoop.cs @@ -0,0 +1,75 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class InsertEdgeLoop : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Geometry; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Edge_InsertLoop", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return _tooltip; } + } + + static readonly TooltipContent _tooltip = new TooltipContent + ( + "Insert Edge Loop", + @"Connects all edges in a ring around the object.", + keyCommandAlt, 'U' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Edge; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedEdgeCount > 0; } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + int success = 0; + UndoUtility.RecordSelection("Insert Edge Loop"); + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + Edge[] edges = pb.Connect(ElementSelection.GetEdgeRing(pb, pb.selectedEdges)).item2; + + if (edges != null) + { + pb.SetSelectedEdges(edges); + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + success++; + } + } + + ProBuilderEditor.Refresh(); + + if (success > 0) + return new ActionResult(ActionResult.Status.Success, "Insert Edge Loop"); + + return new ActionResult(ActionResult.Status.Success, "Insert Edge Loop"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/InsertEdgeLoop.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/InsertEdgeLoop.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..8a82ed2d4364ac19cea721f1f29aa0570c50e8d6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/InsertEdgeLoop.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d3ba8385f1f540519a3524dceb13733b +timeCreated: 1457564632 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/MergeFaces.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/MergeFaces.cs new file mode 100644 index 0000000000000000000000000000000000000000..45b93e3dc549230dcf7908f866a0abb1e51c17f6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/MergeFaces.cs @@ -0,0 +1,74 @@ +using UnityEngine; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class MergeFaces : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Geometry; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Face_Merge", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Merge Faces", + @"Tells ProBuilder to treat the selected faces as if they were a single face. Be careful not to use this with unconnected faces!" + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Face; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedFaceCount > 0; } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Merge Faces"); + + int success = 0; + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + if (pb.selectedFaceCount > 1) + { + success += pb.selectedFaceCount; + + Face face = MergeElements.Merge(pb, pb.selectedFacesInternal); + + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + + pb.SetSelectedFaces(new Face[] { face }); + } + } + + ProBuilderEditor.Refresh(); + + if (success > 0) + return new ActionResult(ActionResult.Status.Success, "Merged " + success + " Faces"); + + return new ActionResult(ActionResult.Status.Failure, "Merge Faces\nNo Faces Selected"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/MergeFaces.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/MergeFaces.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..dc93d59180bcd7c305583731e91e63b1a3c9c9ef --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/MergeFaces.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 72b17ff6fd2249038e3d0e0d8969cef0 +timeCreated: 1457564631 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/OffsetElements.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/OffsetElements.cs new file mode 100644 index 0000000000000000000000000000000000000000..2459d8487cafe999412828fd944a27a444a9fc6e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/OffsetElements.cs @@ -0,0 +1,247 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.Rendering; +using ColorUtility = UnityEngine.ProBuilder.ColorUtility; +using Math = UnityEngine.ProBuilder.Math; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class OffsetElements : MenuAction + { + internal enum CoordinateSpace + { + World, + Local, + Element, + Handle + } + + static readonly TooltipContent s_TooltipFace = new TooltipContent ( "Offset Faces", "Move the selected elements by a set amount." ); + static readonly TooltipContent s_TooltipEdge = new TooltipContent ( "Offset Edges", "Move the selected elements by a set amount." ); + static readonly TooltipContent s_TooltipVert = new TooltipContent ( "Offset Vertices", "Move the selected elements by a set amount." ); + + internal static Pref<Vector3> s_Translation = new Pref<Vector3>("MoveElements.s_Translation", Vector3.up); + internal static Pref<CoordinateSpace> s_CoordinateSpace = new Pref<CoordinateSpace>("MoveElements.s_CoordinateSpace", CoordinateSpace.World); + + public override ToolbarGroup group { get { return ToolbarGroup.Geometry; } } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Offset", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get + { + if(ProBuilderEditor.selectMode == SelectMode.Face) + return s_TooltipFace; + if(ProBuilderEditor.selectMode == SelectMode.Edge) + return s_TooltipEdge; + return s_TooltipVert; + } + } + + public override SelectMode validSelectModes + { + get { return SelectMode.Face | SelectMode.Edge | SelectMode.Vertex; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedVertexCount > 0; } + } + + protected override MenuActionState optionsMenuState + { + get { return MenuActionState.VisibleAndEnabled; } + } + + protected override void DoAlternateAction() + { + ConfigurableWindow.GetWindow<MoveElementsSettings>(true, "Offset Settings", true); + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Offset Elements(s)"); + + var handleRotation = MeshSelection.GetHandleRotation(); + + foreach (var group in MeshSelection.elementSelection) + { + var mesh = group.mesh; + var positions = mesh.positionsInternal; + var offset = s_Translation.value; + + switch (s_CoordinateSpace.value) + { + case CoordinateSpace.World: + case CoordinateSpace.Handle: + { + var pre = mesh.transform.localToWorldMatrix; + var post = mesh.transform.worldToLocalMatrix; + + if (s_CoordinateSpace.value == CoordinateSpace.Handle) + offset = handleRotation * offset; + + foreach (var index in mesh.selectedCoincidentVertices) + { + var p = pre.MultiplyPoint3x4(positions[index]); + p += offset; + positions[index] = post.MultiplyPoint3x4(p); + } + break; + } + + case CoordinateSpace.Local: + { + foreach (var index in mesh.selectedCoincidentVertices) + positions[index] += offset; + break; + } + + case CoordinateSpace.Element: + { + foreach (var elements in group.elementGroups) + { + var rotation = Quaternion.Inverse(mesh.transform.rotation) * elements.rotation; + var o = rotation * offset; + foreach (var index in elements.indices) + positions[index] += o; + } + break; + } + } + + mesh.Rebuild(); + mesh.Optimize(); + ProBuilderEditor.Refresh(); + } + + if(ProBuilderEditor.selectMode.ContainsFlag(SelectMode.Edge | SelectMode.TextureEdge)) + return new ActionResult(ActionResult.Status.Success, "Move " + MeshSelection.selectedEdgeCount + (MeshSelection.selectedEdgeCount > 1 ? " Edges" : " Edge")); + if(ProBuilderEditor.selectMode.ContainsFlag(SelectMode.Face | SelectMode.TextureFace)) + return new ActionResult(ActionResult.Status.Success, "Move " + MeshSelection.selectedFaceCount + (MeshSelection.selectedFaceCount > 1 ? " Faces" : " Face")); + return new ActionResult(ActionResult.Status.Success, "Move " + MeshSelection.selectedVertexCount + (MeshSelection.selectedVertexCount > 1 ? " Vertices" : " Vertex")); + } + } + + class MoveElementsSettings : ConfigurableWindow + { + void OnEnable() + { + titleContent.text = L10n.Tr("Offset Element Settings"); +#if UNITY_2019_1_OR_NEWER + SceneView.duringSceneGui += OnSceneGUI; +#else + SceneView.onSceneGUIDelegate += OnSceneGUI; +#endif + } + + void OnDisable() + { +#if UNITY_2019_1_OR_NEWER + SceneView.duringSceneGui -= OnSceneGUI; +#else + SceneView.onSceneGUIDelegate -= OnSceneGUI; +#endif + } + + void OnGUI() + { + DoContextMenu(); + + EditorGUI.BeginChangeCheck(); + + var dist = OffsetElements.s_Translation.value; + var coord = OffsetElements.s_CoordinateSpace.value; + + EditorGUI.BeginChangeCheck(); + + coord = (OffsetElements.CoordinateSpace) EditorGUILayout.EnumPopup("Coordinate Space", coord); + dist = EditorGUILayout.Vector3Field("Translate", dist); + + if (EditorGUI.EndChangeCheck()) + { + OffsetElements.s_Translation.SetValue(dist, true); + OffsetElements.s_CoordinateSpace.SetValue(coord); + } + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button(L10n.Tr("Offset Selection"))) + { + var instance = EditorToolbarLoader.GetInstance<OffsetElements>(); + EditorUtility.ShowNotification(instance.DoAction().notification); + } + + if (EditorGUI.EndChangeCheck()) + SceneView.RepaintAll(); + } + + static List<Vector3> s_Points = new List<Vector3>(); + + void OnSceneGUI(SceneView view) + { + s_Points.Clear(); + + var coord = OffsetElements.s_CoordinateSpace.value; + var offset = OffsetElements.s_Translation.value; + var handleRotation = MeshSelection.GetHandleRotation(); + var camera = view.camera.transform.forward * -.01f; + + foreach (var selection in MeshSelection.elementSelection) + { + var mesh = selection.mesh; + + if (coord == OffsetElements.CoordinateSpace.Element) + { + foreach (var elements in selection.elementGroups) + { + s_Points.Add(elements.position + camera); + s_Points.Add(elements.rotation * offset); + } + } + else + { + var preview = offset; + + if (coord == OffsetElements.CoordinateSpace.Handle) + preview = handleRotation * offset; + else if (coord == OffsetElements.CoordinateSpace.Local) + preview = mesh.transform.TransformDirection(offset); + + foreach (var elements in selection.elementGroups) + { + s_Points.Add(elements.position + camera); + s_Points.Add(preview); + } + } + } + + using (var lines = new EditorHandleDrawing.LineDrawingScope(ColorUtility.GetColor(offset))) + { + for (int i = 0; i < s_Points.Count; i += 2) + lines.DrawLine(s_Points[i], s_Points[i] + s_Points[i + 1]); + } + + using (var points = new EditorHandleDrawing.PointDrawingScope(Color.gray)) + { + for (int i = 0; i < s_Points.Count; i += 2) + points.Draw(s_Points[i]); + } + + using(var points = new EditorHandleDrawing.PointDrawingScope(ColorUtility.GetColor(offset))) + { + for (int i = 0; i < s_Points.Count; i += 2) + points.Draw(s_Points[i] + s_Points[i+1]); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/OffsetElements.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/OffsetElements.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..873612e96e68b2fcf3ab71cbba3854558d23dadf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/OffsetElements.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5fb3641deade84f238d59ad03971b64c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SetPivotToSelection.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SetPivotToSelection.cs new file mode 100644 index 0000000000000000000000000000000000000000..fcf01849a549b9de27bad3ff1b42559d95a78e0e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SetPivotToSelection.cs @@ -0,0 +1,64 @@ +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SetPivotToSelection : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Geometry; } } + public override Texture2D icon { get { return IconUtility.GetIcon("Toolbar/Pivot_CenterOnElements", IconSkin.Pro); } } + public override TooltipContent tooltip { get { return _tooltip; } } + public override string menuTitle { get { return "Set Pivot"; } } + + static readonly TooltipContent _tooltip = new TooltipContent + ( + "Set Pivot to Center of Selection", + @"Moves the pivot point of each mesh to the average of all selected elements positions. This means the pivot point moves to where-ever the handle currently is.", + keyCommandSuper, 'J' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Vertex | SelectMode.Edge | SelectMode.Face; } + } + + public override bool enabled + { + get + { + return base.enabled && (MeshSelection.selectedVertexCount > 0 + || MeshSelection.selectedEdgeCount > 0 + || MeshSelection.selectedFaceCount > 0); + } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + Object[] objects = new Object[MeshSelection.selectedObjectCount * 2]; + + for (int i = 0, c = MeshSelection.selectedObjectCount; i < c; i++) + { + objects[i] = MeshSelection.topInternal[i]; + objects[i + c] = MeshSelection.topInternal[i].transform; + } + + UndoUtility.RegisterCompleteObjectUndo(objects, "Set Pivot"); + + foreach (var mesh in MeshSelection.topInternal) + { + TransformUtility.UnparentChildren(mesh.transform); + mesh.CenterPivot(mesh.selectedIndexesInternal); + mesh.Optimize(); + TransformUtility.ReparentChildren(mesh.transform); + } + + ProBuilderEditor.Refresh(); + + return new ActionResult(ActionResult.Status.Success, "Set Pivot"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SetPivotToSelection.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SetPivotToSelection.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..0c39bff8bdb7929f45522a08b41cffaa3c036ee5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SetPivotToSelection.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a6bc50937fe34666940ca23931be5344 +timeCreated: 1457564631 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SmartConnect.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SmartConnect.cs new file mode 100644 index 0000000000000000000000000000000000000000..4eaf3bcc4c297a27f3c794deb6ecb7fb1b64463f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SmartConnect.cs @@ -0,0 +1,55 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SmartConnect : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Geometry; } } + public override Texture2D icon { get { return null; } } + public override TooltipContent tooltip { get { return _tooltip; } } + + static readonly TooltipContent _tooltip = new TooltipContent + ( + "Smart Connect", + "", + keyCommandAlt, 'E' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Vertex | SelectMode.Edge | SelectMode.Face; } + } + + public override bool enabled + { + get + { + return base.enabled && (MeshSelection.selectedVertexCount > 1 + || MeshSelection.selectedEdgeCount > 1 + || MeshSelection.selectedFaceCount > 1); + } + } + + public override bool hidden + { + get { return true; } + } + + public override ActionResult DoAction() + { + switch (ProBuilderEditor.selectMode) + { + case SelectMode.Vertex: + return EditorToolbarLoader.GetInstance<ConnectVertices>().DoAction(); + + default: + return EditorToolbarLoader.GetInstance<ConnectEdges>().DoAction(); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SmartConnect.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SmartConnect.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..66aed1a3a6296163185bb25055914d7362e779c1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SmartConnect.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3e99f90a32784f4d9ff62732e1265f23 +timeCreated: 1467037553 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SmartSubdivide.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SmartSubdivide.cs new file mode 100644 index 0000000000000000000000000000000000000000..651d878056411bbaac04526d4c0b40dc6ca1b117 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SmartSubdivide.cs @@ -0,0 +1,61 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SmartSubdivide : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Geometry; } + } + + public override Texture2D icon + { + get { return null; } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Smart Subdivide", + "", + keyCommandAlt, 'S' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Edge | SelectMode.Face; } + } + + public override bool enabled + { + get { return base.enabled && (MeshSelection.selectedEdgeCount > 0 || MeshSelection.selectedFaceCount > 0); } + } + + public override bool hidden + { + get { return true; } + } + + public override ActionResult DoAction() + { + switch (ProBuilderEditor.selectMode) + { + case SelectMode.Edge: + return EditorToolbarLoader.GetInstance<SubdivideEdges>().DoAction(); + + default: + return EditorToolbarLoader.GetInstance<SubdivideFaces>().DoAction(); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SmartSubdivide.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SmartSubdivide.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2eb25cbe48e4cc108e9e3f32d5487034e019f6e7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SmartSubdivide.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: da5baec4bf414efb91d2253bef40dd19 +timeCreated: 1469818738 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SplitVertices.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SplitVertices.cs new file mode 100644 index 0000000000000000000000000000000000000000..24e067e433e1b1302d77f120a5880e2653b29931 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SplitVertices.cs @@ -0,0 +1,74 @@ +using System.Collections.Generic; +using UnityEngine; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SplitVertices : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Geometry; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Vert_Split", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Split Vertices", + @"Disconnects vertices that share the same position in space so that they may be moved independently of one another.", + keyCommandAlt, 'X' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Vertex; } + } + + public override bool enabled + { + get + { + // This isn't completely accurate, because to check that each selected vertex has coincident vertices is + // unnecessarily expensive for the purposes of this property. So here we handle the most common case, + // where a single vertex is selected with no additional coincident vertices. + return base.enabled + && MeshSelection.selectedVertexCountObjectMax > 0 + && !(MeshSelection.selectedVertexCountObjectMax == 1 && MeshSelection.selectedCoincidentVertexCountMax == 1); + } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + int splitCount = 0; + UndoUtility.RecordSelection("Split Vertices"); + + foreach (ProBuilderMesh mesh in MeshSelection.topInternal) + { + var coincident = mesh.selectedCoincidentVertices; + splitCount += mesh.selectedSharedVerticesCount; + mesh.SplitVertices(coincident); + } + + ProBuilderEditor.Refresh(); + + if (splitCount > 0) + return new ActionResult(ActionResult.Status.Success, "Split " + splitCount + (splitCount > 1 ? " Vertices" : " Vertex")); + + return new ActionResult(ActionResult.Status.Failure, "Split Vertices\nInsuffient Vertices Selected"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SplitVertices.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SplitVertices.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5f7961ccd08c0c1ec225ea59a52c4c61f4aad690 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SplitVertices.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c339ea7067e6fcd459cb4eac2f0dafb1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SubdivideEdges.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SubdivideEdges.cs new file mode 100644 index 0000000000000000000000000000000000000000..6d368654bef880593dd2083de39a075ccc6cc80a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SubdivideEdges.cs @@ -0,0 +1,118 @@ +using UnityEngine; +using System.Collections.Generic; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SubdivideEdges : MenuAction + { + Pref<int> m_SubdivisionCount = new Pref<int>("SubdivideEdges.subdivisions", 1); + Pref<int> m_SubdivisionUIMin = new Pref<int>("SubdivideEdges.subdivisionsUIMin", 1); + Pref<int> m_SubdivisionUIMax = new Pref<int>("SubdivideEdges.subdivisionsUIMax", 32); + Pref<bool> m_SubdivisionRangeExpanded = new Pref<bool>("SubdivideEdges.rangeExpanded", false); + const int m_SubdivisionMin = 1; + const int m_SubdivisionMax = 512; + + public override ToolbarGroup group + { + get { return ToolbarGroup.Geometry; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Edge_Subdivide", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + protected override bool hasFileMenuEntry + { + get { return false; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Subdivide Edges", + "Appends evenly spaced new vertices to the selected edges.", + keyCommandAlt, 'S' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Edge; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedEdgeCount > 0; } + } + + protected override MenuActionState optionsMenuState + { + get { return MenuActionState.VisibleAndEnabled; } + } + + protected override void OnSettingsGUI() + { + GUILayout.Label("Subdivide Edge Settings", EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.HelpBox("How many vertices to insert on each selected edge.\n\nVertices will be equally spaced between one another and the boundaries of the edge.", MessageType.Info); + int minUIRange = m_SubdivisionUIMin.value; + int maxUIRange = m_SubdivisionUIMax.value; + bool expanded = m_SubdivisionRangeExpanded.value; + m_SubdivisionCount.value = (int)UI.EditorGUIUtility.FreeSliderWithRange("Subdivisions", (int)m_SubdivisionCount.value, m_SubdivisionMin, m_SubdivisionMax, ref minUIRange, ref maxUIRange, ref expanded); + m_SubdivisionUIMin.value = minUIRange; + m_SubdivisionUIMax.value = maxUIRange; + m_SubdivisionRangeExpanded.value = expanded; + + + if (EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Subdivide Edges")) + DoAction(); + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + int subdivisions = m_SubdivisionCount; + + UndoUtility.RecordSelection("Subdivide Edges"); + + ActionResult result = ActionResult.NoSelection; + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + List<Edge> newEdgeSelection = AppendElements.AppendVerticesToEdge(pb, pb.selectedEdges, subdivisions); + + if (newEdgeSelection != null) + { + pb.SetSelectedEdges(newEdgeSelection); + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + result = new ActionResult(ActionResult.Status.Success, "Subdivide Edge"); + } + else + { + result = new ActionResult(ActionResult.Status.Failure, "Failed Subdivide Edge"); + } + } + + ProBuilderEditor.Refresh(); + + return result; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SubdivideEdges.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SubdivideEdges.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..829f9f26eebd878a6057c0e019754f0270363a0b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SubdivideEdges.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 48a7fe196a624a7bae17c8621899b11c +timeCreated: 1459347828 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SubdivideFaces.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SubdivideFaces.cs new file mode 100644 index 0000000000000000000000000000000000000000..bb0367b23d68a645622644bfc5b8cdf87256bc94 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SubdivideFaces.cs @@ -0,0 +1,83 @@ +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SubdivideFaces : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Geometry; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Face_Subdivide", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + protected override bool hasFileMenuEntry + { + get { return false; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Subdivide Faces", + @"Inserts a new vertex at the center of each selected face and creates a new edge from the center of each perimeter edge to the center vertex.", + keyCommandAlt, 'S' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Face; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedFaceCount > 0; } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + int success = 0; + UndoUtility.RecordSelection("Subdivide Faces"); + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + Face[] faces = pb.Subdivide(pb.selectedFacesInternal); + + pb.ToMesh(); + + if (faces != null) + { + success += pb.selectedFacesInternal.Length; + pb.SetSelectedFaces(faces); + + pb.Refresh(); + pb.Optimize(); + } + } + + if (success > 0) + { + ProBuilderEditor.Refresh(); + + return new ActionResult(ActionResult.Status.Success, "Subdivide " + success + ((success > 1) ? " faces" : " face")); + } + else + { + Debug.LogWarning("Subdivide faces failed - did you not have any faces selected?"); + return new ActionResult(ActionResult.Status.Failure, "Subdivide Faces\nNo faces selected"); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SubdivideFaces.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SubdivideFaces.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5751143257da71e15462846606e22c737446d6f9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/SubdivideFaces.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bdc593ceb4be46bfab31b9c445ec89a2 +timeCreated: 1457564631 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/TriangulateFaces.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/TriangulateFaces.cs new file mode 100644 index 0000000000000000000000000000000000000000..e793201478cf44bde3c8867823180c86df31101c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/TriangulateFaces.cs @@ -0,0 +1,62 @@ +using UnityEngine; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class TriangulateFaces : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Geometry; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Face_Triangulate", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Triangulate Faces", + "Break all selected faces down to triangles." + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Face; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedFaceCount > 0; } + } + + public override ActionResult DoAction() + { + ActionResult res = ActionResult.NoSelection; + + UndoUtility.RecordSelection("Triangulate Faces"); + + foreach (ProBuilderMesh mesh in MeshSelection.topInternal) + { + mesh.ToMesh(); + Face[] triangulatedFaces = mesh.ToTriangles(mesh.selectedFacesInternal); + mesh.Refresh(); + mesh.Optimize(); + mesh.SetSelectedFaces(triangulatedFaces); + res = new ActionResult(ActionResult.Status.Success, string.Format("Triangulated {0} {1}", triangulatedFaces.Length, triangulatedFaces.Length < 2 ? "Face" : "Faces")); + } + + ProBuilderEditor.Refresh(); + + return res; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/TriangulateFaces.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/TriangulateFaces.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2c178fc05fd9769b0ab758a2a379b056747c32ae --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/TriangulateFaces.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 729d0f7265af462a8b41492704404f59 +timeCreated: 1470747992 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/WeldVertices.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/WeldVertices.cs new file mode 100644 index 0000000000000000000000000000000000000000..797dd5b5782a5809910cd5a557bbd4d6d1ce12c7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/WeldVertices.cs @@ -0,0 +1,155 @@ +using System; +using UnityEngine; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; +using System.Collections.Generic; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class WeldVertices : MenuAction + { + Pref<float> m_WeldDistance = new Pref<float>("WeldVertices.weldDistance", .01f); + static readonly GUIContent gc_weldDistance = new GUIContent("Weld Distance", "The maximum distance between two vertices in order to be welded together."); + const float k_MinWeldDistance = .00001f; + + public override ToolbarGroup group + { + get { return ToolbarGroup.Geometry; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Vert_Weld", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Weld Vertices", + @"Searches the current selection for vertices that are within the specified distance of on another and merges them into a single vertex.", + keyCommandAlt, 'V' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Vertex; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedSharedVertexCountObjectMax > 1; } + } + + protected override MenuActionState optionsMenuState + { + get { return MenuActionState.VisibleAndEnabled; } + } + + protected override void OnSettingsGUI() + { + GUILayout.Label("Weld Settings", EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + + m_WeldDistance.value = EditorGUILayout.FloatField(gc_weldDistance, m_WeldDistance); + + if (EditorGUI.EndChangeCheck()) + { + if (m_WeldDistance < k_MinWeldDistance) + m_WeldDistance.value = k_MinWeldDistance; + ProBuilderSettings.Save(); + } + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Weld Vertices")) + DoAction(); + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + ActionResult res = ActionResult.NoSelection; + + UndoUtility.RecordSelection("Weld Vertices"); + + int weldCount = 0; + + foreach (ProBuilderMesh mesh in MeshSelection.topInternal) + { + weldCount += mesh.sharedVerticesInternal.Length; + + if (mesh.selectedIndexesInternal.Length > 1) + { + mesh.ToMesh(); + + var selectedVertices = mesh.GetCoincidentVertices(mesh.selectedVertices); + int[] welds = mesh.WeldVertices(mesh.selectedIndexesInternal, m_WeldDistance); + res = welds != null ? new ActionResult(ActionResult.Status.Success, "Weld Vertices") : new ActionResult(ActionResult.Status.Failure, "Failed Weld Vertices"); + + if (res) + { + var newSelection = welds ?? new int[0] { }; + + if (MeshValidation.ContainsDegenerateTriangles(mesh)) + { + List<int> removedIndices = new List<int>(); + var vertexCount = mesh.vertexCount; + + if(MeshValidation.RemoveDegenerateTriangles(mesh, removedIndices)) + { + if (removedIndices.Count < vertexCount) + { + var newlySelectedVertices = new List<int>(); + selectedVertices.Sort(); + removedIndices.Sort(); + + int count = 0; + + for (int i = 0; i < selectedVertices.Count; i++) + { + if (count >= removedIndices.Count || selectedVertices[i] != removedIndices[count]) + { + newlySelectedVertices.Add(selectedVertices[i] - UnityEngine.ProBuilder.ArrayUtility.NearestIndexPriorToValue(removedIndices, selectedVertices[i]) - 1); + } + else + { + ++count; + } + } + + newSelection = newlySelectedVertices.ToArray(); + } + else + { + newSelection = new int[0]; + } + } + mesh.ToMesh(); + } + mesh.SetSelectedVertices(newSelection); + } + + mesh.Refresh(); + mesh.Optimize(); + } + + weldCount -= mesh.sharedVerticesInternal.Length; + } + + ProBuilderEditor.Refresh(); + + if (res && weldCount > 0) + return new ActionResult(ActionResult.Status.Success, "Weld " + weldCount + (weldCount > 1 ? " Vertices" : " Vertex")); + + return new ActionResult(ActionResult.Status.Failure, "Nothing to Weld"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/WeldVertices.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/WeldVertices.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..51bcd3f9f3c46e4c5eed3cc2bcf807c2dd577cfc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Geometry/WeldVertices.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a62bb434134faa6439b1998669525768 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction.meta new file mode 100644 index 0000000000000000000000000000000000000000..6be48ed8c3e8f02ba0b607ae4b54594443e34365 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 41e22c09cb0341bf81820025407faa1c +folderAsset: yes +timeCreated: 1457453107 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleDragRectMode.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleDragRectMode.cs new file mode 100644 index 0000000000000000000000000000000000000000..47a998dbb1be993718a7af71949acad950d633a4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleDragRectMode.cs @@ -0,0 +1,69 @@ +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class ToggleDragRectMode : MenuAction + { + RectSelectMode mode + { + get { return ProBuilderEditor.rectSelectMode; } + set { ProBuilderEditor.rectSelectMode = value; } + } + + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get + { + return mode == RectSelectMode.Complete + ? IconUtility.GetIcon("Toolbar/Selection_Rect_Complete") + : IconUtility.GetIcon("Toolbar/Selection_Rect_Intersect", IconSkin.Pro); + } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + public override int toolbarPriority + { + get { return 0; } + } + + public override SelectMode validSelectModes + { + get { return SelectMode.Edge | SelectMode.Face | SelectMode.TextureFace; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Set Drag Rect Mode", + "Sets whether or not a mesh element (edge or face) needs to be completely encompassed by a drag to be selected.\n\nThe default value is Intersect, meaning if any part of the elemnent is touched by the drag rectangle it will be selected." + ); + + public override string menuTitle { get { return mode == RectSelectMode.Complete ? "Rect: Complete" : "Rect: Intersect"; } } + + public override ActionResult DoAction() + { + mode = InternalUtility.NextEnumValue(mode); + + return new ActionResult(ActionResult.Status.Success, + "Set Drag Select\n" + (mode == RectSelectMode.Complete ? "Complete" : "Intersect")); + } + + public override bool enabled + { + get + { + return ProBuilderEditor.instance != null + && ProBuilderEditor.selectMode.ContainsFlag(SelectMode.Edge | SelectMode.Face | SelectMode.TextureFace); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleDragRectMode.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleDragRectMode.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..527a180c9d2f8e7ef4c5c860e5ca762edc85ac5f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleDragRectMode.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 19fd4a6987194c66bf04e55e19aa466b +timeCreated: 1474401946 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleDragSelectionMode.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleDragSelectionMode.cs new file mode 100644 index 0000000000000000000000000000000000000000..86ed243da988715daa3d58c64260e1ad03bbf9d1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleDragSelectionMode.cs @@ -0,0 +1,70 @@ +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class ToggleDragSelectionMode : MenuAction + { + SelectionModifierBehavior modifier + { + get { return ProBuilderEditor.selectionModifierBehavior; } + set { ProBuilderEditor.selectionModifierBehavior = value; } + } + + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get + { + if (modifier == SelectionModifierBehavior.Add) + return IconUtility.GetIcon("Toolbar/Selection_ShiftAdd", IconSkin.Pro); + else if (modifier == SelectionModifierBehavior.Subtract) + return IconUtility.GetIcon("Toolbar/Selection_ShiftSubtract", IconSkin.Pro); + else + return IconUtility.GetIcon("Toolbar/Selection_ShiftDifference", IconSkin.Pro); + } + } + + public override TooltipContent tooltip + { + get { return _tooltip; } + } + + public override int toolbarPriority + { + get { return 0; } + } + + static readonly TooltipContent _tooltip = new TooltipContent + ( + "Set Drag Selection Mode", + @"When drag selecting elements, does the shift key + +- [Add] Always add to the selection +- [Subtract] Always subtract from the selection +- [Difference] Invert the selection by the selected faces (Default) +"); + + public override SelectMode validSelectModes + { + get { return SelectMode.Vertex | SelectMode.Edge | SelectMode.Face | SelectMode.TextureFace; } + } + + public override string menuTitle + { + get { return string.Format("Shift: {0}", modifier); } + } + + public override ActionResult DoAction() + { + int mode = (int)modifier; + int len = System.Enum.GetValues(typeof(SelectionModifierBehavior)).Length; + modifier = (SelectionModifierBehavior)((mode + 1) % len); + return new ActionResult(ActionResult.Status.Success, "Set Shift Drag Mode\n" + modifier); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleDragSelectionMode.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleDragSelectionMode.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..81ac9a6cb56705d1598a84a64c1f76a635336fc6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleDragSelectionMode.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: df3a4cb75c674491b6a359529d7fbd82 +timeCreated: 1474314942 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleHandleOrientation.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleHandleOrientation.cs new file mode 100644 index 0000000000000000000000000000000000000000..b75448e4a74b5d954a0f3314ca415176919a8bf6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleHandleOrientation.cs @@ -0,0 +1,84 @@ +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder.Actions +{ + [MenuActionShortcut(typeof(SceneView), KeyCode.P)] + sealed class ToggleHandleOrientation : MenuAction + { + Texture2D[] m_Icons; + + HandleOrientation handleOrientation + { + get { return VertexManipulationTool.handleOrientation; } + set + { + VertexManipulationTool.handleOrientation = value; + ProBuilderEditor.Refresh(false); + } + } + + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get { return m_Icons[(int)handleOrientation]; } + } + + public override int toolbarPriority + { + get { return 0; } + } + + public override TooltipContent tooltip + { + get { return k_Tooltips[(int)handleOrientation]; } + } + + static readonly TooltipContent[] k_Tooltips = new TooltipContent[] + { + new TooltipContent("Global", "The transform handle is oriented in a fixed direction.", 'P'), + new TooltipContent("Local", "The transform handle is aligned with the active object rotation.", 'P'), + new TooltipContent("Normal", "The transform handle is aligned with the active element selection.", 'P') + }; + + public override string menuTitle + { + get { return "Orientation: " + k_Tooltips[(int)handleOrientation].title; } + } + + public override SelectMode validSelectModes + { + get { return SelectMode.Vertex | SelectMode.Edge | SelectMode.Face; } + } + + public override bool hidden + { + get { return false; } + } + + public ToggleHandleOrientation() + { + m_Icons = new Texture2D[] + { + IconUtility.GetIcon("Toolbar/HandleAlign_World", IconSkin.Pro), + IconUtility.GetIcon("Toolbar/HandleAlign_Local", IconSkin.Pro), + IconUtility.GetIcon("Toolbar/HandleAlign_Plane", IconSkin.Pro), + }; + } + + public override ActionResult DoAction() + { + handleOrientation = InternalUtility.NextEnumValue(handleOrientation); + return new ActionResult(ActionResult.Status.Success, "Set Handle Orientation\n" + k_Tooltips[(int)handleOrientation].title); + } + + public override bool enabled + { + get { return ProBuilderEditor.instance != null; } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleHandleOrientation.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleHandleOrientation.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1645609f9b5c046004adbc6695ec3758b55adb06 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleHandleOrientation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 53d27af1247a7d547aa00100fae732a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleHandlePivotPoint.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleHandlePivotPoint.cs new file mode 100644 index 0000000000000000000000000000000000000000..675c7588562b9eb42d5ae52f7eaa7ec9e6e2a584 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleHandlePivotPoint.cs @@ -0,0 +1,89 @@ +#if PROBUILDER_ENABLE_HANDLE_OVERRIDE + +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class ToggleHandlePivotPoint : MenuAction + { + Texture2D[] m_Icons; + + PivotPoint pivotPoint + { + get { return VertexManipulationTool.pivotPoint; } + set { VertexManipulationTool.pivotPoint = value; } + } + + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get { return m_Icons[(int)pivotPoint]; } + } + + public override int toolbarPriority + { + get { return 0; } + } + + public override TooltipContent tooltip + { + get { return s_Tooltips[(int)pivotPoint]; } + } + + static readonly TooltipContent[] s_Tooltips = new TooltipContent[] + { + new TooltipContent("Center", "Transforms are applied from the center point of the selection bounding box."), + new TooltipContent("Individual Origins", "Transforms are applied from the center of each selection group."), + new TooltipContent("Active Element", "Transforms are applied from the active selection center.") + }; + + public override string menuTitle + { + get { return "Pivot: " + s_Tooltips[(int)pivotPoint]; } + } + + public override SelectMode validSelectModes + { + get { return SelectMode.Vertex | SelectMode.Edge | SelectMode.Face; } + } + + public override bool hidden + { + get { return false; } + } + + // TODO Need icons for PivotPoint + public ToggleHandlePivotPoint() + { + m_Icons = new Texture2D[] + { + IconUtility.GetIcon("Toolbar/HandleAlign_World", IconSkin.Pro), + IconUtility.GetIcon("Toolbar/HandleAlign_Local", IconSkin.Pro), + IconUtility.GetIcon("Toolbar/HandleAlign_Plane", IconSkin.Pro), + }; + } + + public override ActionResult DoAction() + { + int current = (int)pivotPoint + 1; + + if (current >= System.Enum.GetValues(typeof(PivotPoint)).Length) + current = 0; + + pivotPoint = (PivotPoint)current; + + return new ActionResult(ActionResult.Status.Success, "Set Pivot Point\n" + s_Tooltips[(int)pivotPoint].title); + } + + public override bool enabled + { + get { return ProBuilderEditor.instance != null; } + } + } +} +#endif diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleHandlePivotPoint.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleHandlePivotPoint.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a0cd9cc8405bc044cc502226d614a87e64962a9a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleHandlePivotPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a13a61fc9c33c4835beb1b3728c1718a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleSelectBackFaces.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleSelectBackFaces.cs new file mode 100644 index 0000000000000000000000000000000000000000..9443d466c2175135843888fbf1eb2ea2e4dc8ee4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleSelectBackFaces.cs @@ -0,0 +1,66 @@ +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class ToggleSelectBackFaces : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get { return ProBuilderEditor.backfaceSelectionEnabled ? m_Icons[1] : m_Icons[0]; } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + public override int toolbarPriority + { + get { return 1; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Set Hidden Element Selection", + @"Setting Hidden Element Selection to <b>On</b> allows you to select faces that are either obscured by geometry or facing away from the scene camera (backfaces). + +The default value is <b>On</b>. +"); + + public override string menuTitle + { + get { return ProBuilderEditor.backfaceSelectionEnabled ? "Select Hidden: On" : "Select Hidden: Off"; } + } + + public override SelectMode validSelectModes + { + get + { + return SelectMode.Vertex | SelectMode.Edge | SelectMode.Face | SelectMode.TextureFace; + } + } + + Texture2D[] m_Icons; + + public ToggleSelectBackFaces() + { + m_Icons = new Texture2D[] + { + IconUtility.GetIcon("Toolbar/Selection_SelectHidden-Off", IconSkin.Pro), + IconUtility.GetIcon("Toolbar/Selection_SelectHidden-On", IconSkin.Pro) + }; + } + + public override ActionResult DoAction() + { + ProBuilderEditor.backfaceSelectionEnabled = !ProBuilderEditor.backfaceSelectionEnabled; + return new ActionResult(ActionResult.Status.Success, "Set Hidden Element Selection\n" + (!ProBuilderEditor.backfaceSelectionEnabled ? "On" : "Off")); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleSelectBackFaces.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleSelectBackFaces.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..dc45290fe078a4adec443e3fd50c7a2431c0f0f0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Interaction/ToggleSelectBackFaces.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a61c5819f2b24f3fa336247228361725 +timeCreated: 1457456290 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object.meta new file mode 100644 index 0000000000000000000000000000000000000000..5813029be44840357b1980ae4b9f8347b3f98c5d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1138c079ebb24a988acb16b8d409db55 +folderAsset: yes +timeCreated: 1457563002 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/CenterPivot.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/CenterPivot.cs new file mode 100644 index 0000000000000000000000000000000000000000..fc9b3f9bdbdb2771858493e886318017a23d8fa5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/CenterPivot.cs @@ -0,0 +1,63 @@ +using UnityEngine.ProBuilder; +using UnityEngine; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class CenterPivot : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Object; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Pivot_CenterOnObject", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Center Pivot", + @"Set the pivot point of this object to the center of it's bounds." + ); + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedObjectCount > 0; } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + Object[] objects = new Object[MeshSelection.selectedObjectCount * 2]; + + for (int i = 0, c = MeshSelection.selectedObjectCount; i < c; i++) + { + objects[i] = MeshSelection.topInternal[i]; + objects[i + c] = MeshSelection.topInternal[i].transform; + } + + UndoUtility.RegisterCompleteObjectUndo(objects, "Center Pivot"); + + foreach (var mesh in MeshSelection.topInternal) + { + TransformUtility.UnparentChildren(mesh.transform); + mesh.CenterPivot(null); + mesh.Optimize(); + TransformUtility.ReparentChildren(mesh.transform); + } + + ProBuilderEditor.Refresh(); + + return new ActionResult(ActionResult.Status.Success, "Center Pivot"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/CenterPivot.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/CenterPivot.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6648891a71df0737b47ea177b1bd0cd6902489d8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/CenterPivot.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 460d1e5b4c054bfc8d012b87f9960bb9 +timeCreated: 1461861662 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/ConformObjectNormals.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/ConformObjectNormals.cs new file mode 100644 index 0000000000000000000000000000000000000000..79b76d3f5c04e79272cf8fe1496b75c657c4d1b1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/ConformObjectNormals.cs @@ -0,0 +1,59 @@ +using UnityEngine.ProBuilder; +using UnityEngine; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class ConformObjectNormals : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Object; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Object_ConformNormals", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + public override string menuTitle + { + get { return "Conform Normals"; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Conform Object Normals", + @"Check the object for faces that are flipped in the opposite direction of most other faces, then reverses any dissenters." + ); + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedObjectCount > 0; } + } + + public override ActionResult DoAction() + { + UndoUtility.RecordSelection("Conform Object Normals"); + + ActionResult res = ActionResult.NoSelection; + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + res = UnityEngine.ProBuilder.MeshOperations.SurfaceTopology.ConformNormals(pb, pb.faces); + + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + } + + ProBuilderEditor.Refresh(); + + return res; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/ConformObjectNormals.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/ConformObjectNormals.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..29cc153bc340e15981f0ac964367a2d5e3585af8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/ConformObjectNormals.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 916d519062254e79b6adc87200d2c142 +timeCreated: 1457563051 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/FlipObjectNormals.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/FlipObjectNormals.cs new file mode 100644 index 0000000000000000000000000000000000000000..9081ba128507379ed887589ab6d87033d8c1ad54 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/FlipObjectNormals.cs @@ -0,0 +1,61 @@ +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class FlipObjectNormals : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Object; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Object_FlipNormals", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + public override string menuTitle + { + get { return "Flip Normals"; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Flip Object Normals", + @"Reverse the direction of all faces on the selected objects." + ); + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedObjectCount > 0; } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Flip Object Normals"); + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + foreach (var face in pb.facesInternal) + face.Reverse(); + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + } + + return new ActionResult(ActionResult.Status.Success, "Flip Object Normals"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/FlipObjectNormals.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/FlipObjectNormals.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..0c571ff6bd9507cd8d7efe5efcddaa2f4641790a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/FlipObjectNormals.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: add8532bafe747b88ea53556bd2e74e8 +timeCreated: 1457563051 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/FreezeTransform.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/FreezeTransform.cs new file mode 100644 index 0000000000000000000000000000000000000000..3de3c5d96df5631dc64d95ed1630d6d333bff2c2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/FreezeTransform.cs @@ -0,0 +1,76 @@ +using System.Collections.Generic; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class FreezeTransform : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Object; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Pivot_Reset", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Freeze Transform", + @"Set the pivot point to world coordinates (0,0,0) and clear all Transform values while keeping the mesh in place." + ); + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedObjectCount > 0; } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordMeshAndTransformSelection("Freeze Transforms"); + + var selection = MeshSelection.topInternal; + Vector3[][] positions = new Vector3[selection.Count][]; + + for (int i = 0, c = selection.Count; i < c; i++) + positions[i] = selection[i].VerticesInWorldSpace(); + + for (int i = 0, c = selection.Count; i < c; i++) + { + ProBuilderMesh pb = selection[i]; + + pb.transform.position = Vector3.zero; + pb.transform.rotation = Quaternion.identity; + pb.transform.localScale = Vector3.one; + + foreach (Face face in pb.facesInternal) + face.manualUV = true; + + pb.positions = positions[i]; + + pb.ToMesh(); + pb.Refresh(); + pb.Optimize(); + } + + ProBuilderEditor.Refresh(); + + SceneView.RepaintAll(); + + return new ActionResult(ActionResult.Status.Success, "Freeze Transforms"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/FreezeTransform.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/FreezeTransform.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4803d2e9b97d76c5d732d3c10c4cacde26aaed9e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/FreezeTransform.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cc6c734d87394ef99cf62171eb6fe416 +timeCreated: 1457563050 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/GenerateUV2.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/GenerateUV2.cs new file mode 100644 index 0000000000000000000000000000000000000000..dcfed18f2ad869c5a21210bde4a2dbc81757e473 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/GenerateUV2.cs @@ -0,0 +1,60 @@ +using UnityEngine.ProBuilder; +using UnityEngine; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class GenerateUV2 : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Object; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Object_GenerateUV2", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + protected override bool hasFileMenuEntry + { + get { return false; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Lightmap UVs", + @"Generate Lightmap UVs for any meshes in the open scenes that are missing them." + ); + + public override bool enabled + { + get { return true; } + } + + protected override MenuActionState optionsMenuState + { + get { return MenuActionState.VisibleAndEnabled; } + } + + public override ActionResult DoAction() + { + var res = Lightmapping.RebuildMissingLightmapUVs(Object.FindObjectsOfType<ProBuilderMesh>(), true); + + if (res < 1) + return new ActionResult(ActionResult.Status.Success, "No Missing Lightmap UVs Found"); + + return new ActionResult(ActionResult.Status.Success, "Generate Lightmap UVs\n" + + (res > 1 ? string.Format("for {0} objects", res) : "for 1 object")); + } + + protected override void DoAlternateAction() + { + EditorWindow.GetWindow<LightmapUVEditor>(true, "Lightmap UV Editor", true).position = LightmapUVEditor.desiredPosition; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/GenerateUV2.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/GenerateUV2.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4056b1cfd2dfcb8d3eab8a6209833aea0c483030 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/GenerateUV2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 752d48e9eaa76c54ba0ff161eff2a3f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/MergeObjects.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/MergeObjects.cs new file mode 100644 index 0000000000000000000000000000000000000000..1b18b3f5abce4a7f02e4aa5576ef6c434cec2e3a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/MergeObjects.cs @@ -0,0 +1,77 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class MergeObjects : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Object; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Object_Merge", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Merge Objects", + @"Merges all selected ProBuilder objects to a single mesh." + ); + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedObjectCount > 1 && MeshSelection.activeMesh != null; } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 2) + return new ActionResult(ActionResult.Status.Canceled, "Must Select 2+ Objects"); + + var selected = MeshSelection.top.ToArray(); + ProBuilderMesh currentMesh = MeshSelection.activeMesh; + UndoUtility.RecordObject(currentMesh, "Merge Objects"); + List<ProBuilderMesh> res = CombineMeshes.Combine(MeshSelection.topInternal, currentMesh); + + if (res != null) + { + foreach (var mesh in res) + { + mesh.Optimize(); + if (mesh != currentMesh) + { + mesh.gameObject.name = Selection.activeGameObject.name + "-Merged"; + UndoUtility.RegisterCreatedObjectUndo(mesh.gameObject, "Merge Objects"); + Selection.objects = res.Select(x => x.gameObject).ToArray(); + } + } + + // Delete donor objects if they are not part of the result + for (int i = 0; i < selected.Length; i++) + { + if (selected[i] != null && res.Contains(selected[i]) == false) + UndoUtility.DestroyImmediate(selected[i].gameObject); + } + } + + ProBuilderEditor.Refresh(); + + return new ActionResult(ActionResult.Status.Success, "Merged Objects"); + } + } +} + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/MergeObjects.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/MergeObjects.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ab5c7c34c4d33184e6ecbd23c9b1afdea409e87d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/MergeObjects.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ffab696c539c4041848596918dd4590f +timeCreated: 1457563050 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/MirrorObjects.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/MirrorObjects.cs new file mode 100644 index 0000000000000000000000000000000000000000..588a1a1313d53acd140a34306900cc88fb6ec37f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/MirrorObjects.cs @@ -0,0 +1,153 @@ +using UnityEngine; +using System.Collections.Generic; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class MirrorObjects : MenuAction + { + Pref<MirrorSettings> m_MirrorAxes = new Pref<MirrorSettings>("MirrorObjects.mirrorAxes", MirrorSettings.X); + + public override ToolbarGroup group + { + get { return ToolbarGroup.Object; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Object_Mirror", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + [System.Flags] + enum MirrorSettings + { + X = 0x1, + Y = 0x2, + Z = 0x4, + Duplicate = 0x8 + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Mirror Objects", + @"Mirroring objects will duplicate and flip objects on the specified axes." + ); + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedObjectCount > 0; } + } + + protected override MenuActionState optionsMenuState + { + get { return MenuActionState.VisibleAndEnabled; } + } + + protected override void OnSettingsGUI() + { + GUILayout.Label("Mirror Settings", EditorStyles.boldLabel); + + EditorGUILayout.HelpBox("Mirror objects on the selected axes.\n\nIf Duplicate is toggled a new object will be instantiated from the selection and mirrored, or if disabled the selection will be moved.", MessageType.Info); + + MirrorSettings scale = m_MirrorAxes; + + bool x = (scale & MirrorSettings.X) != 0 ? true : false; + bool y = (scale & MirrorSettings.Y) != 0 ? true : false; + bool z = (scale & MirrorSettings.Z) != 0 ? true : false; + bool d = (scale & MirrorSettings.Duplicate) != 0 ? true : false; + + EditorGUI.BeginChangeCheck(); + + x = EditorGUILayout.Toggle("X", x); + y = EditorGUILayout.Toggle("Y", y); + z = EditorGUILayout.Toggle("Z", z); + d = EditorGUILayout.Toggle("Duplicate", d); + + if (EditorGUI.EndChangeCheck()) + m_MirrorAxes.SetValue((MirrorSettings) + (x ? MirrorSettings.X : 0) | + (y ? MirrorSettings.Y : 0) | + (z ? MirrorSettings.Z : 0) | + (d ? MirrorSettings.Duplicate : 0)); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Mirror")) + EditorUtility.ShowNotification(DoAction().notification); + } + + public override ActionResult DoAction() + { + Vector3 scale = new Vector3( + (m_MirrorAxes & MirrorSettings.X) > 0 ? -1f : 1f, + (m_MirrorAxes & MirrorSettings.Y) > 0 ? -1f : 1f, + (m_MirrorAxes & MirrorSettings.Z) > 0 ? -1f : 1f); + + bool duplicate = (m_MirrorAxes & MirrorSettings.Duplicate) > 0; + + List<GameObject> res = new List<GameObject>(); + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + res.Add(Mirror(pb, scale, duplicate).gameObject); + + MeshSelection.SetSelection(res); + + ProBuilderEditor.Refresh(); + + return res.Count > 0 ? + new ActionResult(ActionResult.Status.Success, string.Format("Mirror {0} {1}", res.Count, res.Count > 1 ? "Objects" : "Object")) : + new ActionResult(ActionResult.Status.NoChange, "No Objects Selected"); + } + + /** + * \brief Duplicates and mirrors the passed pb_Object. + * @param pb The donor pb_Object. + * @param axe The axis to mirror the object on. + * \returns The newly duplicated pb_Object. + * \sa ProBuilder.Axis + */ + public static ProBuilderMesh Mirror(ProBuilderMesh pb, Vector3 scale, bool duplicate = true) + { + ProBuilderMesh mirredObject; + + if (duplicate) + { + mirredObject = Object.Instantiate(pb.gameObject, pb.transform.parent, false).GetComponent<ProBuilderMesh>(); + mirredObject.MakeUnique(); + mirredObject.transform.parent = pb.transform.parent; + mirredObject.transform.localRotation = pb.transform.localRotation; + Undo.RegisterCreatedObjectUndo(mirredObject.gameObject, "Mirror Object"); + } + else + { + UndoUtility.RecordObject(pb, "Mirror"); + mirredObject = pb; + } + + Vector3 lScale = mirredObject.gameObject.transform.localScale; + mirredObject.transform.localScale = scale; + + // if flipping on an odd number of axes, flip winding order + if ((scale.x * scale.y * scale.z) < 0) + { + foreach (var face in mirredObject.facesInternal) + face.Reverse(); + } + + mirredObject.FreezeScaleTransform(); + mirredObject.transform.localScale = lScale; + + mirredObject.ToMesh(); + mirredObject.Refresh(); + mirredObject.Optimize(); + + return mirredObject; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/MirrorObjects.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/MirrorObjects.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..8759cdc85001019b92b858bb95a980caabdd33d5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/MirrorObjects.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5cf10ee5e4b44eaca6e769bf235f7f5a +timeCreated: 1470064051 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/ProBuilderize.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/ProBuilderize.cs new file mode 100644 index 0000000000000000000000000000000000000000..e6b203e11adadbd693843e3042d8a9fc18cac6c2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/ProBuilderize.cs @@ -0,0 +1,199 @@ +using UnityEngine; +using System.Linq; +using System.Collections.Generic; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class ProBuilderize : MenuAction + { + bool m_Enabled; + Pref<bool> m_Quads = new Pref<bool>("meshImporter.quads", true); + Pref<bool> m_Smoothing = new Pref<bool>("meshImporter.smoothing", true); + Pref<float> m_SmoothingAngle = new Pref<float>("meshImporter.smoothingAngle", 1f); + + public ProBuilderize() + { + MeshSelection.objectSelectionChanged += OnObjectSelectionChanged; + + OnObjectSelectionChanged(); // invoke once as we might already have a selection in Hierarchy + } + + private void OnObjectSelectionChanged() + { + // can't just check if any MeshFilter is present because we need to know whether or not it's already a + // probuilder mesh + int meshCount = Selection.transforms.SelectMany(x => x.GetComponentsInChildren<MeshFilter>()).Count(); + m_Enabled = meshCount > 0 && meshCount != MeshSelection.selectedObjectCount; + } + + public override ToolbarGroup group + { + get { return ToolbarGroup.Object; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Object_ProBuilderize", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + GUIContent m_QuadsTooltip = new GUIContent("Import Quads", "Create ProBuilder mesh using quads where " + + "possible instead of triangles."); + GUIContent m_SmoothingTooltip = new GUIContent("Import Smoothing", "Import smoothing groups by " + + "testing adjacent faces against an angle threshold."); + GUIContent m_SmoothingThresholdTooltip = new GUIContent("Smoothing Threshold", "When importing " + + "smoothing groups any adjacent faces with an adjoining angle difference of less than this value will be " + + "grouped together in a smoothing group."); + + private static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "ProBuilderize", + @"Creates ProBuilder-modifiable objects from meshes." + ); + + public override bool enabled + { + get { return base.enabled && m_Enabled; } + } + + protected override MenuActionState optionsMenuState + { + get { return MenuActionState.VisibleAndEnabled; } + } + + protected override void OnSettingsGUI() + { + GUILayout.Label("ProBuilderize Options", EditorStyles.boldLabel); + + EditorGUILayout.HelpBox("When Preserve Faces is enabled ProBuilder will try to group adjacent triangles into faces.", MessageType.Info); + + EditorGUI.BeginChangeCheck(); + + m_Quads.value = EditorGUILayout.Toggle(m_QuadsTooltip, m_Quads); + m_Smoothing.value = EditorGUILayout.Toggle(m_SmoothingTooltip, m_Smoothing); + GUI.enabled = m_Smoothing; + EditorGUILayout.PrefixLabel(m_SmoothingThresholdTooltip); + m_SmoothingAngle.value = EditorGUILayout.Slider(m_SmoothingAngle, 0.0001f, 45f); + + GUI.enabled = true; + + if (EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + + GUILayout.FlexibleSpace(); + + GUI.enabled = enabled; + + if (GUILayout.Button("ProBuilderize")) + EditorUtility.ShowNotification(DoAction().notification); + + GUI.enabled = true; + } + + public override ActionResult DoAction() + { + IEnumerable<MeshFilter> top = Selection.transforms.Select(x => x.GetComponent<MeshFilter>()).Where(y => y != null); + IEnumerable<MeshFilter> all = Selection.gameObjects.SelectMany(x => x.GetComponentsInChildren<MeshFilter>()).Where(x => x != null); + + MeshImportSettings settings = new MeshImportSettings() + { + quads = m_Quads, + smoothing = m_Smoothing, + smoothingAngle = m_SmoothingAngle + }; + + if (top.Count() != all.Count()) + { + int result = UnityEditor.EditorUtility.DisplayDialogComplex("ProBuilderize Selection", + "ProBuilderize children of selection?", + "Yes", + "No", + "Cancel"); + + if (result == 0) + return DoProBuilderize(all, settings); + else if (result == 1) + return DoProBuilderize(top, settings); + else + return ActionResult.UserCanceled; + } + + return DoProBuilderize(all, settings); + } + + [System.Obsolete("Please use DoProBuilderize(IEnumerable<MeshFilter>, pb_MeshImporter.Settings")] + public static ActionResult DoProBuilderize( + IEnumerable<MeshFilter> selected, + bool preserveFaces) + { + return DoProBuilderize(selected, new MeshImportSettings() + { + quads = preserveFaces, + smoothing = false, + smoothingAngle = 1f + }); + } + + /// <summary> + /// Adds pb_Object component without duplicating the objcet. Is undo-able. + /// </summary> + /// <param name="selected"></param> + /// <param name="settings"></param> + /// <returns></returns> + public static ActionResult DoProBuilderize( + IEnumerable<MeshFilter> selected, + MeshImportSettings settings) + { + + int i = 0; + float count = selected.Count(); + + // Return immediately from the action so that the GUI can resolve. Displaying a progress bar interrupts the + // event loop causing a layoutting error. + EditorApplication.delayCall += () => + { + foreach (var mf in selected) + { + if (mf.sharedMesh == null) + continue; + + GameObject go = mf.gameObject; + Mesh sourceMesh = mf.sharedMesh; + Material[] sourceMaterials = go.GetComponent<MeshRenderer>()?.sharedMaterials; + + try + { + var destination = Undo.AddComponent<ProBuilderMesh>(go); + var meshImporter = new MeshImporter(sourceMesh, sourceMaterials, destination); + meshImporter.Import(settings); + + destination.Rebuild(); + destination.Optimize(); + + i++; + } + catch (System.Exception e) + { + Debug.LogWarning("Failed ProBuilderizing: " + go.name + "\n" + e.ToString()); + } + + UnityEditor.EditorUtility.DisplayProgressBar("ProBuilderizing", mf.gameObject.name, i / count); + } + + UnityEditor.EditorUtility.ClearProgressBar(); + MeshSelection.OnObjectSelectionChanged(); + ProBuilderEditor.Refresh(); + }; + + if (i < 1) + return new ActionResult(ActionResult.Status.Canceled, "Nothing Selected"); + return new ActionResult(ActionResult.Status.Success, "ProBuilderize " + i + (i > 1 ? " Objects" : " Object").ToString()); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/ProBuilderize.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/ProBuilderize.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..27cb50075f065a25b2c493fdc5a0d4cb093daa9f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/ProBuilderize.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d0b5cffbc2ad41cb84067b39dedada94 +timeCreated: 1471369223 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SetCollider.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SetCollider.cs new file mode 100644 index 0000000000000000000000000000000000000000..8c808783fc78de7f0eac9ef6e210d5a205516796 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SetCollider.cs @@ -0,0 +1,69 @@ +using UnityEngine.ProBuilder; +using UnityEngine; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SetCollider : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Entity; } + } + + public override Texture2D icon + { + get { return null; } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Set Collider", + "Apply the Collider material and adds a mesh collider (if no collider is present). The MeshRenderer will be automatically turned off on entering play mode." + ); + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedObjectCount > 0; } + } + + public override ActionResult DoAction() + { + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + var existing = pb.GetComponents<EntityBehaviour>(); + + // For now just nuke any existing entity types (since there are only two). In the future we should be + // smarter about conflicting entity types. + for (int i = 0, c = existing.Length; i < c; i++) + Undo.DestroyObjectImmediate(existing[i]); + + var entity = pb.GetComponent<Entity>(); + + if (entity != null) + Undo.DestroyObjectImmediate(entity); + + if (!pb.GetComponent<Collider>()) + Undo.AddComponent<MeshCollider>(pb.gameObject); + + if (!pb.GetComponent<Renderer>()) + Undo.AddComponent<MeshRenderer>(pb.gameObject); + + UndoUtility.RegisterCompleteObjectUndo(pb, "Set Collider"); + + Undo.AddComponent<ColliderBehaviour>(pb.gameObject).Initialize(); + } + + int selectionCount = MeshSelection.selectedObjectCount; + + if (selectionCount < 1) + return new ActionResult(ActionResult.Status.NoChange, "Set Collider\nNo objects selected"); + + return new ActionResult(ActionResult.Status.Success, "Set Collider\nSet " + selectionCount + " Objects"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SetCollider.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SetCollider.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1bc623dbf1b3f8293ab27947e935176612d0fc21 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SetCollider.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1376ed33245911e48ab91c560798f510 +timeCreated: 1457563050 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SetTrigger.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SetTrigger.cs new file mode 100644 index 0000000000000000000000000000000000000000..5a6fc9dc784a76a3b92cc577de217523c45c7dd1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SetTrigger.cs @@ -0,0 +1,71 @@ +using System; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SetTrigger : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Entity; } + } + + public override Texture2D icon + { + get { return null; } + } + + public override TooltipContent tooltip + { + get { return _tooltip; } + } + + static readonly TooltipContent _tooltip = new TooltipContent + ( + "Set Trigger", + "Apply the Trigger material and adds a collider marked as a trigger. The MeshRenderer will be automatically turned off on entering play mode." + ); + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedObjectCount > 0; } + } + + public override ActionResult DoAction() + { + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + var existing = pb.GetComponents<EntityBehaviour>(); + + // For now just nuke any existing entity types (since there are only two). In the future we should be + // smarter about conflicting entity types. + for (int i = 0, c = existing.Length; i < c; i++) + Undo.DestroyObjectImmediate(existing[i]); + + var entity = pb.GetComponent<Entity>(); + + if (entity != null) + Undo.DestroyObjectImmediate(entity); + + if (!pb.GetComponent<Collider>()) + Undo.AddComponent<MeshCollider>(pb.gameObject); + + if (!pb.GetComponent<Renderer>()) + Undo.AddComponent<MeshRenderer>(pb.gameObject); + + UndoUtility.RegisterCompleteObjectUndo(pb, "Set Trigger"); + + Undo.AddComponent<TriggerBehaviour>(pb.gameObject).Initialize(); + } + + int selectionCount = MeshSelection.selectedObjectCount; + + if (selectionCount < 1) + return new ActionResult(ActionResult.Status.NoChange, "Set Trigger\nNo objects selected"); + + return new ActionResult(ActionResult.Status.Success, "Set Trigger\nSet " + selectionCount + " Objects"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SetTrigger.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SetTrigger.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3bb74a62047c78a3bf4549837b0e20a8a6413573 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SetTrigger.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4ce00895d9eb2924f8f0c484eb3879ce +timeCreated: 1457563050 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SubdivideObject.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SubdivideObject.cs new file mode 100644 index 0000000000000000000000000000000000000000..774c9145bf37a9f0b75f67b4efc35af326ca96c1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SubdivideObject.cs @@ -0,0 +1,64 @@ +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; +using UnityEngine; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SubdivideObject : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Object; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Object_Subdivide", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Subdivide Object", + "Increase the number of edges and vertices on this object by creating 4 new quads in every face." + ); + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedObjectCount > 0; } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Subdivide Selection"); + + int success = 0; + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + pb.ToMesh(); + + if (pb.Subdivide()) + success++; + else + Debug.LogError($"Subidivision of [{pb.name}] failed, complex concave objects are not supported"); + + pb.Refresh(); + pb.Optimize(); + + pb.SetSelectedVertices(new int[0]); + } + + ProBuilderEditor.Refresh(); + + return new ActionResult(ActionResult.Status.Success, "Subdivide " + success + " Objects"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SubdivideObject.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SubdivideObject.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..eb84b36ef1c1a44fdd6e0b685c55d7642737290b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/SubdivideObject.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a6f7622c6d6346cca3539de7b00556a7 +timeCreated: 1457563050 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/TriangulateObject.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/TriangulateObject.cs new file mode 100644 index 0000000000000000000000000000000000000000..eaf3e649f114532d29a7dbb0eef0474257e78269 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/TriangulateObject.cs @@ -0,0 +1,47 @@ +using UnityEngine.ProBuilder; +using UnityEngine; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class TriangulateObject : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Object; } } + public override Texture2D icon { get { return IconUtility.GetIcon("Toolbar/Object_Triangulate", IconSkin.Pro); } } + public override TooltipContent tooltip { get { return s_Tooltip; } } + public override string menuTitle { get { return "Triangulate"; } } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Triangulate Objects", + @"Removes all quads and n-gons on the mesh and inserts triangles instead. Use this and a hard smoothing group to achieve a low-poly facetized look." + ); + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedObjectCount > 0; } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Triangulate Objects"); + + foreach (var mesh in MeshSelection.topInternal) + { + mesh.ToMesh(); + mesh.ToTriangles(mesh.facesInternal); + mesh.Refresh(); + mesh.Optimize(); + mesh.ClearSelection(); + } + + ProBuilderEditor.Refresh(); + + var c = MeshSelection.selectedObjectCount; + return new ActionResult(ActionResult.Status.Success, "Triangulate " + c + (c > 1 ? " Objects" : " Object")); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/TriangulateObject.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/TriangulateObject.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9d2630f9dae136bfd9c4fb2a7b6340eb44c6aaa3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Object/TriangulateObject.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b3983d7c6b954ee69e23e75009a8b81d +timeCreated: 1457563051 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection.meta new file mode 100644 index 0000000000000000000000000000000000000000..4582b8d045c94bab3516456a1fc973923b7f3a81 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 859d1b6f38c447a0b52be06a651a5673 +folderAsset: yes +timeCreated: 1457452380 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/GrowSelection.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/GrowSelection.cs new file mode 100644 index 0000000000000000000000000000000000000000..d7131a3b5e2fef8315fc4707fa38727ab71e6331 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/GrowSelection.cs @@ -0,0 +1,182 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEngine; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class GrowSelection : MenuAction + { + Pref<bool> m_GrowSelectionWithAngle = new Pref<bool>("GrowSelection.useAngle", true); + Pref<bool> m_GrowSelectionAngleIterative = new Pref<bool>("GrowSelection.iterativeGrow", false); + Pref<float> m_GrowSelectionAngleValue = new Pref<float>("GrowSelection.angleValue", 15f); + + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Selection_Grow", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Grow Selection", + @"Adds adjacent elements to the current selection, optionally testing to see if they are within a specified angle. + +Grow by angle is enabled by Option + Clicking the <b>Grow Selection</b> button.", + keyCommandAlt, 'G' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Vertex | SelectMode.Edge | SelectMode.Face | SelectMode.TextureFace; } + } + + public override bool enabled + { + get { return base.enabled && VerifyGrowSelection(); } + } + + protected override MenuActionState optionsMenuState + { + get + { + if (enabled && ProBuilderEditor.selectMode == SelectMode.Face) + return MenuActionState.VisibleAndEnabled; + + return MenuActionState.Hidden; + } + } + + protected override void OnSettingsGUI() + { + GUILayout.Label("Grow Selection Options", EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + + m_GrowSelectionWithAngle.value = EditorGUILayout.Toggle("Restrict to Angle", m_GrowSelectionWithAngle.value); + + GUI.enabled = m_GrowSelectionWithAngle; + + m_GrowSelectionAngleValue.value = EditorGUILayout.FloatField("Max Angle", m_GrowSelectionAngleValue); + + GUI.enabled = m_GrowSelectionWithAngle; + + bool iterative = m_GrowSelectionWithAngle ? m_GrowSelectionAngleIterative : true; + + EditorGUI.BeginChangeCheck(); + iterative = EditorGUILayout.Toggle("Iterative", iterative); + if (EditorGUI.EndChangeCheck()) + { + m_GrowSelectionAngleIterative.value = iterative; + } + + GUI.enabled = true; + + if (EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Grow Selection")) + DoAction(); + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Grow Selection"); + + int grown = 0; + bool angleGrow = m_GrowSelectionWithAngle; + bool iterative = m_GrowSelectionAngleIterative; + float growSelectionAngle = m_GrowSelectionAngleValue; + + if (!angleGrow && !iterative) + iterative = true; + + foreach (ProBuilderMesh pb in InternalUtility.GetComponents<ProBuilderMesh>(Selection.transforms)) + { + int previousTriCount = pb.selectedVertexCount; + + switch (ProBuilderEditor.selectMode) + { + case SelectMode.Vertex: + pb.SetSelectedEdges(ElementSelection.GetConnectedEdges(pb, pb.selectedIndexesInternal)); + break; + + case SelectMode.Edge: + pb.SetSelectedEdges(ElementSelection.GetConnectedEdges(pb, pb.selectedIndexesInternal)); + break; + + case SelectMode.TextureFace: + case SelectMode.Face: + + Face[] selectedFaces = pb.GetSelectedFaces(); + + HashSet<Face> sel; + + if (iterative) + { + sel = ElementSelection.GrowSelection(pb, selectedFaces, angleGrow ? growSelectionAngle : -1f); + sel.UnionWith(selectedFaces); + } + else + { + sel = ElementSelection.FloodSelection(pb, selectedFaces, angleGrow ? growSelectionAngle : -1f); + } + + pb.SetSelectedFaces(sel.ToArray()); + + break; + } + + grown += pb.selectedVertexCount - previousTriCount; + } + + ProBuilderEditor.Refresh(); + SceneView.RepaintAll(); + + if (grown > 0) + return new ActionResult(ActionResult.Status.Success, "Grow Selection"); + + return new ActionResult(ActionResult.Status.Failure, "Nothing to Grow"); + } + + static bool VerifyGrowSelection() + { + int sel, max; + + switch (ProBuilderEditor.selectMode) + { + case SelectMode.Face: + sel = MeshSelection.selectedFaceCount; + max = MeshSelection.totalFaceCount; + break; + + case SelectMode.Edge: + sel = MeshSelection.selectedEdgeCount; + max = MeshSelection.totalEdgeCount; + break; + + default: + sel = MeshSelection.selectedVertexCount; + max = MeshSelection.totalVertexCount; + break; + } + + return sel > 0 && sel < max; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/GrowSelection.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/GrowSelection.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4543c2ba4b8a5c867b3125626232b137080a68d9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/GrowSelection.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 77b34bf9fb2a49f6a5d0d0117bcc4c46 +timeCreated: 1457452380 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectEdgeLoop.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectEdgeLoop.cs new file mode 100644 index 0000000000000000000000000000000000000000..629492c4a479b2f5ad9de09eb1e2e2ca97c9d1f0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectEdgeLoop.cs @@ -0,0 +1,126 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; +using System.Collections.Generic; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SelectEdgeLoop : MenuAction + { + Pref<bool> m_SelectIterative = new Pref<bool>("SelectEdgeLoop.selectIterative", false); + GUIContent gc_selectIterative = new GUIContent("Iterative Selection", "Optionally restrict the selection to neighbors edges on the loop."); + + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Selection_Loop", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + public override int toolbarPriority + { + get { return 1; } + } + + protected override bool hasFileMenuEntry + { + get { return false; } + } + + private static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Select Edge Loop", + "Selects a loop of connected edges.\n\n<b>Shortcut</b>: Double-Click on Edge", + keyCommandAlt, 'L' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Edge; } + } + + protected override MenuActionState optionsMenuState + { + get { + if (enabled && ProBuilderEditor.selectMode == SelectMode.Edge) + return MenuActionState.VisibleAndEnabled; + + return MenuActionState.Hidden; + } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedEdgeCount > 0; } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Select Edge Loop"); + + bool foundLoop = false; + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + Edge[] loop; + bool success = false; + + if (m_SelectIterative) + success = ElementSelection.GetEdgeLoopIterative(pb, pb.selectedEdges, out loop); + else + success = ElementSelection.GetEdgeLoop(pb, pb.selectedEdges, out loop); + + if (success) + { + if (loop.Length > pb.selectedEdgeCount) + foundLoop = true; + + pb.SetSelectedEdges(loop); + } + } + + ProBuilderEditor.Refresh(); + + SceneView.RepaintAll(); + + if (foundLoop) + return new ActionResult(ActionResult.Status.Success, "Select Edge Loop"); + else + return new ActionResult(ActionResult.Status.Failure, "Nothing to Loop"); + } + + protected override void OnSettingsGUI() + { + GUILayout.Label("Select Loop Edge Options", EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + m_SelectIterative.value = EditorGUILayout.Toggle(gc_selectIterative, m_SelectIterative); + + if (EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Select Edge Loop")) + { + DoAction(); + SceneView.RepaintAll(); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectEdgeLoop.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectEdgeLoop.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4a3f0096be2aae85cf3d54e28e98002c549584fe --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectEdgeLoop.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5f3c839e57094cf6b2e99af5515b2ca0 +timeCreated: 1457452380 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectEdgeRing.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectEdgeRing.cs new file mode 100644 index 0000000000000000000000000000000000000000..c49cae86586e28efbc3f98a7cb12df5ab99d6bdd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectEdgeRing.cs @@ -0,0 +1,125 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SelectEdgeRing : MenuAction + { + Pref<bool> m_SelectIterative = new Pref<bool>("SelectEdgeRing.selectIterative", false); + GUIContent gc_selectIterative = new GUIContent("Iterative Selection", "Optionally restrict the selection to neighbors edges on the ring."); + + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Selection_Ring", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + public override int toolbarPriority + { + get { return 2; } + } + + protected override bool hasFileMenuEntry + { + get { return false; } + } + + protected override MenuActionState optionsMenuState + { + get { + if (enabled && ProBuilderEditor.selectMode == SelectMode.Edge) + return MenuActionState.VisibleAndEnabled; + + return MenuActionState.Hidden; + } + } + + private static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Select Edge Ring", + "Selects a ring of edges. Ringed edges are opposite the selected edge.\n\n<b>Shortcut</b>: Shift + Double-Click on Edge", + keyCommandAlt, 'R' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Edge; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedEdgeCount > 0; } + } + + public override ActionResult DoAction() + { + if (MeshSelection.selectedObjectCount < 1) + return ActionResult.NoSelection; + + UndoUtility.RecordSelection("Select Edge Ring"); + + bool success = false; + + foreach (var mesh in MeshSelection.topInternal) + { + Edge[] edges; + + if (m_SelectIterative) + { + edges = ElementSelection.GetEdgeRingIterative(mesh, mesh.selectedEdges).ToArray(); + } + else + { + edges = ElementSelection.GetEdgeRing(mesh, mesh.selectedEdges).ToArray(); + } + + if (edges.Length > mesh.selectedEdgeCount) + success = true; + + mesh.SetSelectedEdges(edges); + } + + ProBuilderEditor.Refresh(); + + SceneView.RepaintAll(); + + if (success) + return new ActionResult(ActionResult.Status.Success, "Select Edge Ring"); + + return new ActionResult(ActionResult.Status.Failure, "Nothing to Ring"); + } + + protected override void OnSettingsGUI() + { + GUILayout.Label("Select Ring Edge Options", EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + m_SelectIterative.value = EditorGUILayout.Toggle(gc_selectIterative, m_SelectIterative); + + if (EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Select Edge Ring")) + { + DoAction(); + SceneView.RepaintAll(); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectEdgeRing.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectEdgeRing.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e5316ff2c272bc215dc67a0b88b6b8e307598ce1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectEdgeRing.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a49dc64944b24efab4e8dda777a3211a +timeCreated: 1457452380 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectFaceLoop.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectFaceLoop.cs new file mode 100644 index 0000000000000000000000000000000000000000..07f5d89519865d6b133e374dc3c8901d430583fe --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectFaceLoop.cs @@ -0,0 +1,70 @@ +using System.Collections.Generic; +using UnityEngine; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SelectFaceLoop : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Selection_Loop_Face", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + public override int toolbarPriority + { + get { return 1; } + } + + protected override bool hasFileMenuEntry + { + get { return false; } + } + + private static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Select Face Loop", + "Selects a loop of connected faces.\n\n<b>Shortcut</b>: Shift + Double Click on Face." + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Face | SelectMode.TextureFace; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedFaceCount > 0; } + } + + public override ActionResult DoAction() + { + var selection = MeshSelection.topInternal; + + UndoUtility.RecordSelection("Select Face Loop"); + + foreach (ProBuilderMesh pb in selection) + { + HashSet<Face> loop = ElementSelection.GetFaceLoop(pb, pb.selectedFacesInternal); + pb.SetSelectedFaces(loop); + } + + ProBuilderEditor.Refresh(); + + return new ActionResult(ActionResult.Status.Success, "Select Face Loop"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectFaceLoop.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectFaceLoop.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3d215109974e659338c79829aeb1836091304721 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectFaceLoop.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: df1c6ba8c6074cd4872ff79d66cc49f5 +timeCreated: 1508178490 diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectFaceRing.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectFaceRing.cs new file mode 100644 index 0000000000000000000000000000000000000000..b30427720012771fc0e43f924ef6b582de6f778f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectFaceRing.cs @@ -0,0 +1,83 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SelectFaceRing : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Selection_Ring_Face", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + public override int toolbarPriority + { + get { return 2; } + } + + protected override bool hasFileMenuEntry + { + get { return false; } + } + + private static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Select Face Ring", + "Selects a ring of connected faces.\n\n<b>Shortcut</b>: Control + Double Click on Face." + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Face | SelectMode.TextureFace; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedFaceCount > 0; } + } + + public override ActionResult DoAction() + { + var selection = MeshSelection.topInternal; + + UndoUtility.RecordSelection("Select Face Ring"); + + foreach (ProBuilderMesh pb in selection) + { + HashSet<Face> loop = ElementSelection.GetFaceLoop(pb, pb.selectedFacesInternal, true); + pb.SetSelectedFaces(loop); + } + + ProBuilderEditor.Refresh(); + + return new ActionResult(ActionResult.Status.Success, "Select Face Ring"); + } + + public static ActionResult MenuRingAndLoopFaces(IEnumerable<ProBuilderMesh> selection) + { + UndoUtility.RecordSelection(selection.ToArray(), "Select Face Ring and Loop"); + + foreach (ProBuilderMesh pb in selection) + { + HashSet<Face> loop = ElementSelection.GetFaceRingAndLoop(pb, pb.selectedFacesInternal); + pb.SetSelectedFaces(loop); + } + + ProBuilderEditor.Refresh(); + return new ActionResult(ActionResult.Status.Success, "Select Face Ring and Loop"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectFaceRing.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectFaceRing.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f3fe107dfee492a572d9269ced9786da05354158 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectFaceRing.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8459d3ed1cc648cba5015df2ff4850cb +timeCreated: 1508178355 diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectHole.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectHole.cs new file mode 100644 index 0000000000000000000000000000000000000000..ee5de4a386fd460f013a93779ec2f19cdb4b9aa5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectHole.cs @@ -0,0 +1,68 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using System.Linq; +using System.Collections.Generic; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SelectHole : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Selection_SelectHole", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + private static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Select Holes", + "Selects holes on the mesh.\n\nUses the current element selection, or tests the whole mesh if no edges or vertices are selected." + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Vertex | SelectMode.Edge; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedObjectCount > 0; } + } + + public override ActionResult DoAction() + { + UndoUtility.RecordSelection("Select Hole"); + + ActionResult res = ActionResult.NoSelection; + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + bool selectAll = pb.selectedIndexesInternal == null || pb.selectedIndexesInternal.Length < 1; + IEnumerable<int> indexes = selectAll ? pb.facesInternal.SelectMany(x => x.indexes) : pb.selectedIndexesInternal; + + List<List<Edge>> holes = ElementSelection.FindHoles(pb, indexes); + + res = new ActionResult(ActionResult.Status.Success, holes.Count > 0 ? string.Format("{0} holes found", holes.Count) : "No Holes in Selection"); + + pb.SetSelectedEdges(holes.SelectMany(x => x)); + } + + ProBuilderEditor.Refresh(); + + return res; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectHole.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectHole.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..bce7dd9573e804035091291c681710c9c866b9bd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectHole.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6f435ddc17924dd18782195e161766ae +timeCreated: 1467039697 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectLoop.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectLoop.cs new file mode 100644 index 0000000000000000000000000000000000000000..7f3096b721318ccf23159b862d365529c9916e6f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectLoop.cs @@ -0,0 +1,63 @@ +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace UnityEditor.ProBuilder.Actions +{ + // Menu item entry + sealed class SelectLoop : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get { return null; } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + public override int toolbarPriority + { + get { return 2; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Select Loop", + "", + keyCommandAlt, 'L' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Edge | SelectMode.Face | SelectMode.TextureFace; } + } + + public override bool enabled + { + get + { + if (ProBuilderEditor.selectMode == SelectMode.Edge) + return EditorToolbarLoader.GetInstance<SelectEdgeLoop>().enabled; + else if (ProBuilderEditor.selectMode == SelectMode.Face) + return EditorToolbarLoader.GetInstance<SelectFaceLoop>().enabled; + else + return false; + } + } + + public override ActionResult DoAction() + { + if (ProBuilderEditor.selectMode == SelectMode.Edge) + return EditorToolbarLoader.GetInstance<SelectEdgeLoop>().DoAction(); + else if (ProBuilderEditor.selectMode == SelectMode.Face) + return EditorToolbarLoader.GetInstance<SelectFaceLoop>().DoAction(); + return ActionResult.NoSelection; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectLoop.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectLoop.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..beae75c21737d2fb401b40ea49ed2ed82d1164da --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectLoop.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 924ccbaae96a57b438f256c6e54c1df8 +timeCreated: 1457452380 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectMaterial.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectMaterial.cs new file mode 100644 index 0000000000000000000000000000000000000000..41379e00210d2cba25110558ace71f81bddf1e66 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectMaterial.cs @@ -0,0 +1,122 @@ +using UnityEngine; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.SettingsManagement; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SelectMaterial : MenuAction + { + GUIContent gc_restrictToSelection = new GUIContent("Current Selection", "Optionally restrict the matches to only those faces on currently selected objects."); + internal Pref<bool> m_RestrictToSelectedObjects = new Pref<bool>("SelectMaterial.restrictToSelectedObjects", false, SettingsScope.Project); + + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Selection_SelectByMaterial", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Select by Material", + "Selects all faces matching the selected materials." + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Face | SelectMode.TextureFace; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedFaceCount > 0; } + } + + protected override MenuActionState optionsMenuState + { + get { return MenuActionState.VisibleAndEnabled; } + } + + protected override void OnSettingsGUI() + { + GUILayout.Label("Select Material Options", EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + + m_RestrictToSelectedObjects.value = EditorGUILayout.Toggle(gc_restrictToSelection, m_RestrictToSelectedObjects); + + if (EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Select Faces with Material")) + { + DoAction(); + SceneView.RepaintAll(); + } + } + + public override ActionResult DoAction() + { + IEnumerable<ProBuilderMesh> selection; + + if (m_RestrictToSelectedObjects) + selection = MeshSelection.topInternal; + else + selection = Object.FindObjectsOfType<ProBuilderMesh>(); + + UndoUtility.RecordSelection("Select Faces with Material"); + + //Need to go from submesh index to material + HashSet<Material> selectedMaterials = new HashSet<Material>(); + foreach(var pb in MeshSelection.topInternal) + { + HashSet<int> submeshIndex = new HashSet<int>(pb.selectedFacesInternal.Select(y => y.submeshIndex)); + foreach (var index in submeshIndex) + { + selectedMaterials.Add(pb.renderer.sharedMaterials[index]); + } + } + + List<GameObject> newSelection = new List<GameObject>(); + foreach (var pb in selection) + { + List<int> subMeshIndices = new List<int>(); + for (int matIndex = 0; matIndex < pb.renderer.sharedMaterials.Length; ++matIndex) + { + if(selectedMaterials.Contains(pb.renderer.sharedMaterials[matIndex])) + { + subMeshIndices.Add(matIndex); + } + } + + if(subMeshIndices.Count > 0) + { + IEnumerable<Face> matches = pb.facesInternal.Where(x => subMeshIndices.Contains(x.submeshIndex)); + if (matches.Any()) + { + newSelection.Add(pb.gameObject); + pb.SetSelectedFaces(matches); + } + } + } + + Selection.objects = newSelection.ToArray(); + + ProBuilderEditor.Refresh(); + + return new ActionResult(ActionResult.Status.Success, "Select Faces with Material"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectMaterial.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectMaterial.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..df31152dbaf78339808e8540840d0fd04d817e5b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectMaterial.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 51cb791f07b14fc08dd10dd56890d5c0 +timeCreated: 1471368034 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectRing.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectRing.cs new file mode 100644 index 0000000000000000000000000000000000000000..4e9103d159de1180ed2d309d68e09982386441c6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectRing.cs @@ -0,0 +1,68 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + // Menu item entry + sealed class SelectRing : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get { return null; } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + public override int toolbarPriority + { + get { return 2; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Select Ring", + "", + keyCommandAlt, 'R' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Edge | SelectMode.Face | SelectMode.TextureFace; } + } + + public override bool enabled + { + get + { + if (ProBuilderEditor.selectMode == SelectMode.Edge) + return EditorToolbarLoader.GetInstance<SelectEdgeRing>().enabled; + else if (ProBuilderEditor.selectMode == SelectMode.Face) + return EditorToolbarLoader.GetInstance<SelectFaceRing>().enabled; + else + return false; + } + } + + public override ActionResult DoAction() + { + if (ProBuilderEditor.selectMode == SelectMode.Edge) + return EditorToolbarLoader.GetInstance<SelectEdgeRing>().DoAction(); + else if (ProBuilderEditor.selectMode == SelectMode.Face) + return EditorToolbarLoader.GetInstance<SelectFaceRing>().DoAction(); + return ActionResult.NoSelection; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectRing.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectRing.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ff707a91c6df20308ee7384fcac982efa3fe16ec --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectRing.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8704e3cfa2526d34baf80d67fda2aa11 +timeCreated: 1457452380 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectSmoothingGroup.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectSmoothingGroup.cs new file mode 100644 index 0000000000000000000000000000000000000000..f4e2ead48ff5e84dad40751480e5d59ba57b5779 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectSmoothingGroup.cs @@ -0,0 +1,86 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SelectSmoothingGroup : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Selection_SelectBySmoothingGroup", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Select by Smooth", + "Selects all faces matching the selected smoothing groups." + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Face | SelectMode.TextureFace; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedFaceCount > 0; } + } + + public override bool hidden + { + get { return true; } + } + + protected override MenuActionState optionsMenuState + { + get + { + if (enabled && ProBuilderEditor.selectMode == SelectMode.Face) + return MenuActionState.VisibleAndEnabled; + + return MenuActionState.Visible; + } + } + + public override ActionResult DoAction() + { + UndoUtility.RecordSelection("Select Faces with Smoothing Group"); + + HashSet<int> selectedSmoothGroups = new HashSet<int>(MeshSelection.topInternal.SelectMany(x => x.selectedFacesInternal.Select(y => y.smoothingGroup))); + + List<GameObject> newSelection = new List<GameObject>(); + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + IEnumerable<Face> matches = pb.facesInternal.Where(x => selectedSmoothGroups.Contains(x.smoothingGroup)); + + if (matches.Count() > 0) + { + newSelection.Add(pb.gameObject); + pb.SetSelectedFaces(matches); + } + } + + Selection.objects = newSelection.ToArray(); + + ProBuilderEditor.Refresh(); + + return new ActionResult(ActionResult.Status.Success, "Select Faces with Smoothing Group"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectSmoothingGroup.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectSmoothingGroup.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..76467ee53201ebff366b803eda6bc4069cd8a21f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectSmoothingGroup.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ffe60d522a0a4b0489a5bfe4bb6b4fb1 +timeCreated: 1505081073 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectVertexColor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectVertexColor.cs new file mode 100644 index 0000000000000000000000000000000000000000..489668c61413492e763201b679f5b1405ef611f4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectVertexColor.cs @@ -0,0 +1,169 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder.UI; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEditor.ProBuilder; +using EditorGUILayout = UnityEditor.EditorGUILayout; +using EditorStyles = UnityEditor.EditorStyles; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class SelectVertexColor : MenuAction + { + Pref<bool> m_SearchSelectedObjectsOnly = new Pref<bool>("SelectVertexColor.restrictToSelectedObjects", false); + GUIContent gc_restrictToSelection = new GUIContent("Current Selection", "Optionally restrict the matches to only those faces on currently selected objects."); + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Select by Colors", + "Selects all faces matching the selected vertex colors." + ); + + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Selection_SelectByVertexColor", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + public override SelectMode validSelectModes + { + get { return SelectMode.Vertex | SelectMode.Edge | SelectMode.Face | SelectMode.TextureFace; } + } + + public override bool enabled + { + get { return base.enabled && MeshSelection.selectedVertexCount > 0; } + } + + protected override MenuActionState optionsMenuState + { + get + { + if (enabled) + return MenuActionState.VisibleAndEnabled; + + return MenuActionState.Visible; + } + } + + protected override void OnSettingsGUI() + { + GUILayout.Label("Select by Vertex Color Options", EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + m_SearchSelectedObjectsOnly.value = EditorGUILayout.Toggle(gc_restrictToSelection, m_SearchSelectedObjectsOnly); + + if (EditorGUI.EndChangeCheck()) + ProBuilderSettings.Save(); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Select Vertex Color")) + { + DoAction(); + SceneView.RepaintAll(); + } + } + + public override ActionResult DoAction() + { + UndoUtility.RecordSelection("Select Faces with Vertex Colors"); + + HashSet<Color32> colors = new HashSet<Color32>(); + + foreach (ProBuilderMesh pb in MeshSelection.topInternal) + { + Color[] mesh_colors = pb.colorsInternal; + + if (mesh_colors == null || mesh_colors.Length != pb.vertexCount) + continue; + + foreach (int i in pb.selectedIndexesInternal) + colors.Add(mesh_colors[i]); + } + + List<GameObject> newSelection = new List<GameObject>(); + bool selectionOnly = m_SearchSelectedObjectsOnly; + + IEnumerable<ProBuilderMesh> pool; + + if (selectionOnly) + pool = MeshSelection.topInternal; + else + pool = Object.FindObjectsOfType<ProBuilderMesh>(); + + //If the original selection does not have colors assigned we will select faces without colors + if (colors.Count == 0) + { + foreach (ProBuilderMesh pb in pool) + { + if (pb.colorsInternal == null) + { + List<Face> matches = new List<Face>(); + Face[] faces = pb.facesInternal; + + foreach(var face in faces) + { + matches.Add(face); + } + + if (matches.Count > 0) + { + newSelection.Add(pb.gameObject); + pb.SetSelectedFaces(matches); + } + } + } + } + else + { + foreach (ProBuilderMesh pb in pool) + { + Color[] mesh_colors = pb.colorsInternal; + + if (mesh_colors == null || mesh_colors.Length != pb.vertexCount) + continue; + + List<Face> matches = new List<Face>(); + Face[] faces = pb.facesInternal; + + for (int i = 0; i < faces.Length; i++) + { + int[] tris = faces[i].distinctIndexesInternal; + + for (int n = 0; n < tris.Length; n++) + { + if (colors.Contains((Color32)mesh_colors[tris[n]])) + { + matches.Add(faces[i]); + break; + } + } + } + + if (matches.Count > 0) + { + newSelection.Add(pb.gameObject); + pb.SetSelectedFaces(matches); + } + } + } + + Selection.objects = newSelection.ToArray(); + + ProBuilderEditor.Refresh(); + + return new ActionResult(ActionResult.Status.Success, "Select Faces with Vertex Colors"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectVertexColor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectVertexColor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..382277ab9f8cfda98332f44156e43369079f11a2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/SelectVertexColor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fdbc8889effe4c9e82971613ad25e182 +timeCreated: 1471546412 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/ShrinkSelection.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/ShrinkSelection.cs new file mode 100644 index 0000000000000000000000000000000000000000..e06d53593c6b2b0e25d8d7ab75b3351d614fcc08 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/ShrinkSelection.cs @@ -0,0 +1,118 @@ +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEngine; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEditor.ProBuilder.Actions +{ + sealed class ShrinkSelection : MenuAction + { + public override ToolbarGroup group + { + get { return ToolbarGroup.Selection; } + } + + public override Texture2D icon + { + get { return IconUtility.GetIcon("Toolbar/Selection_Shrink", IconSkin.Pro); } + } + + public override TooltipContent tooltip + { + get { return s_Tooltip; } + } + + static readonly TooltipContent s_Tooltip = new TooltipContent + ( + "Shrink Selection", + @"Removes elements on the edge of the current selection.", + keyCommandAlt, keyCommandShift, 'G' + ); + + public override SelectMode validSelectModes + { + get { return SelectMode.Vertex | SelectMode.Edge | SelectMode.Face | SelectMode.TextureFace; } + } + + public override bool enabled + { + get { return base.enabled && VerifyShrinkSelection(); } + } + + public override ActionResult DoAction() + { + var selection = MeshSelection.topInternal; + var selectionCount = MeshSelection.selectedObjectCount; + + UndoUtility.RecordSelection("Shrink Selection"); + + // find perimeter edges + int rc = 0; + for (int i = 0; i < selectionCount; i++) + { + ProBuilderMesh mesh = selection[i]; + + switch (ProBuilderEditor.selectMode) + { + case SelectMode.Edge: + { + int[] perimeter = ElementSelection.GetPerimeterEdges(mesh, mesh.selectedEdges); + mesh.SetSelectedEdges(mesh.selectedEdges.RemoveAt(perimeter)); + rc += perimeter != null ? perimeter.Length : 0; + break; + } + + case SelectMode.TextureFace: + case SelectMode.Face: + { + Face[] perimeter = ElementSelection.GetPerimeterFaces(mesh, mesh.selectedFacesInternal).ToArray(); + mesh.SetSelectedFaces(mesh.selectedFacesInternal.Except(perimeter).ToArray()); + rc += perimeter.Length; + break; + } + + case SelectMode.Vertex: + { + var universalEdges = mesh.GetSharedVertexHandleEdges(mesh.facesInternal.SelectMany(x => x.edges)).ToArray(); + int[] perimeter = ElementSelection.GetPerimeterVertices(mesh, mesh.selectedIndexesInternal, universalEdges); + mesh.SetSelectedVertices(mesh.selectedIndexesInternal.RemoveAt(perimeter)); + rc += perimeter != null ? perimeter.Length : 0; + break; + } + } + } + + ProBuilderEditor.Refresh(); + + if (rc > 0) + return new ActionResult(ActionResult.Status.Success, "Shrink Selection"); + + return new ActionResult(ActionResult.Status.Canceled, "Nothing to Shrink"); + } + + static bool VerifyShrinkSelection() + { + int sel, max; + + switch (ProBuilderEditor.selectMode) + { + case SelectMode.Face: + sel = MeshSelection.selectedFaceCount; + max = MeshSelection.totalFaceCount; + break; + + case SelectMode.Edge: + sel = MeshSelection.selectedEdgeCount; + max = MeshSelection.totalEdgeCount; + break; + + default: + sel = MeshSelection.selectedVertexCount; + max = MeshSelection.totalVertexCount; + break; + } + + return sel > 1 && sel < max; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/ShrinkSelection.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/ShrinkSelection.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..15f6c9c24e840ddc56988c55af9c1039323a66d3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/MenuActions/Selection/ShrinkSelection.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a4bb8ac278d3433ca7313bb5f90a2c52 +timeCreated: 1457452380 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/Unity.ProBuilder.Editor.asmdef b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/Unity.ProBuilder.Editor.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..d8a27719f23be40299fc745bcae6cb203a472442 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/Unity.ProBuilder.Editor.asmdef @@ -0,0 +1,20 @@ +{ + "name": "Unity.ProBuilder.Editor", + "references": [ + "Unity.ProBuilder", + "Unity.ProBuilder.AssetIdRemapUtility", + "Unity.ProBuilder.Stl", + "Unity.Settings.Editor", + "Unity.ProBuilder.Csg" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/Unity.ProBuilder.Editor.asmdef.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/Unity.ProBuilder.Editor.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..156cfbfb579bed8e1d2864984e2530deb1453b94 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Editor/Unity.ProBuilder.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 03ca3ee4acaf74592bc6d299ca86aa27 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External.meta new file mode 100644 index 0000000000000000000000000000000000000000..20c9799926e845c1939abd65b2ba547ef7f0ab36 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1e3c355429ae347938ec93b9838fb5fc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG.meta new file mode 100644 index 0000000000000000000000000000000000000000..dadb5fdc1f5e474df29bf6340d79b744a8e25bb3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 90dea883dae444c3be7d7720ffcea2b9 +folderAsset: yes +DefaultImporter: + userData: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/AssemblyInfo.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..7d40c42c26b2644b475e4bfb68f3c23c5461a9e1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/AssemblyInfo.cs @@ -0,0 +1,4 @@ +using System.Runtime.CompilerServices; + +[assembly:InternalsVisibleTo("Unity.ProBuilder")] +[assembly:InternalsVisibleTo("Unity.ProBuilder.Editor")] diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/AssemblyInfo.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/AssemblyInfo.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..335475d26ffcae76bd5417305a678c9050041212 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 90c015bd1316c423b9aad70704f602ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/CSG.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/CSG.cs new file mode 100644 index 0000000000000000000000000000000000000000..7d92876c658297eabfd20bf427b55cc40e685d77 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/CSG.cs @@ -0,0 +1,87 @@ +// Original CSG.JS library by Evan Wallace (http://madebyevan.com), under the MIT license. +// GitHub: https://github.com/evanw/csg.js/ +// +// C++ port by Tomasz Dabrowski (http://28byteslater.com), under the MIT license. +// GitHub: https://github.com/dabroz/csgjs-cpp/ +// +// C# port by Karl Henkel (parabox.co), under MIT license. +// +// Constructive Solid Geometry (CSG) is a modeling technique that uses Boolean +// operations like union and intersection to combine 3D solids. This library +// implements CSG operations on meshes elegantly and concisely using BSP trees, +// and is meant to serve as an easily understandable implementation of the +// algorithm. All edge cases involving overlapping coplanar polygons in both +// solids are correctly handled. + +using UnityEngine; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.Csg +{ + /// <summary> + /// Base class for CSG operations. Contains GameObject level methods for Subtraction, Intersection, and Union operations. + /// The GameObjects passed to these functions will not be modified. + /// </summary> + static class Boolean + { + // Tolerance used by `splitPolygon()` to decide if a point is on the plane. + internal const float k_Epsilon = 0.00001f; + + /// <summary> + /// Returns a new mesh by merging @lhs with @rhs. + /// </summary> + /// <param name="lhs">The base mesh of the boolean operation.</param> + /// <param name="rhs">The input mesh of the boolean operation.</param> + /// <returns>A new mesh if the operation succeeds, or null if an error occurs.</returns> + public static Model Union(GameObject lhs, GameObject rhs) + { + Model csg_model_a = new Model(lhs); + Model csg_model_b = new Model(rhs); + + Node a = new Node(csg_model_a.ToPolygons()); + Node b = new Node(csg_model_b.ToPolygons()); + + List<Polygon> polygons = Node.Union(a, b).AllPolygons(); + + return new Model(polygons); + } + + /// <summary> + /// Returns a new mesh by subtracting @lhs with @rhs. + /// </summary> + /// <param name="lhs">The base mesh of the boolean operation.</param> + /// <param name="rhs">The input mesh of the boolean operation.</param> + /// <returns>A new mesh if the operation succeeds, or null if an error occurs.</returns> + public static Model Subtract(GameObject lhs, GameObject rhs) + { + Model csg_model_a = new Model(lhs); + Model csg_model_b = new Model(rhs); + + Node a = new Node(csg_model_a.ToPolygons()); + Node b = new Node(csg_model_b.ToPolygons()); + + List<Polygon> polygons = Node.Subtract(a, b).AllPolygons(); + + return new Model(polygons); + } + + /// <summary> + /// Returns a new mesh by intersecting @lhs with @rhs. + /// </summary> + /// <param name="lhs">The base mesh of the boolean operation.</param> + /// <param name="rhs">The input mesh of the boolean operation.</param> + /// <returns>A new mesh if the operation succeeds, or null if an error occurs.</returns> + public static Model Intersect(GameObject lhs, GameObject rhs) + { + Model csg_model_a = new Model(lhs); + Model csg_model_b = new Model(rhs); + + Node a = new Node(csg_model_a.ToPolygons()); + Node b = new Node(csg_model_b.ToPolygons()); + + List<Polygon> polygons = Node.Intersect(a, b).AllPolygons(); + + return new Model(polygons); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/CSG.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/CSG.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4d2f5c2fc7ed6798e9e9391850a83e98fb397bb2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/CSG.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 136c7ff4a0ec419280b8df0d260180d0 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes.meta new file mode 100644 index 0000000000000000000000000000000000000000..2e4af21378c81aa29689dc6b079f04dae363e8f8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 291cedf2747a43b19e37963cf9100589 +folderAsset: yes +DefaultImporter: + userData: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Model.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Model.cs new file mode 100644 index 0000000000000000000000000000000000000000..6ac5bfd760caf5e211c8bf75857a9447ede71e55 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Model.cs @@ -0,0 +1,145 @@ +using System; +using UnityEngine; +using System.Collections.Generic; +using System.Linq; + +namespace UnityEngine.ProBuilder.Csg +{ + /// <summary> + /// Representation of a mesh in CSG terms. Contains methods for translating to and from UnityEngine.Mesh. + /// </summary> + sealed class Model + { + List<Vertex> m_Vertices; + List<Material> m_Materials; + List<List<int>> m_Indices; + + public List<Material> materials + { + get { return m_Materials; } + set { m_Materials = value; } + } + + public List<Vertex> vertices + { + get { return m_Vertices; } + set { m_Vertices = value; } + } + + public List<List<int>> indices + { + get { return m_Indices; } + set { m_Indices = value; } + } + + public Mesh mesh + { + get { return (Mesh)this; } + } + + public Model(GameObject gameObject) : + this(gameObject.GetComponent<MeshFilter>()?.sharedMesh, + gameObject.GetComponent<MeshRenderer>()?.sharedMaterials, + gameObject.GetComponent<Transform>()) + { + } + + /// <summary> + /// Initialize a Model from a UnityEngine.Mesh and transform. + /// </summary> + public Model(Mesh mesh, Material[] materials, Transform transform) + { + if(mesh == null) + throw new ArgumentNullException("mesh"); + + if(transform == null) + throw new ArgumentNullException("transform"); + + m_Vertices = VertexUtility.GetVertices(mesh).Select(x => transform.TransformVertex(x)).ToList(); + m_Materials = new List<Material>(materials); + m_Indices = new List<List<int>>(); + + for (int i = 0, c = mesh.subMeshCount; i < c; i++) + { + if (mesh.GetTopology(i) != MeshTopology.Triangles) + continue; + var indices = new List<int>(); + mesh.GetIndices(indices, i); + m_Indices.Add(indices); + } + } + + internal Model(List<Polygon> polygons) + { + m_Vertices = new List<Vertex>(); + Dictionary<Material, List<int>> submeshes = new Dictionary<Material, List<int>>(); + + int p = 0; + + for (int i = 0; i < polygons.Count; i++) + { + Polygon poly = polygons[i]; + List<int> indices; + + if (!submeshes.TryGetValue(poly.material, out indices)) + submeshes.Add(poly.material, indices = new List<int>()); + + for (int j = 2; j < poly.vertices.Count; j++) + { + m_Vertices.Add(poly.vertices[0]); + indices.Add(p++); + + m_Vertices.Add(poly.vertices[j - 1]); + indices.Add(p++); + + m_Vertices.Add(poly.vertices[j]); + indices.Add(p++); + } + } + + m_Materials = submeshes.Keys.ToList(); + m_Indices = submeshes.Values.ToList(); + } + + internal List<Polygon> ToPolygons() + { + List<Polygon> list = new List<Polygon>(); + + for (int s = 0, c = m_Indices.Count; s < c; s++) + { + var indices = m_Indices[s]; + + for (int i = 0, ic = indices.Count; i < indices.Count; i += 3) + { + List<Vertex> triangle = new List<Vertex>() + { + m_Vertices[indices[i + 0]], + m_Vertices[indices[i + 1]], + m_Vertices[indices[i + 2]] + }; + + list.Add(new Polygon(triangle, m_Materials[s])); + } + } + + return list; + } + + public static explicit operator Mesh(Model model) + { + var mesh = new Mesh(); + VertexUtility.SetMesh(mesh, model.m_Vertices); + mesh.subMeshCount = model.m_Indices.Count; + for (int i = 0, c = mesh.subMeshCount; i < c; i++) + { +#if UNITY_2019_3_OR_NEWER + mesh.SetIndices(model.m_Indices[i], MeshTopology.Triangles, i); +#else + mesh.SetIndices(model.m_Indices[i].ToArray(), MeshTopology.Triangles, i); +#endif + } + + return mesh; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Model.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Model.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c7bf523d52e8015d4b3adc00915d204fce66082b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Model.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 14789abc21c8f4551995149f67010e23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Node.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Node.cs new file mode 100644 index 0000000000000000000000000000000000000000..a824a6b970a1c5f9a2ecb2ac8c4abaa3acea4086 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Node.cs @@ -0,0 +1,254 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.Csg +{ + sealed class Node + { + public List<Polygon> polygons; + + public Node front; /// Reference to front node. + public Node back; /// Reference to front node. + + public Plane plane; + + public Node() + { + this.front = null; + this.back = null; + } + + public Node(List<Polygon> list) + { + Build(list); + + // this.front = null; + // this.back = null; + } + + public Node(List<Polygon> list, Plane plane, Node front, Node back) + { + this.polygons = list; + this.plane = plane; + this.front = front; + this.back = back; + } + + public Node Clone() + { + Node clone = new Node(this.polygons, this.plane, this.front, this.back); + + return clone; + } + + // Remove all polygons in this BSP tree that are inside the other BSP tree + // `bsp`. + public void ClipTo(Node other) + { + this.polygons = other.ClipPolygons(this.polygons); + + if (this.front != null) + { + this.front.ClipTo(other); + } + + if (this.back != null) + { + this.back.ClipTo(other); + } + } + + // Convert solid space to empty space and empty space to solid space. + public void Invert() + { + for (int i = 0; i < this.polygons.Count; i++) + this.polygons[i].Flip(); + + this.plane.Flip(); + + if (this.front != null) + { + this.front.Invert(); + } + + if (this.back != null) + { + this.back.Invert(); + } + + Node tmp = this.front; + this.front = this.back; + this.back = tmp; + } + + // Build a BSP tree out of `polygons`. When called on an existing tree, the + // new polygons are filtered down to the bottom of the tree and become new + // nodes there. Each set of polygons is partitioned using the first polygon + // (no heuristic is used to pick a good split). + public void Build(List<Polygon> list) + { + if (list.Count < 1) + return; + + if (this.plane == null || !this.plane.Valid()) + { + this.plane = new Plane(); + this.plane.normal = list[0].plane.normal; + this.plane.w = list[0].plane.w; + } + + + if (this.polygons == null) + this.polygons = new List<Polygon>(); + + List<Polygon> list_front = new List<Polygon>(); + List<Polygon> list_back = new List<Polygon>(); + + for (int i = 0; i < list.Count; i++) + { + this.plane.SplitPolygon(list[i], this.polygons, this.polygons, list_front, list_back); + } + + if (list_front.Count > 0) + { + if (this.front == null) + this.front = new Node(); + + this.front.Build(list_front); + } + + if (list_back.Count > 0) + { + if (this.back == null) + this.back = new Node(); + + this.back.Build(list_back); + } + } + + // Recursively remove all polygons in `polygons` that are inside this BSP + // tree. + public List<Polygon> ClipPolygons(List<Polygon> list) + { + if (!this.plane.Valid()) + { + return list; + } + + List<Polygon> list_front = new List<Polygon>(); + List<Polygon> list_back = new List<Polygon>(); + + for (int i = 0; i < list.Count; i++) + { + this.plane.SplitPolygon(list[i], list_front, list_back, list_front, list_back); + } + + if (this.front != null) + { + list_front = this.front.ClipPolygons(list_front); + } + + if (this.back != null) + { + list_back = this.back.ClipPolygons(list_back); + } + else + { + list_back.Clear(); + } + + // Position [First, Last] + // list_front.insert(list_front.end(), list_back.begin(), list_back.end()); + list_front.AddRange(list_back); + + return list_front; + } + + // Return a list of all polygons in this BSP tree. + public List<Polygon> AllPolygons() + { + List<Polygon> list = this.polygons; + List<Polygon> list_front = new List<Polygon>(), list_back = new List<Polygon>(); + + if (this.front != null) + { + list_front = this.front.AllPolygons(); + } + + if (this.back != null) + { + list_back = this.back.AllPolygons(); + } + + list.AddRange(list_front); + list.AddRange(list_back); + + return list; + } + + #region STATIC OPERATIONS + + // Return a new CSG solid representing space in either this solid or in the + // solid `csg`. Neither this solid nor the solid `csg` are modified. + public static Node Union(Node a1, Node b1) + { + Node a = a1.Clone(); + Node b = b1.Clone(); + + a.ClipTo(b); + b.ClipTo(a); + b.Invert(); + b.ClipTo(a); + b.Invert(); + + a.Build(b.AllPolygons()); + + Node ret = new Node(a.AllPolygons()); + + return ret; + } + + // Return a new CSG solid representing space in this solid but not in the + // solid `csg`. Neither this solid nor the solid `csg` are modified. + public static Node Subtract(Node a1, Node b1) + { + Node a = a1.Clone(); + Node b = b1.Clone(); + + a.Invert(); + a.ClipTo(b); + b.ClipTo(a); + b.Invert(); + b.ClipTo(a); + b.Invert(); + a.Build(b.AllPolygons()); + a.Invert(); + + Node ret = new Node(a.AllPolygons()); + + return ret; + } + + // Return a new CSG solid representing space both this solid and in the + // solid `csg`. Neither this solid nor the solid `csg` are modified. + public static Node Intersect(Node a1, Node b1) + { + Node a = a1.Clone(); + Node b = b1.Clone(); + + a.Invert(); + b.ClipTo(a); + b.Invert(); + a.ClipTo(b); + b.ClipTo(a); + a.Build(b.AllPolygons()); + a.Invert(); + + Node ret = new Node(a.AllPolygons()); + + return ret; + } + + #endregion + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Node.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Node.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b7b015262c2edfd0aa8b06fe10374586227d52c4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Node.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b6fe112f5d10423ab960f97d7b6e699 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Plane.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Plane.cs new file mode 100644 index 0000000000000000000000000000000000000000..58aba72723037f53e95fa8ddddf875914ed076a4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Plane.cs @@ -0,0 +1,139 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.Csg +{ + /// <summary> + /// Represents a plane in 3d space. + /// <remarks>Does not include position.</remarks> + /// </summary> + sealed class Plane + { + public Vector3 normal; + public float w; + + [System.Flags] + enum EPolygonType + { + Coplanar = 0, + Front = 1, + Back = 2, + Spanning = 3 /// 3 is Front | Back - not a separate entry + }; + + public Plane() + { + normal = Vector3.zero; + w = 0f; + } + + public Plane(Vector3 a, Vector3 b, Vector3 c) + { + normal = Vector3.Cross(b - a, c - a);//.normalized; + w = Vector3.Dot(normal, a); + } + + public bool Valid() + { + return normal.magnitude > 0f; + } + + public void Flip() + { + normal *= -1f; + w *= -1f; + } + + // Split `polygon` by this plane if needed, then put the polygon or polygon + // fragments in the appropriate lists. Coplanar polygons go into either + // `coplanarFront` or `coplanarBack` depending on their orientation with + // respect to this plane. Polygons in front or in back of this plane go into + // either `front` or `back`. + public void SplitPolygon(Polygon polygon, List<Polygon> coplanarFront, List<Polygon> coplanarBack, List<Polygon> front, List<Polygon> back) + { + // Classify each point as well as the entire polygon into one of the above + // four classes. + EPolygonType polygonType = 0; + List<EPolygonType> types = new List<EPolygonType>(); + + for (int i = 0; i < polygon.vertices.Count; i++) + { + float t = Vector3.Dot(this.normal, polygon.vertices[i].position) - this.w; + EPolygonType type = (t < -Boolean.k_Epsilon) ? EPolygonType.Back : ((t > Boolean.k_Epsilon) ? EPolygonType.Front : EPolygonType.Coplanar); + polygonType |= type; + types.Add(type); + } + + // Put the polygon in the correct list, splitting it when necessary. + switch (polygonType) + { + case EPolygonType.Coplanar: + { + if (Vector3.Dot(this.normal, polygon.plane.normal) > 0) + coplanarFront.Add(polygon); + else + coplanarBack.Add(polygon); + } + break; + + case EPolygonType.Front: + { + front.Add(polygon); + } + break; + + case EPolygonType.Back: + { + back.Add(polygon); + } + break; + + case EPolygonType.Spanning: + { + List<Vertex> f = new List<Vertex>(); + List<Vertex> b = new List<Vertex>(); + + for (int i = 0; i < polygon.vertices.Count; i++) + { + int j = (i + 1) % polygon.vertices.Count; + + EPolygonType ti = types[i], tj = types[j]; + + Vertex vi = polygon.vertices[i], vj = polygon.vertices[j]; + + if (ti != EPolygonType.Back) + { + f.Add(vi); + } + + if (ti != EPolygonType.Front) + { + b.Add(vi); + } + + if ((ti | tj) == EPolygonType.Spanning) + { + float t = (this.w - Vector3.Dot(this.normal, vi.position)) / Vector3.Dot(this.normal, vj.position - vi.position); + + Vertex v = VertexUtility.Mix(vi, vj, t); + + f.Add(v); + b.Add(v); + } + } + + if (f.Count >= 3) + { + front.Add(new Polygon(f, polygon.material)); + } + + if (b.Count >= 3) + { + back.Add(new Polygon(b, polygon.material)); + } + } + break; + } // End switch(polygonType) + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Plane.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Plane.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a2c34631f0bddf3ec5c0a06c00dc09e3dab720ba --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Plane.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2665d2fb2b90b4916bfb3868cda99ea3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Polygon.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Polygon.cs new file mode 100644 index 0000000000000000000000000000000000000000..2a4e74ec95dcb63071c66344b92a62e9861e1e9e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Polygon.cs @@ -0,0 +1,37 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.Csg +{ + /// <summary> + /// Represents a polygon face with an arbitrary number of vertices. + /// </summary> + sealed class Polygon + { + public List<Vertex> vertices; + public Plane plane; + public Material material; + + public Polygon(List<Vertex> list, Material mat) + { + vertices = list; + plane = new Plane(list[0].position, list[1].position, list[2].position); + material = mat; + } + + public void Flip() + { + vertices.Reverse(); + + for (int i = 0; i < vertices.Count; i++) + vertices[i].Flip(); + + plane.Flip(); + } + + public override string ToString() + { + return "normal: " + plane.normal; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Polygon.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Polygon.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..29ad037584cffa7fe5ae129430ff7237167b14f4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Polygon.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 52ebe52d390074084bebc0878e3f74b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Vertex.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Vertex.cs new file mode 100644 index 0000000000000000000000000000000000000000..a33de591b6f6263eefd2bbcfaf9b6eb2294d0f3b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Vertex.cs @@ -0,0 +1,193 @@ +using System; +using UnityEngine; + +namespace UnityEngine.ProBuilder.Csg +{ + /// <summary> + /// Holds information about a single vertex, and provides methods for averaging between many. + /// <remarks>All values are optional. Where not present a default value will be substituted if necessary.</remarks> + /// </summary> + struct Vertex + { + Vector3 m_Position; + Color m_Color; + Vector3 m_Normal; + Vector4 m_Tangent; + Vector2 m_UV0; + Vector2 m_UV2; + Vector4 m_UV3; + Vector4 m_UV4; + VertexAttributes m_Attributes; + + /// <value> + /// The position in model space. + /// </value> + public Vector3 position + { + get { return m_Position; } + set + { + hasPosition = true; + m_Position = value; + } + } + + /// <value> + /// Vertex color. + /// </value> + public Color color + { + get { return m_Color; } + set + { + hasColor = true; + m_Color = value; + } + } + + /// <value> + /// Unit vector normal. + /// </value> + public Vector3 normal + { + get { return m_Normal; } + set + { + hasNormal = true; + m_Normal = value; + } + } + + /// <value> + /// Vertex tangent (sometimes called binormal). + /// </value> + public Vector4 tangent + { + get { return m_Tangent; } + set + { + hasTangent = true; + m_Tangent = value; + } + } + + /// <value> + /// UV 0 channel. Also called textures. + /// </value> + public Vector2 uv0 + { + get { return m_UV0; } + set + { + hasUV0 = true; + m_UV0 = value; + } + } + + /// <value> + /// UV 2 channel. + /// </value> + public Vector2 uv2 + { + get { return m_UV2; } + set + { + hasUV2 = true; + m_UV2 = value; + } + } + + /// <value> + /// UV 3 channel. + /// </value> + public Vector4 uv3 + { + get { return m_UV3; } + set + { + hasUV3 = true; + m_UV3 = value; + } + } + + /// <value> + /// UV 4 channel. + /// </value> + public Vector4 uv4 + { + get { return m_UV4; } + set + { + hasUV4 = true; + m_UV4 = value; + } + } + + /// <summary> + /// Find if a vertex attribute has been set. + /// </summary> + /// <param name="attribute">The attribute or attributes to test for.</param> + /// <returns>True if this vertex has the specified attributes set, false if they are default values.</returns> + public bool HasArrays(VertexAttributes attribute) + { + return (m_Attributes & attribute) == attribute; + } + + public bool hasPosition + { + get { return (m_Attributes & VertexAttributes.Position) == VertexAttributes.Position; } + private set { m_Attributes = value ? (m_Attributes | VertexAttributes.Position) : (m_Attributes & ~(VertexAttributes.Position)); } + } + + public bool hasColor + { + get { return (m_Attributes & VertexAttributes.Color) == VertexAttributes.Color; } + private set { m_Attributes = value ? (m_Attributes | VertexAttributes.Color) : (m_Attributes & ~(VertexAttributes.Color)); } + } + + public bool hasNormal + { + get { return (m_Attributes & VertexAttributes.Normal) == VertexAttributes.Normal; } + private set { m_Attributes = value ? (m_Attributes | VertexAttributes.Normal) : (m_Attributes & ~(VertexAttributes.Normal)); } + } + + public bool hasTangent + { + get { return (m_Attributes & VertexAttributes.Tangent) == VertexAttributes.Tangent; } + private set { m_Attributes = value ? (m_Attributes | VertexAttributes.Tangent) : (m_Attributes & ~(VertexAttributes.Tangent)); } + } + + public bool hasUV0 + { + get { return (m_Attributes & VertexAttributes.Texture0) == VertexAttributes.Texture0; } + private set { m_Attributes = value ? (m_Attributes | VertexAttributes.Texture0) : (m_Attributes & ~(VertexAttributes.Texture0)); } + } + + public bool hasUV2 + { + get { return (m_Attributes & VertexAttributes.Texture1) == VertexAttributes.Texture1; } + private set { m_Attributes = value ? (m_Attributes | VertexAttributes.Texture1) : (m_Attributes & ~(VertexAttributes.Texture1)); } + } + + public bool hasUV3 + { + get { return (m_Attributes & VertexAttributes.Texture2) == VertexAttributes.Texture2; } + private set { m_Attributes = value ? (m_Attributes | VertexAttributes.Texture2) : (m_Attributes & ~(VertexAttributes.Texture2)); } + } + + public bool hasUV4 + { + get { return (m_Attributes & VertexAttributes.Texture3) == VertexAttributes.Texture3; } + private set { m_Attributes = value ? (m_Attributes | VertexAttributes.Texture3) : (m_Attributes & ~(VertexAttributes.Texture3)); } + } + + public void Flip() + { + if(hasNormal) + m_Normal *= -1f; + + if (hasTangent) + m_Tangent *= -1f; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Vertex.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Vertex.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9664d98d21053402957f3b8774e45dd1cd396937 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/Vertex.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eace57ffc03f348e48d541e3ac67ae90 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/VertexAttributes.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/VertexAttributes.cs new file mode 100644 index 0000000000000000000000000000000000000000..682028cb5fda66ce59c212ef443779a718e960b1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/VertexAttributes.cs @@ -0,0 +1,50 @@ +namespace UnityEngine.ProBuilder.Csg +{ + /// <summary> + /// Mesh attributes bitmask. + /// </summary> + [System.Flags] + enum VertexAttributes + { + /// <summary> + /// Vertex positions. + /// </summary> + Position = 0x1, + /// <summary> + /// First UV channel. + /// </summary> + Texture0 = 0x2, + /// <summary> + /// Second UV channel. Commonly called UV2 or Lightmap UVs in Unity terms. + /// </summary> + Texture1 = 0x4, + /// <summary> + /// Second UV channel. Commonly called UV2 or Lightmap UVs in Unity terms. + /// </summary> + Lightmap = 0x4, + /// <summary> + /// Third UV channel. + /// </summary> + Texture2 = 0x8, + /// <summary> + /// Vertex UV4. + /// </summary> + Texture3 = 0x10, + /// <summary> + /// Vertex colors. + /// </summary> + Color = 0x20, + /// <summary> + /// Vertex normals. + /// </summary> + Normal = 0x40, + /// <summary> + /// Vertex tangents. + /// </summary> + Tangent = 0x80, + /// <summary> + /// All stored mesh attributes. + /// </summary> + All = 0xFF + }; +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/VertexAttributes.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/VertexAttributes.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..00735138a199c95a1bed9f0c0ba1de696f0fc87f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/VertexAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7aeb98aaff5054383b10b45f4518f968 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/VertexUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/VertexUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..38e977530e63c1356db3cc4db67c150d72667407 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/VertexUtility.cs @@ -0,0 +1,329 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace UnityEngine.ProBuilder.Csg +{ + static class VertexUtility + { + /// <summary> + /// Allocate and fill all attribute arrays. This method will fill all arrays, regardless of whether or not real data populates the values (check what attributes a Vertex contains with HasAttribute()). + /// </summary> + /// <remarks> + /// If you are using this function to rebuild a mesh, use SetMesh instead. SetMesh handles setting null arrays where appropriate for you. + /// </remarks> + /// <seealso cref="SetMesh"/> + /// <param name="vertices">The source vertices.</param> + /// <param name="position">A new array of the vertex position values.</param> + /// <param name="color">A new array of the vertex color values.</param> + /// <param name="uv0">A new array of the vertex uv0 values.</param> + /// <param name="normal">A new array of the vertex normal values.</param> + /// <param name="tangent">A new array of the vertex tangent values.</param> + /// <param name="uv2">A new array of the vertex uv2 values.</param> + /// <param name="uv3">A new array of the vertex uv3 values.</param> + /// <param name="uv4">A new array of the vertex uv4 values.</param> + public static void GetArrays( + IList<Vertex> vertices, + out Vector3[] position, + out Color[] color, + out Vector2[] uv0, + out Vector3[] normal, + out Vector4[] tangent, + out Vector2[] uv2, + out List<Vector4> uv3, + out List<Vector4> uv4) + { + GetArrays(vertices, out position, out color, out uv0, out normal, out tangent, out uv2, out uv3, out uv4, VertexAttributes.All); + } + + /// <summary> + /// Allocate and fill the requested attribute arrays. + /// </summary> + /// <remarks> + /// If you are using this function to rebuild a mesh, use SetMesh instead. SetMesh handles setting null arrays where appropriate for you. + /// </remarks> + /// <seealso cref="SetMesh"/> + /// <param name="vertices">The source vertices.</param> + /// <param name="position">A new array of the vertex position values if requested by the attributes parameter, or null.</param> + /// <param name="color">A new array of the vertex color values if requested by the attributes parameter, or null.</param> + /// <param name="uv0">A new array of the vertex uv0 values if requested by the attributes parameter, or null.</param> + /// <param name="normal">A new array of the vertex normal values if requested by the attributes parameter, or null.</param> + /// <param name="tangent">A new array of the vertex tangent values if requested by the attributes parameter, or null.</param> + /// <param name="uv2">A new array of the vertex uv2 values if requested by the attributes parameter, or null.</param> + /// <param name="uv3">A new array of the vertex uv3 values if requested by the attributes parameter, or null.</param> + /// <param name="uv4">A new array of the vertex uv4 values if requested by the attributes parameter, or null.</param> + /// <param name="attributes">A flag with the MeshAttributes requested.</param> + /// <seealso cref="HasArrays"/> + public static void GetArrays( + IList<Vertex> vertices, + out Vector3[] position, + out Color[] color, + out Vector2[] uv0, + out Vector3[] normal, + out Vector4[] tangent, + out Vector2[] uv2, + out List<Vector4> uv3, + out List<Vector4> uv4, + VertexAttributes attributes) + { + if (vertices == null) + throw new ArgumentNullException("vertices"); + + int vc = vertices.Count; + var first = vc < 1 ? new Vertex() : vertices[0]; + + bool hasPosition = ((attributes & VertexAttributes.Position) == VertexAttributes.Position) && first.hasPosition; + bool hasColor = ((attributes & VertexAttributes.Color) == VertexAttributes.Color) && first.hasColor; + bool hasUv0 = ((attributes & VertexAttributes.Texture0) == VertexAttributes.Texture0) && first.hasUV0; + bool hasNormal = ((attributes & VertexAttributes.Normal) == VertexAttributes.Normal) && first.hasNormal; + bool hasTangent = ((attributes & VertexAttributes.Tangent) == VertexAttributes.Tangent) && first.hasTangent; + bool hasUv2 = ((attributes & VertexAttributes.Texture1) == VertexAttributes.Texture1) && first.hasUV2; + bool hasUv3 = ((attributes & VertexAttributes.Texture2) == VertexAttributes.Texture2) && first.hasUV3; + bool hasUv4 = ((attributes & VertexAttributes.Texture3) == VertexAttributes.Texture3) && first.hasUV4; + + position = hasPosition ? new Vector3[vc] : null; + color = hasColor ? new Color[vc] : null; + uv0 = hasUv0 ? new Vector2[vc] : null; + normal = hasNormal ? new Vector3[vc] : null; + tangent = hasTangent ? new Vector4[vc] : null; + uv2 = hasUv2 ? new Vector2[vc] : null; + uv3 = hasUv3 ? new List<Vector4>(vc) : null; + uv4 = hasUv4 ? new List<Vector4>(vc) : null; + + for (int i = 0; i < vc; i++) + { + if (hasPosition) + position[i] = vertices[i].position; + if (hasColor) + color[i] = vertices[i].color; + if (hasUv0) + uv0[i] = vertices[i].uv0; + if (hasNormal) + normal[i] = vertices[i].normal; + if (hasTangent) + tangent[i] = vertices[i].tangent; + if (hasUv2) + uv2[i] = vertices[i].uv2; + if (hasUv3) + uv3.Add(vertices[i].uv3); + if (hasUv4) + uv4.Add(vertices[i].uv4); + } + } + + public static Vertex[] GetVertices(this Mesh mesh) + { + if (mesh == null) + return null; + + int vertexCount = mesh.vertexCount; + Vertex[] v = new Vertex[vertexCount]; + + Vector3[] positions = mesh.vertices; + Color[] colors = mesh.colors; + Vector3[] normals = mesh.normals; + Vector4[] tangents = mesh.tangents; + Vector2[] uv0s = mesh.uv; + Vector2[] uv2s = mesh.uv2; + List<Vector4> uv3s = new List<Vector4>(); + List<Vector4> uv4s = new List<Vector4>(); + mesh.GetUVs(2, uv3s); + mesh.GetUVs(3, uv4s); + + bool _hasPositions = positions != null && positions.Length == vertexCount; + bool _hasColors = colors != null && colors.Length == vertexCount; + bool _hasNormals = normals != null && normals.Length == vertexCount; + bool _hasTangents = tangents != null && tangents.Length == vertexCount; + bool _hasUv0 = uv0s != null && uv0s.Length == vertexCount; + bool _hasUv2 = uv2s != null && uv2s.Length == vertexCount; + bool _hasUv3 = uv3s.Count == vertexCount; + bool _hasUv4 = uv4s.Count == vertexCount; + + for (int i = 0; i < vertexCount; i++) + { + v[i] = new Vertex(); + + if (_hasPositions) + v[i].position = positions[i]; + + if (_hasColors) + v[i].color = colors[i]; + + if (_hasNormals) + v[i].normal = normals[i]; + + if (_hasTangents) + v[i].tangent = tangents[i]; + + if (_hasUv0) + v[i].uv0 = uv0s[i]; + + if (_hasUv2) + v[i].uv2 = uv2s[i]; + + if (_hasUv3) + v[i].uv3 = uv3s[i]; + + if (_hasUv4) + v[i].uv4 = uv4s[i]; + } + + return v; + } + + /// <summary> + /// Replace mesh values with vertex array. Mesh is cleared during this function, so be sure to set the triangles after calling. + /// </summary> + /// <param name="mesh">The target mesh.</param> + /// <param name="vertices">The vertices to replace the mesh attributes with.</param> + public static void SetMesh(Mesh mesh, IList<Vertex> vertices) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (vertices == null) + throw new ArgumentNullException("vertices"); + + Vector3[] positions = null; + Color[] colors = null; + Vector2[] uv0s = null; + Vector3[] normals = null; + Vector4[] tangents = null; + Vector2[] uv2s = null; + List<Vector4> uv3s = null; + List<Vector4> uv4s = null; + + GetArrays(vertices, out positions, + out colors, + out uv0s, + out normals, + out tangents, + out uv2s, + out uv3s, + out uv4s); + + mesh.Clear(); + + Vertex first = vertices[0]; + + if (first.hasPosition) mesh.vertices = positions; + if (first.hasColor) mesh.colors = colors; + if (first.hasUV0) mesh.uv = uv0s; + if (first.hasNormal) mesh.normals = normals; + if (first.hasTangent) mesh.tangents = tangents; + if (first.hasUV2) mesh.uv2 = uv2s; +#if !UNITY_4_7 && !UNITY_5_0 + if (first.hasUV3) + if (uv3s != null) + mesh.SetUVs(2, uv3s); + if (first.hasUV4) + if (uv4s != null) + mesh.SetUVs(3, uv4s); +#endif + } + + /// <summary> + /// Linearly interpolate between two vertices. + /// </summary> + /// <param name="x">Left parameter.</param> + /// <param name="y">Right parameter.</param> + /// <param name="weight">The weight of the interpolation. 0 is fully x, 1 is fully y.</param> + /// <returns>A new vertex interpolated by weight between x and y.</returns> + public static Vertex Mix(this Vertex x, Vertex y, float weight) + { + float i = 1f - weight; + + Vertex v = new Vertex(); + + v.position = x.position * i + y.position * weight; + + if (x.hasColor && y.hasColor) + v.color = x.color * i + y.color * weight; + else if (x.hasColor) + v.color = x.color; + else if (y.hasColor) + v.color = y.color; + + if (x.hasNormal && y.hasNormal) + v.normal = x.normal * i + y.normal * weight; + else if (x.hasNormal) + v.normal = x.normal; + else if (y.hasNormal) + v.normal = y.normal; + + if (x.hasTangent && y.hasTangent) + v.tangent = x.tangent * i + y.tangent * weight; + else if (x.hasTangent) + v.tangent = x.tangent; + else if (y.hasTangent) + v.tangent = y.tangent; + + if (x.hasUV0 && y.hasUV0) + v.uv0 = x.uv0 * i + y.uv0 * weight; + else if (x.hasUV0) + v.uv0 = x.uv0; + else if (y.hasUV0) + v.uv0 = y.uv0; + + if (x.hasUV2 && y.hasUV2) + v.uv2 = x.uv2 * i + y.uv2 * weight; + else if (x.hasUV2) + v.uv2 = x.uv2; + else if (y.hasUV2) + v.uv2 = y.uv2; + + if (x.hasUV3 && y.hasUV3) + v.uv3 = x.uv3 * i + y.uv3 * weight; + else if (x.hasUV3) + v.uv3 = x.uv3; + else if (y.hasUV3) + v.uv3 = y.uv3; + + if (x.hasUV4 && y.hasUV4) + v.uv4 = x.uv4 * i + y.uv4 * weight; + else if (x.hasUV4) + v.uv4 = x.uv4; + else if (y.hasUV4) + v.uv4 = y.uv4; + + return v; + } + + /// <summary> + /// Transform a vertex into world space. + /// </summary> + /// <param name="transform">The transform to apply.</param> + /// <param name="vertex">A model space vertex.</param> + /// <returns>A new vertex in world coordinate space.</returns> + public static Vertex TransformVertex(this Transform transform, Vertex vertex) + { + var v = new Vertex(); + + if (vertex.HasArrays(VertexAttributes.Position)) + v.position = transform.TransformPoint(vertex.position); + + if (vertex.HasArrays(VertexAttributes.Color)) + v.color = vertex.color; + + if (vertex.HasArrays(VertexAttributes.Normal)) + v.normal = transform.TransformDirection(vertex.normal); + + if (vertex.HasArrays(VertexAttributes.Tangent)) + v.tangent = transform.rotation * vertex.tangent; + + if (vertex.HasArrays(VertexAttributes.Texture0)) + v.uv0 = vertex.uv0; + + if (vertex.HasArrays(VertexAttributes.Texture1)) + v.uv2 = vertex.uv2; + + if (vertex.HasArrays(VertexAttributes.Texture2)) + v.uv3 = vertex.uv3; + + if (vertex.HasArrays(VertexAttributes.Texture3)) + v.uv4 = vertex.uv4; + + return v; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/VertexUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/VertexUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c6da20e9fb699cd2c76b6284c7dd82c20cdcbc01 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Classes/VertexUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a629cb73b331b40449fd411043caf7d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Unity.ProBuilder.Csg.asmdef b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Unity.ProBuilder.Csg.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..1ed451c523e9c37fa8be8c6fb12893580f1a7348 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Unity.ProBuilder.Csg.asmdef @@ -0,0 +1,12 @@ +{ + "name": "Unity.ProBuilder.Csg", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": false, + "defineConstraints": [] +} \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Unity.ProBuilder.Csg.asmdef.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Unity.ProBuilder.Csg.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..b1ffa50f2b95130a9389a5f61aabfead53078d91 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/CSG/Unity.ProBuilder.Csg.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 26434c0544da24d83a23c99deaa60965 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree.meta new file mode 100644 index 0000000000000000000000000000000000000000..fb2a1667dd2414f5d359521f9ef1cca9c2e81bc2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7359b607dba860d49ad70ac04d648943 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib.meta new file mode 100644 index 0000000000000000000000000000000000000000..507c4cceb37e93e944953bd61b1350b7a0c1a9c8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7f90db759702e5046be95dd90d35ba28 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/AssemblyInfo.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..328338fd3bfb3c885f44f74dce68b089b5e2d611 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Unity.ProBuilder")] diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/AssemblyInfo.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/AssemblyInfo.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e3d34026248a3994450c20c6ffcc28b1f61e4d96 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb4dcd11679b340ee8a7afb51cb0ccfc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/HyperRect.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/HyperRect.cs new file mode 100644 index 0000000000000000000000000000000000000000..2b4f4393994b6726772194229414e98879697668 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/HyperRect.cs @@ -0,0 +1,79 @@ +namespace UnityEngine.ProBuilder.KdTree +{ + struct HyperRect<T> + { + private T[] minPoint; + public T[] MinPoint + { + get + { + return minPoint; + } + set + { + minPoint = new T[value.Length]; + value.CopyTo(minPoint, 0); + } + } + + private T[] maxPoint; + public T[] MaxPoint + { + get + { + return maxPoint; + } + set + { + maxPoint = new T[value.Length]; + value.CopyTo(maxPoint, 0); + } + } + + public static HyperRect<T> Infinite(int dimensions, ITypeMath<T> math) + { + var rect = new HyperRect<T>(); + + rect.MinPoint = new T[dimensions]; + rect.MaxPoint = new T[dimensions]; + + for (var dimension = 0; dimension < dimensions; dimension++) + { + rect.MinPoint[dimension] = math.NegativeInfinity; + rect.MaxPoint[dimension] = math.PositiveInfinity; + } + + return rect; + } + + public T[] GetClosestPoint(T[] toPoint, ITypeMath<T> math) + { + T[] closest = new T[toPoint.Length]; + + for (var dimension = 0; dimension < toPoint.Length; dimension++) + { + if (math.Compare(minPoint[dimension], toPoint[dimension]) > 0) + { + closest[dimension] = minPoint[dimension]; + } + else if (math.Compare(maxPoint[dimension], toPoint[dimension]) < 0) + { + closest[dimension] = maxPoint[dimension]; + } + else + // Point is within rectangle, at least on this dimension + closest[dimension] = toPoint[dimension]; + } + + return closest; + } + + public HyperRect<T> Clone() + { + var rect = new HyperRect<T>(); + rect.MinPoint = MinPoint; + rect.MaxPoint = MaxPoint; + return rect; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/HyperRect.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/HyperRect.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..07dfc9a94119e51677c25d39d137227ba91d4772 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/HyperRect.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 518e5a76add435648813be98dd71e2f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/IKdTree.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/IKdTree.cs new file mode 100644 index 0000000000000000000000000000000000000000..410597f23cf40f9ee6e837249c59ff04024648f8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/IKdTree.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.KdTree +{ + interface IKdTree<TKey, TValue> : IEnumerable<KdTreeNode<TKey, TValue>> + { + bool Add(TKey[] point, TValue value); + + bool TryFindValueAt(TKey[] point, out TValue value); + + TValue FindValueAt(TKey[] point); + + bool TryFindValue(TValue value, out TKey[] point); + + TKey[] FindValue(TValue value); + + KdTreeNode<TKey, TValue>[] RadialSearch(TKey[] center, TKey radius, int count); + + void RemoveAt(TKey[] point); + + void Clear(); + + KdTreeNode<TKey, TValue>[] GetNearestNeighbours(TKey[] point, int count = int.MaxValue); + + int Count { get; } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/IKdTree.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/IKdTree.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..0e5dd20d25f5f36fa2fdad283cb0b48c52550cff --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/IKdTree.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8fa221ea996bd7459f869e6d809a95d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/IPriorityQueue.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/IPriorityQueue.cs new file mode 100644 index 0000000000000000000000000000000000000000..161f79e3b2e137714df1a5c938f9668a28019924 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/IPriorityQueue.cs @@ -0,0 +1,11 @@ +namespace UnityEngine.ProBuilder.KdTree +{ + interface IPriorityQueue<TItem, TPriority> + { + void Enqueue(TItem item, TPriority priority); + + TItem Dequeue(); + + int Count { get; } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/IPriorityQueue.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/IPriorityQueue.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5944d5b81e10a4974f52479d7945313ccb6144af --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/IPriorityQueue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c7381a66e715734f82749b2e115722c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/KdTree.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/KdTree.cs new file mode 100644 index 0000000000000000000000000000000000000000..96cf75ea6b68a23020bd6be802681df16acd1bae --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/KdTree.cs @@ -0,0 +1,660 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.Serialization.Formatters.Binary; +using System.Text; + +namespace UnityEngine.ProBuilder.KdTree +{ + enum AddDuplicateBehavior + { + Skip, + Error, + Update, + Collect + } + + class DuplicateNodeError : Exception + { + public DuplicateNodeError() + : base("Cannot Add Node With Duplicate Coordinates") + { + } + } + + [Serializable] + class KdTree<TKey, TValue> : IKdTree<TKey, TValue> + { + public KdTree(int dimensions, ITypeMath<TKey> typeMath) + { + this.dimensions = dimensions; + this.typeMath = typeMath; + Count = 0; + } + + public KdTree(int dimensions, ITypeMath<TKey> typeMath, AddDuplicateBehavior addDuplicateBehavior) + : this(dimensions, typeMath) + { + AddDuplicateBehavior = addDuplicateBehavior; + } + + private int dimensions; + + private ITypeMath<TKey> typeMath = null; + + private KdTreeNode<TKey, TValue> root = null; + + public AddDuplicateBehavior AddDuplicateBehavior { get; private set; } + + public bool Add(TKey[] point, TValue value) + { + var nodeToAdd = new KdTreeNode<TKey, TValue>(point, value); + + if (root == null) + { + root = new KdTreeNode<TKey, TValue>(point, value); + } + else + { + int dimension = -1; + KdTreeNode<TKey, TValue> parent = root; + + do + { + // Increment the dimension we're searching in + dimension = (dimension + 1) % dimensions; + + // Does the node we're adding have the same hyperpoint as this node? + if (typeMath.AreEqual(point, parent.Point)) + { + switch (AddDuplicateBehavior) + { + case AddDuplicateBehavior.Skip: + return false; + + case AddDuplicateBehavior.Error: + throw new DuplicateNodeError(); + + case AddDuplicateBehavior.Update: + parent.Value = value; + break; + + case AddDuplicateBehavior.Collect: + parent.AddDuplicate(value); + return false; + + default: + // Should never happen + throw new Exception("Unexpected AddDuplicateBehavior"); + } + } + + // Which side does this node sit under in relation to it's parent at this level? + int compare = typeMath.Compare(point[dimension], parent.Point[dimension]); + + if (parent[compare] == null) + { + parent[compare] = nodeToAdd; + break; + } + else + { + parent = parent[compare]; + } + } + while (true); + } + + Count++; + return true; + } + + private void ReadChildNodes(KdTreeNode<TKey, TValue> removedNode) + { + if (removedNode.IsLeaf) + return; + + // The folllowing code might seem a little redundant but we're using + // 2 queues so we can add the child nodes back in, in (more or less) + // the same order they were added in the first place + var nodesToReadd = new Queue<KdTreeNode<TKey, TValue>>(); + + var nodesToReaddQueue = new Queue<KdTreeNode<TKey, TValue>>(); + + if (removedNode.LeftChild != null) + nodesToReaddQueue.Enqueue(removedNode.LeftChild); + + if (removedNode.RightChild != null) + nodesToReaddQueue.Enqueue(removedNode.RightChild); + + while (nodesToReaddQueue.Count > 0) + { + var nodeToReadd = nodesToReaddQueue.Dequeue(); + + nodesToReadd.Enqueue(nodeToReadd); + + for (int side = -1; side <= 1; side += 2) + { + if (nodeToReadd[side] != null) + { + nodesToReaddQueue.Enqueue(nodeToReadd[side]); + + nodeToReadd[side] = null; + } + } + } + + while (nodesToReadd.Count > 0) + { + var nodeToReadd = nodesToReadd.Dequeue(); + + Count--; + Add(nodeToReadd.Point, nodeToReadd.Value); + } + } + + public void RemoveAt(TKey[] point) + { + // Is tree empty? + if (root == null) + return; + + KdTreeNode<TKey, TValue> node; + + if (typeMath.AreEqual(point, root.Point)) + { + node = root; + root = null; + Count--; + ReadChildNodes(node); + return; + } + + node = root; + + int dimension = -1; + do + { + dimension = (dimension + 1) % dimensions; + + int compare = typeMath.Compare(point[dimension], node.Point[dimension]); + + if (node[compare] == null) + // Can't find node + return; + + if (typeMath.AreEqual(point, node[compare].Point)) + { + var nodeToRemove = node[compare]; + node[compare] = null; + Count--; + + ReadChildNodes(nodeToRemove); + } + else + node = node[compare]; + } + while (node != null); + } + + public KdTreeNode<TKey, TValue>[] GetNearestNeighbours(TKey[] point, int count) + { + if (count > Count) + count = Count; + + if (count < 0) + { + throw new ArgumentException("Number of neighbors cannot be negative"); + } + + if (count == 0) + return new KdTreeNode<TKey, TValue>[0]; + + var nearestNeighbours = new NearestNeighbourList<KdTreeNode<TKey, TValue>, TKey>(count, typeMath); + + var rect = HyperRect<TKey>.Infinite(dimensions, typeMath); + + AddNearestNeighbours(root, point, rect, 0, nearestNeighbours, typeMath.MaxValue); + + count = nearestNeighbours.Count; + + var neighbourArray = new KdTreeNode<TKey, TValue>[count]; + + for (var index = 0; index < count; index++) + neighbourArray[count - index - 1] = nearestNeighbours.RemoveFurtherest(); + + return neighbourArray; + } + + /* + * 1. Search for the target + * + * 1.1 Start by splitting the specified hyper rect + * on the specified node's point along the current + * dimension so that we end up with 2 sub hyper rects + * (current dimension = depth % dimensions) + * + * 1.2 Check what sub rectangle the the target point resides in + * under the current dimension + * + * 1.3 Set that rect to the nearer rect and also the corresponding + * child node to the nearest rect and node and the other rect + * and child node to the further rect and child node (for use later) + * + * 1.4 Travel into the nearer rect and node by calling function + * recursively with nearer rect and node and incrementing + * the depth + * + * 2. Add leaf to list of nearest neighbours + * + * 3. Walk back up tree and at each level: + * + * 3.1 Add node to nearest neighbours if + * we haven't filled our nearest neighbour + * list yet or if it has a distance to target less + * than any of the distances in our current nearest + * neighbours. + * + * 3.2 If there is any point in the further rectangle that is closer to + * the target than our furtherest nearest neighbour then travel into + * that rect and node + * + * That's it, when it finally finishes traversing the branches + * it needs to we'll have our list! + */ + + private void AddNearestNeighbours( + KdTreeNode<TKey, TValue> node, + TKey[] target, + HyperRect<TKey> rect, + int depth, + NearestNeighbourList<KdTreeNode<TKey, TValue>, TKey> nearestNeighbours, + TKey maxSearchRadiusSquared) + { + if (node == null) + return; + + // Work out the current dimension + int dimension = depth % dimensions; + + // Split our hyper-rect into 2 sub rects along the current + // node's point on the current dimension + var leftRect = rect.Clone(); + leftRect.MaxPoint[dimension] = node.Point[dimension]; + + var rightRect = rect.Clone(); + rightRect.MinPoint[dimension] = node.Point[dimension]; + + // Which side does the target reside in? + int compare = typeMath.Compare(target[dimension], node.Point[dimension]); + + var nearerRect = compare <= 0 ? leftRect : rightRect; + var furtherRect = compare <= 0 ? rightRect : leftRect; + + var nearerNode = compare <= 0 ? node.LeftChild : node.RightChild; + var furtherNode = compare <= 0 ? node.RightChild : node.LeftChild; + + // Let's walk down into the nearer branch + if (nearerNode != null) + { + AddNearestNeighbours( + nearerNode, + target, + nearerRect, + depth + 1, + nearestNeighbours, + maxSearchRadiusSquared); + } + + TKey distanceSquaredToTarget; + + // Walk down into the further branch but only if our capacity hasn't been reached + // OR if there's a region in the further rect that's closer to the target than our + // current furtherest nearest neighbour + TKey[] closestPointInFurtherRect = furtherRect.GetClosestPoint(target, typeMath); + distanceSquaredToTarget = typeMath.DistanceSquaredBetweenPoints(closestPointInFurtherRect, target); + + if (typeMath.Compare(distanceSquaredToTarget, maxSearchRadiusSquared) <= 0) + { + if (nearestNeighbours.IsCapacityReached) + { + if (typeMath.Compare(distanceSquaredToTarget, nearestNeighbours.GetFurtherestDistance()) < 0) + AddNearestNeighbours( + furtherNode, + target, + furtherRect, + depth + 1, + nearestNeighbours, + maxSearchRadiusSquared); + } + else + { + AddNearestNeighbours( + furtherNode, + target, + furtherRect, + depth + 1, + nearestNeighbours, + maxSearchRadiusSquared); + } + } + + // Try to add the current node to our nearest neighbours list + distanceSquaredToTarget = typeMath.DistanceSquaredBetweenPoints(node.Point, target); + + if (typeMath.Compare(distanceSquaredToTarget, maxSearchRadiusSquared) <= 0) + nearestNeighbours.Add(node, distanceSquaredToTarget); + } + + public KdTreeNode<TKey, TValue>[] RadialSearch(TKey[] center, TKey radius, int count) + { + var nearestNeighbours = new NearestNeighbourList<KdTreeNode<TKey, TValue>, TKey>(count, typeMath); + + AddNearestNeighbours( + root, + center, + HyperRect<TKey>.Infinite(dimensions, typeMath), + 0, + nearestNeighbours, + typeMath.Multiply(radius, radius)); + + count = nearestNeighbours.Count; + + var neighbourArray = new KdTreeNode<TKey, TValue>[count]; + + for (var index = 0; index < count; index++) + neighbourArray[count - index - 1] = nearestNeighbours.RemoveFurtherest(); + + return neighbourArray; + } + + public int Count { get; private set; } + + public bool TryFindValueAt(TKey[] point, out TValue value) + { + var parent = root; + int dimension = -1; + do + { + if (parent == null) + { + value = default(TValue); + return false; + } + else if (typeMath.AreEqual(point, parent.Point)) + { + value = parent.Value; + return true; + } + + // Keep searching + dimension = (dimension + 1) % dimensions; + int compare = typeMath.Compare(point[dimension], parent.Point[dimension]); + parent = parent[compare]; + } + while (true); + } + + public TValue FindValueAt(TKey[] point) + { + TValue value; + if (TryFindValueAt(point, out value)) + return value; + else + return default(TValue); + } + + public bool TryFindValue(TValue value, out TKey[] point) + { + if (root == null) + { + point = null; + return false; + } + + // First-in, First-out list of nodes to search + var nodesToSearch = new Queue<KdTreeNode<TKey, TValue>>(); + + nodesToSearch.Enqueue(root); + + while (nodesToSearch.Count > 0) + { + var nodeToSearch = nodesToSearch.Dequeue(); + + if (nodeToSearch.Value.Equals(value)) + { + point = nodeToSearch.Point; + return true; + } + else + { + for (int side = -1; side <= 1; side += 2) + { + var childNode = nodeToSearch[side]; + + if (childNode != null) + nodesToSearch.Enqueue(childNode); + } + } + } + + point = null; + return false; + } + + public TKey[] FindValue(TValue value) + { + TKey[] point; + if (TryFindValue(value, out point)) + return point; + else + return null; + } + + private void AddNodeToStringBuilder(KdTreeNode<TKey, TValue> node, StringBuilder sb, int depth) + { + sb.AppendLine(node.ToString()); + + for (var side = -1; side <= 1; side += 2) + { + for (var index = 0; index <= depth; index++) + sb.Append("\t"); + + sb.Append(side == -1 ? "L " : "R "); + + if (node[side] == null) + sb.AppendLine(""); + else + AddNodeToStringBuilder(node[side], sb, depth + 1); + } + } + + public override string ToString() + { + if (root == null) + return ""; + + var sb = new StringBuilder(); + AddNodeToStringBuilder(root, sb, 0); + return sb.ToString(); + } + + private void AddNodesToList(KdTreeNode<TKey, TValue> node, List<KdTreeNode<TKey, TValue>> nodes) + { + if (node == null) + return; + + nodes.Add(node); + + for (var side = -1; side <= 1; side += 2) + { + if (node[side] != null) + { + AddNodesToList(node[side], nodes); + node[side] = null; + } + } + } + + private void SortNodesArray(KdTreeNode<TKey, TValue>[] nodes, int byDimension, int fromIndex, int toIndex) + { + for (var index = fromIndex + 1; index <= toIndex; index++) + { + var newIndex = index; + + while (true) + { + var a = nodes[newIndex - 1]; + var b = nodes[newIndex]; + if (typeMath.Compare(b.Point[byDimension], a.Point[byDimension]) < 0) + { + nodes[newIndex - 1] = b; + nodes[newIndex] = a; + } + else + break; + } + } + } + + private void AddNodesBalanced(KdTreeNode<TKey, TValue>[] nodes, int byDimension, int fromIndex, int toIndex) + { + if (fromIndex == toIndex) + { + Add(nodes[fromIndex].Point, nodes[fromIndex].Value); + nodes[fromIndex] = null; + return; + } + + // Sort the array from the fromIndex to the toIndex + SortNodesArray(nodes, byDimension, fromIndex, toIndex); + + // Find the splitting point + int midIndex = fromIndex + (int)System.Math.Round((toIndex + 1 - fromIndex) / 2f) - 1; + + // Add the splitting point + Add(nodes[midIndex].Point, nodes[midIndex].Value); + nodes[midIndex] = null; + + // Recurse + int nextDimension = (byDimension + 1) % dimensions; + + if (fromIndex < midIndex) + AddNodesBalanced(nodes, nextDimension, fromIndex, midIndex - 1); + + if (toIndex > midIndex) + AddNodesBalanced(nodes, nextDimension, midIndex + 1, toIndex); + } + + public void Balance() + { + var nodeList = new List<KdTreeNode<TKey, TValue>>(); + AddNodesToList(root, nodeList); + + Clear(); + + AddNodesBalanced(nodeList.ToArray(), 0, 0, nodeList.Count - 1); + } + + private void RemoveChildNodes(KdTreeNode<TKey, TValue> node) + { + for (var side = -1; side <= 1; side += 2) + { + if (node[side] != null) + { + RemoveChildNodes(node[side]); + node[side] = null; + } + } + } + + public void Clear() + { + if (root != null) + RemoveChildNodes(root); + } + + public void SaveToFile(string filename) + { + BinaryFormatter formatter = new BinaryFormatter(); + using (FileStream stream = File.Create(filename)) + { + formatter.Serialize(stream, this); + stream.Flush(); + } + } + + public static KdTree<TKey, TValue> LoadFromFile(string filename) + { + BinaryFormatter formatter = new BinaryFormatter(); + using (FileStream stream = File.Open(filename, FileMode.Open)) + { + return (KdTree<TKey, TValue>)formatter.Deserialize(stream); + } + + } + + public IEnumerator<KdTreeNode<TKey, TValue>> GetEnumerator() + { + var left = new Stack<KdTreeNode<TKey, TValue>>(); + var right = new Stack<KdTreeNode<TKey, TValue>>(); + + Action<KdTreeNode<TKey, TValue>> addLeft = node => + { + if (node.LeftChild != null) + { + left.Push(node.LeftChild); + } + }; + + Action<KdTreeNode<TKey, TValue>> addRight = node => + { + if (node.RightChild != null) + { + right.Push(node.RightChild); + } + }; + + if (root != null) + { + yield return root; + + addLeft(root); + addRight(root); + + while (true) + { + if (left.Any()) + { + var item = left.Pop(); + + addLeft(item); + addRight(item); + + yield return item; + } + else if (right.Any()) + { + var item = right.Pop(); + + addLeft(item); + addRight(item); + + yield return item; + } + else + { + break; + } + } + } + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/KdTree.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/KdTree.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2298eaccc8751f99b3aa1ff5f89bf414d5c44ee3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/KdTree.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13a653f5b84336c45b2c00b570775a87 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/KdTreeNode.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/KdTreeNode.cs new file mode 100644 index 0000000000000000000000000000000000000000..41adac5727c44ca81d61e10c44b170d1c14f9167 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/KdTreeNode.cs @@ -0,0 +1,79 @@ +using System; +using System.Text; +using System.Linq; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.KdTree +{ + [Serializable] + class KdTreeNode<TKey, TValue> + { + public KdTreeNode() + { + } + + public KdTreeNode(TKey[] point, TValue value) + { + Point = point; + Value = value; + } + + public TKey[] Point; + public TValue Value = default(TValue); + public List<TValue> Duplicates = null; + + internal KdTreeNode<TKey, TValue> LeftChild = null; + internal KdTreeNode<TKey, TValue> RightChild = null; + + internal KdTreeNode<TKey, TValue> this[int compare] + { + get + { + if (compare <= 0) + return LeftChild; + else + return RightChild; + } + set + { + if (compare <= 0) + LeftChild = value; + else + RightChild = value; + } + } + + public bool IsLeaf + { + get + { + return (LeftChild == null) && (RightChild == null); + } + } + + public void AddDuplicate(TValue value) + { + if (Duplicates == null) + Duplicates = new List<TValue>() { value }; + else + Duplicates.Add(value); + } + + public override string ToString() + { + var sb = new StringBuilder(); + + for (var dimension = 0; dimension < Point.Length; dimension++) + { + sb.Append(Point[dimension].ToString()); + } + + if (Value == null) + sb.Append("null"); + else + sb.Append(Value.ToString()); + + return sb.ToString(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/KdTreeNode.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/KdTreeNode.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..81fc325b451ae0e9615d8dce844e6a9ea923a9c2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/KdTreeNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 908a5a36f516c3048abadede5920d5d7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math.meta new file mode 100644 index 0000000000000000000000000000000000000000..8b3cf4879389b1dfb5afdb6b0b6ce0ef450c9c5d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ed05cb2facaa5cc49aab6d1137d15904 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/DoubleMath.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/DoubleMath.cs new file mode 100644 index 0000000000000000000000000000000000000000..9c26d384b5171ece8596623cefce7c32373a74bd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/DoubleMath.cs @@ -0,0 +1,69 @@ +using System; + +namespace UnityEngine.ProBuilder.KdTree.Math +{ + [Serializable] + class DoubleMath : TypeMath<double> + { + public override int Compare(double a, double b) + { + return a.CompareTo(b); + } + + public override bool AreEqual(double a, double b) + { + return a == b; + } + + public override double MinValue + { + get { return double.MinValue; } + } + + public override double MaxValue + { + get { return double.MaxValue; } + } + + public override double Zero + { + get { return 0; } + } + + public override double NegativeInfinity { get { return double.NegativeInfinity; } } + + public override double PositiveInfinity { get { return double.PositiveInfinity; } } + + public override double Add(double a, double b) + { + return a + b; + } + + public override double Subtract(double a, double b) + { + return a - b; + } + + public override double Multiply(double a, double b) + { + return a * b; + } + + public override double DistanceSquaredBetweenPoints(double[] a, double[] b) + { + double distance = Zero; + int dimensions = a.Length; + + // Return the absolute distance bewteen 2 hyper points + for (var dimension = 0; dimension < dimensions; dimension++) + { + double distOnThisAxis = Subtract(a[dimension], b[dimension]); + double distOnThisAxisSquared = Multiply(distOnThisAxis, distOnThisAxis); + + distance = Add(distance, distOnThisAxisSquared); + } + + return distance; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/DoubleMath.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/DoubleMath.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..67d8a2f555c527e9a081a5ddbeb5cda45c743c31 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/DoubleMath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a2c22c8685df2d44b943673a11597711 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/FloatMath.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/FloatMath.cs new file mode 100644 index 0000000000000000000000000000000000000000..9f2d74f4a660163c7b8345b6519b6de5e77beeb4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/FloatMath.cs @@ -0,0 +1,69 @@ +using System; + +namespace UnityEngine.ProBuilder.KdTree.Math +{ + [Serializable] + class FloatMath : TypeMath<float> + { + public override int Compare(float a, float b) + { + return a.CompareTo(b); + } + + public override bool AreEqual(float a, float b) + { + return a == b; + } + + public override float MinValue + { + get { return float.MinValue; } + } + + public override float MaxValue + { + get { return float.MaxValue; } + } + + public override float Zero + { + get { return 0; } + } + + public override float NegativeInfinity { get { return float.NegativeInfinity; } } + + public override float PositiveInfinity { get { return float.PositiveInfinity; } } + + public override float Add(float a, float b) + { + return a + b; + } + + public override float Subtract(float a, float b) + { + return a - b; + } + + public override float Multiply(float a, float b) + { + return a * b; + } + + public override float DistanceSquaredBetweenPoints(float[] a, float[] b) + { + float distance = Zero; + int dimensions = a.Length; + + // Return the absolute distance bewteen 2 hyper points + for (var dimension = 0; dimension < dimensions; dimension++) + { + float distOnThisAxis = Subtract(a[dimension], b[dimension]); + float distOnThisAxisSquared = Multiply(distOnThisAxis, distOnThisAxis); + + distance = Add(distance, distOnThisAxisSquared); + } + + return distance; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/FloatMath.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/FloatMath.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2bb3be9919d74d6f09648c394fec395da28d7573 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/FloatMath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 483554fdb1324da4ead26f33de2c9990 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/ITypeMath.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/ITypeMath.cs new file mode 100644 index 0000000000000000000000000000000000000000..f49d52618886a6985f09e7389e3fbec96f63da4d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/ITypeMath.cs @@ -0,0 +1,33 @@ +namespace UnityEngine.ProBuilder.KdTree +{ + interface ITypeMath<T> + { + int Compare(T a, T b); + + T MinValue { get; } + + T MaxValue { get; } + + T Min(T a, T b); + + T Max(T a, T b); + + bool AreEqual(T a, T b); + + bool AreEqual(T[] a, T[] b); + + T Add(T a, T b); + + T Subtract(T a, T b); + + T Multiply(T a, T b); + + T Zero { get; } + + T NegativeInfinity { get; } + + T PositiveInfinity { get; } + + T DistanceSquaredBetweenPoints(T[] a, T[] b); + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/ITypeMath.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/ITypeMath.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5e543302a37bebcee4ca40a61457e8b98995b076 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/ITypeMath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2799d938bc097b0478b150b315487a18 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/TypeMath.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/TypeMath.cs new file mode 100644 index 0000000000000000000000000000000000000000..e9c2903cc3e3fc334fa75bd25e0daecdc117d9d0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/TypeMath.cs @@ -0,0 +1,64 @@ +using System; + +namespace UnityEngine.ProBuilder.KdTree.Math +{ + [Serializable] + abstract class TypeMath<T> : ITypeMath<T> + { + #region ITypeMath<T> members + + public abstract int Compare(T a, T b); + + public abstract bool AreEqual(T a, T b); + + public virtual bool AreEqual(T[] a, T[] b) + { + if (a.Length != b.Length) + return false; + + for (var index = 0; index < a.Length; index++) + { + if (!AreEqual(a[index], b[index])) + return false; + } + + return true; + } + + public abstract T MinValue { get; } + + public abstract T MaxValue { get; } + + public T Min(T a, T b) + { + if (Compare(a, b) < 0) + return a; + else + return b; + } + + public T Max(T a, T b) + { + if (Compare(a, b) > 0) + return a; + else + return b; + } + + public abstract T Zero { get; } + + public abstract T NegativeInfinity { get; } + + public abstract T PositiveInfinity { get; } + + public abstract T Add(T a, T b); + + public abstract T Subtract(T a, T b); + + public abstract T Multiply(T a, T b); + + public abstract T DistanceSquaredBetweenPoints(T[] a, T[] b); + + #endregion + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/TypeMath.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/TypeMath.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1829175e12f07b162eb993d0b0598d3187711fde --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/Math/TypeMath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4daa0ba8c6e93d54a9b542d76b235c55 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/NearestNeighbourList.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/NearestNeighbourList.cs new file mode 100644 index 0000000000000000000000000000000000000000..5b0eda4458286866b0d28dc3fa18fea2bc4cac9a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/NearestNeighbourList.cs @@ -0,0 +1,83 @@ +using System; + +namespace UnityEngine.ProBuilder.KdTree +{ + interface INearestNeighbourList<TItem, TDistance> + { + bool Add(TItem item, TDistance distance); + TItem GetFurtherest(); + TItem RemoveFurtherest(); + + int MaxCapacity { get; } + int Count { get; } + } + + class NearestNeighbourList<TItem, TDistance> : INearestNeighbourList<TItem, TDistance> + { + public NearestNeighbourList(int maxCapacity, ITypeMath<TDistance> distanceMath) + { + this.maxCapacity = maxCapacity; + this.distanceMath = distanceMath; + + queue = new PriorityQueue<TItem, TDistance>(maxCapacity, distanceMath); + } + + private PriorityQueue<TItem, TDistance> queue; + + private ITypeMath<TDistance> distanceMath; + + private int maxCapacity; + public int MaxCapacity { get { return maxCapacity; } } + + public int Count { get { return queue.Count; } } + + public bool Add(TItem item, TDistance distance) + { + if (queue.Count >= maxCapacity) + { + // If the distance of this item is less than the distance of the last item + // in our neighbour list then pop that neighbour off and push this one on + // otherwise don't even bother adding this item + if (distanceMath.Compare(distance, queue.GetHighestPriority()) < 0) + { + queue.Dequeue(); + queue.Enqueue(item, distance); + return true; + } + else + return false; + } + else + { + queue.Enqueue(item, distance); + return true; + } + } + + public TItem GetFurtherest() + { + if (Count == 0) + throw new Exception("List is empty"); + else + return queue.GetHighest(); + } + + public TDistance GetFurtherestDistance() + { + if (Count == 0) + throw new Exception("List is empty"); + else + return queue.GetHighestPriority(); + } + + public TItem RemoveFurtherest() + { + return queue.Dequeue(); + } + + public bool IsCapacityReached + { + get { return Count == MaxCapacity; } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/NearestNeighbourList.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/NearestNeighbourList.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..68272dfa664dbdc5adf358c91f77ddad03b08a76 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/NearestNeighbourList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 601f62929862ecb48956dc2dca0a2498 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/PriorityQueue.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/PriorityQueue.cs new file mode 100644 index 0000000000000000000000000000000000000000..1be987aef9fd4533c7dabed14bb79fd5d1894caf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/PriorityQueue.cs @@ -0,0 +1,125 @@ +using System; + +namespace UnityEngine.ProBuilder.KdTree +{ + struct ItemPriority<TItem, TPriority> + { + public TItem Item; + public TPriority Priority; + } + + class PriorityQueue<TItem, TPriority> : IPriorityQueue<TItem, TPriority> + { + public PriorityQueue(int capacity, ITypeMath<TPriority> priorityMath) + { + if (capacity <= 0) + throw new ArgumentException("Capacity must be greater than zero"); + + this.capacity = capacity; + queue = new ItemPriority<TItem, TPriority>[capacity]; + + this.priorityMath = priorityMath; + } + + private ITypeMath<TPriority> priorityMath; + + private ItemPriority<TItem, TPriority>[] queue; + + private int capacity; + + private int count; + public int Count { get { return count; } } + + // Try to avoid unnecessary slow memory reallocations by creating your queue with an ample capacity + private void ExpandCapacity() + { + // Double our capacity + capacity *= 2; + + // Create a new queue + var newQueue = new ItemPriority<TItem, TPriority>[capacity]; + + // Copy the contents of the original queue to the new one + Array.Copy(queue, newQueue, queue.Length); + + // Copy the new queue over the original one + queue = newQueue; + } + + public void Enqueue(TItem item, TPriority priority) + { + if (++count > capacity) + ExpandCapacity(); + + int newItemIndex = count - 1; + + queue[newItemIndex] = new ItemPriority<TItem, TPriority> { Item = item, Priority = priority }; + + ReorderItem(newItemIndex, -1); + } + + public TItem Dequeue() + { + TItem item = queue[0].Item; + + queue[0].Item = default(TItem); + queue[0].Priority = priorityMath.MinValue; + + ReorderItem(0, 1); + + count--; + + return item; + } + + private void ReorderItem(int index, int direction) + { + if ((direction != -1) && (direction != 1)) + throw new ArgumentException("Invalid Direction"); + + var item = queue[index]; + + int nextIndex = index + direction; + + while ((nextIndex >= 0) && (nextIndex < count)) + { + var next = queue[nextIndex]; + + int compare = priorityMath.Compare(item.Priority, next.Priority); + + // If we're moving up and our priority is higher than the next priority then swap + // Or if we're moving down and our priority is lower than the next priority then swap + if ( + ((direction == -1) && (compare > 0)) + || + ((direction == 1) && (compare < 0)) + ) + { + queue[index] = next; + queue[nextIndex] = item; + + index += direction; + nextIndex += direction; + } + else + break; + } + } + + public TItem GetHighest() + { + if (count == 0) + throw new Exception("Queue is empty"); + else + return queue[0].Item; + } + + public TPriority GetHighestPriority() + { + if (count == 0) + throw new Exception("Queue is empty"); + else + return queue[0].Priority; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/PriorityQueue.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/PriorityQueue.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..378350917bb3d8302a0c4a1165c7a3064d57aadb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/KdTreeLib/PriorityQueue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d9ed04c4f3db58d488f75533eee62283 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/LICENSE.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/LICENSE.md new file mode 100644 index 0000000000000000000000000000000000000000..f606e269ad44a4b3f21704f8e16858f540f8ccae --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/LICENSE.md @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 codeandcats + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/LICENSE.md.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/LICENSE.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..4807147ac81961b05f2ffcb4a1de41111513eda0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 16add6facd81da34caaa1fc21522be87 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/README.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/README.md new file mode 100644 index 0000000000000000000000000000000000000000..562609c82e40aac6c034c1bd381fbd45a30a40c0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/README.md @@ -0,0 +1,11 @@ +KdTree +====== + +A fast, generic, multi-dimensional Binary Search Tree written in C# + +Forked from [codeandcats KdTree](https://github.com/codeandcats/KdTree). + +## Changes from KdTree + +This branch is modified to compile for .NET Framework 3.5, and removes the non-MIT licensed GeoUtils class. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/README.md.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/README.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..23f04a7a9ac211c8dfa96db963ac23e1fc669b9e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 348af47767ff3b44cbd7a045bba8a65c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/Unity.ProBuilder.KdTree.asmdef b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/Unity.ProBuilder.KdTree.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..593c061a065ad2259f385bbad1d1aa1bb27e5eff --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/Unity.ProBuilder.KdTree.asmdef @@ -0,0 +1,12 @@ +{ + "name": "Unity.ProBuilder.KdTree", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": false, + "defineConstraints": [] +} \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/Unity.ProBuilder.KdTree.asmdef.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/Unity.ProBuilder.KdTree.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..d02aeb90e28793476f4c3e40688958bfb639cfe5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/KdTree/Unity.ProBuilder.KdTree.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1c49da3d3671a1748aea5347c1176d2e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri.meta new file mode 100644 index 0000000000000000000000000000000000000000..5e024904b0d26028ac11a5aece4a7015696fc1d8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 49b84cc0fd35240458328f98dd8b6d1a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/AUTHORS.txt~ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/AUTHORS.txt~ new file mode 100644 index 0000000000000000000000000000000000000000..85ff053e8e0d64558daf007d754148bbc8ebf8e6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/AUTHORS.txt~ @@ -0,0 +1,8 @@ +Primary Contributors: + + Mason Green <mason.green@gmail.com> (C++, Python) + Thomas �hl�n <thahlen@gmail.com> (Java) + +Other Contributors: + + Michael Rickert (C#) \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/AssemblyInfo.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..328338fd3bfb3c885f44f74dce68b089b5e2d611 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Unity.ProBuilder")] diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/AssemblyInfo.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/AssemblyInfo.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..dfb1f8eed7fd45e59eddfcd8e8155cdf7c4d87f6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6d7500d036914f3b9768689959295b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/LICENSE.txt~ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/LICENSE.txt~ new file mode 100644 index 0000000000000000000000000000000000000000..ef36d09df4c26ae80a18c04764933e1fac9fe61c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/LICENSE.txt~ @@ -0,0 +1,27 @@ +Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors +http://code.google.com/p/poly2tri/ + +All rights reserved. +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of Poly2Tri nor the names of its contributors may be + used to endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/P2T.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/P2T.cs new file mode 100644 index 0000000000000000000000000000000000000000..ab8ac355d17fc2ea92eb7982094ca48937200f4c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/P2T.cs @@ -0,0 +1,102 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace UnityEngine.ProBuilder.Poly2Tri { + static class P2T { + private static TriangulationAlgorithm _defaultAlgorithm = TriangulationAlgorithm.DTSweep; + + public static void Triangulate(PolygonSet ps) { + TriangulationContext tcx = CreateContext(_defaultAlgorithm); + foreach (Polygon p in ps.Polygons) { + tcx.PrepareTriangulation(p); + Triangulate(tcx); + tcx.Clear(); + } + } + + public static void Triangulate(Polygon p) { + Triangulate(_defaultAlgorithm, p); + } + + public static void Triangulate(ConstrainedPointSet cps) { + Triangulate(_defaultAlgorithm, cps); + } + + public static void Triangulate(PointSet ps) { + Triangulate(_defaultAlgorithm, ps); + } + + public static TriangulationContext CreateContext(TriangulationAlgorithm algorithm) { + switch (algorithm) { + case TriangulationAlgorithm.DTSweep: + default: + return new DTSweepContext(); + } + } + + public static void Triangulate(TriangulationAlgorithm algorithm, Triangulatable t) { + TriangulationContext tcx; + + // long time = System.nanoTime(); + tcx = CreateContext(algorithm); + tcx.PrepareTriangulation(t); + Triangulate(tcx); + // logger.info( "Triangulation of {} points [{}ms]", tcx.getPoints().size(), ( System.nanoTime() - time ) / 1e6 ); + } + + public static void Triangulate(TriangulationContext tcx) { + switch (tcx.Algorithm) { + case TriangulationAlgorithm.DTSweep: + default: + DTSweep.Triangulate((DTSweepContext)tcx); + break; + } + } + + + /// <summary> + /// Will do a warmup run to let the JVM optimize the triangulation code -- or would if this were Java --MM + /// </summary> + public static void Warmup() { +#if false + /* + * After a method is run 10000 times, the Hotspot compiler will compile + * it into native code. Periodically, the Hotspot compiler may recompile + * the method. After an unspecified amount of time, then the compilation + * system should become quiet. + */ + Polygon poly = PolygonGenerator.RandomCircleSweep2(50, 50000); + TriangulationProcess process = new TriangulationProcess(); + process.triangulate(poly); +#endif + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/P2T.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/P2T.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..fcedd91ec38ae4b17f34a8b2b29897b6ab0fa7d2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/P2T.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 09410b7978d32924c90d84fa25a07f4a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon.meta new file mode 100644 index 0000000000000000000000000000000000000000..fb96a4d1a9330738bd0bad30bf4fa12577cda9ba --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 53da0e7aea43ea649a18555f801ee05e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/Polygon.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/Polygon.cs new file mode 100644 index 0000000000000000000000000000000000000000..b411dafcf21a1db963f738aef8a2a9de1967b180 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/Polygon.cs @@ -0,0 +1,214 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/// Changes from the Java version +/// Polygon constructors sprused up, checks for 3+ polys +/// Naming of everything +/// getTriangulationMode() -> TriangulationMode { get; } +/// Exceptions replaced +/// Future possibilities +/// We have a lot of Add/Clear methods -- we may prefer to just expose the container +/// Some self-explanitory methods may deserve commenting anyways + +using System; +using System.Collections.Generic; +using System.Linq; + +namespace UnityEngine.ProBuilder.Poly2Tri { + class Polygon : Triangulatable { + protected List<TriangulationPoint> _points = new List<TriangulationPoint>(); + protected List<TriangulationPoint> _steinerPoints; + protected List<Polygon> _holes; + protected List<DelaunayTriangle> _triangles; + protected PolygonPoint _last; + + /// <summary> + /// Create a polygon from a list of at least 3 points with no duplicates. + /// </summary> + /// <param name="points">A list of unique points</param> + public Polygon( IList<PolygonPoint> points ) { + if (points.Count < 3) throw new ArgumentException("List has fewer than 3 points", "points"); + + // Lets do one sanity check that first and last point hasn't got same position + // Its something that often happen when importing polygon data from other formats + if (points[0].Equals(points[points.Count - 1])) points.RemoveAt(points.Count - 1); + + _points.AddRange(points.Cast<TriangulationPoint>()); + } + + /// <summary> + /// Create a polygon from a list of at least 3 points with no duplicates. + /// </summary> + /// <param name="points">A list of unique points.</param> + public Polygon( IEnumerable<PolygonPoint> points ): this( (points as IList<PolygonPoint>) ?? points.ToArray() ) {} + + /// <summary> + /// Create a polygon from a list of at least 3 points with no duplicates. + /// </summary> + /// <param name="points">A list of unique points.</param> + public Polygon( params PolygonPoint[] points ) : this((IList<PolygonPoint>)points) { } + + public TriangulationMode TriangulationMode { get { return TriangulationMode.Polygon; } } + + public void AddSteinerPoint( TriangulationPoint point ) { + if (_steinerPoints == null) _steinerPoints = new List<TriangulationPoint>(); + _steinerPoints.Add(point); + } + + public void AddSteinerPoints( List<TriangulationPoint> points ) { + if (_steinerPoints == null) _steinerPoints = new List<TriangulationPoint>(); + _steinerPoints.AddRange(points); + } + + public void ClearSteinerPoints() { + if (_steinerPoints != null) _steinerPoints.Clear(); + } + + /// <summary> + /// Add a hole to the polygon. + /// </summary> + /// <param name="poly">A subtraction polygon fully contained inside this polygon.</param> + public void AddHole( Polygon poly ) { + if (_holes == null) _holes = new List<Polygon>(); + _holes.Add(poly); + // XXX: tests could be made here to be sure it is fully inside + // addSubtraction( poly.getPoints() ); + } + + /// <summary> + /// Inserts newPoint after point. + /// </summary> + /// <param name="point">The point to insert after in the polygon</param> + /// <param name="newPoint">The point to insert into the polygon</param> + public void InsertPointAfter( PolygonPoint point, PolygonPoint newPoint ) { + // Validate that + int index = _points.IndexOf(point); + if (index == -1) throw new ArgumentException("Tried to insert a point into a Polygon after a point not belonging to the Polygon", "point"); + newPoint.Next = point.Next; + newPoint.Previous = point; + point.Next.Previous = newPoint; + point.Next = newPoint; + _points.Insert(index + 1, newPoint); + } + + /// <summary> + /// Inserts list (after last point in polygon?) + /// </summary> + /// <param name="list"></param> + public void AddPoints( IEnumerable<PolygonPoint> list ) { + PolygonPoint first; + foreach (PolygonPoint p in list) { + p.Previous = _last; + if (_last != null) { + p.Next = _last.Next; + _last.Next = p; + } + _last = p; + _points.Add(p); + } + first = (PolygonPoint)_points[0]; + _last.Next = first; + first.Previous = _last; + } + + /// <summary> + /// Adds a point after the last in the polygon. + /// </summary> + /// <param name="p">The point to add</param> + public void AddPoint( PolygonPoint p ) { + p.Previous = _last; + p.Next = _last.Next; + _last.Next = p; + _points.Add(p); + } + + /// <summary> + /// Removes a point from the polygon. + /// </summary> + /// <param name="p"></param> + public void RemovePoint( PolygonPoint p ) { + PolygonPoint next, prev; + + next = p.Next; + prev = p.Previous; + prev.Next = next; + next.Previous = prev; + _points.Remove(p); + } + + public IList<TriangulationPoint> Points { get { return _points; } } + public IList<DelaunayTriangle> Triangles { get { return _triangles; } } + public IList<Polygon> Holes { get { return _holes; }} + + public void AddTriangle( DelaunayTriangle t ) { + _triangles.Add(t); + } + + public void AddTriangles( IEnumerable<DelaunayTriangle> list ) { + _triangles.AddRange(list); + } + + public void ClearTriangles() { + if (_triangles != null) _triangles.Clear(); + } + + /// <summary> + /// Creates constraints and populates the context with points + /// </summary> + /// <param name="tcx">The context</param> + public void Prepare( TriangulationContext tcx ) { + if (_triangles == null) { + _triangles = new List<DelaunayTriangle>(_points.Count); + } else { + _triangles.Clear(); + } + + // Outer constraints + for (int i = 0; i < _points.Count - 1; i++) tcx.NewConstraint(_points[i], _points[i + 1]); + tcx.NewConstraint(_points[0], _points[_points.Count - 1]); + tcx.Points.AddRange(_points); + + // Hole constraints + if (_holes != null) { + foreach (Polygon p in _holes) { + for (int i = 0; i < p._points.Count - 1; i++) tcx.NewConstraint(p._points[i], p._points[i + 1]); + tcx.NewConstraint(p._points[0], p._points[p._points.Count - 1]); + tcx.Points.AddRange(p._points); + } + } + + if (_steinerPoints != null) { + tcx.Points.AddRange(_steinerPoints); + } + } + + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/Polygon.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/Polygon.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..031295f22c18804857948b492ae344127f6bc5fd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/Polygon.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d563a6b12a743cf4399b92cf5366da6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/PolygonPoint.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/PolygonPoint.cs new file mode 100644 index 0000000000000000000000000000000000000000..ec429224608d96ba4830879a3f4303c1f974260b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/PolygonPoint.cs @@ -0,0 +1,44 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/// Changes from the Java version +/// Replaced get/set Next/Previous with attributes +/// Future possibilities +/// Documentation! + +namespace UnityEngine.ProBuilder.Poly2Tri { + class PolygonPoint : TriangulationPoint { + public PolygonPoint( double x, double y, int index = INSERTED_INDEX ) : base(x, y, index) { } + + public PolygonPoint Next { get; set; } + public PolygonPoint Previous { get; set; } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/PolygonPoint.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/PolygonPoint.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..678fab97571a7de75a20f8c94316d66238497b18 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/PolygonPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a34d12b3d3eeda641bac82627738a726 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/PolygonSet.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/PolygonSet.cs new file mode 100644 index 0000000000000000000000000000000000000000..1d6560c3609a2ce3cbcd678eb396316f38ae5731 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/PolygonSet.cs @@ -0,0 +1,56 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/// Changes from the Java version +/// Replaced getPolygons with attribute +/// Future possibilities +/// Replace Add(Polygon) with exposed container? +/// Replace entire class with HashSet<Polygon> ? + +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.Poly2Tri { + class PolygonSet { + protected List<Polygon> _polygons = new List<Polygon>(); + + public PolygonSet() {} + + public PolygonSet(Polygon poly) { + _polygons.Add(poly); + } + + public void Add(Polygon p) { + _polygons.Add(p); + } + + public IEnumerable<Polygon> Polygons { get { return _polygons; } } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/PolygonSet.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/PolygonSet.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5d5343581a11a31f0831c1d8f121ff7f2b470d8e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Polygon/PolygonSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a73369e033539a42ae8067a8fa967c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/README.txt~ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/README.txt~ new file mode 100644 index 0000000000000000000000000000000000000000..e77b4fe0954000c4cb7e3bdd050fea365360c28d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/README.txt~ @@ -0,0 +1,36 @@ +------------ +Dependencies +------------ + + Core Library: + - .NET 3.5 + + Testbed: + - WinForms + +---------------------------------------------- +Building the Testbed +---------------------------------------------- + +Poly2Tri.sln contains everything. Just build it. + +---------------------------------------------- +Running the Examples +---------------------------------------------- + +Poly2Tri.sln contains everything. +To run an example from the solution: + Right click on one of the example projects in the solution explorer: + SwfTest + Click "Set as StartUp Project" in the menu + Run the project: + Click the green run arrow icon + or go to the Debug menu -> Start Debugging + or use a keyboard shortcut (F5 or F6(?) by default depending on configuration) + +---------------------------------------------- +Links +---------------------------------------------- + +poly2tri Project Page http://code.google.com/p/poly2tri/ +C# port project page http://github.com/MaulingMonkey/poly2tri-cs diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation.meta new file mode 100644 index 0000000000000000000000000000000000000000..a2cd1a08897ecfafc6536db01821d8fb13dc9579 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a3f53fade6ed6c14aad5577862937e1c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay.meta new file mode 100644 index 0000000000000000000000000000000000000000..0da39be97d6a6fec663a93a72f03b712861071da --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d880a3d3b580e384db43a01ff5d06326 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/DelaunayTriangle.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/DelaunayTriangle.cs new file mode 100644 index 0000000000000000000000000000000000000000..cfdfb92453869dd40941a533c2727c3b144fc5ad --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/DelaunayTriangle.cs @@ -0,0 +1,215 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/// Changes from the Java version +/// attributification +/// Future possibilities +/// Flattening out the number of indirections +/// Replacing arrays of 3 with fixed-length arrays? +/// Replacing bool[3] with a bit array of some sort? +/// Bundling everything into an AoS mess? +/// Hardcode them all as ABC ? + +using System; +using System.Diagnostics; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.Poly2Tri { + class DelaunayTriangle { + public FixedArray3<TriangulationPoint> Points; + public FixedArray3<DelaunayTriangle > Neighbors; + public FixedBitArray3 EdgeIsConstrained, EdgeIsDelaunay; + public bool IsInterior { get; set; } + + public DelaunayTriangle(TriangulationPoint p1, TriangulationPoint p2, TriangulationPoint p3) { + Points[0] = p1; + Points[1] = p2; + Points[2] = p3; + } + + public int IndexOf(TriangulationPoint p) { + int i = Points.IndexOf(p); + if (i==-1) throw new Exception("Calling index with a point that doesn't exist in triangle"); + return i; + } + + public int IndexCWFrom (TriangulationPoint p) { return (IndexOf(p)+2)%3; } + public int IndexCCWFrom(TriangulationPoint p) { return (IndexOf(p)+1)%3; } + + public bool Contains(TriangulationPoint p) { return Points.Contains(p); } + + /// <summary> + /// Update neighbor pointers + /// </summary> + /// <param name="p1">Point 1 of the shared edge</param> + /// <param name="p2">Point 2 of the shared edge</param> + /// <param name="t">This triangle's new neighbor</param> + private void MarkNeighbor( TriangulationPoint p1, TriangulationPoint p2, DelaunayTriangle t ) { + int i = EdgeIndex(p1,p2); + if ( i==-1 ) throw new Exception( "Error marking neighbors -- t doesn't contain edge p1-p2!" ); + Neighbors[i] = t; + } + + /// <summary> + /// Exhaustive search to update neighbor pointers + /// </summary> + public void MarkNeighbor( DelaunayTriangle t ) { + // Points of this triangle also belonging to t + bool a = t.Contains(Points[0]); + bool b = t.Contains(Points[1]); + bool c = t.Contains(Points[2]); + + if (b&&c) { Neighbors[0]=t; t.MarkNeighbor(Points[1],Points[2],this); } + else if (a&&c) { Neighbors[1]=t; t.MarkNeighbor(Points[0],Points[2],this); } + else if (a&&b) { Neighbors[2]=t; t.MarkNeighbor(Points[0],Points[1],this); } + else throw new Exception( "Failed to mark neighbor, doesn't share an edge!"); + } + + /// <param name="t">Opposite triangle</param> + /// <param name="p">The point in t that isn't shared between the triangles</param> + public TriangulationPoint OppositePoint(DelaunayTriangle t, TriangulationPoint p) { + System.Diagnostics.Debug.Assert(t != this, "self-pointer error"); + return PointCWFrom(t.PointCWFrom(p)); + } + + public DelaunayTriangle NeighborCWFrom (TriangulationPoint point) { return Neighbors[(Points.IndexOf(point)+1)%3]; } + public DelaunayTriangle NeighborCCWFrom (TriangulationPoint point) { return Neighbors[(Points.IndexOf(point)+2)%3]; } + public DelaunayTriangle NeighborAcrossFrom(TriangulationPoint point) { return Neighbors[ Points.IndexOf(point) ]; } + + public TriangulationPoint PointCCWFrom(TriangulationPoint point) { return Points[(IndexOf(point)+1)%3]; } + public TriangulationPoint PointCWFrom (TriangulationPoint point) { return Points[(IndexOf(point)+2)%3]; } + + private void RotateCW() { + var t = Points[2]; + Points[2] = Points[1]; + Points[1] = Points[0]; + Points[0] = t; + } + + /// <summary> + /// Legalize triangle by rotating clockwise around oPoint + /// </summary> + /// <param name="oPoint">The origin point to rotate around</param> + /// <param name="nPoint">???</param> + public void Legalize(TriangulationPoint oPoint, TriangulationPoint nPoint) { + RotateCW(); + Points[IndexCCWFrom(oPoint)] = nPoint; + } + + public override string ToString() { return Points[0] + "," + Points[1] + "," + Points[2]; } + + /// <summary> + /// Finalize edge marking + /// </summary> + public void MarkNeighborEdges() { + for (int i = 0; i < 3; i++) if ( EdgeIsConstrained[i] && Neighbors[i] != null ) { + Neighbors[i].MarkConstrainedEdge(Points[(i+1)%3], Points[(i+2)%3]); + } + } + + public void MarkEdge(DelaunayTriangle triangle) { + for (int i = 0; i < 3; i++) if ( EdgeIsConstrained[i] ) { + triangle.MarkConstrainedEdge(Points[(i+1)%3], Points[(i+2)%3]); + } + } + + public void MarkEdge(List<DelaunayTriangle> tList) { + foreach ( DelaunayTriangle t in tList ) + for ( int i = 0; i < 3; i++ ) + if ( t.EdgeIsConstrained[i] ) + { + MarkConstrainedEdge( t.Points[(i+1)%3], t.Points[(i+2)%3] ); + } + } + + public void MarkConstrainedEdge(int index) { + EdgeIsConstrained[index] = true; + } + + public void MarkConstrainedEdge(DTSweepConstraint edge) { + MarkConstrainedEdge(edge.P, edge.Q); + } + + /// <summary> + /// Mark edge as constrained + /// </summary> + public void MarkConstrainedEdge(TriangulationPoint p, TriangulationPoint q) { + int i = EdgeIndex(p,q); + if ( i != -1 ) EdgeIsConstrained[i] = true; + } + + public double Area() { + double b = Points[0].X - Points[1].X; + double h = Points[2].Y - Points[1].Y; + + return Math.Abs((b * h * 0.5f)); + } + + public TriangulationPoint Centroid() { + double cx = (Points[0].X + Points[1].X + Points[2].X) / 3f; + double cy = (Points[0].Y + Points[1].Y + Points[2].Y) / 3f; + return new TriangulationPoint(cx, cy); + } + + /// <summary> + /// Get the index of the neighbor that shares this edge (or -1 if it isn't shared) + /// </summary> + /// <returns>index of the shared edge or -1 if edge isn't shared</returns> + public int EdgeIndex(TriangulationPoint p1, TriangulationPoint p2) { + int i1 = Points.IndexOf(p1); + int i2 = Points.IndexOf(p2); + + // Points of this triangle in the edge p1-p2 + bool a = (i1==0 || i2==0); + bool b = (i1==1 || i2==1); + bool c = (i1==2 || i2==2); + + if (b&&c) return 0; + if (a&&c) return 1; + if (a&&b) return 2; + return -1; + } + + public bool GetConstrainedEdgeCCW ( TriangulationPoint p ) { return EdgeIsConstrained[(IndexOf(p)+2)%3]; } + public bool GetConstrainedEdgeCW ( TriangulationPoint p ) { return EdgeIsConstrained[(IndexOf(p)+1)%3]; } + public bool GetConstrainedEdgeAcross( TriangulationPoint p ) { return EdgeIsConstrained[ IndexOf(p) ]; } + public void SetConstrainedEdgeCCW ( TriangulationPoint p, bool ce ) { EdgeIsConstrained[(IndexOf(p)+2)%3] = ce; } + public void SetConstrainedEdgeCW ( TriangulationPoint p, bool ce ) { EdgeIsConstrained[(IndexOf(p)+1)%3] = ce; } + public void SetConstrainedEdgeAcross( TriangulationPoint p, bool ce ) { EdgeIsConstrained[ IndexOf(p) ] = ce; } + + public bool GetDelaunayEdgeCCW ( TriangulationPoint p ) { return EdgeIsDelaunay[(IndexOf(p)+2)%3]; } + public bool GetDelaunayEdgeCW ( TriangulationPoint p ) { return EdgeIsDelaunay[(IndexOf(p)+1)%3]; } + public bool GetDelaunayEdgeAcross( TriangulationPoint p ) { return EdgeIsDelaunay[ IndexOf(p) ]; } + public void SetDelaunayEdgeCCW ( TriangulationPoint p, bool ce ) { EdgeIsDelaunay[(IndexOf(p)+2)%3] = ce; } + public void SetDelaunayEdgeCW ( TriangulationPoint p, bool ce ) { EdgeIsDelaunay[(IndexOf(p)+1)%3] = ce; } + public void SetDelaunayEdgeAcross( TriangulationPoint p, bool ce ) { EdgeIsDelaunay[ IndexOf(p) ] = ce; } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/DelaunayTriangle.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/DelaunayTriangle.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d7ffbeac7ac27ee30829501b0f9a655a876bb203 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/DelaunayTriangle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec676d2a8ccecde4f8eb0d32aeaafb98 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep.meta new file mode 100644 index 0000000000000000000000000000000000000000..23dd4ce528c52c199bb7ea99305c6bb2fb0dcef8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9db8260d0bbb07e4bb0356d0b21fbc20 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFront.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFront.cs new file mode 100644 index 0000000000000000000000000000000000000000..72aa6a33f448b4b26a81218891a48498a8174180 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFront.cs @@ -0,0 +1,133 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/// Changes from the Java version +/// Removed BST code, but not all artifacts of it +/// Future possibilities +/// Eliminate Add/RemoveNode ? +/// Comments comments and more comments! + +using System.Text; +using System; + +namespace UnityEngine.ProBuilder.Poly2Tri { + /** + * @author Thomas Åhlen (thahlen@gmail.com) + */ + class AdvancingFront { + public AdvancingFrontNode Head; + public AdvancingFrontNode Tail; + protected AdvancingFrontNode Search; + + public AdvancingFront( AdvancingFrontNode head, AdvancingFrontNode tail ) { + this.Head = head; + this.Tail = tail; + this.Search = head; + AddNode(head); + AddNode(tail); + } + + public void AddNode( AdvancingFrontNode node ) { } + public void RemoveNode( AdvancingFrontNode node ) { } + + public override string ToString() { + StringBuilder sb = new StringBuilder(); + AdvancingFrontNode node = Head; + while (node != Tail) { + sb.Append(node.Point.X).Append("->"); + node = node.Next; + } + sb.Append(Tail.Point.X); + return sb.ToString(); + } + + /// <summary> + /// MM: This seems to be used by LocateNode to guess a position in the implicit linked list of AdvancingFrontNodes near x + /// Removed an overload that depended on this being exact + /// </summary> + private AdvancingFrontNode FindSearchNode( double x ) { + return Search; + } + + /// <summary> + /// We use a balancing tree to locate a node smaller or equal to given key value (in theory) + /// </summary> + public AdvancingFrontNode LocateNode( TriangulationPoint point ) { + return LocateNode(point.X); + } + + private AdvancingFrontNode LocateNode( double x ) { + AdvancingFrontNode node = FindSearchNode(x); + if (x < node.Value) { + while ((node = node.Prev) != null) + if (x >= node.Value) { + Search = node; + return node; + } + } else { + while ((node = node.Next) != null) + if (x < node.Value) { + Search = node.Prev; + return node.Prev; + } + } + return null; + } + + /// <summary> + /// This implementation will use simple node traversal algorithm to find a point on the front + /// </summary> + public AdvancingFrontNode LocatePoint( TriangulationPoint point ) { + double px = point.X; + AdvancingFrontNode node = FindSearchNode(px); + double nx = node.Point.X; + + if (px == nx) { + if (point != node.Point) { + // We might have two nodes with same x value for a short time + if (point == node.Prev.Point) { + node = node.Prev; + } else if (point == node.Next.Point) { + node = node.Next; + } else { + throw new Exception("Failed to find Node for given afront point"); + } + } + } else if (px < nx) { + while ((node = node.Prev) != null) if (point == node.Point) break; + } else { + while ((node = node.Next) != null) if (point == node.Point) break; + } + Search = node; + return node; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFront.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFront.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e8c49cb5cd412e10fc5ed39c6bc3de9812eff80e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFront.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 53aa5497892312842a4c059529cd2397 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFrontNode.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFrontNode.cs new file mode 100644 index 0000000000000000000000000000000000000000..03bf388e40e2053749c47be1c13eac8f9f8a003f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFrontNode.cs @@ -0,0 +1,54 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/// Changes from the Java version +/// Removed getters +/// Has* turned into attributes +/// Future possibilities +/// Comments! + +namespace UnityEngine.ProBuilder.Poly2Tri { + class AdvancingFrontNode { + public AdvancingFrontNode Next; + public AdvancingFrontNode Prev; + public double Value; + public TriangulationPoint Point; + public DelaunayTriangle Triangle; + + public AdvancingFrontNode(TriangulationPoint point) { + this.Point = point; + Value = point.X; + } + + public bool HasNext { get { return Next != null; } } + public bool HasPrev { get { return Prev != null; } } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFrontNode.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFrontNode.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..418b04aebb1f4fb421f886858e27e2c58cffe301 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/AdvancingFrontNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d6fbeb339bff0f4cb3744bd60aec40f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweep.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweep.cs new file mode 100644 index 0000000000000000000000000000000000000000..f323babb416c25eb1729c0dc4b6036937dca6fab --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweep.cs @@ -0,0 +1,908 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Sweep-line, Constrained Delauney Triangulation (CDT) See: Domiter, V. and + * Zalik, B.(2008)'Sweep-line algorithm for constrained Delaunay triangulation', + * International Journal of Geographical Information Science + * + * "FlipScan" Constrained Edge Algorithm invented by author of this code. + * + * Author: Thomas Åhlén, thahlen@gmail.com + */ + +/// Changes from the Java version +/// Turned DTSweep into a static class +/// Lots of deindentation via early bailout +/// Future possibilities +/// Comments! + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; + +namespace UnityEngine.ProBuilder.Poly2Tri { + static class DTSweep { + private const double PI_div2 = Math.PI / 2; + private const double PI_3div4 = 3 * Math.PI / 4; + + /// <summary> + /// Triangulate simple polygon with holes + /// </summary> + public static void Triangulate( DTSweepContext tcx ) { + tcx.CreateAdvancingFront(); + + Sweep(tcx); + + // TODO: remove temporary + // Check if the sweep algorithm is legalize robust + // By doing a legalize on all triangles and see if anything happens + // we know if the sweep algorithm missed some legalizations + // Console.WriteLine("============================"); + // foreach ( DelaunayTriangle t in tcx.Triangles ) + // { + // if( Legalize( tcx, t ) ) + // { + // tcx.getDebugContext().setPrimaryTriangle( t ); + // Console.WriteLine("[FIX] Triangle needed legalization after sweep"); + // } + // } + + // Finalize triangulation + if (tcx.TriangulationMode == TriangulationMode.Polygon) { + FinalizationPolygon(tcx); + } else { + FinalizationConvexHull(tcx); + } + + tcx.Done(); + } + + /// <summary> + /// Start sweeping the Y-sorted point set from bottom to top + /// </summary> + private static void Sweep( DTSweepContext tcx ) { + var points = tcx.Points; + TriangulationPoint point; + AdvancingFrontNode node; + + for (int i = 1; i < points.Count; i++) { + point = points[i]; + + node = PointEvent(tcx, point); + + if (point.HasEdges) foreach (DTSweepConstraint e in point.Edges) { + if (tcx.IsDebugEnabled) tcx.DTDebugContext.ActiveConstraint = e; + EdgeEvent(tcx, e, node); + } + tcx.Update(null); + } + } + + /// <summary> + /// If this is a Delaunay Triangulation of a pointset we need to fill so the triangle mesh gets a ConvexHull + /// </summary> + private static void FinalizationConvexHull( DTSweepContext tcx ) { + AdvancingFrontNode n1, n2; + DelaunayTriangle t1; + TriangulationPoint first, p1; + + n1 = tcx.Front.Head.Next; + n2 = n1.Next; + first = n1.Point; + + TurnAdvancingFrontConvex(tcx, n1, n2); + + n1 = tcx.Front.Tail.Prev; + if (n1.Triangle.Contains(n1.Next.Point) && n1.Triangle.Contains(n1.Prev.Point)) { + t1 = n1.Triangle.NeighborAcrossFrom(n1.Point); + RotateTrianglePair(n1.Triangle, n1.Point, t1, t1.OppositePoint(n1.Triangle, n1.Point)); + tcx.MapTriangleToNodes(n1.Triangle); + tcx.MapTriangleToNodes(t1); + } + n1 = tcx.Front.Head.Next; + if (n1.Triangle.Contains(n1.Prev.Point) && n1.Triangle.Contains(n1.Next.Point)) { + t1 = n1.Triangle.NeighborAcrossFrom(n1.Point); + RotateTrianglePair(n1.Triangle, n1.Point, t1, t1.OppositePoint(n1.Triangle, n1.Point)); + tcx.MapTriangleToNodes(n1.Triangle); + tcx.MapTriangleToNodes(t1); + } + + // TODO: implement ConvexHull for lower right and left boundary + // Lower right boundary + first = tcx.Front.Head.Point; + n2 = tcx.Front.Tail.Prev; + t1 = n2.Triangle; + p1 = n2.Point; + do { + tcx.RemoveFromList(t1); + p1 = t1.PointCCWFrom(p1); + if (p1 == first) break; + t1 = t1.NeighborCCWFrom(p1); + } while (true); + + // Lower left boundary + first = tcx.Front.Head.Next.Point; + p1 = t1.PointCWFrom(tcx.Front.Head.Point); + t1 = t1.NeighborCWFrom(tcx.Front.Head.Point); + do { + tcx.RemoveFromList(t1); + p1 = t1.PointCCWFrom(p1); + t1 = t1.NeighborCCWFrom(p1); + } while (p1 != first); + + tcx.FinalizeTriangulation(); + } + + /// <summary> + /// We will traverse the entire advancing front and fill it to form a convex hull. + /// </summary> + private static void TurnAdvancingFrontConvex( DTSweepContext tcx, AdvancingFrontNode b, AdvancingFrontNode c ) { + AdvancingFrontNode first = b; + while (c != tcx.Front.Tail) { + if (tcx.IsDebugEnabled) tcx.DTDebugContext.ActiveNode = c; + + if (TriangulationUtil.Orient2d(b.Point, c.Point, c.Next.Point) == Orientation.CCW) { + // [b,c,d] Concave - fill around c + Fill(tcx, c); + c = c.Next; + } else { + // [b,c,d] Convex + if (b != first && TriangulationUtil.Orient2d(b.Prev.Point, b.Point, c.Point) == Orientation.CCW) { + // [a,b,c] Concave - fill around b + Fill(tcx, b); + b = b.Prev; + } else { + // [a,b,c] Convex - nothing to fill + b = c; + c = c.Next; + } + } + } + } + + private static void FinalizationPolygon( DTSweepContext tcx ) { + // Get an Internal triangle to start with + DelaunayTriangle t = tcx.Front.Head.Next.Triangle; + TriangulationPoint p = tcx.Front.Head.Next.Point; + while (!t.GetConstrainedEdgeCW(p)) t = t.NeighborCCWFrom(p); + + // Collect interior triangles constrained by edges + tcx.MeshClean(t); + } + + /// <summary> + /// Find closes node to the left of the new point and + /// create a new triangle. If needed new holes and basins + /// will be filled to. + /// </summary> + private static AdvancingFrontNode PointEvent( DTSweepContext tcx, TriangulationPoint point ) { + AdvancingFrontNode node, newNode; + + node = tcx.LocateNode(point); + if (tcx.IsDebugEnabled) tcx.DTDebugContext.ActiveNode = node; + newNode = NewFrontTriangle(tcx, point, node); + + // Only need to check +epsilon since point never have smaller + // x value than node due to how we fetch nodes from the front + if (point.X <= node.Point.X + TriangulationUtil.EPSILON) Fill(tcx, node); + + tcx.AddNode(newNode); + + FillAdvancingFront(tcx, newNode); + return newNode; + } + + /// <summary> + /// Creates a new front triangle and legalize it + /// </summary> + private static AdvancingFrontNode NewFrontTriangle( DTSweepContext tcx, TriangulationPoint point, AdvancingFrontNode node ) { + AdvancingFrontNode newNode; + DelaunayTriangle triangle; + + triangle = new DelaunayTriangle(point, node.Point, node.Next.Point); + triangle.MarkNeighbor(node.Triangle); + tcx.Triangles.Add(triangle); + + newNode = new AdvancingFrontNode(point); + newNode.Next = node.Next; + newNode.Prev = node; + node.Next.Prev = newNode; + node.Next = newNode; + + tcx.AddNode(newNode); // XXX: BST + + if (tcx.IsDebugEnabled) tcx.DTDebugContext.ActiveNode = newNode; + + if (!Legalize(tcx, triangle)) tcx.MapTriangleToNodes(triangle); + + return newNode; + } + + private static void EdgeEvent( DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node ) { + try + { + tcx.EdgeEvent.ConstrainedEdge = edge; + tcx.EdgeEvent.Right = edge.P.X > edge.Q.X; + + if (tcx.IsDebugEnabled) { tcx.DTDebugContext.PrimaryTriangle = node.Triangle; } + + if (IsEdgeSideOfTriangle(node.Triangle, edge.P, edge.Q)) + return; + + // For now we will do all needed filling + // TODO: integrate with flip process might give some better performance + // but for now this avoid the issue with cases that needs both flips and fills + FillEdgeEvent(tcx, edge, node); + + EdgeEvent(tcx, edge.P, edge.Q, node.Triangle, edge.Q); + } + catch { } +// catch (PointOnEdgeException e) +// { +// //Debug.WriteLine( String.Format( "Warning: Skipping Edge: {0}", e.Message ) ); +// throw; +// } + } + + private static void FillEdgeEvent( DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node ) { + if (tcx.EdgeEvent.Right) { + FillRightAboveEdgeEvent(tcx, edge, node); + } else { + FillLeftAboveEdgeEvent(tcx, edge, node); + } + } + + private static void FillRightConcaveEdgeEvent( DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node ) { + Fill(tcx, node.Next); + if (node.Next.Point != edge.P) { + // Next above or below edge? + if (TriangulationUtil.Orient2d(edge.Q, node.Next.Point, edge.P) == Orientation.CCW) { + // Below + if (TriangulationUtil.Orient2d(node.Point, node.Next.Point, node.Next.Next.Point) == Orientation.CCW) { + // Next is concave + FillRightConcaveEdgeEvent(tcx, edge, node); + } else { + // Next is convex + } + } + } + } + + private static void FillRightConvexEdgeEvent( DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node ) { + // Next concave or convex? + if (TriangulationUtil.Orient2d(node.Next.Point, node.Next.Next.Point, node.Next.Next.Next.Point) == Orientation.CCW) { + // Concave + FillRightConcaveEdgeEvent(tcx, edge, node.Next); + } else { + // Convex + // Next above or below edge? + if (TriangulationUtil.Orient2d(edge.Q, node.Next.Next.Point, edge.P) == Orientation.CCW) { + // Below + FillRightConvexEdgeEvent(tcx, edge, node.Next); + } else { + // Above + } + } + } + + private static void FillRightBelowEdgeEvent( DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node ) { + if (tcx.IsDebugEnabled) tcx.DTDebugContext.ActiveNode = node; + + if (node.Point.X < edge.P.X) { // needed? + if (TriangulationUtil.Orient2d(node.Point, node.Next.Point, node.Next.Next.Point) == Orientation.CCW) { + // Concave + FillRightConcaveEdgeEvent(tcx, edge, node); + } else { + // Convex + FillRightConvexEdgeEvent(tcx, edge, node); + // Retry this one + FillRightBelowEdgeEvent(tcx, edge, node); + } + + } + } + + private static void FillRightAboveEdgeEvent( DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node ) { + while (node.Next.Point.X < edge.P.X) { + if (tcx.IsDebugEnabled) { tcx.DTDebugContext.ActiveNode = node; } + // Check if next node is below the edge + Orientation o1 = TriangulationUtil.Orient2d(edge.Q, node.Next.Point, edge.P); + if (o1 == Orientation.CCW) { + FillRightBelowEdgeEvent(tcx, edge, node); + } else { + node = node.Next; + } + } + } + + private static void FillLeftConvexEdgeEvent( DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node ) { + // Next concave or convex? + if (TriangulationUtil.Orient2d(node.Prev.Point, node.Prev.Prev.Point, node.Prev.Prev.Prev.Point) == Orientation.CW) { + // Concave + FillLeftConcaveEdgeEvent(tcx, edge, node.Prev); + } else { + // Convex + // Next above or below edge? + if (TriangulationUtil.Orient2d(edge.Q, node.Prev.Prev.Point, edge.P) == Orientation.CW) { + // Below + FillLeftConvexEdgeEvent(tcx, edge, node.Prev); + } else { + // Above + } + } + } + + private static void FillLeftConcaveEdgeEvent( DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node ) { + Fill(tcx, node.Prev); + if (node.Prev.Point != edge.P) { + // Next above or below edge? + if (TriangulationUtil.Orient2d(edge.Q, node.Prev.Point, edge.P) == Orientation.CW) { + // Below + if (TriangulationUtil.Orient2d(node.Point, node.Prev.Point, node.Prev.Prev.Point) == Orientation.CW) { + // Next is concave + FillLeftConcaveEdgeEvent(tcx, edge, node); + } else { + // Next is convex + } + } + } + } + + private static void FillLeftBelowEdgeEvent( DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node ) { + if (tcx.IsDebugEnabled) tcx.DTDebugContext.ActiveNode = node; + + if (node.Point.X > edge.P.X) { + if (TriangulationUtil.Orient2d(node.Point, node.Prev.Point, node.Prev.Prev.Point) == Orientation.CW) { + // Concave + FillLeftConcaveEdgeEvent(tcx, edge, node); + } else { + // Convex + FillLeftConvexEdgeEvent(tcx, edge, node); + // Retry this one + FillLeftBelowEdgeEvent(tcx, edge, node); + } + + } + } + + private static void FillLeftAboveEdgeEvent( DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node ) { + while (node.Prev.Point.X > edge.P.X) { + if (tcx.IsDebugEnabled) tcx.DTDebugContext.ActiveNode = node; + // Check if next node is below the edge + Orientation o1 = TriangulationUtil.Orient2d(edge.Q, node.Prev.Point, edge.P); + if (o1 == Orientation.CW) { + FillLeftBelowEdgeEvent(tcx, edge, node); + } else { + node = node.Prev; + } + } + } + + private static bool IsEdgeSideOfTriangle( DelaunayTriangle triangle, TriangulationPoint ep, TriangulationPoint eq ) { + int index = triangle.EdgeIndex(ep, eq); + if ( index == -1 ) return false; + triangle.MarkConstrainedEdge(index); + triangle = triangle.Neighbors[index]; + if (triangle != null) triangle.MarkConstrainedEdge(ep, eq); + return true; + } + + private static void EdgeEvent( DTSweepContext tcx, TriangulationPoint ep, TriangulationPoint eq, DelaunayTriangle triangle, TriangulationPoint point ) { + TriangulationPoint p1, p2; + + if (tcx.IsDebugEnabled) tcx.DTDebugContext.PrimaryTriangle=triangle; + + if (IsEdgeSideOfTriangle(triangle, ep, eq)) return; + + p1 = triangle.PointCCWFrom(point); + Orientation o1 = TriangulationUtil.Orient2d(eq, p1, ep); + if (o1 == Orientation.Collinear) { + // TODO: Split edge in two + //// splitEdge( ep, eq, p1 ); + // edgeEvent( tcx, p1, eq, triangle, point ); + // edgeEvent( tcx, ep, p1, triangle, p1 ); + // return; + throw new PointOnEdgeException("EdgeEvent - Point on constrained edge not supported yet",eq,p1,ep); + } + + p2 = triangle.PointCWFrom(point); + Orientation o2 = TriangulationUtil.Orient2d(eq, p2, ep); + if (o2 == Orientation.Collinear) { + // TODO: Split edge in two + // edgeEvent( tcx, p2, eq, triangle, point ); + // edgeEvent( tcx, ep, p2, triangle, p2 ); + // return; + throw new PointOnEdgeException("EdgeEvent - Point on constrained edge not supported yet",eq,p2,ep); + } + + if (o1 == o2) { + // Need to decide if we are rotating CW or CCW to get to a triangle + // that will cross edge + if (o1 == Orientation.CW) { + triangle = triangle.NeighborCCWFrom(point); + } else { + triangle = triangle.NeighborCWFrom(point); + } + EdgeEvent(tcx, ep, eq, triangle, point); + } else { + // This triangle crosses constraint so lets flippin start! + FlipEdgeEvent(tcx, ep, eq, triangle, point); + } + } + + /// <summary> + /// In the case of a pointset with some constraint edges. If a triangle side is collinear + /// with a part of the constraint we split the constraint into two constraints. This could + /// happen when the given constraint migth intersect a point in the set.<br> + /// This can never happen in the case when we are working with a polygon. + /// + /// Think of two triangles that have non shared sides that are collinear and the constraint + /// is set from a point in triangle A to a point in triangle B so that the constraint is + /// the union of both those sides. We then have to split the constraint into two so we get + /// one constraint for each triangle. + /// </summary> + /// <param name="ep"></param> + /// <param name="eq"></param> + /// <param name="p">point on the edge between ep->eq</param> + private static void SplitEdge( TriangulationPoint ep, TriangulationPoint eq, TriangulationPoint p ) { + DTSweepConstraint edge = eq.Edges.First( e => e.Q==ep || e.P==ep ); + edge.P = p; + new DTSweepConstraint(ep, p); // Et tu, Brute? --MM + + // // Redo this edge now that we have split the constraint + // newEdgeEvent( tcx, edge, triangle, point ); + // // Continue with new edge + // newEdgeEvent( tcx, edge, triangle, p2 ); + } + + private static void FlipEdgeEvent( DTSweepContext tcx, TriangulationPoint ep, TriangulationPoint eq, DelaunayTriangle t, TriangulationPoint p ) { + DelaunayTriangle ot = t.NeighborAcrossFrom(p); + TriangulationPoint op = ot.OppositePoint(t, p); + + if (ot == null) { + // If we want to integrate the fillEdgeEvent do it here + // With current implementation we should never get here + throw new InvalidOperationException("[BUG:FIXME] FLIP failed due to missing triangle"); + } + + if (tcx.IsDebugEnabled) { + tcx.DTDebugContext.PrimaryTriangle = t; + tcx.DTDebugContext.SecondaryTriangle = ot; + } // TODO: remove + + bool inScanArea = TriangulationUtil.InScanArea(p, t.PointCCWFrom(p), t.PointCWFrom(p), op); + if (inScanArea) { + // Lets rotate shared edge one vertex CW + RotateTrianglePair(t, p, ot, op); + tcx.MapTriangleToNodes(t); + tcx.MapTriangleToNodes(ot); + + if (p == eq && op == ep) { + if (eq == tcx.EdgeEvent.ConstrainedEdge.Q + && ep == tcx.EdgeEvent.ConstrainedEdge.P) { + if (tcx.IsDebugEnabled) Console.WriteLine("[FLIP] - constrained edge done"); // TODO: remove + t.MarkConstrainedEdge(ep, eq); + ot.MarkConstrainedEdge(ep, eq); + Legalize(tcx, t); + Legalize(tcx, ot); + } else { + if (tcx.IsDebugEnabled) Console.WriteLine("[FLIP] - subedge done"); // TODO: remove + // XXX: I think one of the triangles should be legalized here? + } + } else { + if (tcx.IsDebugEnabled) Console.WriteLine("[FLIP] - flipping and continuing with triangle still crossing edge"); // TODO: remove + Orientation o = TriangulationUtil.Orient2d(eq, op, ep); + t = NextFlipTriangle(tcx, o, t, ot, p, op); + FlipEdgeEvent(tcx, ep, eq, t, p); + } + } else { + TriangulationPoint newP = NextFlipPoint(ep, eq, ot, op); + FlipScanEdgeEvent(tcx, ep, eq, t, ot, newP); + EdgeEvent(tcx, ep, eq, t, p); + } + } + + /// <summary> + /// When we need to traverse from one triangle to the next we need + /// the point in current triangle that is the opposite point to the next + /// triangle. + /// </summary> + private static TriangulationPoint NextFlipPoint( TriangulationPoint ep, TriangulationPoint eq, DelaunayTriangle ot, TriangulationPoint op ) { + Orientation o2d = TriangulationUtil.Orient2d(eq, op, ep); + switch ( o2d ) { + case Orientation.CW: return ot.PointCCWFrom(op); + case Orientation.CCW: return ot.PointCWFrom(op); + case Orientation.Collinear: + // TODO: implement support for point on constraint edge + throw new PointOnEdgeException("Point on constrained edge not supported yet",eq,op,ep); + default: + throw new NotImplementedException("Orientation not handled"); + } + } + + /// <summary> + /// After a flip we have two triangles and know that only one will still be + /// intersecting the edge. So decide which to contiune with and legalize the other + /// </summary> + /// <param name="tcx"></param> + /// <param name="o">should be the result of an TriangulationUtil.orient2d( eq, op, ep )</param> + /// <param name="t">triangle 1</param> + /// <param name="ot">triangle 2</param> + /// <param name="p">a point shared by both triangles</param> + /// <param name="op">another point shared by both triangles</param> + /// <returns>returns the triangle still intersecting the edge</returns> + private static DelaunayTriangle NextFlipTriangle( DTSweepContext tcx, Orientation o, DelaunayTriangle t, DelaunayTriangle ot, TriangulationPoint p, TriangulationPoint op ) { + int edgeIndex; + if (o == Orientation.CCW) { + // ot is not crossing edge after flip + edgeIndex = ot.EdgeIndex(p, op); + ot.EdgeIsDelaunay[edgeIndex] = true; + Legalize(tcx, ot); + ot.EdgeIsDelaunay.Clear(); + return t; + } + // t is not crossing edge after flip + edgeIndex = t.EdgeIndex(p, op); + t.EdgeIsDelaunay[edgeIndex] = true; + Legalize(tcx, t); + t.EdgeIsDelaunay.Clear(); + return ot; + } + + /// <summary> + /// Scan part of the FlipScan algorithm<br> + /// When a triangle pair isn't flippable we will scan for the next + /// point that is inside the flip triangle scan area. When found + /// we generate a new flipEdgeEvent + /// </summary> + /// <param name="tcx"></param> + /// <param name="ep">last point on the edge we are traversing</param> + /// <param name="eq">first point on the edge we are traversing</param> + /// <param name="flipTriangle">the current triangle sharing the point eq with edge</param> + /// <param name="t"></param> + /// <param name="p"></param> + private static void FlipScanEdgeEvent( DTSweepContext tcx, TriangulationPoint ep, TriangulationPoint eq, DelaunayTriangle flipTriangle, DelaunayTriangle t, TriangulationPoint p ) { + DelaunayTriangle ot; + TriangulationPoint op, newP; + bool inScanArea; + + ot = t.NeighborAcrossFrom(p); + op = ot.OppositePoint(t, p); + + if (ot == null) { + // If we want to integrate the fillEdgeEvent do it here + // With current implementation we should never get here + throw new Exception("[BUG:FIXME] FLIP failed due to missing triangle"); + } + + if (tcx.IsDebugEnabled) { + Console.WriteLine("[FLIP:SCAN] - scan next point"); // TODO: remove + tcx.DTDebugContext.PrimaryTriangle = t; + tcx.DTDebugContext.SecondaryTriangle = ot; + } + + inScanArea = TriangulationUtil.InScanArea(eq, flipTriangle.PointCCWFrom(eq), flipTriangle.PointCWFrom(eq), op); + if (inScanArea) { + // flip with new edge op->eq + FlipEdgeEvent(tcx, eq, op, ot, op); + // TODO: Actually I just figured out that it should be possible to + // improve this by getting the next ot and op before the the above + // flip and continue the flipScanEdgeEvent here + // set new ot and op here and loop back to inScanArea test + // also need to set a new flipTriangle first + // Turns out at first glance that this is somewhat complicated + // so it will have to wait. + } else { + newP = NextFlipPoint(ep, eq, ot, op); + FlipScanEdgeEvent(tcx, ep, eq, flipTriangle, ot, newP); + } + } + + /// <summary> + /// Fills holes in the Advancing Front + /// </summary> + private static void FillAdvancingFront( DTSweepContext tcx, AdvancingFrontNode n ) { + AdvancingFrontNode node; + double angle; + + // Fill right holes + node = n.Next; + while (node.HasNext) { + angle = HoleAngle(node); + if (angle > PI_div2 || angle < -PI_div2) break; + Fill(tcx, node); + node = node.Next; + } + + // Fill left holes + node = n.Prev; + while (node.HasPrev) { + angle = HoleAngle(node); + if (angle > PI_div2 || angle < -PI_div2) break; + Fill(tcx, node); + node = node.Prev; + } + + // Fill right basins + if (n.HasNext && n.Next.HasNext) { + angle = BasinAngle(n); + if (angle < PI_3div4) FillBasin(tcx, n); + } + } + + /// <summary> + /// Fills a basin that has formed on the Advancing Front to the right + /// of given node.<br> + /// First we decide a left,bottom and right node that forms the + /// boundaries of the basin. Then we do a reqursive fill. + /// </summary> + /// <param name="tcx"></param> + /// <param name="node">starting node, this or next node will be left node</param> + private static void FillBasin( DTSweepContext tcx, AdvancingFrontNode node ) { + if (TriangulationUtil.Orient2d(node.Point, node.Next.Point, node.Next.Next.Point) == Orientation.CCW) { + // tcx.basin.leftNode = node.next.next; + tcx.Basin.leftNode = node; + } else { + tcx.Basin.leftNode = node.Next; + } + + // Find the bottom and right node + tcx.Basin.bottomNode = tcx.Basin.leftNode; + while (tcx.Basin.bottomNode.HasNext && tcx.Basin.bottomNode.Point.Y >= tcx.Basin.bottomNode.Next.Point.Y) tcx.Basin.bottomNode = tcx.Basin.bottomNode.Next; + + if (tcx.Basin.bottomNode == tcx.Basin.leftNode) return; // No valid basin + + tcx.Basin.rightNode = tcx.Basin.bottomNode; + while (tcx.Basin.rightNode.HasNext && tcx.Basin.rightNode.Point.Y < tcx.Basin.rightNode.Next.Point.Y) tcx.Basin.rightNode = tcx.Basin.rightNode.Next; + + if (tcx.Basin.rightNode == tcx.Basin.bottomNode) return; // No valid basins + + tcx.Basin.width = tcx.Basin.rightNode.Point.X - tcx.Basin.leftNode.Point.X; + tcx.Basin.leftHighest = tcx.Basin.leftNode.Point.Y > tcx.Basin.rightNode.Point.Y; + + FillBasinReq(tcx, tcx.Basin.bottomNode); + } + + /// <summary> + /// Recursive algorithm to fill a Basin with triangles + /// </summary> + private static void FillBasinReq( DTSweepContext tcx, AdvancingFrontNode node ) { + if (IsShallow(tcx, node)) return; // if shallow stop filling + + Fill(tcx, node); + if (node.Prev == tcx.Basin.leftNode && node.Next == tcx.Basin.rightNode) { + return; + } else if (node.Prev == tcx.Basin.leftNode) { + Orientation o = TriangulationUtil.Orient2d(node.Point, node.Next.Point, node.Next.Next.Point); + if (o == Orientation.CW) return; + node = node.Next; + } else if (node.Next == tcx.Basin.rightNode) { + Orientation o = TriangulationUtil.Orient2d(node.Point, node.Prev.Point, node.Prev.Prev.Point); + if (o == Orientation.CCW) return; + node = node.Prev; + } else { + // Continue with the neighbor node with lowest Y value + if (node.Prev.Point.Y < node.Next.Point.Y) { + node = node.Prev; + } else { + node = node.Next; + } + } + FillBasinReq(tcx, node); + } + + private static bool IsShallow( DTSweepContext tcx, AdvancingFrontNode node ) { + double height; + + if (tcx.Basin.leftHighest) { + height = tcx.Basin.leftNode.Point.Y - node.Point.Y; + } else { + height = tcx.Basin.rightNode.Point.Y - node.Point.Y; + } + if (tcx.Basin.width > height) { + return true; + } + return false; + } + + /// <summary> + /// ??? + /// </summary> + /// <param name="node">middle node</param> + /// <returns>the angle between 3 front nodes</returns> + private static double HoleAngle( AdvancingFrontNode node ) { + // XXX: do we really need a signed angle for holeAngle? + // could possible save some cycles here + /* Complex plane + * ab = cosA +i*sinA + * ab = (ax + ay*i)(bx + by*i) = (ax*bx + ay*by) + i(ax*by-ay*bx) + * atan2(y,x) computes the principal value of the argument function + * applied to the complex number x+iy + * Where x = ax*bx + ay*by + * y = ax*by - ay*bx + */ + double px = node.Point.X; + double py = node.Point.Y; + double ax = node.Next.Point.X - px; + double ay = node.Next.Point.Y - py; + double bx = node.Prev.Point.X - px; + double by = node.Prev.Point.Y - py; + return Math.Atan2(ax * by - ay * bx, ax * bx + ay * by); + } + + /// <summary> + /// The basin angle is decided against the horizontal line [1,0] + /// </summary> + private static double BasinAngle( AdvancingFrontNode node ) { + double ax = node.Point.X - node.Next.Next.Point.X; + double ay = node.Point.Y - node.Next.Next.Point.Y; + return Math.Atan2(ay, ax); + } + + /// <summary> + /// Adds a triangle to the advancing front to fill a hole. + /// </summary> + /// <param name="tcx"></param> + /// <param name="node">middle node, that is the bottom of the hole</param> + private static void Fill( DTSweepContext tcx, AdvancingFrontNode node ) { + DelaunayTriangle triangle = new DelaunayTriangle(node.Prev.Point, node.Point, node.Next.Point); + // TODO: should copy the cEdge value from neighbor triangles + // for now cEdge values are copied during the legalize + triangle.MarkNeighbor(node.Prev.Triangle); + triangle.MarkNeighbor(node.Triangle); + tcx.Triangles.Add(triangle); + + // Update the advancing front + node.Prev.Next = node.Next; + node.Next.Prev = node.Prev; + tcx.RemoveNode(node); + + // If it was legalized the triangle has already been mapped + if (!Legalize(tcx, triangle)) tcx.MapTriangleToNodes(triangle); + } + + /// <summary> + /// Returns true if triangle was legalized + /// </summary> + private static bool Legalize( DTSweepContext tcx, DelaunayTriangle t ) { + // To legalize a triangle we start by finding if any of the three edges + // violate the Delaunay condition + for (int i = 0; i < 3; i++) { + // TODO: fix so that cEdge is always valid when creating new triangles then we can check it here + // instead of below with ot + if (t.EdgeIsDelaunay[i]) continue; + + DelaunayTriangle ot = t.Neighbors[i]; + if (ot == null) continue; + + TriangulationPoint p = t.Points[i]; + TriangulationPoint op = ot.OppositePoint(t, p); + int oi = ot.IndexOf(op); + // If this is a Constrained Edge or a Delaunay Edge(only during recursive legalization) + // then we should not try to legalize + if (ot.EdgeIsConstrained[oi] || ot.EdgeIsDelaunay[oi]) { + t.EdgeIsConstrained[i] = ot.EdgeIsConstrained[oi]; // XXX: have no good way of setting this property when creating new triangles so lets set it here + continue; + } + + if (!TriangulationUtil.SmartIncircle(p,t.PointCCWFrom(p),t.PointCWFrom(p),op)) continue; + + // Lets mark this shared edge as Delaunay + t.EdgeIsDelaunay[i] = true; + ot.EdgeIsDelaunay[oi] = true; + + // Lets rotate shared edge one vertex CW to legalize it + RotateTrianglePair(t, p, ot, op); + + // We now got one valid Delaunay Edge shared by two triangles + // This gives us 4 new edges to check for Delaunay + + // Make sure that triangle to node mapping is done only one time for a specific triangle + if (!Legalize(tcx, t)) tcx.MapTriangleToNodes(t); + if (!Legalize(tcx, ot)) tcx.MapTriangleToNodes(ot); + + // Reset the Delaunay edges, since they only are valid Delaunay edges + // until we add a new triangle or point. + // XXX: need to think about this. Can these edges be tried after we + // return to previous recursive level? + t.EdgeIsDelaunay[i] = false; + ot.EdgeIsDelaunay[oi] = false; + + // If triangle have been legalized no need to check the other edges since + // the recursive legalization will handles those so we can end here. + return true; + } + return false; + } + + /// <summary> + /// Rotates a triangle pair one vertex CW + /// n2 n2 + /// P +-----+ P +-----+ + /// | t /| |\ t | + /// | / | | \ | + /// n1| / |n3 n1| \ |n3 + /// | / | after CW | \ | + /// |/ oT | | oT \| + /// +-----+ oP +-----+ + /// n4 n4 + /// </summary> + private static void RotateTrianglePair( DelaunayTriangle t, TriangulationPoint p, DelaunayTriangle ot, TriangulationPoint op ) { + DelaunayTriangle n1, n2, n3, n4; + n1 = t.NeighborCCWFrom(p); + n2 = t.NeighborCWFrom(p); + n3 = ot.NeighborCCWFrom(op); + n4 = ot.NeighborCWFrom(op); + + bool ce1, ce2, ce3, ce4; + ce1 = t.GetConstrainedEdgeCCW(p); + ce2 = t.GetConstrainedEdgeCW(p); + ce3 = ot.GetConstrainedEdgeCCW(op); + ce4 = ot.GetConstrainedEdgeCW(op); + + bool de1, de2, de3, de4; + de1 = t.GetDelaunayEdgeCCW(p); + de2 = t.GetDelaunayEdgeCW(p); + de3 = ot.GetDelaunayEdgeCCW(op); + de4 = ot.GetDelaunayEdgeCW(op); + + t.Legalize(p, op); + ot.Legalize(op, p); + + // Remap dEdge + ot.SetDelaunayEdgeCCW(p, de1); + t.SetDelaunayEdgeCW(p, de2); + t.SetDelaunayEdgeCCW(op, de3); + ot.SetDelaunayEdgeCW(op, de4); + + // Remap cEdge + ot.SetConstrainedEdgeCCW(p, ce1); + t.SetConstrainedEdgeCW(p, ce2); + t.SetConstrainedEdgeCCW(op, ce3); + ot.SetConstrainedEdgeCW(op, ce4); + + // Remap neighbors + // XXX: might optimize the markNeighbor by keeping track of + // what side should be assigned to what neighbor after the + // rotation. Now mark neighbor does lots of testing to find + // the right side. + t.Neighbors.Clear(); + ot.Neighbors.Clear(); + if (n1 != null) ot.MarkNeighbor(n1); + if (n2 != null) t.MarkNeighbor(n2); + if (n3 != null) t.MarkNeighbor(n3); + if (n4 != null) ot.MarkNeighbor(n4); + t.MarkNeighbor(ot); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweep.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweep.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..cec5bdc6e7bfbe894453a5b1e448d96a7bcf4886 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b3f77c5dfa698a478ad5d291674b8a5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepBasin.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepBasin.cs new file mode 100644 index 0000000000000000000000000000000000000000..349d0794b06a7090742e4fbc4b2afd794647ecc2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepBasin.cs @@ -0,0 +1,40 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace UnityEngine.ProBuilder.Poly2Tri { + class DTSweepBasin { + public AdvancingFrontNode leftNode; + public AdvancingFrontNode bottomNode; + public AdvancingFrontNode rightNode; + public double width; + public bool leftHighest; + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepBasin.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepBasin.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ecc90d36a2e3aca29ea69918d388090717ece1cf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepBasin.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6658a80b0b3b964281a5312b39c9203 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepConstraint.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepConstraint.cs new file mode 100644 index 0000000000000000000000000000000000000000..986fbddb2307f536d42a8f270f3c4c5b916e2d31 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepConstraint.cs @@ -0,0 +1,57 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace UnityEngine.ProBuilder.Poly2Tri { + class DTSweepConstraint : TriangulationConstraint { + /// <summary> + /// Give two points in any order. Will always be ordered so + /// that q.y > p.y and q.x > p.x if same y value + /// </summary> + public DTSweepConstraint( TriangulationPoint p1, TriangulationPoint p2 ) { + P = p1; + Q = p2; + if (p1.Y > p2.Y) { + Q = p1; + P = p2; + } else if (p1.Y == p2.Y) { + if (p1.X > p2.X) { + Q = p1; + P = p2; + } else if (p1.X == p2.X) { + // logger.info( "Failed to create constraint {}={}", p1, p2 ); + // throw new DuplicatePointException( p1 + "=" + p2 ); + // return; + } + } + Q.AddEdge(this); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepConstraint.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepConstraint.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..46b8fdf6e16684664f7181f7330317893fee1c62 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepConstraint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2efa3d03c26294747aaa61c2a09ac41f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepContext.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepContext.cs new file mode 100644 index 0000000000000000000000000000000000000000..fd2fabe121e716cf9b56d0f7405b836b81ec9bc0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepContext.cs @@ -0,0 +1,197 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace UnityEngine.ProBuilder.Poly2Tri { + /** + * + * @author Thomas Åhlén, thahlen@gmail.com + * + */ + class DTSweepContext : TriangulationContext { + // Inital triangle factor, seed triangle will extend 30% of + // PointSet width to both left and right. + private readonly float ALPHA = 0.3f; + + public AdvancingFront Front; + public TriangulationPoint Head { get; set; } + public TriangulationPoint Tail { get; set; } + + public DTSweepBasin Basin = new DTSweepBasin(); + public DTSweepEdgeEvent EdgeEvent = new DTSweepEdgeEvent(); + + private DTSweepPointComparator _comparator = new DTSweepPointComparator(); + + public DTSweepContext() { + Clear(); + } + + public override bool IsDebugEnabled { get { + return base.IsDebugEnabled; + } protected set { + if (value && DebugContext == null) DebugContext = new DTSweepDebugContext(this); + base.IsDebugEnabled = value; + }} + + public void RemoveFromList( DelaunayTriangle triangle ) { + Triangles.Remove(triangle); + // TODO: remove all neighbor pointers to this triangle + // for( int i=0; i<3; i++ ) + // { + // if( triangle.neighbors[i] != null ) + // { + // triangle.neighbors[i].clearNeighbor( triangle ); + // } + // } + // triangle.clearNeighbors(); + } + + public void MeshClean( DelaunayTriangle triangle ) { + MeshCleanReq(triangle); + } + + private void MeshCleanReq( DelaunayTriangle triangle ) { + if (triangle != null && !triangle.IsInterior) { + triangle.IsInterior = true; + Triangulatable.AddTriangle(triangle); + + for (int i = 0; i < 3; i++) + if (!triangle.EdgeIsConstrained[i]) + { + MeshCleanReq(triangle.Neighbors[i]); + } + } + } + + public override void Clear() { + base.Clear(); + Triangles.Clear(); + } + + public void AddNode( AdvancingFrontNode node ) { + // Console.WriteLine( "add:" + node.key + ":" + System.identityHashCode(node.key)); + // m_nodeTree.put( node.getKey(), node ); + Front.AddNode(node); + } + + public void RemoveNode( AdvancingFrontNode node ) { + // Console.WriteLine( "remove:" + node.key + ":" + System.identityHashCode(node.key)); + // m_nodeTree.delete( node.getKey() ); + Front.RemoveNode(node); + } + + public AdvancingFrontNode LocateNode( TriangulationPoint point ) { + return Front.LocateNode(point); + } + + public void CreateAdvancingFront() { + AdvancingFrontNode head, tail, middle; + // Initial triangle + DelaunayTriangle iTriangle = new DelaunayTriangle(Points[0], Tail, Head); + Triangles.Add(iTriangle); + + head = new AdvancingFrontNode(iTriangle.Points[1]); + head.Triangle = iTriangle; + middle = new AdvancingFrontNode(iTriangle.Points[0]); + middle.Triangle = iTriangle; + tail = new AdvancingFrontNode(iTriangle.Points[2]); + + Front = new AdvancingFront(head, tail); + Front.AddNode(middle); + + // TODO: I think it would be more intuitive if head is middles next and not previous + // so swap head and tail + Front.Head.Next = middle; + middle.Next = Front.Tail; + middle.Prev = Front.Head; + Front.Tail.Prev = middle; + } + + + + + + /// <summary> + /// Try to map a node to all sides of this triangle that don't have + /// a neighbor. + /// </summary> + public void MapTriangleToNodes( DelaunayTriangle t ) { + for (int i = 0; i < 3; i++) + if (t.Neighbors[i] == null) + { + AdvancingFrontNode n = Front.LocatePoint(t.PointCWFrom(t.Points[i])); + if (n != null) n.Triangle = t; + } + } + + public override void PrepareTriangulation( Triangulatable t ) { + base.PrepareTriangulation(t); + + double xmax, xmin; + double ymax, ymin; + + xmax = xmin = Points[0].X; + ymax = ymin = Points[0].Y; + + // Calculate bounds. Should be combined with the sorting + foreach (TriangulationPoint p in Points) { + if (p.X > xmax) xmax = p.X; + if (p.X < xmin) xmin = p.X; + if (p.Y > ymax) ymax = p.Y; + if (p.Y < ymin) ymin = p.Y; + } + + double deltaX = ALPHA * (xmax - xmin); + double deltaY = ALPHA * (ymax - ymin); + TriangulationPoint p1 = new TriangulationPoint(xmax + deltaX, ymin - deltaY, -1); + TriangulationPoint p2 = new TriangulationPoint(xmin - deltaX, ymin - deltaY, -1); + + Head = p1; + Tail = p2; + + // long time = System.nanoTime(); + // Sort the points along y-axis + Points.Sort(_comparator); + // logger.info( "Triangulation setup [{}ms]", ( System.nanoTime() - time ) / 1e6 ); + } + + + public void FinalizeTriangulation() { + Triangulatable.AddTriangles(Triangles); + Triangles.Clear(); + } + + public override TriangulationConstraint NewConstraint( TriangulationPoint a, TriangulationPoint b ) { + return new DTSweepConstraint(a, b); + } + + public override TriangulationAlgorithm Algorithm { get { return TriangulationAlgorithm.DTSweep; }} + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepContext.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepContext.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..449b7f8b8ef6dc607311a28ba67de99f27359283 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a943be722733e6741978a775d47f8e2c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepDebugContext.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepDebugContext.cs new file mode 100644 index 0000000000000000000000000000000000000000..c0a9a3f0dbf88211a08eafecd59714b75eebf3b5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepDebugContext.cs @@ -0,0 +1,62 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace UnityEngine.ProBuilder.Poly2Tri { + class DTSweepDebugContext : TriangulationDebugContext { + /* + * Fields used for visual representation of current triangulation + */ + + public DelaunayTriangle PrimaryTriangle { get { return _primaryTriangle ; } set { _primaryTriangle = value; _tcx.Update("set PrimaryTriangle"); } } + public DelaunayTriangle SecondaryTriangle { get { return _secondaryTriangle; } set { _secondaryTriangle = value; _tcx.Update("set SecondaryTriangle"); } } + public TriangulationPoint ActivePoint { get { return _activePoint ; } set { _activePoint = value; _tcx.Update("set ActivePoint"); } } + public AdvancingFrontNode ActiveNode { get { return _activeNode ; } set { _activeNode = value; _tcx.Update("set ActiveNode"); } } + public DTSweepConstraint ActiveConstraint { get { return _activeConstraint ; } set { _activeConstraint = value; _tcx.Update("set ActiveConstraint"); } } + + public DTSweepDebugContext( DTSweepContext tcx ) : base(tcx) { } + + public bool IsDebugContext { get { return true; } } + + public override void Clear() { + PrimaryTriangle = null; + SecondaryTriangle = null; + ActivePoint = null; + ActiveNode = null; + ActiveConstraint = null; + } + + private DelaunayTriangle _primaryTriangle; + private DelaunayTriangle _secondaryTriangle; + private TriangulationPoint _activePoint; + private AdvancingFrontNode _activeNode; + private DTSweepConstraint _activeConstraint; + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepDebugContext.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepDebugContext.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a9358eff79fae079804a78134a6a8333f9e2c06a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepDebugContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe5e031b8d5fd9d43b054ae08c843652 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepEdgeEvent.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepEdgeEvent.cs new file mode 100644 index 0000000000000000000000000000000000000000..cdcda40b31b3373c5c4c93ffbbe4d26d1e72463c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepEdgeEvent.cs @@ -0,0 +1,40 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/// Changes from the Java version +/// Turned DTSweepEdgeEvent into a value type + +namespace UnityEngine.ProBuilder.Poly2Tri { + class DTSweepEdgeEvent { + public DTSweepConstraint ConstrainedEdge; + public bool Right; + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepEdgeEvent.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepEdgeEvent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ddd9ff43d7366937aede6759c820260be2576d84 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepEdgeEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c90a3667d9b2154bb538feb303989f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepPointComparator.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepPointComparator.cs new file mode 100644 index 0000000000000000000000000000000000000000..3787902d4aa33b06bd5fc61e8c80a0b210c32091 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepPointComparator.cs @@ -0,0 +1,52 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.Poly2Tri { + class DTSweepPointComparator : IComparer<TriangulationPoint> { + public int Compare(TriangulationPoint p1, TriangulationPoint p2) { + if (p1.Y < p2.Y) { + return -1; + } else if (p1.Y > p2.Y) { + return 1; + } else { + if (p1.X < p2.X) { + return -1; + } else if (p1.X > p2.X) { + return 1; + } else { + return 0; + } + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepPointComparator.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepPointComparator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5636d02f2d8ccc129c0be3e75f67c7d08d6daf64 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/DTSweepPointComparator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 881b617b0cb15574f93592b7b6a3e373 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/PointOnEdgeException.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/PointOnEdgeException.cs new file mode 100644 index 0000000000000000000000000000000000000000..e4b6c1dae5c6673780ef57d8b5306f06c57cafcc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/PointOnEdgeException.cs @@ -0,0 +1,46 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; + +namespace UnityEngine.ProBuilder.Poly2Tri { + class PointOnEdgeException : NotImplementedException { + public readonly TriangulationPoint A,B,C; + + public PointOnEdgeException( string message, TriangulationPoint a, TriangulationPoint b, TriangulationPoint c ) + : base(message) + { + A=a; + B=b; + C=c; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/PointOnEdgeException.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/PointOnEdgeException.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9e40f6e6e81b5f5c01fec0590bd7a672651af607 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Delaunay/Sweep/PointOnEdgeException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 659601bba69c8e747bcc79ca9e877a2f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/ITriangulatable.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/ITriangulatable.cs new file mode 100644 index 0000000000000000000000000000000000000000..fd38bdee696c4c9b50cc1883e601d89dcf59d987 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/ITriangulatable.cs @@ -0,0 +1,47 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.Poly2Tri { + interface Triangulatable { + void Prepare(TriangulationContext tcx); + + IList<TriangulationPoint> Points { get; } // MM: Neither of these are used via interface (yet?) + IList<DelaunayTriangle> Triangles { get; } + + void AddTriangle(DelaunayTriangle t); + void AddTriangles(IEnumerable<DelaunayTriangle> list); + void ClearTriangles(); + + TriangulationMode TriangulationMode { get; } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/ITriangulatable.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/ITriangulatable.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f62e4b0a2880be80875466d5646d46417f720e63 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/ITriangulatable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3d263593a085cdf469778e9ea07ba483 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Orientation.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Orientation.cs new file mode 100644 index 0000000000000000000000000000000000000000..9252e2ce18d0d70db6ec4369f2a44f7e9546c59c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Orientation.cs @@ -0,0 +1,36 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace UnityEngine.ProBuilder.Poly2Tri { + enum Orientation { + CW, CCW, Collinear + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Orientation.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Orientation.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..dcf8be478dff5fdd628d122506f9b7dfaf81413d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Orientation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e4871d32a3aac4448c0c3f9e182f972 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Sets.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Sets.meta new file mode 100644 index 0000000000000000000000000000000000000000..1408000d062dc860341980cc3c170d26bbda475e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Sets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9f85da24fbeceaa4e96e6881fe6fac37 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Sets/ConstrainedPointSet.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Sets/ConstrainedPointSet.cs new file mode 100644 index 0000000000000000000000000000000000000000..564d3ca62e80a39d6b289a60d5bfbbff2b5880a0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Sets/ConstrainedPointSet.cs @@ -0,0 +1,61 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; +namespace UnityEngine.ProBuilder.Poly2Tri { + /* + * Extends the PointSet by adding some Constraints on how it will be triangulated<br> + * A constraint defines an edge between two points in the set, these edges can not + * be crossed. They will be enforced triangle edges after a triangulation. + * <p> + * + * + * @author Thomas Åhlén, thahlen@gmail.com + */ + class ConstrainedPointSet : PointSet { + public int[] EdgeIndex { get; private set; } + + public ConstrainedPointSet(List<TriangulationPoint> points, int[] index) + : base(points) { + EdgeIndex = index; + } + + public override TriangulationMode TriangulationMode { get { return TriangulationMode.Constrained; } } + + public override void Prepare(TriangulationContext tcx) { + base.Prepare(tcx); + for (int i = 0; i < EdgeIndex.Length; i += 2) { + // XXX: must change!! + tcx.NewConstraint(Points[EdgeIndex[i]], Points[EdgeIndex[i + 1]]); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Sets/ConstrainedPointSet.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Sets/ConstrainedPointSet.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4944f59a1bf670f456bb04349b3d270cf57fd5e1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Sets/ConstrainedPointSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 92edb19c798910a47b4dec2660fcd96d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Sets/PointSet.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Sets/PointSet.cs new file mode 100644 index 0000000000000000000000000000000000000000..0392d646181f7c54f160cb7eed9b93cd6aa5f9e6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Sets/PointSet.cs @@ -0,0 +1,66 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.Poly2Tri { + class PointSet : Triangulatable { + public IList<TriangulationPoint> Points { get; private set; } + public IList<DelaunayTriangle> Triangles { get; private set; } + + public PointSet(List<TriangulationPoint> points) { + Points = new List<TriangulationPoint>(points); + } + + public virtual TriangulationMode TriangulationMode { get { return TriangulationMode.Unconstrained; }} + + public void AddTriangle(DelaunayTriangle t) { + Triangles.Add(t); + } + + public void AddTriangles(IEnumerable<DelaunayTriangle> list) { + foreach ( var tri in list ) Triangles.Add(tri); + } + + public void ClearTriangles() { + Triangles.Clear(); + } + + public virtual void Prepare(TriangulationContext tcx) { + if (Triangles == null) { + Triangles = new List<DelaunayTriangle>(Points.Count); + } else { + Triangles.Clear(); + } + tcx.Points.AddRange(Points); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Sets/PointSet.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Sets/PointSet.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..8be1b0f95ef6b6f902fa7843cac6c6e0a62c6c03 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Sets/PointSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 906ae4b0ce907194cb4d1d255e03675b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationAlgorithm.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationAlgorithm.cs new file mode 100644 index 0000000000000000000000000000000000000000..50c7578590d6357b75b838f23770c1916b38e337 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationAlgorithm.cs @@ -0,0 +1,36 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace UnityEngine.ProBuilder.Poly2Tri { + enum TriangulationAlgorithm { + DTSweep + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationAlgorithm.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationAlgorithm.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..df72319337592340b12491615ed3e57c763f3051 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationAlgorithm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c5b66ff70e896a64ebe5aa9cb28dd535 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationConstraint.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationConstraint.cs new file mode 100644 index 0000000000000000000000000000000000000000..f7374ba57978f2c36c511a10b0f524aa0d42e2cc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationConstraint.cs @@ -0,0 +1,44 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/** + * Forces a triangle edge between two points p and q + * when triangulating. For example used to enforce + * Polygon Edges during a polygon triangulation. + * + * @author Thomas Åhlén, thahlen@gmail.com + */ + +namespace UnityEngine.ProBuilder.Poly2Tri { + class TriangulationConstraint { + public TriangulationPoint P; + public TriangulationPoint Q; + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationConstraint.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationConstraint.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e32e3db89fab0e16dc24b11e8c107e81836e0116 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationConstraint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d42d456e720b1c5438d87059c69284bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationContext.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationContext.cs new file mode 100644 index 0000000000000000000000000000000000000000..f84ef377b6f0c5edff844236dc5a1e597ad9180f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationContext.cs @@ -0,0 +1,71 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.Poly2Tri { + abstract class TriangulationContext { + public TriangulationDebugContext DebugContext { get; protected set; } + + public readonly List<DelaunayTriangle> Triangles = new List<DelaunayTriangle>(); + public readonly List<TriangulationPoint> Points = new List<TriangulationPoint>(); + public TriangulationMode TriangulationMode { get; protected set; } + public Triangulatable Triangulatable { get; private set; } + + public int StepCount { get; private set; } + + public void Done() { + StepCount++; + } + + public abstract TriangulationAlgorithm Algorithm { get; } + + public virtual void PrepareTriangulation(Triangulatable t) { + Triangulatable = t; + TriangulationMode = t.TriangulationMode; + t.Prepare(this); + } + + public abstract TriangulationConstraint NewConstraint(TriangulationPoint a, TriangulationPoint b); + + public void Update(string message) {} + + public virtual void Clear() { + Points.Clear(); + if (DebugContext != null) DebugContext.Clear(); + StepCount = 0; + } + + public virtual bool IsDebugEnabled { get; protected set; } + + public DTSweepDebugContext DTDebugContext { get { return DebugContext as DTSweepDebugContext; } } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationContext.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationContext.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a04b055abb6b2321b4d639120433728326a14ea8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 848eabc153ab891409f3d562463a0efe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationDebugContext.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationDebugContext.cs new file mode 100644 index 0000000000000000000000000000000000000000..640b2b18e8a9cc4cb15d28440d4fe40fd83d02d8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationDebugContext.cs @@ -0,0 +1,42 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace UnityEngine.ProBuilder.Poly2Tri { + abstract class TriangulationDebugContext { + protected TriangulationContext _tcx; + + public TriangulationDebugContext(TriangulationContext tcx) { + _tcx = tcx; + } + + public abstract void Clear(); + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationDebugContext.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationDebugContext.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6da80d78dc9da80b9d6ea10692d482812b481089 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationDebugContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ccb8b5f00388f545b4b986d5149d926 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationMode.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationMode.cs new file mode 100644 index 0000000000000000000000000000000000000000..775a62baf278a3d3c570a3be9280563386c0a977 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationMode.cs @@ -0,0 +1,36 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace UnityEngine.ProBuilder.Poly2Tri { + enum TriangulationMode { + Unconstrained,Constrained,Polygon + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationMode.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationMode.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..75cf4a38300651a207823cdd2e6aa19ffb5e840f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 319d9808ed35cae4ca212b4b97a9ee0b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationPoint.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationPoint.cs new file mode 100644 index 0000000000000000000000000000000000000000..823a49921ba106a192ec8d0d8d58ae8491dca35e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationPoint.cs @@ -0,0 +1,65 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.Poly2Tri { + + class TriangulationPoint { + + // This point was an inserted index. + public const int INSERTED_INDEX = -1; + + // This point is not a valid index. + public const int INVALID_INDEX = -2; + + // List of edges this point constitutes an upper ending point (CDT) + public List<DTSweepConstraint> Edges { get; private set; } + + public TriangulationPoint( double x, double y, int index = INSERTED_INDEX) { X=x; Y=y; Index = index; } + + public override string ToString() { + return "[" + X + "," + Y + "]"; + } + + public double X,Y; + public int Index; + public float Xf { get { return (float)X; } set { X=value; } } + public float Yf { get { return (float)Y; } set { Y=value; } } + + public void AddEdge(DTSweepConstraint e) { + if (Edges == null) Edges = new List<DTSweepConstraint>(); + Edges.Add(e); + } + + public bool HasEdges { get { return Edges != null; } } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationPoint.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationPoint.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1469de66e55b290d3f01dd657ff12c566319ff81 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 267c7f09b45427d4596b29d4c39055fa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationUtil.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationUtil.cs new file mode 100644 index 0000000000000000000000000000000000000000..7d0bb77501e530179ee83358e55ef66725a06ba8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationUtil.cs @@ -0,0 +1,144 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace UnityEngine.ProBuilder.Poly2Tri { + /** + * @author Thomas Åhlén, thahlen@gmail.com + */ + class TriangulationUtil { + public static double EPSILON = 1e-12; + /// <summary> + /// Requirements: + /// 1. a,b and c form a triangle. + /// 2. a and d is know to be on opposite side of bc + /// <code> + /// a + /// + + /// / \ + /// / \ + /// b/ \c + /// +-------+ + /// / B \ + /// / \ + /// </code> + /// Facts: + /// d has to be in area B to have a chance to be inside the circle formed by a,b and c + /// d is outside B if orient2d(a,b,d) or orient2d(c,a,d) is CW + /// This preknowledge gives us a way to optimize the incircle test + /// </summary> + /// <param name="pa">triangle point, opposite d</param> + /// <param name="pb">triangle point</param> + /// <param name="pc">triangle point</param> + /// <param name="pd">point opposite a</param> + /// <returns>true if d is inside circle, false if on circle edge</returns> + public static bool SmartIncircle( TriangulationPoint pa, TriangulationPoint pb, TriangulationPoint pc, TriangulationPoint pd ) { + double pdx = pd.X; + double pdy = pd.Y; + double adx = pa.X - pdx; + double ady = pa.Y - pdy; + double bdx = pb.X - pdx; + double bdy = pb.Y - pdy; + + double adxbdy = adx * bdy; + double bdxady = bdx * ady; + double oabd = adxbdy - bdxady; + // oabd = orient2d(pa,pb,pd); + if (oabd <= 0) return false; + + double cdx = pc.X - pdx; + double cdy = pc.Y - pdy; + + double cdxady = cdx * ady; + double adxcdy = adx * cdy; + double ocad = cdxady - adxcdy; + // ocad = orient2d(pc,pa,pd); + if (ocad <= 0) return false; + + double bdxcdy = bdx * cdy; + double cdxbdy = cdx * bdy; + + double alift = adx * adx + ady * ady; + double blift = bdx * bdx + bdy * bdy; + double clift = cdx * cdx + cdy * cdy; + + double det = alift * (bdxcdy - cdxbdy) + blift * ocad + clift * oabd; + + return det > 0; + } + + public static bool InScanArea( TriangulationPoint pa, TriangulationPoint pb, TriangulationPoint pc, TriangulationPoint pd ) { + double pdx = pd.X; + double pdy = pd.Y; + double adx = pa.X - pdx; + double ady = pa.Y - pdy; + double bdx = pb.X - pdx; + double bdy = pb.Y - pdy; + + double adxbdy = adx * bdy; + double bdxady = bdx * ady; + double oabd = adxbdy - bdxady; + // oabd = orient2d(pa,pb,pd); + if (oabd <= 0) { + return false; + } + + double cdx = pc.X - pdx; + double cdy = pc.Y - pdy; + + double cdxady = cdx * ady; + double adxcdy = adx * cdy; + double ocad = cdxady - adxcdy; + // ocad = orient2d(pc,pa,pd); + if (ocad <= 0) { + return false; + } + return true; + } + + /// Forumla to calculate signed area + /// Positive if CCW + /// Negative if CW + /// 0 if collinear + /// A[P1,P2,P3] = (x1*y2 - y1*x2) + (x2*y3 - y2*x3) + (x3*y1 - y3*x1) + /// = (x1-x3)*(y2-y3) - (y1-y3)*(x2-x3) + public static Orientation Orient2d( TriangulationPoint pa, TriangulationPoint pb, TriangulationPoint pc ) { + double detleft = (pa.X - pc.X) * (pb.Y - pc.Y); + double detright = (pa.Y - pc.Y) * (pb.X - pc.X); + double val = detleft - detright; + if (val > -EPSILON && val < EPSILON) { + return Orientation.Collinear; + } else if (val > 0) { + return Orientation.CCW; + } + return Orientation.CW; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationUtil.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationUtil.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..be10da24a73b36103d1f84da3ae8bee4591b906e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/TriangulationUtil.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bedfc9d5ebff70f4896001f60a9b2790 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Util.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Util.meta new file mode 100644 index 0000000000000000000000000000000000000000..8ad6c821eb113955b1d6dcf9bf98e6457831ed33 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Util.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b46e64067adbbe341bf0afb1ee309299 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Util/PointGenerator.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Util/PointGenerator.cs new file mode 100644 index 0000000000000000000000000000000000000000..536cc1adc99032d0ec9754cf8f7e022df09b9b5a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Util/PointGenerator.cs @@ -0,0 +1,58 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.Poly2Tri { + class PointGenerator { + static readonly System.Random RNG = new System.Random(); + + public static List<TriangulationPoint> UniformDistribution(int n, double scale) { + List<TriangulationPoint> points = new List<TriangulationPoint>(); + for (int i = 0; i < n; i++) points.Add(new TriangulationPoint(scale * (0.5 - RNG.NextDouble()), scale * (0.5 - RNG.NextDouble()), i)); + return points; + } + + public static List<TriangulationPoint> UniformGrid(int n, double scale) { + double x = 0; + double size = scale / n; + double halfScale = 0.5 * scale; + + List<TriangulationPoint> points = new List<TriangulationPoint>(); + for (int i = 0; i < n + 1; i++) { + x = halfScale - i * size; + for (int j = 0; j < n + 1; j++) points.Add(new TriangulationPoint(x, halfScale - j * size, i)); + } + return points; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Util/PointGenerator.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Util/PointGenerator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..511f4d82d28d27ce64c1e675d17276fc923957d3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Util/PointGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5e41f6d30b7fa6543a40193098cf4eae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Util/PolygonGenerator.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Util/PolygonGenerator.cs new file mode 100644 index 0000000000000000000000000000000000000000..b46ec021a1b9ddd1792e1d5ff9e4e1456df48c05 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Util/PolygonGenerator.cs @@ -0,0 +1,84 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; + +namespace UnityEngine.ProBuilder.Poly2Tri { + class PolygonGenerator { + static readonly System.Random RNG = new System.Random(); + + private static double PI_2 = 2.0 * Math.PI; + + public static Polygon RandomCircleSweep(double scale, int vertexCount) { + PolygonPoint point; + PolygonPoint[] points; + double radius = scale / 4; + + points = new PolygonPoint[vertexCount]; + for (int i = 0; i < vertexCount; i++) { + do { + if (i % 250 == 0) { + radius += scale / 2 * (0.5 - RNG.NextDouble()); + } else if (i % 50 == 0) { + radius += scale / 5 * (0.5 - RNG.NextDouble()); + } else { + radius += 25 * scale / vertexCount * (0.5 - RNG.NextDouble()); + } + radius = radius > scale / 2 ? scale / 2 : radius; + radius = radius < scale / 10 ? scale / 10 : radius; + } while (radius < scale / 10 || radius > scale / 2); + point = new PolygonPoint(radius * Math.Cos((PI_2 * i) / vertexCount), + radius * Math.Sin((PI_2 * i) / vertexCount), i); + points[i] = point; + } + return new Polygon(points); + } + + public static Polygon RandomCircleSweep2(double scale, int vertexCount) { + PolygonPoint point; + PolygonPoint[] points; + double radius = scale / 4; + + points = new PolygonPoint[vertexCount]; + for (int i = 0; i < vertexCount; i++) { + do { + radius += scale / 5 * (0.5 - RNG.NextDouble()); + radius = radius > scale / 2 ? scale / 2 : radius; + radius = radius < scale / 10 ? scale / 10 : radius; + } while (radius < scale / 10 || radius > scale / 2); + point = new PolygonPoint(radius * Math.Cos((PI_2 * i) / vertexCount), + radius * Math.Sin((PI_2 * i) / vertexCount), i); + points[i] = point; + } + return new Polygon(points); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Util/PolygonGenerator.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Util/PolygonGenerator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..03dbc3dee3591cc9b51ff59946d89d7c44367d26 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Triangulation/Util/PolygonGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9652f5ea32e3966499300efa0597ba92 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Unity.ProBuilder.Poly2Tri.asmdef b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Unity.ProBuilder.Poly2Tri.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..8e2783c40edbb7002612e8532d2ce3917b738c28 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Unity.ProBuilder.Poly2Tri.asmdef @@ -0,0 +1,12 @@ +{ + "name": "Unity.ProBuilder.Poly2Tri", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": false, + "defineConstraints": [] +} \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Unity.ProBuilder.Poly2Tri.asmdef.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Unity.ProBuilder.Poly2Tri.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..d4dcf99c144e255d3acced0e7e6388965a0df1e3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Unity.ProBuilder.Poly2Tri.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: acb1d68b7aba97b4f9cc7dbabc38314c +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Utility.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Utility.meta new file mode 100644 index 0000000000000000000000000000000000000000..774e17867cfd66fc3a855504de72141a4466b44d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Utility.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 818d74d2fcd94fd45abde8d39eed7700 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Utility/FixedArray3.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Utility/FixedArray3.cs new file mode 100644 index 0000000000000000000000000000000000000000..52abc6fb8b9cdbc0946eb53ebdf2226852c24eab --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Utility/FixedArray3.cs @@ -0,0 +1,75 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.Poly2Tri { + struct FixedArray3<T> : IEnumerable<T> where T:class { + public T _0, _1, _2; + public T this[ int index ] { get { + switch ( index ) { + case 0: return _0; + case 1: return _1; + case 2: return _2; + default: throw new IndexOutOfRangeException(); + } + } set { + switch ( index ) { + case 0: _0 = value; break; + case 1: _1 = value; break; + case 2: _2 = value; break; + default: throw new IndexOutOfRangeException(); + } + }} + public bool Contains( T value ) { + for ( int i = 0 ; i < 3 ; ++i ) if ( this[i]==value ) return true; + return false; + } + public int IndexOf( T value ) { + for ( int i = 0 ; i < 3 ; ++i ) if ( this[i]==value ) return i; + return -1; + } + public void Clear() { + _0=_1=_2=null; + } + public void Clear( T value ) { + for ( int i = 0 ; i < 3 ; ++i ) if ( this[i]==value ) this[i] = null; + } + + private IEnumerable<T> Enumerate() { + for ( int i=0 ; i<3 ; ++i ) yield return this[i]; + } + public IEnumerator<T> GetEnumerator() { return Enumerate().GetEnumerator(); } + IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Utility/FixedArray3.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Utility/FixedArray3.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ac2c3a2dd34ec5cdd39ee285dc8717d6ade3e333 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Utility/FixedArray3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc2e025c327cbba4ca8373dd8923ff88 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Utility/FixedBitArray3.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Utility/FixedBitArray3.cs new file mode 100644 index 0000000000000000000000000000000000000000..58ffa21c750b10269efce4a147823a80fb9c1e06 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Utility/FixedBitArray3.cs @@ -0,0 +1,75 @@ +/* Poly2Tri + * Copyright (c) 2009-2010, Poly2Tri Contributors + * http://code.google.com/p/poly2tri/ + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Poly2Tri nor the names of its contributors may be + * used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.Poly2Tri { + struct FixedBitArray3 : IEnumerable<bool> { + public bool _0, _1, _2; + public bool this[ int index ] { get { + switch ( index ) { + case 0: return _0; + case 1: return _1; + case 2: return _2; + default: throw new IndexOutOfRangeException(); + } + } set { + switch ( index ) { + case 0: _0 = value; break; + case 1: _1 = value; break; + case 2: _2 = value; break; + default: throw new IndexOutOfRangeException(); + } + }} + public bool Contains( bool value ) { + for ( int i = 0 ; i < 3 ; ++i ) if ( this[i]==value ) return true; + return false; + } + public int IndexOf( bool value ) { + for ( int i = 0 ; i < 3 ; ++i ) if ( this[i]==value ) return i; + return -1; + } + public void Clear() { + _0=_1=_2=false; + } + public void Clear( bool value ) { + for ( int i = 0 ; i < 3 ; ++i ) if ( this[i]==value ) this[i] = false; + } + + private IEnumerable<bool> Enumerate() { + for ( int i=0 ; i<3 ; ++i ) yield return this[i]; + } + public IEnumerator<bool> GetEnumerator() { return Enumerate().GetEnumerator(); } + IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Utility/FixedBitArray3.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Utility/FixedBitArray3.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b365ec9044cd7ed69e51d73d551aca458939ea0b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/Poly2Tri/Utility/FixedBitArray3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e74c868e28c92e84abb0ae91f8496d26 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter.meta new file mode 100644 index 0000000000000000000000000000000000000000..7cce4ed8180e3edcda885d275a08afda4cb901ca --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fb6b0f904d5a08346b170428ccf03605 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/AssemblyInfo.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..39c548f29100533312c73bac3d3c3dc3cd19cecd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/AssemblyInfo.cs @@ -0,0 +1,5 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Unity.ProBuilder")] +[assembly: InternalsVisibleTo("Unity.ProBuilder.Editor")] +[assembly: InternalsVisibleTo("Unity.ProBuilder.Editor.Tests")] diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/AssemblyInfo.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/AssemblyInfo.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..58830477df2cdc2e0db1c509502af670026cc5e8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 389ebe3277e864eb2bb6f14edb419a33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code.meta new file mode 100644 index 0000000000000000000000000000000000000000..af3369e069a19397160d73257d504f610a2b4297 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a4b6fa9dcb27fb9449331018a9db0c0c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl.cs new file mode 100644 index 0000000000000000000000000000000000000000..9f1495d1f7bc360b3b57016f0c6414e20a958ada --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl.cs @@ -0,0 +1,191 @@ +using System.Text; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Linq; + +namespace UnityEngine.ProBuilder.Stl +{ + /** + * Describes the file format of an STL file. + */ + [EditorBrowsable(EditorBrowsableState.Never)] + public enum FileType + { + Ascii, + Binary + }; + + /** + * Export STL files from Unity mesh assets. + */ + static class pb_Stl + { + /** + * Write a mesh file to STL. + */ + public static bool WriteFile(string path, Mesh mesh, FileType type = FileType.Ascii, bool convertToRightHandedCoordinates = true) + { + return WriteFile(path, new Mesh[] { mesh }, type, convertToRightHandedCoordinates); + } + + /** + * Write a collection of mesh assets to an STL file. + * No transformations are performed on meshes in this method. + * Eg, if you want to export a set of a meshes in a transform + * hierarchy the meshes should be transformed prior to this call. + * + * string path - Where to write the file. + * IList<Mesh> meshes - The mesh assets to write. + * FileType type - How to format the file (in ASCII or binary). + */ + public static bool WriteFile(string path, IList<Mesh> meshes, FileType type = FileType.Ascii, bool convertToRightHandedCoordinates = true) + { + try + { + switch(type) + { + case FileType.Binary: + { + // http://paulbourke.net/dataformats/stl/ + // http://www.fabbers.com/tech/STL_Format + using (BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.Create), new ASCIIEncoding())) + { + // 80 byte header + writer.Write(new byte[80]); + + uint totalTriangleCount = (uint) (meshes.Sum(x => x.triangles.Length) / 3); + + // unsigned long facet count (4 bytes) + writer.Write( totalTriangleCount ); + + foreach(Mesh mesh in meshes) + { + Vector3[] v = convertToRightHandedCoordinates ? Left2Right(mesh.vertices) : mesh.vertices; + Vector3[] n = convertToRightHandedCoordinates ? Left2Right(mesh.normals) : mesh.normals; + int[] t = mesh.triangles; + int triangleCount = t.Length; + if(convertToRightHandedCoordinates) + System.Array.Reverse(t); + + for(int i = 0; i < triangleCount; i += 3) + { + int a = t[i], b = t[i+1], c = t[i+2]; + + Vector3 avg = AvgNrm(n[a], n[b], n[c]); + + writer.Write(avg.x); + writer.Write(avg.y); + writer.Write(avg.z); + + writer.Write(v[a].x); + writer.Write(v[a].y); + writer.Write(v[a].z); + + writer.Write(v[b].x); + writer.Write(v[b].y); + writer.Write(v[b].z); + + writer.Write(v[c].x); + writer.Write(v[c].y); + writer.Write(v[c].z); + + // specification says attribute byte count should be set to 0. + writer.Write( (ushort)0 ); + } + } + } + } + break; + + default: + string model = WriteString(meshes); + File.WriteAllText(path, model); + break; + } + } + catch(System.Exception e) + { + UnityEngine.Debug.LogError(e.ToString()); + return false; + } + + return true; + } + + /** + * Write a Unity mesh to an ASCII STL string. + */ + public static string WriteString(Mesh mesh, bool convertToRightHandedCoordinates = true) + { + return WriteString(new Mesh[] { mesh }, convertToRightHandedCoordinates); + } + + /** + * Write a set of meshes to an ASCII string in STL format. + */ + public static string WriteString(IList<Mesh> meshes, bool convertToRightHandedCoordinates = true) + { + StringBuilder sb = new StringBuilder(); + + string name = meshes.Count == 1 ? meshes[0].name : "Composite Mesh"; + + sb.AppendLine(string.Format("solid {0}", name)); + + foreach(Mesh mesh in meshes) + { + Vector3[] v = convertToRightHandedCoordinates ? Left2Right(mesh.vertices) : mesh.vertices; + Vector3[] n = convertToRightHandedCoordinates ? Left2Right(mesh.normals) : mesh.normals; + int[] t = mesh.triangles; + if(convertToRightHandedCoordinates) System.Array.Reverse(t); + int triLen = t.Length; + + for(int i = 0; i < triLen; i+=3) + { + int a = t[i]; + int b = t[i+1]; + int c = t[i+2]; + + Vector3 nrm = AvgNrm(n[a], n[b], n[c]); + + sb.AppendLine(string.Format("facet normal {0} {1} {2}", nrm.x, nrm.y, nrm.z)); + + sb.AppendLine("outer loop"); + + sb.AppendLine(string.Format("\tvertex {0} {1} {2}", v[a].x, v[a].y, v[a].z)); + sb.AppendLine(string.Format("\tvertex {0} {1} {2}", v[b].x, v[b].y, v[b].z)); + sb.AppendLine(string.Format("\tvertex {0} {1} {2}", v[c].x, v[c].y, v[c].z)); + + sb.AppendLine("endloop"); + + sb.AppendLine("endfacet"); + } + } + + sb.AppendLine(string.Format("endsolid {0}", name)); + + return sb.ToString(); + } + + private static Vector3[] Left2Right(Vector3[] v) + { + Vector3[] r = new Vector3[v.Length]; + + for (int i = 0; i < v.Length; i++) + r[i] = new Vector3(v[i].z, -v[i].x, v[i].y); + + return r; + } + + /** + * Average of 3 vectors. + */ + private static Vector3 AvgNrm(Vector3 a, Vector3 b, Vector3 c) + { + return new Vector3( + (a.x + b.x + c.x) / 3f, + (a.y + b.y + c.y) / 3f, + (a.z + b.z + c.z) / 3f ); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..dc3355a996102b2da275a3f88504d7e7257c3ac1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 396694d6dbd4734419cea5be4a942c9a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl_Exporter.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl_Exporter.cs new file mode 100644 index 0000000000000000000000000000000000000000..e6b94753f21b92bc7f7f607307607d1b3816a040 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl_Exporter.cs @@ -0,0 +1,97 @@ +using UnityEngine; +using System.Linq; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.Stl +{ + /** + * Provides menu items for writing STL files from a scene selection. + */ + static class pb_Stl_Exporter + { + /** + * Export a hierarchy of GameObjects to path with file type. + */ + public static bool Export(string path, GameObject[] gameObjects, FileType type) + { + Mesh[] meshes = CreateWorldSpaceMeshesWithTransforms(gameObjects.Select(x => x.transform).ToArray()); + bool success = false; + + if(meshes != null && meshes.Length > 0) + { + if(!string.IsNullOrEmpty(path)) + success = pb_Stl.WriteFile(path, meshes, type); + } + + for(int i = 0; meshes != null && i < meshes.Length; i++) + Object.DestroyImmediate(meshes[i]); + + return success; + } + + /** + * Extracts a list of mesh values with their relative transformations intact. + */ + private static Mesh[] CreateWorldSpaceMeshesWithTransforms(IList<Transform> transforms) + { + if(transforms == null || transforms.Count < 1) + return null; + + // move root node to center of selection + Vector3 p = Vector3.zero; + + for(int i = 0; i < transforms.Count; i++) + p += transforms[i].position; + Vector3 mesh_center = p / (float) transforms.Count; + + GameObject root = new GameObject(); + root.name = "ROOT"; + root.transform.position = mesh_center; + + // copy all transforms to new root gameobject + foreach(Transform t in transforms) + { + GameObject go = (GameObject) GameObject.Instantiate(t.gameObject); + go.transform.SetParent(t.parent, false); + go.transform.SetParent(root.transform, true); + } + + // move root to 0,0,0 so mesh transformations are relative to origin + root.transform.position = Vector3.zero; + + // create new meshes by iterating the root node and transforming vertex & normal + // values (ignoring all other mesh attributes since STL doesn't care about them) + List<MeshFilter> mfs = root.GetComponentsInChildren<MeshFilter>().Where(x => x.sharedMesh != null).ToList(); + int meshCount = mfs.Count; + Mesh[] meshes = new Mesh[meshCount]; + + for(int i = 0; i < meshCount; i++) + { + Transform t = mfs[i].transform; + + Vector3[] v = mfs[i].sharedMesh.vertices; + Vector3[] n = mfs[i].sharedMesh.normals; + + for(int it = 0; it < v.Length; it++) + { + v[it] = t.TransformPoint(v[it]); + n[it] = t.TransformDirection(n[it]); + } + + Mesh m = new Mesh(); + + m.name = mfs[i].name; + m.vertices = v; + m.normals = n; + m.triangles = mfs[i].sharedMesh.triangles; + + meshes[i] = m; + } + + // Cleanup + GameObject.DestroyImmediate(root); + + return meshes; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl_Exporter.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl_Exporter.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c8582b5bdcb94e5973a7e14b699bc07e9c662e87 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl_Exporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9cfc7aced6c45c0499ba73f07e633bac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl_Importer.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl_Importer.cs new file mode 100644 index 0000000000000000000000000000000000000000..d51ea8c8f54e19eaaf7dcfade547621b1b137b5e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl_Importer.cs @@ -0,0 +1,294 @@ +#pragma warning disable 0219 + +using UnityEngine; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.IO; + +namespace UnityEngine.ProBuilder.Stl +{ + /** + * Import methods for STL files. + */ + static class pb_Stl_Importer + { + const int MAX_FACETS_PER_MESH = 65535 / 3; + + class Facet + { + public Vector3 normal; + public Vector3 a, b, c; + + public override string ToString() + { + return string.Format("{0:F2}: {1:F2}, {2:F2}, {3:F2}", normal, a, b, c); + } + } + + /** + * Import an STL file at path. + */ + public static Mesh[] Import(string path) + { + if( IsBinary(path) ) + { + try + { + return ImportBinary(path); + } + catch(System.Exception e) + { + UnityEngine.Debug.LogWarning(string.Format("Failed importing mesh at path {0}.\n{1}", path, e.ToString())); + return null; + } + } + else + { + return ImportAscii(path); + } + } + + private static Mesh[] ImportBinary(string path) + { + Facet[] facets; + + using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)) + { + using (BinaryReader br = new BinaryReader(fs, new ASCIIEncoding())) + { + // read header + byte[] header = br.ReadBytes(80); + uint facetCount = br.ReadUInt32(); + facets = new Facet[facetCount]; + + for(uint i = 0; i < facetCount; i++) + facets[i] = br.GetFacet(); + } + } + + return CreateMeshWithFacets(facets); + } + + private static Facet GetFacet(this BinaryReader binaryReader) + { + Facet facet = new Facet(); + facet.normal = binaryReader.GetVector3(); + + // maintain counter-clockwise orientation of vertices: + facet.a = binaryReader.GetVector3(); + facet.c = binaryReader.GetVector3(); + facet.b = binaryReader.GetVector3(); + binaryReader.ReadUInt16(); // padding + + return facet; + } + private static Vector3 GetVector3(this BinaryReader binaryReader) + { + Vector3 vector3 = new Vector3(); + for (int i = 0; i < 3; i++) + vector3[i] = binaryReader.ReadSingle(); + return vector3.UnityCoordTrafo(); + } + + private static Vector3 UnityCoordTrafo(this Vector3 vector3) + { + return new Vector3(-vector3.y, vector3.z, vector3.x); + } + + const int SOLID = 1; + const int FACET = 2; + const int OUTER = 3; + const int VERTEX = 4; + const int ENDLOOP = 5; + const int ENDFACET = 6; + const int ENDSOLID = 7; + const int EMPTY = 0; + + private static int ReadState(string line) + { + if(line.StartsWith("solid")) + return SOLID; + else if(line.StartsWith("facet")) + return FACET; + else if(line.StartsWith("outer")) + return OUTER; + else if(line.StartsWith("vertex")) + return VERTEX; + else if(line.StartsWith("endloop")) + return ENDLOOP; + else if(line.StartsWith("endfacet")) + return ENDFACET; + else if(line.StartsWith("endsolid")) + return ENDSOLID; + else + return EMPTY; + } + + private static Mesh[] ImportAscii(string path) + { + List<Facet> facets = new List<Facet>(); + + using(StreamReader sr = new StreamReader(path)) + { + string line; + int state = EMPTY, vertex = 0; + Facet f = null; + bool exit = false; + + while(sr.Peek() > 0 && !exit) + { + line = sr.ReadLine().Trim(); + int previousState = state; + state = ReadState(line); + + switch(state) + { + case SOLID: + continue; + + case FACET: + f = new Facet(); + f.normal = StringToVec3(line.Replace("facet normal ", "")); + break; + + case OUTER: + vertex = 0; + break; + + case VERTEX: + // maintain counter-clockwise orientation of vertices: + if (vertex == 0) f.a = StringToVec3(line.Replace("vertex ", "")); + else if(vertex == 2) f.c = StringToVec3(line.Replace("vertex ", "")); + else if (vertex == 1) f.b = StringToVec3(line.Replace("vertex ", "")); + vertex++; + break; + + case ENDLOOP: + break; + + case ENDFACET: + facets.Add(f); + break; + + case ENDSOLID: + exit = true; + break; + + case EMPTY: + default: + break; + + } + } + } + + return CreateMeshWithFacets(facets); + } + + private static Vector3 StringToVec3(string str) + { + string[] split = str.Trim().Split(null); + Vector3 v = new Vector3(); + + float.TryParse(split[0], out v.x); + float.TryParse(split[1], out v.y); + float.TryParse(split[2], out v.z); + + return v.UnityCoordTrafo(); + } + + /** + * Read the first 80 bytes of a file and if they are all 0x0 it's likely + * that this file is binary. + */ + private static bool IsBinary(string path) + { + // http://stackoverflow.com/questions/968935/compare-binary-files-in-c-sharp + FileInfo file = new FileInfo(path); + + if(file.Length < 130) + return false; + + var isBinary = false; + + using(FileStream f0 = file.OpenRead()) + { + using(BufferedStream bs0 = new BufferedStream(f0)) + { + for(long i = 0; i < 80; i++) + { + var readByte = bs0.ReadByte(); + if (readByte == 0x0) + { + isBinary = true; + break; + } + } + } + } + + if (!isBinary) + { + using (FileStream f0 = file.OpenRead()) + { + using (BufferedStream bs0 = new BufferedStream(f0)) + { + var byteArray = new byte[6]; + + for (var i = 0; i < 6; i++) + { + byteArray[i] = (byte)bs0.ReadByte(); + } + + var text = Encoding.UTF8.GetString(byteArray); + isBinary = text != "solid "; + } + } + } + + return isBinary; + } + + /** + * @todo test with > USHORT_MAX vertex count meshes + */ + private static Mesh[] CreateMeshWithFacets(IList<Facet> facets) + { + int fl = facets.Count, f = 0, mvc = MAX_FACETS_PER_MESH * 3; + Mesh[] meshes = new Mesh[fl / MAX_FACETS_PER_MESH + 1]; + + for(int i = 0; i < meshes.Length; i++) + { + int len = System.Math.Min(mvc, (fl - f) * 3); + Vector3[] v = new Vector3[len]; + Vector3[] n = new Vector3[len]; + int[] t = new int[len]; + + for(int it = 0; it < len; it += 3) + { + v[it ] = facets[f].a; + v[it+1] = facets[f].b; + v[it+2] = facets[f].c; + + n[it ] = facets[f].normal; + n[it+1] = facets[f].normal; + n[it+2] = facets[f].normal; + + t[it ] = it; + t[it+1] = it+1; + t[it+2] = it+2; + + f++; + } + + meshes[i] = new Mesh(); + meshes[i].vertices = v; + meshes[i].normals = n; + meshes[i].triangles = t; + } + + return meshes; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl_Importer.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl_Importer.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..588588b09fbde1b426635db83f16f84a92fcdf2d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Code/pb_Stl_Importer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7dc1dc9c919fa434c915ad64201952dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/LICENSE.txt~ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/LICENSE.txt~ new file mode 100644 index 0000000000000000000000000000000000000000..f78049dc299deffae2f3913099665f6594a50a3a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/LICENSE.txt~ @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Karl Henkel + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/README.md~ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/README.md~ new file mode 100644 index 0000000000000000000000000000000000000000..1a4c66dcbb26e9147194d2e947d42de2cd4711d9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/README.md~ @@ -0,0 +1,42 @@ +# pb_Stl + +An STL importer/exporter for Unity. + +**pb_Stl** is the exporter used in ProBuilder to save [STL](http://paulbourke.net/dataformats/stl/) model files. + + + +## Quick Start + +1. Select a `GameObject` in the Scene View with a `MeshFilter` and valid `Mesh`. +1. In the file menu, `Edit > Export > STL (Ascii)`. +1. View your shiny new STL file. + +## Features + +- Export and import Binary & ASCII STL files in editor or at runtime. +- Custom AssetPostProcessor automatically creates usable prefabs from any STL imported to Unity. +- Option to convert from left to right handed coordinates (on by default, as per STL spec). +- Automatic merging of multiple selected meshes, including relative transformations. +- Import models with vertex counts larger than Unity max by automatically splitting into multiple meshes. + +## Planned Improvements + +- Export window with additional options: + - Swap model axis on import/export. + - Export as multiple objects or merge (currently always merges). + - Generate normals on import (with smoothing or no). + +## Troubleshooting + +#### Model is sideways / horizontal / rotated + +Unity's coordinate system is left handed, with Y axis as the vertical. Other 3d modeling programs may have different coordinate systems or axis assignments. **pb_Stl** exports right handed coordinates by default, but can be modified to retain left handed coordinates. Support for swapping axes is planned. + +## Contributing + +If you would like to submit improvements please include NUnit tests for your changes (and make sure they don't break any existing tests). + +## License + +It's MIT. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Unity.ProBuilder.Stl.asmdef b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Unity.ProBuilder.Stl.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..de05233e6fd2aeae70873ac7e4f8ab7b7a48980d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Unity.ProBuilder.Stl.asmdef @@ -0,0 +1,12 @@ +{ + "name": "Unity.ProBuilder.Stl", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": false, + "defineConstraints": [] +} \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Unity.ProBuilder.Stl.asmdef.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Unity.ProBuilder.Stl.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..d2384cd64ae74c3ba260a1684a355785dfdfef35 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/External/StlExporter/Unity.ProBuilder.Stl.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b1c3ae93a8471b34fa031e31cfdd1fbb +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/LICENSE.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/LICENSE.md new file mode 100644 index 0000000000000000000000000000000000000000..35849c14aa9f0b5e5c5cf2ad81bd5f1cc5187193 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/LICENSE.md @@ -0,0 +1,5 @@ +com.unity.probuilder copyright © 2020 Unity Technologies ApS + +Licensed under the Unity Companion License for Unity-dependent projects--see Unity Companion License. + +Unless expressly provided otherwise, the Software under this license is made available strictly on an “AS IS” BASIS WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. Please review the license for details on these and other terms and conditions. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/LICENSE.md.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/LICENSE.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..817dee06afd7323e7c3f4d9c8ba80d499f514f5e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 705301649b725954283f73edaab0bc20 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/README.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/README.md new file mode 100644 index 0000000000000000000000000000000000000000..a0478fd6aa3b4c635f4203a0b350f672565f0b2b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/README.md @@ -0,0 +1,103 @@ +## Table of Contents + +- [About](#about) +- [Setup](#development) +- [API Overview](#api) +- [License](#license) +- [Third Party Licenses](#third-party-licenses) +- [Contributing](#contributing) + +## About + +ProBuilder is a 3D modeling plugin for [Unity](https://unity3d.com). + +This readme is intended as a brief introduction for developers interested in working with the API. + +See the [Manual](https://docs.unity3d.com/Packages/com.unity.probuilder@4.0/manual/index.html) for a user guide, or the [Scripting Reference](https://docs.unity3d.com/Packages/com.unity.probuilder@4.0/api/index.html) for API documentation. + +## Development + +ProBuilder is a developed as a package and distributed with Package Manager. + +The simplest way to get started working with source is to clone the repository into your `Packages` directory. + +``` +~/Desktop/MyProject$ cd Packages/ +~/Desktop/MyProject/Packages$ git clone https://github.com/Unity-Technologies/com.unity.probuilder +``` + +See the [Package Manager](https://docs.unity3d.com/Packages/com.unity.package-manager-ui@2.0/manual/index.html#installing-removing-disabling-and-updating-packages) documentation for more information on installing packages. + +## API + +There are 3 major namespaces. + +| Namespace | Function | +|--|--| +| `UnityEngine.ProBuilder` | Mesh types and functions to compile meshes to Unity compatible assets. | +| `UnityEngine.ProBuilder.MeshOperations` | Mesh editing. | +| `UnityEditor.ProBuilder` | Editor integration. | + +Mesh data is stored in a component (`ProBuilderMesh`) and compiled to a `UnityEngine.Mesh` (referred to as `UMesh` from here on) as necessary. + +`ProBuilderMesh` retains the following mesh information: + +- Positions +- UVs +- Faces + - Triangles + - Material + - Smoothing group + - Auto/Manual UVs* +- Tangent (if user set) +- UV3/4 (if user set) +- Colors +- Shared vertices (also referred to as "common vertices") + +Normals, tangents, collisions, and UVs are calculated as necessary. + +\*ProBuilder can automatically UV unwrap triangles on a per-face basis. `Face` +has a toggle to enable or disable this feature (users are free to unwrap faces +by manually as well). + +Modifying a ProBuilder mesh is a bit different from a Unity mesh. Instead of +working with the `MeshFilter.sharedMesh` you'll instead be operating on the +ProBuilder representation of the mesh: `ProBuilderMesh`. + +A typical workflow looks like this: + +``` +// Create a new cube primitive +var mesh = ShapeGenerator.CreateShape(ShapeType.Cube); + +// Extrude the first available face along it's normal direction by 1 meter. +mesh.Extrude(new Face[] { mesh.faces.First() }, ExtrudeMethod.FaceNormal, 1f); + +// Apply the changes back to the `MeshFilter.sharedMesh`. +// 1. ToMesh cleans the UnityEngine.Mesh and assigns vertices and sub-meshes. +// 2. Refresh rebuilds generated mesh data, ie UVs, Tangents, Normals, etc. +// 3. (Optional, Editor only) Optimize merges coincident vertices, and rebuilds lightmap UVs. +mesh.ToMesh(); +mesh.Refresh(); +mesh.Optimize(); +``` +## License + +[Unity Companion License](LICENSE.md) + +## Third Party Licenses<a name="third-party-licenses"></a> + +[Third Party Licenses](https://github.com/Unity-Technologies/com.unity.probuilder/blob/master/com.unity.probuilder/Third%20Party%20Notices.md) + +## Contributing + +**All contributions are subject to the [Unity Contribution Agreement(UCA)](https://unity3d.com/legal/licenses/Unity_Contribution_Agreement).** + +By making a pull request, you are confirming agreement to the terms and conditions of the UCA, including that your Contributions are your original creation and that you have complete right and authority to make your Contributions. + +**Pull Requests** + +Please include an entry to the changelog for any PR, along with a Fogbugz ticket number if applicable. + +New logs should be placed under the `## [Unreleased]` header at the top of the changelog. See [Contributing](CONTRIBUTING.md) for more details. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/README.md.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/README.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..8d62064aa86755d73c6da9d5989d042687f3a23c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 857a1f5b23431431da1c19de9d0583de +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime.meta new file mode 100644 index 0000000000000000000000000000000000000000..876470245710f2cf15d33756e49efb491fadbf39 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d19941206035d4c6086b72f9ee148a9e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core.meta new file mode 100644 index 0000000000000000000000000000000000000000..92aaf054d5ebf5448d5ff63bd71b511dad624652 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: bfeb578e50cb4da0910f4eb7fd1b5db1 diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ActionResult.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ActionResult.cs new file mode 100644 index 0000000000000000000000000000000000000000..77b91dff37d32a1b52f3ede09579bfd084da1174 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ActionResult.cs @@ -0,0 +1,98 @@ +using UnityEngine; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Contains information about a ProBuilder action (success, failure, notification, etc) + /// </summary> + public sealed class ActionResult + { + /// <summary> + /// Describes the results of an action. + /// </summary> + public enum Status + { + /// <summary> + /// The action was a success. + /// </summary> + Success, + /// <summary> + /// A critical failure prevented the action from running. + /// </summary> + Failure, + /// <summary> + /// The action was not completed due to invalid parameters. + /// </summary> + Canceled, + /// <summary> + /// The action was not run because there was no meaningful action to be made. + /// </summary> + NoChange + } + + /// <summary> + /// State of affairs after the operation. + /// </summary> + public Status status { get; private set; } + + /// <summary> + /// Short description of the results. Should be no longer than a few words. + /// </summary> + public string notification { get; private set; } + + /// <summary> + /// Create a new ActionResult. + /// </summary> + /// <param name="status">State of affairs after an action.</param> + /// <param name="notification">A short summary of the action performed.</param> + public ActionResult(ActionResult.Status status, string notification) + { + this.status = status; + this.notification = notification; + } + + /// <summary> + /// Convert a result to a boolean value, true if successful and false if not. + /// </summary> + /// <param name="res"></param> + /// <returns>True if action was successful, false otherwise.</returns> + public static implicit operator bool(ActionResult res) + { + return res != null && res.status == Status.Success; + } + + public bool ToBool() + { + return status == Status.Success; + } + + public static bool FromBool(bool success) + { + return success ? ActionResult.Success : new ActionResult(ActionResult.Status.Failure, "Failure"); + } + + /// <summary> + /// Generic "Success" action result with no notification text. + /// </summary> + public static ActionResult Success + { + get { return new ActionResult(ActionResult.Status.Success, ""); } + } + + /// <summary> + /// Generic "No Selection" action result with "Nothing Selected" notification. + /// </summary> + public static ActionResult NoSelection + { + get { return new ActionResult(ActionResult.Status.Canceled, "Nothing Selected"); } + } + + /// <summary> + /// Generic "Canceled" action result with "User Canceled" notification. + /// </summary> + public static ActionResult UserCanceled + { + get { return new ActionResult(ActionResult.Status.Canceled, "User Canceled"); } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ActionResult.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ActionResult.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..15f3deb40270fbd40f905cd04614cd17387baf22 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ActionResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c96b34c870fc49b6b189786a55e14ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ArrayUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ArrayUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..20cfd1a017d2983fc1774ac49e93244a4d367118 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ArrayUtility.cs @@ -0,0 +1,318 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace UnityEngine.ProBuilder +{ + static class ArrayUtility + { + public static T[] ValuesWithIndexes<T>(this T[] arr, int[] indexes) + { + T[] vals = new T[indexes.Length]; + for (int i = 0; i < indexes.Length; i++) + vals[i] = arr[indexes[i]]; + return vals; + } + + public static List<T> ValuesWithIndexes<T>(this List<T> arr, IList<int> indexes) + { + List<T> vals = new List<T>(indexes.Count); + + foreach (var i in indexes) + vals.Add(arr[i]); + + return vals; + } + + public static IEnumerable<int> AllIndexesOf<T>(this IList<T> list, Func<T, bool> lambda) + { + var indexes = new List<int>(); + for (int i = 0, c = list.Count; i < c; i++) + if (lambda(list[i])) + indexes.Add(i); + return indexes; + } + + public static T[] Add<T>(this T[] arr, T val) + { + T[] v = new T[arr.Length + 1]; + System.Array.ConstrainedCopy(arr, 0, v, 0, arr.Length); + v[arr.Length] = val; + return v; + } + + public static T[] AddRange<T>(this T[] arr, T[] val) + { + T[] ret = new T[arr.Length + val.Length]; + System.Array.ConstrainedCopy(arr, 0, ret, 0, arr.Length); + System.Array.ConstrainedCopy(val, 0, ret, arr.Length, val.Length); + return ret; + } + + /** + * Remove @val from @arr. + */ + public static T[] Remove<T>(this T[] arr, T val) + { + List<T> list = new List<T>(arr); + list.Remove(val); + return list.ToArray(); + } + + public static T[] Remove<T>(this T[] arr, IEnumerable<T> val) + { + return arr.Except(val).ToArray(); + } + + public static T[] RemoveAt<T>(this T[] arr, int index) + { + T[] newArray = new T[arr.Length - 1]; + int n = 0; + for (int i = 0; i < arr.Length; i++) + { + if (i != index) + { + newArray[n] = arr[i]; + n++; + } + } + return newArray; + } + + public static T[] RemoveAt<T>(this IList<T> list, IEnumerable<int> indexes) + { + List<int> sorted = new List<int>(indexes); + sorted.Sort(); + return SortedRemoveAt(list, sorted); + } + + /** + * Remove elements at indexes from an array, but accepts a pre-sorted indexes list. + */ + public static T[] SortedRemoveAt<T>(this IList<T> list, IList<int> sorted) + { + int indexeSortedCount = sorted.Count; + int len = list.Count; + + T[] newArray = new T[len - indexeSortedCount]; + int n = 0; + + for (int i = 0; i < len; i++) + { + if (n < indexeSortedCount && sorted[n] == i) + { + // handle duplicate indexes + while (n < indexeSortedCount && sorted[n] == i) + n++; + + continue; + } + + newArray[i - n] = list[i]; + } + + return newArray; + } + + /** + * Holds a start and end index for a binary search. + */ + struct SearchRange + { + public int begin, end; + + public SearchRange(int begin, int end) + { + this.begin = begin; + this.end = end; + } + + public bool Valid() { return end - begin > 1; } + public int Center() { return begin + (end - begin) / 2; } + + public override string ToString() + { + return "{" + begin + ", " + end + "} : " + Center(); + } + } + + /** + * Given a sorted list and value, returns the index of the greatest value in sorted_list that is + * less than value. Ex: List( { 0, 1, 4, 6, 7 } ) Value(5) returns 2, which is the index of value 4. + * If value is less than sorted[0], -1 is returned. If value is greater than sorted[end], sorted.Count-1 + * is returned. If an exact match is found, the index prior to that match is returned. + */ + public static int NearestIndexPriorToValue<T>(IList<T> sorted_list, T value) where T : System.IComparable<T> + { + int count = sorted_list.Count; + if (count < 1) return -1; + + SearchRange range = new SearchRange(0, count - 1); + + if (value.CompareTo(sorted_list[0]) < 0) + return -1; + + if (value.CompareTo(sorted_list[count - 1]) > 0) + return count - 1; + + while (range.Valid()) + { + if (sorted_list[range.Center()].CompareTo(value) > 0) + { + // sb.AppendLine(sorted_list[range.Center()] + " > " + value + " [" + range.begin + ", " + range.end +"] -> [" + range.begin + ", " + range.Center() + "]"); + range.end = range.Center(); + } + else + { + // sb.AppendLine(sorted_list[range.Center()] + " < " + value + " [" + range.begin + ", " + range.end +"] -> [" + range.Center() + ", " + range.end + "]"); + range.begin = range.Center(); + + if (sorted_list[range.begin + 1].CompareTo(value) >= 0) + { + return range.begin; + } + } + } + + return 0; + } + + public static List<T> Fill<T>(System.Func<int, T> ctor, int length) + { + List<T> list = new List<T>(length); + for (int i = 0; i < length; i++) + list.Add(ctor(i)); + return list; + } + + public static T[] Fill<T>(T val, int length) + { + T[] arr = new T[length]; + for (int i = 0; i < length; i++) + { + arr[i] = val; + } + return arr; + } + + /** + * True if any value is present in both arrays. + */ + public static bool ContainsMatch<T>(this T[] a, T[] b) + { + int ind = -1; + for (int i = 0; i < a.Length; i++) + { + ind = System.Array.IndexOf(b, a[i]); + if (ind > -1) return true;//ind; + } + return false;// ind; + } + + /** + * True if any value is present in both arrays, setting index_a and index_b to the index in the array of each match. + */ + public static bool ContainsMatch<T>(this T[] a, T[] b, out int index_a, out int index_b) + { + index_b = -1; + for (index_a = 0; index_a < a.Length; index_a++) + { + index_b = Array.IndexOf(b, a[index_a]); + if (index_b > -1) + return true; //ind; + } + + return false; // ind; + } + + /** + * Concatenate two arrays. + */ + public static T[] Concat<T>(this T[] x, T[] y) + { + if (x == null) throw new ArgumentNullException("x"); + if (y == null) throw new ArgumentNullException("y"); + int oldLen = x.Length; + Array.Resize<T>(ref x, x.Length + y.Length); + Array.Copy(y, 0, x, oldLen, y.Length); + return x; + } + + /** + * Returns the index of the array that contains this value. -1 if not found. + */ + public static int IndexOf<T>(this List<List<T>> InList, T InValue) + { + for (int i = 0; i < InList.Count; i++) + { + for (int x = 0; x < InList[i].Count; x++) + if (InList[i][x].Equals(InValue)) + return i; + } + + return -1; + } + + /** + * Generate a new array with count using the constructor. ctor recieves the index and returns a new instance of T. + */ + public static T[] Fill<T>(int count, System.Func<int, T> ctor) + { + T[] arr = new T[count]; + for (int i = 0; i < count; i++) + arr[i] = ctor(i); + return arr; + } + + /** + * Add a value to a key in dictionary, adding a new entry if necessray. + */ + public static void AddOrAppend<T, K>(this Dictionary<T, List<K>> dictionary, T key, K value) + { + List<K> list; + + if (dictionary.TryGetValue(key, out list)) + list.Add(value); + else + dictionary.Add(key, new List<K>() { value }); + } + + /** + * Add a value to a key in dictionary, adding a new entry if necessray. + */ + public static void AddOrAppendRange<T, K>(this Dictionary<T, List<K>> dictionary, T key, List<K> value) + { + List<K> list; + + if (dictionary.TryGetValue(key, out list)) + list.AddRange(value); + else + dictionary.Add(key, value); + } + + /** + * http://stackoverflow.com/questions/1300088/distinct-with-lambda + */ + public static IEnumerable<TSource> DistinctBy<TSource, TKey>( + this IEnumerable<TSource> source, + Func<TSource, TKey> keySelector) + { + HashSet<TKey> knownKeys = new HashSet<TKey>(); + return source.Where(x => knownKeys.Add(keySelector(x))); + } + + public static string ToString<TKey, TValue>(this Dictionary<TKey, TValue> dict) + { + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + foreach (KeyValuePair<TKey, TValue> kvp in dict) + sb.AppendLine(string.Format("Key: {0} Value: {1}", kvp.Key, kvp.Value)); + return sb.ToString(); + } + + public static string ToString<T>(this IEnumerable<T> arr, string separator = ", ") + { + return string.Join(separator, arr.Select(x => x.ToString()).ToArray()); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ArrayUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ArrayUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..008d9ba4729fe8ba337f4814bb73021351658c05 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ArrayUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11887933ce4b13e4f9f5ec4163298397 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/AssemblyInfo.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..136c19ae982cb474c4e42744df89df3d9a97dbf7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/AssemblyInfo.cs @@ -0,0 +1,8 @@ +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Unity.ProBuilder.MeshOperations")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Unity.ProBuilder.Editor")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Unity.ProBuilder.Tests")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Unity.ProBuilder.Tests.Framework")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Unity.ProBuilder.Tests.Slow")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Unity.ProBuilder.Editor.Tests")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Unity.ProBuilder.Debug.Editor")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Unity.ProBuilder.AddOns.Editor")] diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/AssemblyInfo.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/AssemblyInfo.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..df0fd006a6678f5fbbf1094e2be5c400499e4b22 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/AssemblyInfo.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 08b58b81e1014e9a804abb4cd35c2eb3 +timeCreated: 1510169816 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/AutoUnwrapSettings.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/AutoUnwrapSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..dfec7aa8bfd347daf58082e9e6f722ce95c30be3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/AutoUnwrapSettings.cs @@ -0,0 +1,299 @@ +using UnityEngine; +using UnityEngine.Serialization; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// A collection of settings describing how to project UV coordinates for a @"UnityEngine.ProBuilder.Face". + /// </summary> + [System.Serializable] + public struct AutoUnwrapSettings + { + public static AutoUnwrapSettings defaultAutoUnwrapSettings + { + get + { + var settings = new AutoUnwrapSettings(); + settings.Reset(); + return settings; + } + } + + /// <summary> + /// The point from which UV transform operations will be performed. + /// <br /> + /// After the initial projection into 2d space, UVs will be translated to the anchor position. Next, the offset and rotation are applied, followed by the various other settings. + /// </summary> + public enum Anchor + { + /// <summary> + /// The top left bound of the projected UVs is aligned with UV coordinate {0, 1}. + /// </summary> + UpperLeft, + /// <summary> + /// The center top bound of the projected UVs is aligned with UV coordinate {.5, 1}. + /// </summary> + UpperCenter, + /// <summary> + /// The right top bound of the projected UVs is aligned with UV coordinate {1, 1}. + /// </summary> + UpperRight, + /// <summary> + /// The middle left bound of the projected UVs is aligned with UV coordinate {0, .5}. + /// </summary> + MiddleLeft, + /// <summary> + /// The center bounding point of the projected UVs is aligned with UV coordinate {.5, .5}. + /// </summary> + MiddleCenter, + /// <summary> + /// The middle right bound of the projected UVs is aligned with UV coordinate {1, .5}. + /// </summary> + MiddleRight, + /// <summary> + /// The lower left bound of the projected UVs is aligned with UV coordinate {0, 0}. + /// </summary> + LowerLeft, + /// <summary> + /// The lower center bound of the projected UVs is aligned with UV coordinate {.5, 0}. + /// </summary> + LowerCenter, + /// <summary> + /// The lower right bound of the projected UVs is aligned with UV coordinate {1, 0}. + /// </summary> + LowerRight, + /// <summary> + /// UVs are not aligned following projection. + /// </summary> + None + } + + /// <summary> + /// Describes how the projected UV bounds are optionally stretched to fill normalized coordinate space. + /// </summary> + public enum Fill + { + /// <summary> + /// UV bounds are resized to fit within a 1 unit square while retaining original aspect ratio. + /// </summary> + Fit, + /// <summary> + /// UV bounds are not resized. + /// </summary> + Tile, + /// <summary> + /// UV bounds are resized to fit within a 1 unit square, not retaining aspect ratio. + /// </summary> + Stretch + } + + [SerializeField] + [FormerlySerializedAs("useWorldSpace")] + bool m_UseWorldSpace; + + [SerializeField] + [FormerlySerializedAs("flipU")] + bool m_FlipU; + + [SerializeField] + [FormerlySerializedAs("flipV")] + bool m_FlipV; + + [SerializeField] + [FormerlySerializedAs("swapUV")] + bool m_SwapUV; + + [SerializeField] + [FormerlySerializedAs("fill")] + Fill m_Fill; + + [SerializeField] + [FormerlySerializedAs("scale")] + Vector2 m_Scale; + + [SerializeField] + [FormerlySerializedAs("offset")] + Vector2 m_Offset; + + [SerializeField] + [FormerlySerializedAs("rotation")] + float m_Rotation; + + [SerializeField] + [FormerlySerializedAs("anchor")] + Anchor m_Anchor; + + /// <summary> + /// By default, UVs are project in local (or model) coordinates. Enable useWorldSpace to transform vertex positions into world space for UV projection. + /// </summary> + public bool useWorldSpace + { + get { return m_UseWorldSpace; } + set { m_UseWorldSpace = value; } + } + + /// <summary> + /// When enabled UV coordinates will be inverted horizontally. + /// </summary> + public bool flipU + { + get { return m_FlipU; } + set { m_FlipU = value; } + } + + /// <summary> + /// When enabled UV coordinates will be inverted vertically. + /// </summary> + public bool flipV + { + get { return m_FlipV; } + set { m_FlipV = value; } + } + + /// <summary> + /// When enabled the coordinates will have their U and V parameters exchanged. + /// </summary> + /// <example> + /// {U, V} becomes {V, U} + /// </example> + public bool swapUV + { + get { return m_SwapUV; } + set { m_SwapUV = value; } + } + + /// <summary> + /// The @"UnityEngine.ProBuilder.AutoUnwrapSettings.Fill" mode. + /// </summary> + public Fill fill + { + get { return m_Fill; } + set { m_Fill = value; } + } + + /// <summary> + /// Coordinates are multiplied by this value after projection and anchor settings. + /// </summary> + public Vector2 scale + { + get { return m_Scale; } + set { m_Scale = value; } + } + + /// <summary> + /// Added to UV coordinates after projection and anchor settings. + /// </summary> + public Vector2 offset + { + get { return m_Offset; } + set { m_Offset = value; } + } + + /// <summary> + /// An amount in degrees that UV coordinates are to be rotated clockwise. + /// </summary> + public float rotation + { + get { return m_Rotation; } + set { m_Rotation = value; } + } + + /// <summary> + /// The starting point from which UV transform operations will be performed. + /// </summary> + public Anchor anchor + { + get { return m_Anchor; } + set { m_Anchor = value; } + } + + /// <summary> + /// A copy constructor. + /// </summary> + /// <param name="unwrapSettings">The settings to copy to this new instance.</param> + public AutoUnwrapSettings(AutoUnwrapSettings unwrapSettings) + { + m_UseWorldSpace = unwrapSettings.m_UseWorldSpace; + m_FlipU = unwrapSettings.m_FlipU; + m_FlipV = unwrapSettings.m_FlipV; + m_SwapUV = unwrapSettings.m_SwapUV; + m_Fill = unwrapSettings.m_Fill; + m_Scale = unwrapSettings.m_Scale; + m_Offset = unwrapSettings.m_Offset; + m_Rotation = unwrapSettings.m_Rotation; + m_Anchor = unwrapSettings.m_Anchor; + } + + /// <summary> + /// Get a set of unwrap parameters that tiles UVs. + /// </summary> + public static AutoUnwrapSettings tile + { + get + { + var res = new AutoUnwrapSettings(); + res.Reset(); + return res; + } + } + + /// <summary> + /// Get a set of unwrap parameters that strectches the face texture to fill a normalized coordinate space, maintaining th aspect ratio. + /// </summary> + public static AutoUnwrapSettings fit + { + get + { + var res = new AutoUnwrapSettings(); + res.Reset(); + res.fill = Fill.Fit; + return res; + } + } + + /// <summary> + /// Get a set of unwrap parameters that strectches the face texture to fill a normalized coordinate space, disregarding the aspect ratio. + /// </summary> + public static AutoUnwrapSettings stretch + { + get + { + var res = new AutoUnwrapSettings(); + res.Reset(); + res.fill = Fill.Stretch; + return res; + } + } + + /// <summary> + /// Resets all parameters to default values. + /// </summary> + public void Reset() + { + m_UseWorldSpace = false; + m_FlipU = false; + m_FlipV = false; + m_SwapUV = false; + m_Fill = Fill.Tile; + m_Scale = new Vector2(1f, 1f); + m_Offset = new Vector2(0f, 0f); + m_Rotation = 0f; + m_Anchor = Anchor.None; + } + + public override string ToString() + { + string str = + "Use World Space: " + useWorldSpace + "\n" + + "Flip U: " + flipU + "\n" + + "Flip V: " + flipV + "\n" + + "Swap UV: " + swapUV + "\n" + + "Fill Mode: " + fill + "\n" + + "Anchor: " + anchor + "\n" + + "Scale: " + scale + "\n" + + "Offset: " + offset + "\n" + + "Rotation: " + rotation; + return str; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/AutoUnwrapSettings.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/AutoUnwrapSettings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b4069e734755e5653030365a08a39b3bad3d01b8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/AutoUnwrapSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fdadef59afbc0447793550ae30addc32 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BezierPoint.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BezierPoint.cs new file mode 100644 index 0000000000000000000000000000000000000000..688782f62e2ecb5fffbcba3ec88aa4818014e707 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BezierPoint.cs @@ -0,0 +1,125 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// How bezier handles behave when being manipulated in the scene view. + /// </summary> + enum BezierTangentMode + { + Free, + Aligned, + Mirrored + } + + enum BezierTangentDirection + { + In, + Out + } + + /// <summary> + /// A bezier knot. + /// </summary> + [System.Serializable] + struct BezierPoint + { + public Vector3 position; + public Vector3 tangentIn; + public Vector3 tangentOut; + public Quaternion rotation; + + public BezierPoint(Vector3 position, Vector3 tangentIn, Vector3 tangentOut, Quaternion rotation) + { + this.position = position; + this.tangentIn = tangentIn; + this.tangentOut = tangentOut; + this.rotation = rotation; + } + + public void EnforceTangentMode(BezierTangentDirection master, BezierTangentMode mode) + { + if (mode == BezierTangentMode.Aligned) + { + if (master == BezierTangentDirection.In) + tangentOut = position + (tangentOut - position).normalized * (tangentIn - position).magnitude; + else + tangentIn = position + (tangentIn - position).normalized * (tangentOut - position).magnitude; + } + else if (mode == BezierTangentMode.Mirrored) + { + if (master == BezierTangentDirection.In) + tangentOut = position - (tangentIn - position); + else + tangentIn = position - (tangentOut - position); + } + } + + /// <summary> + /// Set the position while also moving tangent points. + /// </summary> + /// <param name="position"></param> + public void SetPosition(Vector3 position) + { + Vector3 delta = position - this.position; + this.position = position; + this.tangentIn += delta; + this.tangentOut += delta; + } + + public void SetTangentIn(Vector3 tangent, BezierTangentMode mode) + { + this.tangentIn = tangent; + EnforceTangentMode(BezierTangentDirection.In, mode); + } + + public void SetTangentOut(Vector3 tangent, BezierTangentMode mode) + { + this.tangentOut = tangent; + EnforceTangentMode(BezierTangentDirection.Out, mode); + } + + public static Vector3 QuadraticPosition(BezierPoint a, BezierPoint b, float t) + { + float x = (1f - t) * (1f - t) * a.position.x + 2f * (1f - t) * t * a.tangentOut.x + t * t * b.position.x; + float y = (1f - t) * (1f - t) * a.position.y + 2f * (1f - t) * t * a.tangentOut.y + t * t * b.position.y; + float z = (1f - t) * (1f - t) * a.position.z + 2f * (1f - t) * t * a.tangentOut.z + t * t * b.position.z; + return new Vector3(x, y, z); + } + + public static Vector3 CubicPosition(BezierPoint a, BezierPoint b, float t) + { + t = Mathf.Clamp01(t); + + float oneMinusT = 1f - t; + + return oneMinusT * oneMinusT * oneMinusT * a.position + + 3f * oneMinusT * oneMinusT * t * a.tangentOut + + 3f * oneMinusT * t * t * b.tangentIn + + t * t * t * b.position; + } + + public static Vector3 GetLookDirection(IList<BezierPoint> points, int index, int previous, int next) + { + if (previous < 0) + { + return (points[index].position - QuadraticPosition(points[index], points[next], .1f)).normalized; + } + else if (next < 0) + { + return (QuadraticPosition(points[index], points[previous], .1f) - points[index].position).normalized; + } + else if (next > -1 && previous > -1) + { + Vector3 a = (QuadraticPosition(points[index], points[previous], .1f) - points[index].position).normalized; + Vector3 b = (QuadraticPosition(points[index], points[next], .1f) - points[index].position).normalized; + return ((a + b) * .5f).normalized; + } + else + { + return Vector3.forward; + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BezierPoint.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BezierPoint.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9d7c23fa0a125e187cc43499d52f73589a2ca969 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BezierPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 92c923034fe494e2d83cc342e7f8020b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BezierShape.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BezierShape.cs new file mode 100644 index 0000000000000000000000000000000000000000..b223e1fa4c90583a5d4da880a57d36ffab878400 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BezierShape.cs @@ -0,0 +1,73 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + [AddComponentMenu("")] + [DisallowMultipleComponent, ExcludeFromPreset, ExcludeFromObjectFactory] + [RequireComponent(typeof(ProBuilderMesh))] + sealed class BezierShape : MonoBehaviour + { + public List<BezierPoint> points = new List<BezierPoint>(); + public bool closeLoop = false; + public float radius = .5f; + public int rows = 8; + public int columns = 16; + public bool smooth = true; + [SerializeField] + bool m_IsEditing; + public bool isEditing + { + get { return m_IsEditing; } + set { m_IsEditing = value; } + } + + ProBuilderMesh m_Mesh; + + public ProBuilderMesh mesh + { + get + { + if (m_Mesh == null) + m_Mesh = GetComponent<ProBuilderMesh>(); + + return m_Mesh; + } + + set + { + m_Mesh = value; + } + } + + /// <summary> + /// Initialize the points list with a default set. + /// </summary> + public void Init() + { + Vector3 tan = new Vector3(0f, 0f, 2f); + Vector3 p1 = new Vector3(3f, 0f, 0f); + points.Add(new BezierPoint(Vector3.zero, -tan, tan, Quaternion.identity)); + points.Add(new BezierPoint(p1, p1 + tan, p1 + -tan, Quaternion.identity)); + } + + /// <summary> + /// Rebuild the ProBuilderMesh with the extruded spline. + /// </summary> + public void Refresh() + { + if (points.Count < 2) + { + mesh.Clear(); + mesh.ToMesh(); + mesh.Refresh(); + } + else + { + ProBuilderMesh m = mesh; + Spline.Extrude(points, radius, columns, rows, closeLoop, smooth, ref m); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BezierShape.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BezierShape.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ddc5cfb60862cb61a07e47987627ae4247506617 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BezierShape.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7b0368f3d533f4c379d9a83478864e0d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Bounds2D.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Bounds2D.cs new file mode 100644 index 0000000000000000000000000000000000000000..926c919dd9d05ec87d9375489ed5ec9f04476919 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Bounds2D.cs @@ -0,0 +1,421 @@ +using UnityEngine; +using System.Collections.Generic; +using System.Linq; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Internal bounds class. + /// </summary> + sealed class Bounds2D + { + public Vector2 center = Vector2.zero; + [SerializeField] Vector2 m_Size = Vector2.zero; + [SerializeField] Vector2 m_Extents = Vector2.zero; + + public Vector2 size + { + get { return m_Size; } + + set + { + m_Size = value; + + m_Extents.x = m_Size.x * .5f; + m_Extents.y = m_Size.y * .5f; + } + } + + public Vector2 extents + { + get { return m_Extents; } + } + + /// <summary> + /// Returns an array of Vector2[] points for each corner, in the order right to left, top to bottom. + /// </summary> + public Vector2[] corners + { + get + { + return new Vector2[] { + new Vector2(center.x - extents.x, center.y + extents.y), + new Vector2(center.x + extents.x, center.y + extents.y), + new Vector2(center.x - extents.x, center.y - extents.y), + new Vector2(center.x + extents.x, center.y - extents.y) + }; + } + } + + public Bounds2D() + {} + + public Bounds2D(Vector2 center, Vector2 size) + { + this.center = center; + this.size = size; + } + + /// <summary> + /// Create bounds from a set of 2d points. + /// </summary> + /// <param name="points"></param> + public Bounds2D(IList<Vector2> points) + { + SetWithPoints(points); + } + + /// <summary> + /// Create bounds from a set of 2d points. + /// </summary> + /// <param name="points"></param> + /// <param name="indexes"></param> + public Bounds2D(IList<Vector2> points, IList<int> indexes) + { + SetWithPoints(points, indexes); + } + + /// <summary> + /// Create bounds from a set of 3d points cast to 2d. + /// </summary> + /// <param name="points"></param> + /// <param name="edges"></param> + internal Bounds2D(Vector3[] points, Edge[] edges) + { + float xMin = 0f, + xMax = 0f, + yMin = 0f, + yMax = 0f; + + if (points.Length > 0 && edges.Length > 0) + { + xMin = points[edges[0].a].x; + yMin = points[edges[0].a].y; + xMax = xMin; + yMax = yMin; + + for (int i = 0; i < edges.Length; i++) + { + xMin = Mathf.Min(xMin, points[edges[i].a].x); + xMin = Mathf.Min(xMin, points[edges[i].b].x); + yMin = Mathf.Min(yMin, points[edges[i].a].y); + yMin = Mathf.Min(yMin, points[edges[i].b].y); + + xMax = Mathf.Max(xMax, points[edges[i].a].x); + xMax = Mathf.Max(xMax, points[edges[i].b].x); + yMax = Mathf.Max(yMax, points[edges[i].a].y); + yMax = Mathf.Max(yMax, points[edges[i].b].y); + } + } + + this.center = new Vector2((xMin + xMax) / 2f, (yMin + yMax) / 2f); + this.size = new Vector3(xMax - xMin, yMax - yMin); + } + + public Bounds2D(Vector2[] points, int length) + { + float xMin = 0f, + xMax = 0f, + yMin = 0f, + yMax = 0f; + + if (points.Length > 0) + { + xMin = points[0].x; + yMin = points[0].y; + xMax = xMin; + yMax = yMin; + + for (int i = 1; i < length; i++) + { + xMin = Mathf.Min(xMin, points[i].x); + yMin = Mathf.Min(yMin, points[i].y); + + xMax = Mathf.Max(xMax, points[i].x); + yMax = Mathf.Max(yMax, points[i].y); + } + } + + this.center = new Vector2((xMin + xMax) / 2f, (yMin + yMax) / 2f); + this.size = new Vector3(xMax - xMin, yMax - yMin); + } + + /// <summary> + /// Returns true if the point is contained within the bounds. False otherwise. + /// </summary> + /// <param name="point"></param> + /// <returns></returns> + public bool ContainsPoint(Vector2 point) + { + return !(point.x > center.x + extents.x || + point.x < center.x - extents.x || + point.y > center.y + extents.y || + point.y < center.y - extents.y); + } + + /// <summary> + /// Returns true if any part of the line segment is contained within this bounding box. + /// </summary> + /// <param name="lineStart"></param> + /// <param name="lineEnd"></param> + /// <returns></returns> + public bool IntersectsLineSegment(Vector2 lineStart, Vector2 lineEnd) + { + if (ContainsPoint(lineStart) || ContainsPoint(lineEnd)) + { + return true; + } + else + { + Vector2[] aabb = corners; + return (Math.GetLineSegmentIntersect(aabb[0], aabb[1], lineStart, lineEnd) || + Math.GetLineSegmentIntersect(aabb[1], aabb[3], lineStart, lineEnd) || + Math.GetLineSegmentIntersect(aabb[3], aabb[2], lineStart, lineEnd) || + Math.GetLineSegmentIntersect(aabb[2], aabb[0], lineStart, lineEnd)); + } + } + + /// <summary> + /// Returns true if bounds overlap. + /// </summary> + /// <param name="bounds"></param> + /// <returns></returns> + public bool Intersects(Bounds2D bounds) + { + Vector2 dist = this.center - bounds.center; + Vector2 size = this.size + bounds.size; + + return Mathf.Abs(dist.x) * 2f < size.x && + Mathf.Abs(dist.y) * 2f < size.y; + } + + /// <summary> + /// Check if this rect is intersected by another. + /// </summary> + /// <param name="rect"></param> + /// <returns>True if bounds overlaps rect.</returns> + public bool Intersects(Rect rect) + { + Vector2 dist = this.center - rect.center; + Vector2 size = this.size + rect.size; + + return Mathf.Abs(dist.x) * 2f < size.x && + Mathf.Abs(dist.y) * 2f < size.y; + } + + /// <summary> + /// Set this bounds center and size to encapsulate points. + /// </summary> + /// <param name="points"></param> + public void SetWithPoints(IList<Vector2> points) + { + float xMin = 0f, + xMax = 0f, + yMin = 0f, + yMax = 0f; + + int len = points.Count; + + if (len > 0) + { + xMin = points[0].x; + yMin = points[0].y; + xMax = xMin; + yMax = yMin; + + for (int i = 1; i < len; i++) + { + float x = points[i].x; + float y = points[i].y; + + if (x < xMin) xMin = x; + if (x > xMax) xMax = x; + + if (y < yMin) yMin = y; + if (y > yMax) yMax = y; + } + } + + center.x = (xMin + xMax) / 2f; + center.y = (yMin + yMax) / 2f; + + m_Size.x = xMax - xMin; + m_Size.y = yMax - yMin; + + m_Extents.x = m_Size.x * .5f; + m_Extents.y = m_Size.y * .5f; + } + + /// <summary> + /// Set this bounds center and size to encapsulate points. + /// </summary> + /// <param name="points"></param> + /// <param name="indexes"></param> + public void SetWithPoints(IList<Vector2> points, IList<int> indexes) + { + float xMin = 0f, + xMax = 0f, + yMin = 0f, + yMax = 0f; + + if (points.Count > 0 && indexes.Count > 0) + { + xMin = points[indexes[0]].x; + yMin = points[indexes[0]].y; + xMax = xMin; + yMax = yMin; + + for (int i = 1; i < indexes.Count; i++) + { + float x = points[indexes[i]].x; + float y = points[indexes[i]].y; + + if (x < xMin) xMin = x; + if (x > xMax) xMax = x; + + if (y < yMin) yMin = y; + if (y > yMax) yMax = y; + } + } + + center.x = (xMin + xMax) / 2f; + center.y = (yMin + yMax) / 2f; + + m_Size.x = xMax - xMin; + m_Size.y = yMax - yMin; + + m_Extents.x = m_Size.x * .5f; + m_Extents.y = m_Size.y * .5f; + } + + /// <summary> + /// Returns the center of the bounding box of points. Optional parameter @length limits the bounds calculations + /// to only the points up to length in array. + /// </summary> + /// <param name="points"></param> + /// <param name="length"></param> + /// <returns></returns> + public static Vector2 Center(IList<Vector2> points) + { + float xMin = 0f, + xMax = 0f, + yMin = 0f, + yMax = 0f; + + int size = points.Count; + + xMin = points[0].x; + yMin = points[0].y; + xMax = xMin; + yMax = yMin; + + for (int i = 1; i < size; i++) + { + float x = points[i].x; + float y = points[i].y; + + if (x < xMin) xMin = x; + if (x > xMax) xMax = x; + + if (y < yMin) yMin = y; + if (y > yMax) yMax = y; + } + + return new Vector2((xMin + xMax) / 2f, (yMin + yMax) / 2f); + } + + public static Vector2 Center(IList<Vector2> points, IList<int> indexes) + { + float xMin = 0f, + xMax = 0f, + yMin = 0f, + yMax = 0f; + + int size = indexes.Count; + + xMin = points[indexes[0]].x; + yMin = points[indexes[0]].y; + xMax = xMin; + yMax = yMin; + + for (int i = 1; i < size; i++) + { + float x = points[indexes[i]].x; + float y = points[indexes[i]].y; + + if (x < xMin) xMin = x; + if (x > xMax) xMax = x; + + if (y < yMin) yMin = y; + if (y > yMax) yMax = y; + } + + return new Vector2((xMin + xMax) / 2f, (yMin + yMax) / 2f); + } + + public static Vector2 Size(IList<Vector2> points, IList<int> indexes) + { + float xMin = 0f, + xMax = 0f, + yMin = 0f, + yMax = 0f; + + int size = indexes.Count; + + xMin = points[indexes[0]].x; + yMin = points[indexes[0]].y; + xMax = xMin; + yMax = yMin; + + for (int i = 1; i < size; i++) + { + float x = points[indexes[i]].x; + float y = points[indexes[i]].y; + + if (x < xMin) xMin = x; + if (x > xMax) xMax = x; + + if (y < yMin) yMin = y; + if (y > yMax) yMax = y; + } + + return new Vector2(xMax - xMin, yMax - yMin); + } + + internal static Vector2 Center(IList<Vector4> points, IEnumerable<int> indexes) + { + float xMin = 0f, + xMax = 0f, + yMin = 0f, + yMax = 0f; + + if (indexes.Any()) + { + var first = indexes.First(); + + xMin = points[first].x; + yMin = points[first].y; + xMax = xMin; + yMax = yMin; + + foreach (var index in indexes) + { + float x = points[index].x; + float y = points[index].y; + + if (x < xMin) xMin = x; + if (x > xMax) xMax = x; + + if (y < yMin) yMin = y; + if (y > yMax) yMax = y; + } + } + return new Vector2((xMin + xMax) / 2f, (yMin + yMax) / 2f); + } + + public override string ToString() + { + return "[cen: " + center + " size: " + size + "]"; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Bounds2D.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Bounds2D.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..664773f14a8a2b58871212ca1627b222c75a91d0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Bounds2D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e8a07bcd05f44a0aa578517e042d91b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BuiltinMaterials.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BuiltinMaterials.cs new file mode 100644 index 0000000000000000000000000000000000000000..738190c760682ac606a09837af6f73808e3840f7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BuiltinMaterials.cs @@ -0,0 +1,296 @@ +using System; +using UnityEngine.Rendering; +using System.Reflection; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Access the built-in materials that ProBuilder uses. In the editor, see + /// <see cref="UnityEditor.ProBuilder.EditorMaterialUtility"/> for access to the full array of provided materials + /// and shaders. + /// </summary> + public static class BuiltinMaterials + { + static bool s_IsInitialized; + + /// <value> + /// A shader used to highlight face selections. + /// </value> + public const string faceShader = "Hidden/ProBuilder/FaceHighlight"; + + /// <value> + /// A shader used to highlight edge selections. + /// </value> + /// <remarks> + /// If the graphics device does not support geometry shaders, this shader will not be compiled. + /// Use <see cref="wireShader"/> in that case. + /// </remarks> + public const string lineShader = "Hidden/ProBuilder/LineBillboard"; + + /// <value> + /// A line shader for use with CreateEdgeBillboardMesh when geometry shaders are not available. Prefer to use + /// <see cref="lineShader"/> where possible. + /// </value> + public const string lineShaderMetal = "Hidden/ProBuilder/LineBillboardMetal"; + + /// <value> + /// A shader used to draw camera facing billboards from a single vertex. + /// </value> + /// <remarks> + /// If the graphics device does not support geometry shaders, this shader will not be compiled. + /// Use <see cref="dotShader"/> in that case. + /// </remarks> + public const string pointShader = "Hidden/ProBuilder/PointBillboard"; + + /// <value> + /// A fallback shader used to draw lines when the graphics device does not support geometry shaders. + /// </value> + /// <seealso cref="lineShader"/> + public const string wireShader = "Hidden/ProBuilder/FaceHighlight"; + + /// <value> + /// A fallback shader used to draw billboards when the graphics device does not support geometry shaders. + /// </value> + /// <seealso cref="pointShader"/> + public const string dotShader = "Hidden/ProBuilder/VertexShader"; + + static Shader s_SelectionPickerShader; + + static bool s_GeometryShadersSupported; + + static Material s_DefaultMaterial; + static Material s_FacePickerMaterial; + static Material s_VertexPickerMaterial; + static Material s_EdgePickerMaterial; + static Material s_UnityDefaultDiffuse; + static Material s_UnlitVertexColorMaterial; + +#if HDRP_7_1_0_OR_NEWER + static string k_EdgePickerMaterial = "Materials/EdgePickerHDRP"; + static string k_FacePickerMaterial = "Materials/FacePickerHDRP"; + static string k_VertexPickerMaterial = "Materials/VertexPickerHDRP"; + + static string k_EdgePickerShader = "Hidden/ProBuilder/EdgePickerHDRP"; + static string k_FacePickerShader = "Hidden/ProBuilder/FacePickerHDRP"; + static string k_VertexPickerShader = "Hidden/ProBuilder/VertexPickerHDRP"; +#else + static string k_EdgePickerMaterial = "Materials/EdgePicker"; + static string k_FacePickerMaterial = "Materials/FacePicker"; + static string k_VertexPickerMaterial = "Materials/VertexPicker"; + + static string k_EdgePickerShader = "Hidden/ProBuilder/EdgePicker"; + static string k_FacePickerShader = "Hidden/ProBuilder/FacePicker"; + static string k_VertexPickerShader = "Hidden/ProBuilder/VertexPicker"; +#endif + + static void Init() + { + if (s_IsInitialized) + return; + + s_IsInitialized = true; + + var geo = Shader.Find(lineShader); + s_GeometryShadersSupported = geo != null && geo.isSupported; + + s_DefaultMaterial = GetDefaultMaterial(); + + // SelectionPicker shader + s_SelectionPickerShader = (Shader)Shader.Find("Hidden/ProBuilder/SelectionPicker"); + + if ((s_FacePickerMaterial = Resources.Load<Material>(k_FacePickerMaterial)) == null) + { + Log.Error("FacePicker material not loaded... please re-install ProBuilder to fix this error."); + s_FacePickerMaterial = new Material(Shader.Find(k_FacePickerShader)); + } + + if ((s_VertexPickerMaterial = Resources.Load<Material>(k_VertexPickerMaterial)) == null) + { + Log.Error("VertexPicker material not loaded... please re-install ProBuilder to fix this error."); + s_VertexPickerMaterial = new Material(Shader.Find(k_VertexPickerShader)); + } + + if ((s_EdgePickerMaterial = Resources.Load<Material>(k_EdgePickerMaterial)) == null) + { + Log.Error("EdgePicker material not loaded... please re-install ProBuilder to fix this error."); + s_EdgePickerMaterial = new Material(Shader.Find(k_EdgePickerShader)); + } + + s_UnlitVertexColorMaterial = (Material)Resources.Load("Materials/UnlitVertexColor", typeof(Material)); + } + + /// <summary> + /// Return true if the current graphics device supports geometry shaders, and false if it does not. + /// </summary> + public static bool geometryShadersSupported + { + get + { + Init(); + return s_GeometryShadersSupported; + } + } + + /// <value> + /// The default ProBuilder material. + /// </value> + /// <remarks> + /// When using the Scriptable Render Pipeline this returns the default material for that pipeline. + /// </remarks> + public static Material defaultMaterial + { + get + { + Init(); + return s_DefaultMaterial; + } + } + + /// <value> + /// Shader used in selection picking functions. + /// </value> + internal static Shader selectionPickerShader + { + get + { + Init(); + return s_SelectionPickerShader; + } + } + + /// <value> + /// Material used for face picking functions. + /// </value> + internal static Material facePickerMaterial + { + get + { + Init(); + return s_FacePickerMaterial; + } + } + + /// <value> + /// Material used for vertex picking functions. + /// </value> + internal static Material vertexPickerMaterial + { + get + { + Init(); + return s_VertexPickerMaterial; + } + } + + /// <value> + /// Material used for edge picking functions. + /// </value> + internal static Material edgePickerMaterial + { + get + { + Init(); + return s_EdgePickerMaterial; + } + } + + /// <value> + /// The ProBuilder "Trigger" entity type material. + /// </value> + internal static Material triggerMaterial + { + get + { + Init(); + return (Material)Resources.Load("Materials/Trigger", typeof(Material)); + } + } + + /// <value> + /// The ProBuilder "Collider" entity type material. + /// </value> + internal static Material colliderMaterial + { + get + { + Init(); + return (Material)Resources.Load("Materials/Collider", typeof(Material)); + } + } + + /// <summary> + /// The ProBuilder "NoDraw" material. Faces with this material are hidden when the game is played. + /// </summary> + [Obsolete("NoDraw is no longer supported.")] + internal static Material noDrawMaterial + { + get + { + Init(); + return (Material)Resources.Load("Materials/NoDraw", typeof(Material)); + } + } + + /// <summary> + /// Default Unity diffuse material. + /// </summary> + internal static Material GetLegacyDiffuse() + { + Init(); + + if (s_UnityDefaultDiffuse == null) + { + var mi = typeof(Material).GetMethod("GetDefaultMaterial", + BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static); + + if (mi != null) + s_UnityDefaultDiffuse = mi.Invoke(null, null) as Material; + + if (s_UnityDefaultDiffuse == null) + { + var go = GameObject.CreatePrimitive(PrimitiveType.Cube); + s_UnityDefaultDiffuse = go.GetComponent<MeshRenderer>().sharedMaterial; + Object.DestroyImmediate(go); + } + } + + return s_UnityDefaultDiffuse; + } + + internal static Material GetDefaultMaterial() + { + Material material = null; + + if (GraphicsSettings.renderPipelineAsset != null) + { +#if UNITY_2019_1_OR_NEWER + material = GraphicsSettings.renderPipelineAsset.defaultMaterial; +#else + material = GraphicsSettings.renderPipelineAsset.GetDefaultMaterial(); +#endif + } + + if (material == null) + { + material = (Material) Resources.Load("Materials/ProBuilderDefault", typeof(Material)); + + if (material == null || !material.shader.isSupported) + material = GetLegacyDiffuse(); + } + + return material; + } + + /// <summary> + /// An unlit vertex color material. + /// </summary> + internal static Material unlitVertexColor + { + get + { + Init(); + return s_UnlitVertexColorMaterial; + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BuiltinMaterials.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BuiltinMaterials.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..261aaac1d8ff01de32f5f20b42553dd11b53cb5a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/BuiltinMaterials.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65392811987f9438d8e3d2510255814f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Changelog.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Changelog.cs new file mode 100644 index 0000000000000000000000000000000000000000..4b9523d2c4bff0704dae8ce60e0f687d47e0af65 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Changelog.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Text; +using UnityEngine; +using System.Text.RegularExpressions; + +namespace UnityEngine.ProBuilder +{ + [Serializable] + class ChangelogEntry + { + [SerializeField] + SemVer m_VersionInfo; + + [SerializeField] + string m_ReleaseNotes; + + public SemVer versionInfo + { + get { return m_VersionInfo; } + } + + public string releaseNotes + { + get { return m_ReleaseNotes; } + } + + public ChangelogEntry(SemVer version, string releaseNotes) + { + m_VersionInfo = version; + m_ReleaseNotes = releaseNotes; + } + + public override string ToString() + { + return m_VersionInfo.ToString() + "\n\n" + m_ReleaseNotes; + } + } + + [Serializable] + class Changelog + { + const string k_ChangelogEntryPattern = @"(##\s\[[0-9]+\.[0-9]+\.[0-9]+(\-[a-zA-Z]+(\.[0-9]+)*)*\])"; + const string k_VersionInfoPattern = @"(?<=##\s\[).*(?=\])"; + const string k_VersionDatePattern = @"(?<=##\s\[.*\]\s-\s)[0-9-]*"; + + [SerializeField] + List<ChangelogEntry> m_Entries; + + public ReadOnlyCollection<ChangelogEntry> entries + { + get { return new ReadOnlyCollection<ChangelogEntry>(m_Entries); } + } + + public Changelog(string log) + { + string version = string.Empty; + StringBuilder contents = null; + m_Entries = new List<ChangelogEntry>(); + ChangelogEntry entry; + + foreach (var line in log.Split('\n')) + { + if (Regex.Match(line, k_ChangelogEntryPattern).Success) + { + if ((entry = CreateEntry(version, contents != null ? contents.ToString() : "")) != null) + m_Entries.Add(entry); + + version = line; + contents = new StringBuilder(); + } + else + { + if (contents != null) + contents.AppendLine(line); + } + } + + if ((entry = CreateEntry(version, contents.ToString())) != null) + m_Entries.Add(entry); + } + + ChangelogEntry CreateEntry(string version, string contents) + { + var mark = Regex.Match(version, k_VersionInfoPattern); + var date = Regex.Match(version, k_VersionDatePattern); + + if (mark.Success) + return new ChangelogEntry(new SemVer(mark.Value, date.Value), contents.Trim()); + + return null; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Changelog.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Changelog.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f60ec7467eea742880749b682badd3f71b51b5b8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Changelog.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1c567d9c5b825d24ba6a00bef45ec0dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Clipping.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Clipping.cs new file mode 100644 index 0000000000000000000000000000000000000000..6c355ae534bce8c3aa9ebb28d9d57c9cfc90adb5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Clipping.cs @@ -0,0 +1,130 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Rect to line segment clipping implementation. + /// </summary> + /// <remarks> + /// https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm + /// </remarks> + static class Clipping + { + [System.Flags] + enum OutCode + { + Inside = 0, // 0000 + Left = 1, // 0001 + Right = 2, // 0010 + Bottom = 4, // 0100 + Top = 8, // 1000 + } + + // Compute the bit code for a point (x, y) using the clip rectangle + // bounded diagonally by (xmin, ymin), and (xmax, ymax) + + static OutCode ComputeOutCode(Rect rect, float x, float y) + { + OutCode code = OutCode.Inside; // initialised as being inside of [[clip window]] + + if (x < rect.xMin) // to the left of clip window + code |= OutCode.Left; + else if (x > rect.xMax) // to the right of clip window + code |= OutCode.Right; + if (y < rect.yMin) // below the clip window + code |= OutCode.Bottom; + else if (y > rect.yMax) // above the clip window + code |= OutCode.Top; + + return code; + } + + // Cohen–Sutherland clipping algorithm clips a line from + // P0 = (x0, y0) to P1 = (x1, y1) against a rectangle with + // diagonal from (xmin, ymin) to (xmax, ymax). + internal static bool RectContainsLineSegment(Rect rect, float x0, float y0, float x1, float y1) + { + // compute outcodes for P0, P1, and whatever point lies outside the clip rectangle + OutCode outcode0 = ComputeOutCode(rect, x0, y0); + OutCode outcode1 = ComputeOutCode(rect, x1, y1); + + bool accept = false; + + while (true) + { + if ((outcode0 | outcode1) == OutCode.Inside) + { + // bitwise OR is 0: both points inside window; trivially accept and exit loop + accept = true; + break; + } + else if ((outcode0 & outcode1) != OutCode.Inside) + { + // bitwise AND is not 0: both points share an outside zone (LEFT, RIGHT, TOP, + // or BOTTOM), so both must be outside window; exit loop (accept is false) + break; + } + else + { + // failed both tests, so calculate the line segment to clip + // from an outside point to an intersection with clip edge + float x = 0f, y = 0f; + + // At least one endpoint is outside the clip rectangle; pick it. + OutCode outcodeOut = outcode0 != OutCode.Inside ? outcode0 : outcode1; + + // Now find the intersection point; + // use formulas: + // slope = (y1 - y0) / (x1 - x0) + // x = x0 + (1 / slope) * (ym - y0), where ym is ymin or ymax + // y = y0 + slope * (xm - x0), where xm is xmin or xmax + // No need to worry about divide-by-zero because, in each case, the + // outcode bit being tested guarantees the denominator is non-zero + if ((outcodeOut & OutCode.Top) == OutCode.Top) + { + // point is above the clip window + x = x0 + (x1 - x0) * (rect.yMax - y0) / (y1 - y0); + y = rect.yMax; + } + else if ((outcodeOut & OutCode.Bottom) == OutCode.Bottom) + { + // point is below the clip window + x = x0 + (x1 - x0) * (rect.yMin - y0) / (y1 - y0); + y = rect.yMin; + } + else if ((outcodeOut & OutCode.Right) == OutCode.Right) + { + // point is to the right of clip window + y = y0 + (y1 - y0) * (rect.xMax - x0) / (x1 - x0); + x = rect.xMax; + } + else if ((outcodeOut & OutCode.Left) == OutCode.Left) + { + // point is to the left of clip window + y = y0 + (y1 - y0) * (rect.xMin - x0) / (x1 - x0); + x = rect.xMin; + } + + // Now we move outside point to intersection point to clip + // and get ready for next pass. + if (outcodeOut == outcode0) + { + x0 = x; + y0 = y; + outcode0 = ComputeOutCode(rect, x0, y0); + } + else + { + x1 = x; + y1 = y; + outcode1 = ComputeOutCode(rect, x1, y1); + } + } + } + + return accept; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Clipping.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Clipping.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..56a853e65d032071bddf1cc3f0099fbbbca1e164 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Clipping.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5c72c2f0fd523463292dc6eeb1fd7ab0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColliderBehaviour.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColliderBehaviour.cs new file mode 100644 index 0000000000000000000000000000000000000000..e3717feb1092728d0f869e9b42e6d1ec8a8670af --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColliderBehaviour.cs @@ -0,0 +1,42 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// A MonoBehaviour that automatically enables and disables the parent GameObject on exiting and enterin playmode, respectively. + /// </summary> + [DisallowMultipleComponent] + sealed class ColliderBehaviour : EntityBehaviour + { + public override void Initialize() + { + var collision = gameObject.GetComponent<Collider>(); + if (!collision) + collision = gameObject.AddComponent<MeshCollider>(); + collision.isTrigger = false; + SetMaterial(BuiltinMaterials.colliderMaterial); + var r = GetComponent<Renderer>(); + if (r != null) + r.hideFlags = HideFlags.DontSaveInBuild; + } + + public override void OnEnterPlayMode() + { + var r = GetComponent<Renderer>(); + + if (r != null) + r.enabled = false; + } + + public override void OnSceneLoaded(Scene scene, LoadSceneMode mode) + { + var r = GetComponent<Renderer>(); + + if (r != null) + r.enabled = false; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColliderBehaviour.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColliderBehaviour.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4b063b1a317171e0774fd7add271568abb1b5897 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColliderBehaviour.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 57444c075000242ea99e263cee940de2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColorPalette.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColorPalette.cs new file mode 100644 index 0000000000000000000000000000000000000000..aa11ce30f0e1a9bee9a76d2a8174da521b2d7f42 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColorPalette.cs @@ -0,0 +1,95 @@ +using System; +using UnityEngine; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using UnityEngine.Serialization; + +namespace UnityEngine.ProBuilder +{ + /// <inheritdoc cref="UnityEngine.ScriptableObject"/> + /// <inheritdoc cref="IHasDefault"/> + /// <summary> + /// A set of colors for use in the color palette editor. + /// </summary> + [Serializable] + sealed class ColorPalette : ScriptableObject, IHasDefault + { + /// <value> + /// The currently selected color. + /// </value> + public Color current { get; set; } + + [FormerlySerializedAs("colors")] + [SerializeField] + List<Color> m_Colors; + + /// <value> + /// The colors present in this palette. + /// </value> + public ReadOnlyCollection<Color> colors + { + get { return new ReadOnlyCollection<Color>(m_Colors); } + } + + /// <summary> + /// Set the colors in this palette. + /// </summary> + /// <param name="colors"></param> + /// <exception cref="ArgumentNullException">Thrown when the colors argument is null.</exception> + public void SetColors(IEnumerable<Color> colors) + { + if (colors == null) + throw new ArgumentNullException("colors"); + + m_Colors = colors.ToList(); + } + + /// <inheritdoc /> + /// <summary> + /// Reset the colors property to a collection of default values. + /// </summary> + public void SetDefaultValues() + { + m_Colors = new List<Color>() + { + new Color(0.000f, 0.122f, 0.247f, 1f), + new Color(0.000f, 0.455f, 0.851f, 1f), + new Color(0.498f, 0.859f, 1.000f, 1f), + new Color(0.224f, 0.800f, 0.800f, 1f), + new Color(0.239f, 0.600f, 0.439f, 1f), + new Color(0.180f, 0.800f, 0.251f, 1f), + new Color(0.004f, 1.000f, 0.439f, 1f), + new Color(1.000f, 0.863f, 0.000f, 1f), + new Color(1.000f, 0.522f, 0.106f, 1f), + new Color(1.000f, 0.255f, 0.212f, 1f), + new Color(0.522f, 0.078f, 0.294f, 1f), + new Color(0.941f, 0.071f, 0.745f, 1f), + new Color(0.694f, 0.051f, 0.788f, 1f), + new Color(0.067f, 0.067f, 0.067f, 1f), + new Color(0.667f, 0.667f, 0.667f, 1f), + new Color(0.867f, 0.867f, 0.867f, 1f) + }; + } + + /// <summary> + /// Access the colors in this palette by index. + /// </summary> + /// <seealso cref="Count"/> + /// <param name="i">The index to access.</param> + /// <returns>The color at index i.</returns> + public Color this[int i] + { + get { return m_Colors[i]; } + set { m_Colors[i] = value; } + } + + /// <value> + /// Return the number of colors in this palette. + /// </value> + public int Count + { + get { return m_Colors.Count; } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColorPalette.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColorPalette.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9403ad80c41e0a3187e1c0ef37ad33ae1b553718 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColorPalette.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dda436a9c8bbd4d109478acf25cd48d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColorUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColorUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..4f3fc51eb591d2de9ab7f3596fd7881e51fd9f28 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColorUtility.cs @@ -0,0 +1,1557 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Hue (0,360), Saturation (0,1), Value (0,1) + /// </summary> + sealed class HSVColor + { + public float h, s, v; + + public HSVColor(float h, float s, float v) + { + this.h = h; + this.s = s; + this.v = v; + } + + /** + * Wikipedia colors are from 0-100 %, so this constructor includes and S, V normalizes the values. + * modifier value that affects saturation and value, making it useful for any SV value range. + */ + public HSVColor(float h, float s, float v, float sv_modifier) + { + this.h = h; + this.s = s * sv_modifier; + this.v = v * sv_modifier; + } + + public static HSVColor FromRGB(Color col) + { + return ColorUtility.RGBtoHSV(col); + } + + public override string ToString() + { + return string.Format("( {0}, {1}, {2} )", h, s, v); + } + + public float SqrDistance(HSVColor InColor) + { + return (InColor.h / 360f - this.h / 360f) + (InColor.s - this.s) + (InColor.v - this.v); + } + } + + /// <summary> + /// XYZ color + /// <remarks>http://www.easyrgb.com/index.php?X=MATH&H=07#text7</remarks> + /// </summary> + sealed class XYZColor + { + public float x, y, z; + + public XYZColor(float x, float y, float z) + { + this.x = x; + this.y = y; + this.z = z; + } + + public static XYZColor FromRGB(Color col) + { + return ColorUtility.RGBToXYZ(col); + } + + public static XYZColor FromRGB(float R, float G, float B) + { + return ColorUtility.RGBToXYZ(R, G, B); + } + + public override string ToString() + { + return string.Format("( {0}, {1}, {2} )", x, y, z); + } + } + + /// <summary> + /// CIE_Lab* color + /// </summary> + sealed class CIELabColor + { + public float L, a, b; + + public CIELabColor(float L, float a, float b) + { + this.L = L; + this.a = a; + this.b = b; + } + + public static CIELabColor FromXYZ(XYZColor xyz) + { + return ColorUtility.XYZToCIE_Lab(xyz); + } + + public static CIELabColor FromRGB(Color col) + { + XYZColor xyz = XYZColor.FromRGB(col); + + return ColorUtility.XYZToCIE_Lab(xyz); + } + + public override string ToString() + { + return string.Format("( {0}, {1}, {2} )", L, a, b); + } + } + + /// <summary> + /// Conversion methods for RGB, HSV, XYZ, CIE-Lab + /// </summary> + static class ColorUtility + { + /// <summary> + /// Compare float values within Epsilon distance. + /// </summary> + /// <param name="lhs"></param> + /// <param name="rhs"></param> + /// <returns></returns> + static bool approx(float lhs, float rhs) + { + return Mathf.Abs(lhs - rhs) < Mathf.Epsilon; + } + + public static Color GetColor(Vector3 vec) + { + vec.Normalize(); + return new Color(Mathf.Abs(vec.x), Mathf.Abs(vec.y), Mathf.Abs(vec.z), 1f); + } + + /// <summary> + /// Convert RGBA color to XYZ + /// </summary> + /// <param name="col"></param> + /// <returns></returns> + public static XYZColor RGBToXYZ(Color col) + { + return RGBToXYZ(col.r, col.g, col.b); + } + + public static XYZColor RGBToXYZ(float r, float g, float b) + { + if (r > 0.04045f) + r = Mathf.Pow(((r + 0.055f) / 1.055f), 2.4f); + else + r = r / 12.92f; + + if (g > 0.04045f) + g = Mathf.Pow(((g + 0.055f) / 1.055f), 2.4f); + else + g = g / 12.92f; + + if (b > 0.04045f) + b = Mathf.Pow(((b + 0.055f) / 1.055f), 2.4f); + else + b = b / 12.92f; + + r = r * 100f; + g = g * 100f; + b = b * 100f; + + // Observer. = 2°, Illuminant = D65 + float x = r * 0.4124f + g * 0.3576f + b * 0.1805f; + float y = r * 0.2126f + g * 0.7152f + b * 0.0722f; + float z = r * 0.0193f + g * 0.1192f + b * 0.9505f; + + return new XYZColor(x, y, z); + } + + /// <summary> + /// Convert XYZ color to CIE_Lab + /// </summary> + /// <param name="xyz"></param> + /// <returns></returns> + public static CIELabColor XYZToCIE_Lab(XYZColor xyz) + { + float var_X = xyz.x / 95.047f; // ref_X = 95.047 Observer= 2°, Illuminant= D65 + float var_Y = xyz.y / 100.000f; // ref_Y = 100.000 + float var_Z = xyz.z / 108.883f; // ref_Z = 108.883 + + if (var_X > 0.008856f) + var_X = Mathf.Pow(var_X, (1 / 3f)); + else + var_X = (7.787f * var_X) + (16f / 116f); + + if (var_Y > 0.008856f) + var_Y = Mathf.Pow(var_Y, (1 / 3f)); + else + var_Y = (7.787f * var_Y) + (16f / 116f); + + if (var_Z > 0.008856f) + var_Z = Mathf.Pow(var_Z, (1 / 3f)); + else + var_Z = (7.787f * var_Z) + (16f / 116f); + + float L = (116f * var_Y) - 16f; + float a = 500f * (var_X - var_Y); + float b = 200f * (var_Y - var_Z); + + return new CIELabColor(L, a, b); + } + + /// <summary> + /// Calculate the euclidean distance between two Cie-Lab colors (DeltaE). + /// http://www.easyrgb.com/index.php?X=DELT&H=03#text3 + /// </summary> + /// <param name="lhs"></param> + /// <param name="rhs"></param> + /// <returns></returns> + public static float DeltaE(CIELabColor lhs, CIELabColor rhs) + { + return Mathf.Sqrt( + Mathf.Pow((lhs.L - rhs.L), 2) + + Mathf.Pow((lhs.a - rhs.a), 2) + + Mathf.Pow((lhs.b - rhs.b), 2)); + } + + /// <summary> + /// Convert HSV to RGB. + /// http://www.cs.rit.edu/~ncs/color/t_convert.html + /// r,g,b values are from 0 to 1 + /// h = [0,360], s = [0,1], v = [0,1] + /// if s == 0, then h = -1 (undefined) + /// </summary> + /// <param name="hsv"></param> + /// <returns></returns> + public static Color HSVtoRGB(HSVColor hsv) + { + return HSVtoRGB(hsv.h, hsv.s, hsv.v); + } + + /// <summary> + /// Convert HSV color to RGB. + /// </summary> + /// <param name="h"></param> + /// <param name="s"></param> + /// <param name="v"></param> + /// <returns></returns> + public static Color HSVtoRGB(float h, float s, float v) + { + float r, g, b; + int i; + float f, p, q, t; + if (s == 0) + { + // achromatic (grey) + return new Color(v, v, v, 1f); + } + h /= 60; // sector 0 to 5 + i = (int)Mathf.Floor(h); + f = h - i; // factorial part of h + p = v * (1 - s); + q = v * (1 - s * f); + t = v * (1 - s * (1 - f)); + + switch (i) + { + case 0: + r = v; + g = t; + b = p; + break; + case 1: + r = q; + g = v; + b = p; + break; + case 2: + r = p; + g = v; + b = t; + break; + case 3: + r = p; + g = q; + b = v; + break; + case 4: + r = t; + g = p; + b = v; + break; + default: // case 5: + r = v; + g = p; + b = q; + break; + } + + return new Color(r, g, b, 1f); + } + + /// <summary> + /// http://www.cs.rit.edu/~ncs/color/t_convert.html + /// r,g,b values are from 0 to 1 + /// h = [0,360], s = [0,1], v = [0,1] + /// if s == 0, then h = -1 (undefined) + /// </summary> + /// <param name="color"></param> + /// <returns></returns> + public static HSVColor RGBtoHSV(Color color) + { + float h, s, v; + float r = color.r, b = color.b, g = color.g; + + float min, max, delta; + min = Mathf.Min(Mathf.Min(r, g), b); + max = Mathf.Max(Mathf.Max(r, g), b); + + v = max; // v + + delta = max - min; + + if (max != 0f) + { + s = delta / max; // s + } + else + { + // r = g = b = 0 // s = 0, v is undefined + s = 0f; + h = 0f; + return new HSVColor(h, s, v); + } + + if (approx(r, max)) + { + h = (g - b) / delta; // between yellow & magenta + if (float.IsNaN(h)) + h = 0f; + } + else if (approx(g, max)) + { + h = 2f + (b - r) / delta; // between cyan & yellow + } + else + { + h = 4f + (r - g) / delta; // between magenta & cyan + } + + h *= 60f; // degrees + + if (h < 0) + h += 360; + + return new HSVColor(h, s, v); + } + + /// <summary> + /// Get human readable name from a Color. + /// </summary> + /// <param name="InColor"></param> + /// <returns></returns> + public static string GetColorName(Color InColor) + { + CIELabColor lab = CIELabColor.FromRGB(InColor); + + string name = "Unknown"; + float diff = Mathf.Infinity; + + foreach (KeyValuePair<string, CIELabColor> kvp in ColorNameLookup) + { + float dist = Mathf.Abs(DeltaE(lab, kvp.Value)); + + if (dist < diff) + { + diff = dist; + name = kvp.Key; + } + } + + return name; + } + + static CIELabColor CIELabFromRGB(float R, float G, float B, float Scale) + { + float inv_scale = 1f / Scale; + XYZColor xyz = XYZColor.FromRGB(R * inv_scale, G * inv_scale, B * inv_scale); + + return CIELabColor.FromXYZ(xyz); + } + + /// <summary> + /// http://en.wikipedia.org/wiki/List_of_colors:_A%E2%80%93F + /// </summary> + static readonly Dictionary<string, CIELabColor> ColorNameLookup = new Dictionary<string, CIELabColor>() + { + { "Acid Green", CIELabFromRGB(69f, 75f, 10f, 100f) }, + { "Aero", CIELabFromRGB(49f, 73f, 91f, 100f) }, + { "Aero Blue", CIELabFromRGB(79f, 100f, 90f, 100f) }, + { "African Violet", CIELabFromRGB(70f, 52f, 75f, 100f) }, + { "Air Force Blue (RAF)", CIELabFromRGB(36f, 54f, 66f, 100f) }, + { "Air Force Blue (USAF)", CIELabFromRGB(0f, 19f, 56f, 100f) }, + { "Air Superiority Blue", CIELabFromRGB(45f, 63f, 76f, 100f) }, + { "Alabama Crimson", CIELabFromRGB(69f, 0f, 16f, 100f) }, + { "Alice Blue", CIELabFromRGB(94f, 97f, 100f, 100f) }, + { "Alizarin Crimson", CIELabFromRGB(89f, 15f, 21f, 100f) }, + { "Alloy Orange", CIELabFromRGB(77f, 38f, 6f, 100f) }, + { "Almond", CIELabFromRGB(94f, 87f, 80f, 100f) }, + { "Amaranth", CIELabFromRGB(90f, 17f, 31f, 100f) }, + { "Amaranth Deep Purple", CIELabFromRGB(67f, 15f, 31f, 100f) }, + { "Amaranth Pink", CIELabFromRGB(95f, 61f, 73f, 100f) }, + { "Amaranth Purple", CIELabFromRGB(67f, 15f, 31f, 100f) }, + { "Amaranth Red", CIELabFromRGB(83f, 13f, 18f, 100f) }, + { "Amazon", CIELabFromRGB(23f, 48f, 34f, 100f) }, + { "Amber", CIELabFromRGB(100f, 75f, 0f, 100f) }, + { "Amber (SAE/ECE)", CIELabFromRGB(100f, 49f, 0f, 100f) }, + { "American Rose", CIELabFromRGB(100f, 1f, 24f, 100f) }, + { "Amethyst", CIELabFromRGB(60f, 40f, 80f, 100f) }, + { "Android Green", CIELabFromRGB(64f, 78f, 22f, 100f) }, + { "Anti-Flash White", CIELabFromRGB(95f, 95f, 96f, 100f) }, + { "Antique Brass", CIELabFromRGB(80f, 58f, 46f, 100f) }, + { "Antique Bronze", CIELabFromRGB(40f, 36f, 12f, 100f) }, + { "Antique Fuchsia", CIELabFromRGB(57f, 36f, 51f, 100f) }, + { "Antique Ruby", CIELabFromRGB(52f, 11f, 18f, 100f) }, + { "Antique White", CIELabFromRGB(98f, 92f, 84f, 100f) }, + { "Ao (English)", CIELabFromRGB(0f, 50f, 0f, 100f) }, + { "Apple Green", CIELabFromRGB(55f, 71f, 0f, 100f) }, + { "Apricot", CIELabFromRGB(98f, 81f, 69f, 100f) }, + { "Aqua", CIELabFromRGB(0f, 100f, 100f, 100f) }, + { "Aquamarine", CIELabFromRGB(50f, 100f, 83f, 100f) }, + { "Army Green", CIELabFromRGB(29f, 33f, 13f, 100f) }, + { "Arsenic", CIELabFromRGB(23f, 27f, 29f, 100f) }, + { "Artichoke", CIELabFromRGB(56f, 59f, 47f, 100f) }, + { "Arylide Yellow", CIELabFromRGB(91f, 84f, 42f, 100f) }, + { "Ash Grey", CIELabFromRGB(70f, 75f, 71f, 100f) }, + { "Asparagus", CIELabFromRGB(53f, 66f, 42f, 100f) }, + { "Atomic Tangerine", CIELabFromRGB(100f, 60f, 40f, 100f) }, + { "Auburn", CIELabFromRGB(65f, 16f, 16f, 100f) }, + { "Aureolin", CIELabFromRGB(99f, 93f, 0f, 100f) }, + { "AuroMetalSaurus", CIELabFromRGB(43f, 50f, 50f, 100f) }, + { "Avocado", CIELabFromRGB(34f, 51f, 1f, 100f) }, + { "Azure", CIELabFromRGB(0f, 50f, 100f, 100f) }, + { "Azure (Web Color)", CIELabFromRGB(94f, 100f, 100f, 100f) }, + { "Azure Mist", CIELabFromRGB(94f, 100f, 100f, 100f) }, + { "Azureish White", CIELabFromRGB(86f, 91f, 96f, 100f) }, + { "Baby Blue", CIELabFromRGB(54f, 81f, 94f, 100f) }, + { "Baby Blue Eyes", CIELabFromRGB(63f, 79f, 95f, 100f) }, + { "Baby Pink", CIELabFromRGB(96f, 76f, 76f, 100f) }, + { "Baby Powder", CIELabFromRGB(100f, 100f, 98f, 100f) }, + { "Baker-Miller Pink", CIELabFromRGB(100f, 57f, 69f, 100f) }, + { "Ball Blue", CIELabFromRGB(13f, 67f, 80f, 100f) }, + { "Banana Mania", CIELabFromRGB(98f, 91f, 71f, 100f) }, + { "Banana Yellow", CIELabFromRGB(100f, 88f, 21f, 100f) }, + { "Bangladesh Green", CIELabFromRGB(0f, 42f, 31f, 100f) }, + { "Barbie Pink", CIELabFromRGB(88f, 13f, 54f, 100f) }, + { "Barn Red", CIELabFromRGB(49f, 4f, 1f, 100f) }, + { "Battleship Grey", CIELabFromRGB(52f, 52f, 51f, 100f) }, + { "Bazaar", CIELabFromRGB(60f, 47f, 48f, 100f) }, + { "Beau Blue", CIELabFromRGB(74f, 83f, 90f, 100f) }, + { "Beaver", CIELabFromRGB(62f, 51f, 44f, 100f) }, + { "Beige", CIELabFromRGB(96f, 96f, 86f, 100f) }, + { "B'dazzled Blue", CIELabFromRGB(18f, 35f, 58f, 100f) }, + { "Big Dip O’ruby", CIELabFromRGB(61f, 15f, 26f, 100f) }, + { "Bisque", CIELabFromRGB(100f, 89f, 77f, 100f) }, + { "Bistre", CIELabFromRGB(24f, 17f, 12f, 100f) }, + { "Bistre Brown", CIELabFromRGB(59f, 44f, 9f, 100f) }, + { "Bitter Lemon", CIELabFromRGB(79f, 88f, 5f, 100f) }, + { "Bitter Lime", CIELabFromRGB(75f, 100f, 0f, 100f) }, + { "Bittersweet", CIELabFromRGB(100f, 44f, 37f, 100f) }, + { "Bittersweet Shimmer", CIELabFromRGB(75f, 31f, 32f, 100f) }, + { "Black", CIELabFromRGB(0f, 0f, 0f, 100f) }, + { "Black Bean", CIELabFromRGB(24f, 5f, 1f, 100f) }, + { "Black Leather Jacket", CIELabFromRGB(15f, 21f, 16f, 100f) }, + { "Black Olive", CIELabFromRGB(23f, 24f, 21f, 100f) }, + { "Blanched Almond", CIELabFromRGB(100f, 92f, 80f, 100f) }, + { "Blast-Off Bronze", CIELabFromRGB(65f, 44f, 39f, 100f) }, + { "Bleu De France", CIELabFromRGB(19f, 55f, 91f, 100f) }, + { "Blizzard Blue", CIELabFromRGB(67f, 90f, 93f, 100f) }, + { "Blond", CIELabFromRGB(98f, 94f, 75f, 100f) }, + { "Blue", CIELabFromRGB(0f, 0f, 100f, 100f) }, + { "Blue (Crayola)", CIELabFromRGB(12f, 46f, 100f, 100f) }, + { "Blue (Munsell)", CIELabFromRGB(0f, 58f, 69f, 100f) }, + { "Blue (NCS)", CIELabFromRGB(0f, 53f, 74f, 100f) }, + { "Blue (Pantone)", CIELabFromRGB(0f, 9f, 66f, 100f) }, + { "Blue (Pigment)", CIELabFromRGB(20f, 20f, 60f, 100f) }, + { "Blue (RYB)", CIELabFromRGB(1f, 28f, 100f, 100f) }, + { "Blue Bell", CIELabFromRGB(64f, 64f, 82f, 100f) }, + { "Blue-Gray", CIELabFromRGB(40f, 60f, 80f, 100f) }, + { "Blue-Green", CIELabFromRGB(5f, 60f, 73f, 100f) }, + { "Blue Lagoon", CIELabFromRGB(37f, 58f, 63f, 100f) }, + { "Blue-Magenta Violet", CIELabFromRGB(33f, 21f, 57f, 100f) }, + { "Blue Sapphire", CIELabFromRGB(7f, 38f, 50f, 100f) }, + { "Blue-Violet", CIELabFromRGB(54f, 17f, 89f, 100f) }, + { "Blue Yonder", CIELabFromRGB(31f, 45f, 65f, 100f) }, + { "Blueberry", CIELabFromRGB(31f, 53f, 97f, 100f) }, + { "Bluebonnet", CIELabFromRGB(11f, 11f, 94f, 100f) }, + { "Blush", CIELabFromRGB(87f, 36f, 51f, 100f) }, + { "Bole", CIELabFromRGB(47f, 27f, 23f, 100f) }, + { "Bondi Blue", CIELabFromRGB(0f, 58f, 71f, 100f) }, + { "Bone", CIELabFromRGB(89f, 85f, 79f, 100f) }, + { "Boston University Red", CIELabFromRGB(80f, 0f, 0f, 100f) }, + { "Bottle Green", CIELabFromRGB(0f, 42f, 31f, 100f) }, + { "Boysenberry", CIELabFromRGB(53f, 20f, 38f, 100f) }, + { "Brandeis Blue", CIELabFromRGB(0f, 44f, 100f, 100f) }, + { "Brass", CIELabFromRGB(71f, 65f, 26f, 100f) }, + { "Brick Red", CIELabFromRGB(80f, 25f, 33f, 100f) }, + { "Bright Cerulean", CIELabFromRGB(11f, 67f, 84f, 100f) }, + { "Bright Green", CIELabFromRGB(40f, 100f, 0f, 100f) }, + { "Bright Lavender", CIELabFromRGB(75f, 58f, 89f, 100f) }, + { "Bright Lilac", CIELabFromRGB(85f, 57f, 94f, 100f) }, + { "Bright Maroon", CIELabFromRGB(76f, 13f, 28f, 100f) }, + { "Bright Navy Blue", CIELabFromRGB(10f, 45f, 82f, 100f) }, + { "Bright Pink", CIELabFromRGB(100f, 0f, 50f, 100f) }, + { "Bright Turquoise", CIELabFromRGB(3f, 91f, 87f, 100f) }, + { "Bright Ube", CIELabFromRGB(82f, 62f, 91f, 100f) }, + { "Brilliant Azure", CIELabFromRGB(20f, 60f, 100f, 100f) }, + { "Brilliant Lavender", CIELabFromRGB(96f, 73f, 100f, 100f) }, + { "Brilliant Rose", CIELabFromRGB(100f, 33f, 64f, 100f) }, + { "Brink Pink", CIELabFromRGB(98f, 38f, 50f, 100f) }, + { "British Racing Green", CIELabFromRGB(0f, 26f, 15f, 100f) }, + { "Bronze", CIELabFromRGB(80f, 50f, 20f, 100f) }, + { "Bronze Yellow", CIELabFromRGB(45f, 44f, 0f, 100f) }, + { "Brown (Traditional)", CIELabFromRGB(59f, 29f, 0f, 100f) }, + { "Brown (Web)", CIELabFromRGB(65f, 16f, 16f, 100f) }, + { "Brown-Nose", CIELabFromRGB(42f, 27f, 14f, 100f) }, + { "Brown Yellow", CIELabFromRGB(80f, 60f, 40f, 100f) }, + { "Brunswick Green", CIELabFromRGB(11f, 30f, 24f, 100f) }, + { "Bubble Gum", CIELabFromRGB(100f, 76f, 80f, 100f) }, + { "Bubbles", CIELabFromRGB(91f, 100f, 100f, 100f) }, + { "Buff", CIELabFromRGB(94f, 86f, 51f, 100f) }, + { "Bud Green", CIELabFromRGB(48f, 71f, 38f, 100f) }, + { "Bulgarian Rose", CIELabFromRGB(28f, 2f, 3f, 100f) }, + { "Burgundy", CIELabFromRGB(50f, 0f, 13f, 100f) }, + { "Burlywood", CIELabFromRGB(87f, 72f, 53f, 100f) }, + { "Burnt Orange", CIELabFromRGB(80f, 33f, 0f, 100f) }, + { "Burnt Sienna", CIELabFromRGB(91f, 45f, 32f, 100f) }, + { "Burnt Umber", CIELabFromRGB(54f, 20f, 14f, 100f) }, + { "Byzantine", CIELabFromRGB(74f, 20f, 64f, 100f) }, + { "Byzantium", CIELabFromRGB(44f, 16f, 39f, 100f) }, + { "Cadet", CIELabFromRGB(33f, 41f, 45f, 100f) }, + { "Cadet Blue", CIELabFromRGB(37f, 62f, 63f, 100f) }, + { "Cadet Grey", CIELabFromRGB(57f, 64f, 69f, 100f) }, + { "Cadmium Green", CIELabFromRGB(0f, 42f, 24f, 100f) }, + { "Cadmium Orange", CIELabFromRGB(93f, 53f, 18f, 100f) }, + { "Cadmium Red", CIELabFromRGB(89f, 0f, 13f, 100f) }, + { "Cadmium Yellow", CIELabFromRGB(100f, 96f, 0f, 100f) }, + { "Cafe Au Lait", CIELabFromRGB(65f, 48f, 36f, 100f) }, + { "Cafe Noir", CIELabFromRGB(29f, 21f, 13f, 100f) }, + { "Cal Poly Green", CIELabFromRGB(12f, 30f, 17f, 100f) }, + { "Cambridge Blue", CIELabFromRGB(64f, 76f, 68f, 100f) }, + { "Camel", CIELabFromRGB(76f, 60f, 42f, 100f) }, + { "Cameo Pink", CIELabFromRGB(94f, 73f, 80f, 100f) }, + { "Camouflage Green", CIELabFromRGB(47f, 53f, 42f, 100f) }, + { "Canary Yellow", CIELabFromRGB(100f, 94f, 0f, 100f) }, + { "Candy Apple Red", CIELabFromRGB(100f, 3f, 0f, 100f) }, + { "Candy Pink", CIELabFromRGB(89f, 44f, 48f, 100f) }, + { "Capri", CIELabFromRGB(0f, 75f, 100f, 100f) }, + { "Caput Mortuum", CIELabFromRGB(35f, 15f, 13f, 100f) }, + { "Cardinal", CIELabFromRGB(77f, 12f, 23f, 100f) }, + { "Caribbean Green", CIELabFromRGB(0f, 80f, 60f, 100f) }, + { "Carmine", CIELabFromRGB(59f, 0f, 9f, 100f) }, + { "Carmine (M&P)", CIELabFromRGB(84f, 0f, 25f, 100f) }, + { "Carmine Pink", CIELabFromRGB(92f, 30f, 26f, 100f) }, + { "Carmine Red", CIELabFromRGB(100f, 0f, 22f, 100f) }, + { "Carnation Pink", CIELabFromRGB(100f, 65f, 79f, 100f) }, + { "Carnelian", CIELabFromRGB(70f, 11f, 11f, 100f) }, + { "Carolina Blue", CIELabFromRGB(34f, 63f, 83f, 100f) }, + { "Carrot Orange", CIELabFromRGB(93f, 57f, 13f, 100f) }, + { "Castleton Green", CIELabFromRGB(0f, 34f, 25f, 100f) }, + { "Catalina Blue", CIELabFromRGB(2f, 16f, 47f, 100f) }, + { "Catawba", CIELabFromRGB(44f, 21f, 26f, 100f) }, + { "Cedar Chest", CIELabFromRGB(79f, 35f, 29f, 100f) }, + { "Ceil", CIELabFromRGB(57f, 63f, 81f, 100f) }, + { "Celadon", CIELabFromRGB(67f, 88f, 69f, 100f) }, + { "Celadon Blue", CIELabFromRGB(0f, 48f, 65f, 100f) }, + { "Celadon Green", CIELabFromRGB(18f, 52f, 49f, 100f) }, + { "Celeste", CIELabFromRGB(70f, 100f, 100f, 100f) }, + { "Celestial Blue", CIELabFromRGB(29f, 59f, 82f, 100f) }, + { "Cerise", CIELabFromRGB(87f, 19f, 39f, 100f) }, + { "Cerise Pink", CIELabFromRGB(93f, 23f, 51f, 100f) }, + { "Cerulean", CIELabFromRGB(0f, 48f, 65f, 100f) }, + { "Cerulean Blue", CIELabFromRGB(16f, 32f, 75f, 100f) }, + { "Cerulean Frost", CIELabFromRGB(43f, 61f, 76f, 100f) }, + { "CG Blue", CIELabFromRGB(0f, 48f, 65f, 100f) }, + { "CG Red", CIELabFromRGB(88f, 24f, 19f, 100f) }, + { "Chamoisee", CIELabFromRGB(63f, 47f, 35f, 100f) }, + { "Champagne", CIELabFromRGB(97f, 91f, 81f, 100f) }, + { "Charcoal", CIELabFromRGB(21f, 27f, 31f, 100f) }, + { "Charleston Green", CIELabFromRGB(14f, 17f, 17f, 100f) }, + { "Charm Pink", CIELabFromRGB(90f, 56f, 67f, 100f) }, + { "Chartreuse (Traditional)", CIELabFromRGB(87f, 100f, 0f, 100f) }, + { "Chartreuse (Web)", CIELabFromRGB(50f, 100f, 0f, 100f) }, + { "Cherry", CIELabFromRGB(87f, 19f, 39f, 100f) }, + { "Cherry Blossom Pink", CIELabFromRGB(100f, 72f, 77f, 100f) }, + { "Chestnut", CIELabFromRGB(58f, 27f, 21f, 100f) }, + { "China Pink", CIELabFromRGB(87f, 44f, 63f, 100f) }, + { "China Rose", CIELabFromRGB(66f, 32f, 43f, 100f) }, + { "Chinese Red", CIELabFromRGB(67f, 22f, 12f, 100f) }, + { "Chinese Violet", CIELabFromRGB(52f, 38f, 53f, 100f) }, + { "Chocolate (Traditional)", CIELabFromRGB(48f, 25f, 0f, 100f) }, + { "Chocolate (Web)", CIELabFromRGB(82f, 41f, 12f, 100f) }, + { "Chrome Yellow", CIELabFromRGB(100f, 65f, 0f, 100f) }, + { "Cinereous", CIELabFromRGB(60f, 51f, 48f, 100f) }, + { "Cinnabar", CIELabFromRGB(89f, 26f, 20f, 100f) }, + { "Cinnamon", CIELabFromRGB(82f, 41f, 12f, 100f) }, + { "Citrine", CIELabFromRGB(89f, 82f, 4f, 100f) }, + { "Citron", CIELabFromRGB(62f, 66f, 12f, 100f) }, + { "Claret", CIELabFromRGB(50f, 9f, 20f, 100f) }, + { "Classic Rose", CIELabFromRGB(98f, 80f, 91f, 100f) }, + { "Cobalt Blue", CIELabFromRGB(0f, 28f, 67f, 100f) }, + { "Cocoa Brown", CIELabFromRGB(82f, 41f, 12f, 100f) }, + { "Coconut", CIELabFromRGB(59f, 35f, 24f, 100f) }, + { "Coffee", CIELabFromRGB(44f, 31f, 22f, 100f) }, + { "Columbia Blue", CIELabFromRGB(77f, 85f, 89f, 100f) }, + { "Congo Pink", CIELabFromRGB(97f, 51f, 47f, 100f) }, + { "Cool Black", CIELabFromRGB(0f, 18f, 39f, 100f) }, + { "Cool Grey", CIELabFromRGB(55f, 57f, 67f, 100f) }, + { "Copper", CIELabFromRGB(72f, 45f, 20f, 100f) }, + { "Copper (Crayola)", CIELabFromRGB(85f, 54f, 40f, 100f) }, + { "Copper Penny", CIELabFromRGB(68f, 44f, 41f, 100f) }, + { "Copper Red", CIELabFromRGB(80f, 43f, 32f, 100f) }, + { "Copper Rose", CIELabFromRGB(60f, 40f, 40f, 100f) }, + { "Coquelicot", CIELabFromRGB(100f, 22f, 0f, 100f) }, + { "Coral", CIELabFromRGB(100f, 50f, 31f, 100f) }, + { "Coral Pink", CIELabFromRGB(97f, 51f, 47f, 100f) }, + { "Coral Red", CIELabFromRGB(100f, 25f, 25f, 100f) }, + { "Cordovan", CIELabFromRGB(54f, 25f, 27f, 100f) }, + { "Corn", CIELabFromRGB(98f, 93f, 36f, 100f) }, + { "Cornell Red", CIELabFromRGB(70f, 11f, 11f, 100f) }, + { "Cornflower Blue", CIELabFromRGB(39f, 58f, 93f, 100f) }, + { "Cornsilk", CIELabFromRGB(100f, 97f, 86f, 100f) }, + { "Cosmic Latte", CIELabFromRGB(100f, 97f, 91f, 100f) }, + { "Coyote Brown", CIELabFromRGB(51f, 38f, 24f, 100f) }, + { "Cotton Candy", CIELabFromRGB(100f, 74f, 85f, 100f) }, + { "Cream", CIELabFromRGB(100f, 99f, 82f, 100f) }, + { "Crimson", CIELabFromRGB(86f, 8f, 24f, 100f) }, + { "Crimson Glory", CIELabFromRGB(75f, 0f, 20f, 100f) }, + { "Crimson Red", CIELabFromRGB(60f, 0f, 0f, 100f) }, + { "Cyan", CIELabFromRGB(0f, 100f, 100f, 100f) }, + { "Cyan Azure", CIELabFromRGB(31f, 51f, 71f, 100f) }, + { "Cyan-Blue Azure", CIELabFromRGB(27f, 51f, 75f, 100f) }, + { "Cyan Cobalt Blue", CIELabFromRGB(16f, 35f, 61f, 100f) }, + { "Cyan Cornflower Blue", CIELabFromRGB(9f, 55f, 76f, 100f) }, + { "Cyan (Process)", CIELabFromRGB(0f, 72f, 92f, 100f) }, + { "Cyber Grape", CIELabFromRGB(35f, 26f, 49f, 100f) }, + { "Cyber Yellow", CIELabFromRGB(100f, 83f, 0f, 100f) }, + { "Daffodil", CIELabFromRGB(100f, 100f, 19f, 100f) }, + { "Dandelion", CIELabFromRGB(94f, 88f, 19f, 100f) }, + { "Dark Blue", CIELabFromRGB(0f, 0f, 55f, 100f) }, + { "Dark Blue-Gray", CIELabFromRGB(40f, 40f, 60f, 100f) }, + { "Dark Brown", CIELabFromRGB(40f, 26f, 13f, 100f) }, + { "Dark Brown-Tangelo", CIELabFromRGB(53f, 40f, 31f, 100f) }, + { "Dark Byzantium", CIELabFromRGB(36f, 22f, 33f, 100f) }, + { "Dark Candy Apple Red", CIELabFromRGB(64f, 0f, 0f, 100f) }, + { "Dark Cerulean", CIELabFromRGB(3f, 27f, 49f, 100f) }, + { "Dark Chestnut", CIELabFromRGB(60f, 41f, 38f, 100f) }, + { "Dark Coral", CIELabFromRGB(80f, 36f, 27f, 100f) }, + { "Dark Cyan", CIELabFromRGB(0f, 55f, 55f, 100f) }, + { "Dark Electric Blue", CIELabFromRGB(33f, 41f, 47f, 100f) }, + { "Dark Goldenrod", CIELabFromRGB(72f, 53f, 4f, 100f) }, + { "Dark Gray (X11)", CIELabFromRGB(66f, 66f, 66f, 100f) }, + { "Dark Green", CIELabFromRGB(0f, 20f, 13f, 100f) }, + { "Dark Green (X11)", CIELabFromRGB(0f, 39f, 0f, 100f) }, + { "Dark Imperial Blue", CIELabFromRGB(0f, 25f, 42f, 100f) }, + { "Dark Imperial-er Blue", CIELabFromRGB(0f, 8f, 49f, 100f) }, + { "Dark Jungle Green", CIELabFromRGB(10f, 14f, 13f, 100f) }, + { "Dark Khaki", CIELabFromRGB(74f, 72f, 42f, 100f) }, + { "Dark Lava", CIELabFromRGB(28f, 24f, 20f, 100f) }, + { "Dark Lavender", CIELabFromRGB(45f, 31f, 59f, 100f) }, + { "Dark Liver", CIELabFromRGB(33f, 29f, 31f, 100f) }, + { "Dark Liver (Horses)", CIELabFromRGB(33f, 24f, 22f, 100f) }, + { "Dark Magenta", CIELabFromRGB(55f, 0f, 55f, 100f) }, + { "Dark Medium Gray", CIELabFromRGB(66f, 66f, 66f, 100f) }, + { "Dark Midnight Blue", CIELabFromRGB(0f, 20f, 40f, 100f) }, + { "Dark Moss Green", CIELabFromRGB(29f, 36f, 14f, 100f) }, + { "Dark Olive Green", CIELabFromRGB(33f, 42f, 18f, 100f) }, + { "Dark Orange", CIELabFromRGB(100f, 55f, 0f, 100f) }, + { "Dark Orchid", CIELabFromRGB(60f, 20f, 80f, 100f) }, + { "Dark Pastel Blue", CIELabFromRGB(47f, 62f, 80f, 100f) }, + { "Dark Pastel Green", CIELabFromRGB(1f, 75f, 24f, 100f) }, + { "Dark Pastel Purple", CIELabFromRGB(59f, 44f, 84f, 100f) }, + { "Dark Pastel Red", CIELabFromRGB(76f, 23f, 13f, 100f) }, + { "Dark Pink", CIELabFromRGB(91f, 33f, 50f, 100f) }, + { "Dark Powder Blue", CIELabFromRGB(0f, 20f, 60f, 100f) }, + { "Dark Puce", CIELabFromRGB(31f, 23f, 24f, 100f) }, + { "Dark Purple", CIELabFromRGB(19f, 10f, 20f, 100f) }, + { "Dark Raspberry", CIELabFromRGB(53f, 15f, 34f, 100f) }, + { "Dark Red", CIELabFromRGB(55f, 0f, 0f, 100f) }, + { "Dark Salmon", CIELabFromRGB(91f, 59f, 48f, 100f) }, + { "Dark Scarlet", CIELabFromRGB(34f, 1f, 10f, 100f) }, + { "Dark Sea Green", CIELabFromRGB(56f, 74f, 56f, 100f) }, + { "Dark Sienna", CIELabFromRGB(24f, 8f, 8f, 100f) }, + { "Dark Sky Blue", CIELabFromRGB(55f, 75f, 84f, 100f) }, + { "Dark Slate Blue", CIELabFromRGB(28f, 24f, 55f, 100f) }, + { "Dark Slate Gray", CIELabFromRGB(18f, 31f, 31f, 100f) }, + { "Dark Spring Green", CIELabFromRGB(9f, 45f, 27f, 100f) }, + { "Dark Tan", CIELabFromRGB(57f, 51f, 32f, 100f) }, + { "Dark Tangerine", CIELabFromRGB(100f, 66f, 7f, 100f) }, + { "Dark Taupe", CIELabFromRGB(28f, 24f, 20f, 100f) }, + { "Dark Terra Cotta", CIELabFromRGB(80f, 31f, 36f, 100f) }, + { "Dark Turquoise", CIELabFromRGB(0f, 81f, 82f, 100f) }, + { "Dark Vanilla", CIELabFromRGB(82f, 75f, 66f, 100f) }, + { "Dark Violet", CIELabFromRGB(58f, 0f, 83f, 100f) }, + { "Dark Yellow", CIELabFromRGB(61f, 53f, 5f, 100f) }, + { "Dartmouth Green", CIELabFromRGB(0f, 44f, 24f, 100f) }, + { "Davy's Grey", CIELabFromRGB(33f, 33f, 33f, 100f) }, + { "Debian Red", CIELabFromRGB(84f, 4f, 33f, 100f) }, + { "Deep Aquamarine", CIELabFromRGB(25f, 51f, 43f, 100f) }, + { "Deep Carmine", CIELabFromRGB(66f, 13f, 24f, 100f) }, + { "Deep Carmine Pink", CIELabFromRGB(94f, 19f, 22f, 100f) }, + { "Deep Carrot Orange", CIELabFromRGB(91f, 41f, 17f, 100f) }, + { "Deep Cerise", CIELabFromRGB(85f, 20f, 53f, 100f) }, + { "Deep Champagne", CIELabFromRGB(98f, 84f, 65f, 100f) }, + { "Deep Chestnut", CIELabFromRGB(73f, 31f, 28f, 100f) }, + { "Deep Coffee", CIELabFromRGB(44f, 26f, 25f, 100f) }, + { "Deep Fuchsia", CIELabFromRGB(76f, 33f, 76f, 100f) }, + { "Deep Green", CIELabFromRGB(2f, 40f, 3f, 100f) }, + { "Deep Green-Cyan Turquoise", CIELabFromRGB(5f, 49f, 38f, 100f) }, + { "Deep Jungle Green", CIELabFromRGB(0f, 29f, 29f, 100f) }, + { "Deep Koamaru", CIELabFromRGB(20f, 20f, 40f, 100f) }, + { "Deep Lemon", CIELabFromRGB(96f, 78f, 10f, 100f) }, + { "Deep Lilac", CIELabFromRGB(60f, 33f, 73f, 100f) }, + { "Deep Magenta", CIELabFromRGB(80f, 0f, 80f, 100f) }, + { "Deep Maroon", CIELabFromRGB(51f, 0f, 0f, 100f) }, + { "Deep Mauve", CIELabFromRGB(83f, 45f, 83f, 100f) }, + { "Deep Moss Green", CIELabFromRGB(21f, 37f, 23f, 100f) }, + { "Deep Peach", CIELabFromRGB(100f, 80f, 64f, 100f) }, + { "Deep Pink", CIELabFromRGB(100f, 8f, 58f, 100f) }, + { "Deep Puce", CIELabFromRGB(66f, 36f, 41f, 100f) }, + { "Deep Red", CIELabFromRGB(52f, 0f, 0f, 100f) }, + { "Deep Ruby", CIELabFromRGB(52f, 25f, 36f, 100f) }, + { "Deep Saffron", CIELabFromRGB(100f, 60f, 20f, 100f) }, + { "Deep Sky Blue", CIELabFromRGB(0f, 75f, 100f, 100f) }, + { "Deep Space Sparkle", CIELabFromRGB(29f, 39f, 42f, 100f) }, + { "Deep Spring Bud", CIELabFromRGB(33f, 42f, 18f, 100f) }, + { "Deep Taupe", CIELabFromRGB(49f, 37f, 38f, 100f) }, + { "Deep Tuscan Red", CIELabFromRGB(40f, 26f, 30f, 100f) }, + { "Deep Violet", CIELabFromRGB(20f, 0f, 40f, 100f) }, + { "Deer", CIELabFromRGB(73f, 53f, 35f, 100f) }, + { "Denim", CIELabFromRGB(8f, 38f, 74f, 100f) }, + { "Desaturated Cyan", CIELabFromRGB(40f, 60f, 60f, 100f) }, + { "Desert", CIELabFromRGB(76f, 60f, 42f, 100f) }, + { "Desert Sand", CIELabFromRGB(93f, 79f, 69f, 100f) }, + { "Desire", CIELabFromRGB(92f, 24f, 33f, 100f) }, + { "Diamond", CIELabFromRGB(73f, 95f, 100f, 100f) }, + { "Dim Gray", CIELabFromRGB(41f, 41f, 41f, 100f) }, + { "Dirt", CIELabFromRGB(61f, 46f, 33f, 100f) }, + { "Dodger Blue", CIELabFromRGB(12f, 56f, 100f, 100f) }, + { "Dogwood Rose", CIELabFromRGB(84f, 9f, 41f, 100f) }, + { "Dollar Bill", CIELabFromRGB(52f, 73f, 40f, 100f) }, + { "Donkey Brown", CIELabFromRGB(40f, 30f, 16f, 100f) }, + { "Drab", CIELabFromRGB(59f, 44f, 9f, 100f) }, + { "Duke Blue", CIELabFromRGB(0f, 0f, 61f, 100f) }, + { "Dust Storm", CIELabFromRGB(90f, 80f, 79f, 100f) }, + { "Dutch White", CIELabFromRGB(94f, 87f, 73f, 100f) }, + { "Earth Yellow", CIELabFromRGB(88f, 66f, 37f, 100f) }, + { "Ebony", CIELabFromRGB(33f, 36f, 31f, 100f) }, + { "Ecru", CIELabFromRGB(76f, 70f, 50f, 100f) }, + { "Eerie Black", CIELabFromRGB(11f, 11f, 11f, 100f) }, + { "Eggplant", CIELabFromRGB(38f, 25f, 32f, 100f) }, + { "Eggshell", CIELabFromRGB(94f, 92f, 84f, 100f) }, + { "Egyptian Blue", CIELabFromRGB(6f, 20f, 65f, 100f) }, + { "Electric Blue", CIELabFromRGB(49f, 98f, 100f, 100f) }, + { "Electric Crimson", CIELabFromRGB(100f, 0f, 25f, 100f) }, + { "Electric Cyan", CIELabFromRGB(0f, 100f, 100f, 100f) }, + { "Electric Green", CIELabFromRGB(0f, 100f, 0f, 100f) }, + { "Electric Indigo", CIELabFromRGB(44f, 0f, 100f, 100f) }, + { "Electric Lavender", CIELabFromRGB(96f, 73f, 100f, 100f) }, + { "Electric Lime", CIELabFromRGB(80f, 100f, 0f, 100f) }, + { "Electric Purple", CIELabFromRGB(75f, 0f, 100f, 100f) }, + { "Electric Ultramarine", CIELabFromRGB(25f, 0f, 100f, 100f) }, + { "Electric Violet", CIELabFromRGB(56f, 0f, 100f, 100f) }, + { "Electric Yellow", CIELabFromRGB(100f, 100f, 20f, 100f) }, + { "Emerald", CIELabFromRGB(31f, 78f, 47f, 100f) }, + { "Eminence", CIELabFromRGB(42f, 19f, 51f, 100f) }, + { "English Green", CIELabFromRGB(11f, 30f, 24f, 100f) }, + { "English Lavender", CIELabFromRGB(71f, 51f, 58f, 100f) }, + { "English Red", CIELabFromRGB(67f, 29f, 32f, 100f) }, + { "English Violet", CIELabFromRGB(34f, 24f, 36f, 100f) }, + { "Eton Blue", CIELabFromRGB(59f, 78f, 64f, 100f) }, + { "Eucalyptus", CIELabFromRGB(27f, 84f, 66f, 100f) }, + { "Fallow", CIELabFromRGB(76f, 60f, 42f, 100f) }, + { "Falu Red", CIELabFromRGB(50f, 9f, 9f, 100f) }, + { "Fandango", CIELabFromRGB(71f, 20f, 54f, 100f) }, + { "Fandango Pink", CIELabFromRGB(87f, 32f, 52f, 100f) }, + { "Fashion Fuchsia", CIELabFromRGB(96f, 0f, 63f, 100f) }, + { "Fawn", CIELabFromRGB(90f, 67f, 44f, 100f) }, + { "Feldgrau", CIELabFromRGB(30f, 36f, 33f, 100f) }, + { "Feldspar", CIELabFromRGB(99f, 84f, 69f, 100f) }, + { "Fern Green", CIELabFromRGB(31f, 47f, 26f, 100f) }, + { "Ferrari Red", CIELabFromRGB(100f, 16f, 0f, 100f) }, + { "Field Drab", CIELabFromRGB(42f, 33f, 12f, 100f) }, + { "Firebrick", CIELabFromRGB(70f, 13f, 13f, 100f) }, + { "Fire Engine Red", CIELabFromRGB(81f, 13f, 16f, 100f) }, + { "Flame", CIELabFromRGB(89f, 35f, 13f, 100f) }, + { "Flamingo Pink", CIELabFromRGB(99f, 56f, 67f, 100f) }, + { "Flattery", CIELabFromRGB(42f, 27f, 14f, 100f) }, + { "Flavescent", CIELabFromRGB(97f, 91f, 56f, 100f) }, + { "Flax", CIELabFromRGB(93f, 86f, 51f, 100f) }, + { "Flirt", CIELabFromRGB(64f, 0f, 43f, 100f) }, + { "Floral White", CIELabFromRGB(100f, 98f, 94f, 100f) }, + { "Fluorescent Orange", CIELabFromRGB(100f, 75f, 0f, 100f) }, + { "Fluorescent Pink", CIELabFromRGB(100f, 8f, 58f, 100f) }, + { "Fluorescent Yellow", CIELabFromRGB(80f, 100f, 0f, 100f) }, + { "Folly", CIELabFromRGB(100f, 0f, 31f, 100f) }, + { "Forest Green (Traditional)", CIELabFromRGB(0f, 27f, 13f, 100f) }, + { "Forest Green (Web)", CIELabFromRGB(13f, 55f, 13f, 100f) }, + { "French Beige", CIELabFromRGB(65f, 48f, 36f, 100f) }, + { "French Bistre", CIELabFromRGB(52f, 43f, 30f, 100f) }, + { "French Blue", CIELabFromRGB(0f, 45f, 73f, 100f) }, + { "French Fuchsia", CIELabFromRGB(99f, 25f, 57f, 100f) }, + { "French Lilac", CIELabFromRGB(53f, 38f, 56f, 100f) }, + { "French Lime", CIELabFromRGB(62f, 99f, 22f, 100f) }, + { "French Mauve", CIELabFromRGB(83f, 45f, 83f, 100f) }, + { "French Pink", CIELabFromRGB(99f, 42f, 62f, 100f) }, + { "French Plum", CIELabFromRGB(51f, 8f, 33f, 100f) }, + { "French Puce", CIELabFromRGB(31f, 9f, 4f, 100f) }, + { "French Raspberry", CIELabFromRGB(78f, 17f, 28f, 100f) }, + { "French Rose", CIELabFromRGB(96f, 29f, 54f, 100f) }, + { "French Sky Blue", CIELabFromRGB(47f, 71f, 100f, 100f) }, + { "French Violet", CIELabFromRGB(53f, 2f, 81f, 100f) }, + { "French Wine", CIELabFromRGB(67f, 12f, 27f, 100f) }, + { "Fresh Air", CIELabFromRGB(65f, 91f, 100f, 100f) }, + { "Fuchsia", CIELabFromRGB(100f, 0f, 100f, 100f) }, + { "Fuchsia (Crayola)", CIELabFromRGB(76f, 33f, 76f, 100f) }, + { "Fuchsia Pink", CIELabFromRGB(100f, 47f, 100f, 100f) }, + { "Fuchsia Purple", CIELabFromRGB(80f, 22f, 48f, 100f) }, + { "Fuchsia Rose", CIELabFromRGB(78f, 26f, 46f, 100f) }, + { "Fulvous", CIELabFromRGB(89f, 52f, 0f, 100f) }, + { "Fuzzy Wuzzy", CIELabFromRGB(80f, 40f, 40f, 100f) }, + { "Gainsboro", CIELabFromRGB(86f, 86f, 86f, 100f) }, + { "Gamboge", CIELabFromRGB(89f, 61f, 6f, 100f) }, + { "Gamboge Orange (Brown)", CIELabFromRGB(60f, 40f, 0f, 100f) }, + { "Generic Viridian", CIELabFromRGB(0f, 50f, 40f, 100f) }, + { "Ghost White", CIELabFromRGB(97f, 97f, 100f, 100f) }, + { "Giants Orange", CIELabFromRGB(100f, 35f, 11f, 100f) }, + { "Grussrel", CIELabFromRGB(69f, 40f, 0f, 100f) }, + { "Glaucous", CIELabFromRGB(38f, 51f, 71f, 100f) }, + { "Glitter", CIELabFromRGB(90f, 91f, 98f, 100f) }, + { "GO Green", CIELabFromRGB(0f, 67f, 40f, 100f) }, + { "Gold (Metallic)", CIELabFromRGB(83f, 69f, 22f, 100f) }, + { "Gold (Web) (Golden)", CIELabFromRGB(100f, 84f, 0f, 100f) }, + { "Gold Fusion", CIELabFromRGB(52f, 46f, 31f, 100f) }, + { "Golden Brown", CIELabFromRGB(60f, 40f, 8f, 100f) }, + { "Golden Poppy", CIELabFromRGB(99f, 76f, 0f, 100f) }, + { "Golden Yellow", CIELabFromRGB(100f, 87f, 0f, 100f) }, + { "Goldenrod", CIELabFromRGB(85f, 65f, 13f, 100f) }, + { "Granny Smith Apple", CIELabFromRGB(66f, 89f, 63f, 100f) }, + { "Grape", CIELabFromRGB(44f, 18f, 66f, 100f) }, + { "Gray", CIELabFromRGB(50f, 50f, 50f, 100f) }, + { "Gray (HTML/CSS Gray)", CIELabFromRGB(50f, 50f, 50f, 100f) }, + { "Gray (X11 Gray)", CIELabFromRGB(75f, 75f, 75f, 100f) }, + { "Gray-Asparagus", CIELabFromRGB(27f, 35f, 27f, 100f) }, + { "Gray-Blue", CIELabFromRGB(55f, 57f, 67f, 100f) }, + { "Green (Color Wheel) (X11 Green)", CIELabFromRGB(0f, 100f, 0f, 100f) }, + { "Green (Crayola)", CIELabFromRGB(11f, 67f, 47f, 100f) }, + { "Green (HTML/CSS Color)", CIELabFromRGB(0f, 50f, 0f, 100f) }, + { "Green (Munsell)", CIELabFromRGB(0f, 66f, 47f, 100f) }, + { "Green (NCS)", CIELabFromRGB(0f, 62f, 42f, 100f) }, + { "Green (Pantone)", CIELabFromRGB(0f, 68f, 26f, 100f) }, + { "Green (Pigment)", CIELabFromRGB(0f, 65f, 31f, 100f) }, + { "Green (RYB)", CIELabFromRGB(40f, 69f, 20f, 100f) }, + { "Green-Blue", CIELabFromRGB(7f, 39f, 71f, 100f) }, + { "Green-Cyan", CIELabFromRGB(0f, 60f, 40f, 100f) }, + { "Green-Yellow", CIELabFromRGB(68f, 100f, 18f, 100f) }, + { "Grizzly", CIELabFromRGB(53f, 35f, 9f, 100f) }, + { "Grullo", CIELabFromRGB(66f, 60f, 53f, 100f) }, + { "Guppie Green", CIELabFromRGB(0f, 100f, 50f, 100f) }, + { "Halayà Úbe", CIELabFromRGB(40f, 22f, 33f, 100f) }, + { "Han Blue", CIELabFromRGB(27f, 42f, 81f, 100f) }, + { "Han Purple", CIELabFromRGB(32f, 9f, 98f, 100f) }, + { "Hansa Yellow", CIELabFromRGB(91f, 84f, 42f, 100f) }, + { "Harlequin", CIELabFromRGB(25f, 100f, 0f, 100f) }, + { "Harlequin Green", CIELabFromRGB(27f, 80f, 9f, 100f) }, + { "Harvard Crimson", CIELabFromRGB(79f, 0f, 9f, 100f) }, + { "Harvest Gold", CIELabFromRGB(85f, 57f, 0f, 100f) }, + { "Heart Gold", CIELabFromRGB(50f, 50f, 0f, 100f) }, + { "Heliotrope", CIELabFromRGB(87f, 45f, 100f, 100f) }, + { "Heliotrope Gray", CIELabFromRGB(67f, 60f, 66f, 100f) }, + { "Heliotrope Magenta", CIELabFromRGB(67f, 0f, 73f, 100f) }, + { "Hollywood Cerise", CIELabFromRGB(96f, 0f, 63f, 100f) }, + { "Honeydew", CIELabFromRGB(94f, 100f, 94f, 100f) }, + { "Honolulu Blue", CIELabFromRGB(0f, 43f, 69f, 100f) }, + { "Hooker's Green", CIELabFromRGB(29f, 47f, 42f, 100f) }, + { "Hot Magenta", CIELabFromRGB(100f, 11f, 81f, 100f) }, + { "Hot Pink", CIELabFromRGB(100f, 41f, 71f, 100f) }, + { "Hunter Green", CIELabFromRGB(21f, 37f, 23f, 100f) }, + { "Iceberg", CIELabFromRGB(44f, 65f, 82f, 100f) }, + { "Icterine", CIELabFromRGB(99f, 97f, 37f, 100f) }, + { "Illuminating Emerald", CIELabFromRGB(19f, 57f, 47f, 100f) }, + { "Imperial", CIELabFromRGB(38f, 18f, 42f, 100f) }, + { "Imperial Blue", CIELabFromRGB(0f, 14f, 58f, 100f) }, + { "Imperial Purple", CIELabFromRGB(40f, 1f, 24f, 100f) }, + { "Imperial Red", CIELabFromRGB(93f, 16f, 22f, 100f) }, + { "Inchworm", CIELabFromRGB(70f, 93f, 36f, 100f) }, + { "Independence", CIELabFromRGB(30f, 32f, 43f, 100f) }, + { "India Green", CIELabFromRGB(7f, 53f, 3f, 100f) }, + { "Indian Red", CIELabFromRGB(80f, 36f, 36f, 100f) }, + { "Indian Yellow", CIELabFromRGB(89f, 66f, 34f, 100f) }, + { "Indigo", CIELabFromRGB(44f, 0f, 100f, 100f) }, + { "Indigo Dye", CIELabFromRGB(4f, 12f, 57f, 100f) }, + { "Indigo (Web)", CIELabFromRGB(29f, 0f, 51f, 100f) }, + { "International Klein Blue", CIELabFromRGB(0f, 18f, 65f, 100f) }, + { "International Orange (Aerospace)", CIELabFromRGB(100f, 31f, 0f, 100f) }, + { "International Orange (Engineering)", CIELabFromRGB(73f, 9f, 5f, 100f) }, + { "International Orange (Golden Gate Bridge)", CIELabFromRGB(75f, 21f, 17f, 100f) }, + { "Iris", CIELabFromRGB(35f, 31f, 81f, 100f) }, + { "Irresistible", CIELabFromRGB(70f, 27f, 42f, 100f) }, + { "Isabelline", CIELabFromRGB(96f, 94f, 93f, 100f) }, + { "Islamic Green", CIELabFromRGB(0f, 56f, 0f, 100f) }, + { "Italian Sky Blue", CIELabFromRGB(70f, 100f, 100f, 100f) }, + { "Ivory", CIELabFromRGB(100f, 100f, 94f, 100f) }, + { "Jade", CIELabFromRGB(0f, 66f, 42f, 100f) }, + { "Japanese Carmine", CIELabFromRGB(62f, 16f, 20f, 100f) }, + { "Japanese Indigo", CIELabFromRGB(15f, 26f, 28f, 100f) }, + { "Japanese Violet", CIELabFromRGB(36f, 20f, 34f, 100f) }, + { "Jasmine", CIELabFromRGB(97f, 87f, 49f, 100f) }, + { "Jasper", CIELabFromRGB(84f, 23f, 24f, 100f) }, + { "Jazzberry Jam", CIELabFromRGB(65f, 4f, 37f, 100f) }, + { "Jelly Bean", CIELabFromRGB(85f, 38f, 31f, 100f) }, + { "Jet", CIELabFromRGB(20f, 20f, 20f, 100f) }, + { "Jonquil", CIELabFromRGB(96f, 79f, 9f, 100f) }, + { "Jordy Blue", CIELabFromRGB(54f, 73f, 95f, 100f) }, + { "June Bud", CIELabFromRGB(74f, 85f, 34f, 100f) }, + { "Jungle Green", CIELabFromRGB(16f, 67f, 53f, 100f) }, + { "Kelly Green", CIELabFromRGB(30f, 73f, 9f, 100f) }, + { "Kenyan Copper", CIELabFromRGB(49f, 11f, 2f, 100f) }, + { "Keppel", CIELabFromRGB(23f, 69f, 62f, 100f) }, + { "Jawad/Chicken Color (HTML/CSS) (Khaki)", CIELabFromRGB(76f, 69f, 57f, 100f) }, + { "Khaki (X11) (Light Khaki)", CIELabFromRGB(94f, 90f, 55f, 100f) }, + { "Kobe", CIELabFromRGB(53f, 18f, 9f, 100f) }, + { "Kobi", CIELabFromRGB(91f, 62f, 77f, 100f) }, + { "Kombu Green", CIELabFromRGB(21f, 26f, 19f, 100f) }, + { "KU Crimson", CIELabFromRGB(91f, 0f, 5f, 100f) }, + { "La Salle Green", CIELabFromRGB(3f, 47f, 19f, 100f) }, + { "Languid Lavender", CIELabFromRGB(84f, 79f, 87f, 100f) }, + { "Lapis Lazuli", CIELabFromRGB(15f, 38f, 61f, 100f) }, + { "Laser Lemon", CIELabFromRGB(100f, 100f, 40f, 100f) }, + { "Laurel Green", CIELabFromRGB(66f, 73f, 62f, 100f) }, + { "Lava", CIELabFromRGB(81f, 6f, 13f, 100f) }, + { "Lavender (Floral)", CIELabFromRGB(71f, 49f, 86f, 100f) }, + { "Lavender (Web)", CIELabFromRGB(90f, 90f, 98f, 100f) }, + { "Lavender Blue", CIELabFromRGB(80f, 80f, 100f, 100f) }, + { "Lavender Blush", CIELabFromRGB(100f, 94f, 96f, 100f) }, + { "Lavender Gray", CIELabFromRGB(77f, 76f, 82f, 100f) }, + { "Lavender Indigo", CIELabFromRGB(58f, 34f, 92f, 100f) }, + { "Lavender Magenta", CIELabFromRGB(93f, 51f, 93f, 100f) }, + { "Lavender Mist", CIELabFromRGB(90f, 90f, 98f, 100f) }, + { "Lavender Pink", CIELabFromRGB(98f, 68f, 82f, 100f) }, + { "Lavender Purple", CIELabFromRGB(59f, 48f, 71f, 100f) }, + { "Lavender Rose", CIELabFromRGB(98f, 63f, 89f, 100f) }, + { "Lawn Green", CIELabFromRGB(49f, 99f, 0f, 100f) }, + { "Lemon", CIELabFromRGB(100f, 97f, 0f, 100f) }, + { "Lemon Chiffon", CIELabFromRGB(100f, 98f, 80f, 100f) }, + { "Lemon Curry", CIELabFromRGB(80f, 63f, 11f, 100f) }, + { "Lemon Glacier", CIELabFromRGB(99f, 100f, 0f, 100f) }, + { "Lemon Lime", CIELabFromRGB(89f, 100f, 0f, 100f) }, + { "Lemon Meringue", CIELabFromRGB(96f, 92f, 75f, 100f) }, + { "Lemon Yellow", CIELabFromRGB(100f, 96f, 31f, 100f) }, + { "Lenurple", CIELabFromRGB(73f, 58f, 85f, 100f) }, + { "Licorice", CIELabFromRGB(10f, 7f, 6f, 100f) }, + { "Liberty", CIELabFromRGB(33f, 35f, 65f, 100f) }, + { "Light Apricot", CIELabFromRGB(99f, 84f, 69f, 100f) }, + { "Light Blue", CIELabFromRGB(68f, 85f, 90f, 100f) }, + { "Light Brilliant Red", CIELabFromRGB(100f, 18f, 18f, 100f) }, + { "Light Brown", CIELabFromRGB(71f, 40f, 11f, 100f) }, + { "Light Carmine Pink", CIELabFromRGB(90f, 40f, 44f, 100f) }, + { "Light Cobalt Blue", CIELabFromRGB(53f, 67f, 88f, 100f) }, + { "Light Coral", CIELabFromRGB(94f, 50f, 50f, 100f) }, + { "Light Cornflower Blue", CIELabFromRGB(58f, 80f, 92f, 100f) }, + { "Light Crimson", CIELabFromRGB(96f, 41f, 57f, 100f) }, + { "Light Cyan", CIELabFromRGB(88f, 100f, 100f, 100f) }, + { "Light Deep Pink", CIELabFromRGB(100f, 36f, 80f, 100f) }, + { "Light French Beige", CIELabFromRGB(78f, 68f, 50f, 100f) }, + { "Light Fuchsia Pink", CIELabFromRGB(98f, 52f, 94f, 100f) }, + { "Light Goldenrod Yellow", CIELabFromRGB(98f, 98f, 82f, 100f) }, + { "Light Gray", CIELabFromRGB(83f, 83f, 83f, 100f) }, + { "Light Grayish Magenta", CIELabFromRGB(80f, 60f, 80f, 100f) }, + { "Light Green", CIELabFromRGB(56f, 93f, 56f, 100f) }, + { "Light Hot Pink", CIELabFromRGB(100f, 70f, 87f, 100f) }, + { "Light Khaki", CIELabFromRGB(94f, 90f, 55f, 100f) }, + { "Light Medium Orchid", CIELabFromRGB(83f, 61f, 80f, 100f) }, + { "Light Moss Green", CIELabFromRGB(68f, 87f, 68f, 100f) }, + { "Light Orchid", CIELabFromRGB(90f, 66f, 84f, 100f) }, + { "Light Pastel Purple", CIELabFromRGB(69f, 61f, 85f, 100f) }, + { "Light Pink", CIELabFromRGB(100f, 71f, 76f, 100f) }, + { "Light Red Ochre", CIELabFromRGB(91f, 45f, 32f, 100f) }, + { "Light Salmon", CIELabFromRGB(100f, 63f, 48f, 100f) }, + { "Light Salmon Pink", CIELabFromRGB(100f, 60f, 60f, 100f) }, + { "Light Sea Green", CIELabFromRGB(13f, 70f, 67f, 100f) }, + { "Light Sky Blue", CIELabFromRGB(53f, 81f, 98f, 100f) }, + { "Light Slate Gray", CIELabFromRGB(47f, 53f, 60f, 100f) }, + { "Light Steel Blue", CIELabFromRGB(69f, 77f, 87f, 100f) }, + { "Light Taupe", CIELabFromRGB(70f, 55f, 43f, 100f) }, + { "Light Thulian Pink", CIELabFromRGB(90f, 56f, 67f, 100f) }, + { "Light Yellow", CIELabFromRGB(100f, 100f, 88f, 100f) }, + { "Lilac", CIELabFromRGB(78f, 64f, 78f, 100f) }, + { "Lime (Color Wheel)", CIELabFromRGB(75f, 100f, 0f, 100f) }, + { "Lime (Web) (X11 Green)", CIELabFromRGB(0f, 100f, 0f, 100f) }, + { "Lime Green", CIELabFromRGB(20f, 80f, 20f, 100f) }, + { "Limerick", CIELabFromRGB(62f, 76f, 4f, 100f) }, + { "Lincoln Green", CIELabFromRGB(10f, 35f, 2f, 100f) }, + { "Linen", CIELabFromRGB(98f, 94f, 90f, 100f) }, + { "Lion", CIELabFromRGB(76f, 60f, 42f, 100f) }, + { "Liseran Purple", CIELabFromRGB(87f, 44f, 63f, 100f) }, + { "Little Boy Blue", CIELabFromRGB(42f, 63f, 86f, 100f) }, + { "Liver", CIELabFromRGB(40f, 30f, 28f, 100f) }, + { "Liver (Dogs)", CIELabFromRGB(72f, 43f, 16f, 100f) }, + { "Liver (Organ)", CIELabFromRGB(42f, 18f, 12f, 100f) }, + { "Liver Chestnut", CIELabFromRGB(60f, 45f, 34f, 100f) }, + { "Livid", CIELabFromRGB(40f, 60f, 80f, 100f) }, + { "Lumber", CIELabFromRGB(100f, 89f, 80f, 100f) }, + { "Lust", CIELabFromRGB(90f, 13f, 13f, 100f) }, + { "Magenta", CIELabFromRGB(100f, 0f, 100f, 100f) }, + { "Magenta (Crayola)", CIELabFromRGB(100f, 33f, 64f, 100f) }, + { "Magenta (Dye)", CIELabFromRGB(79f, 12f, 48f, 100f) }, + { "Magenta (Pantone)", CIELabFromRGB(82f, 25f, 49f, 100f) }, + { "Magenta (Process)", CIELabFromRGB(100f, 0f, 56f, 100f) }, + { "Magenta Haze", CIELabFromRGB(62f, 27f, 46f, 100f) }, + { "Magenta-Pink", CIELabFromRGB(80f, 20f, 55f, 100f) }, + { "Magic Mint", CIELabFromRGB(67f, 94f, 82f, 100f) }, + { "Magnolia", CIELabFromRGB(97f, 96f, 100f, 100f) }, + { "Mahogany", CIELabFromRGB(75f, 25f, 0f, 100f) }, + { "Maize", CIELabFromRGB(98f, 93f, 36f, 100f) }, + { "Majorelle Blue", CIELabFromRGB(38f, 31f, 86f, 100f) }, + { "Malachite", CIELabFromRGB(4f, 85f, 32f, 100f) }, + { "Manatee", CIELabFromRGB(59f, 60f, 67f, 100f) }, + { "Mango Tango", CIELabFromRGB(100f, 51f, 26f, 100f) }, + { "Mantis", CIELabFromRGB(45f, 76f, 40f, 100f) }, + { "Mardi Gras", CIELabFromRGB(53f, 0f, 52f, 100f) }, + { "Marigold", CIELabFromRGB(92f, 64f, 13f, 100f) }, + { "Maroon (Crayola)", CIELabFromRGB(76f, 13f, 28f, 100f) }, + { "Maroon (HTML/CSS)", CIELabFromRGB(50f, 0f, 0f, 100f) }, + { "Maroon (X11)", CIELabFromRGB(69f, 19f, 38f, 100f) }, + { "Mauve", CIELabFromRGB(88f, 69f, 100f, 100f) }, + { "Mauve Taupe", CIELabFromRGB(57f, 37f, 43f, 100f) }, + { "Mauvelous", CIELabFromRGB(94f, 60f, 67f, 100f) }, + { "May Green", CIELabFromRGB(30f, 57f, 25f, 100f) }, + { "Maya Blue", CIELabFromRGB(45f, 76f, 98f, 100f) }, + { "Meat Brown", CIELabFromRGB(90f, 72f, 23f, 100f) }, + { "Medium Aquamarine", CIELabFromRGB(40f, 87f, 67f, 100f) }, + { "Medium Blue", CIELabFromRGB(0f, 0f, 80f, 100f) }, + { "Medium Candy Apple Red", CIELabFromRGB(89f, 2f, 17f, 100f) }, + { "Medium Carmine", CIELabFromRGB(69f, 25f, 21f, 100f) }, + { "Medium Champagne", CIELabFromRGB(95f, 90f, 67f, 100f) }, + { "Medium Electric Blue", CIELabFromRGB(1f, 31f, 59f, 100f) }, + { "Medium Jungle Green", CIELabFromRGB(11f, 21f, 18f, 100f) }, + { "Medium Lavender Magenta", CIELabFromRGB(87f, 63f, 87f, 100f) }, + { "Medium Orchid", CIELabFromRGB(73f, 33f, 83f, 100f) }, + { "Medium Persian Blue", CIELabFromRGB(0f, 40f, 65f, 100f) }, + { "Medium Purple", CIELabFromRGB(58f, 44f, 86f, 100f) }, + { "Medium Red-Violet", CIELabFromRGB(73f, 20f, 52f, 100f) }, + { "Medium Ruby", CIELabFromRGB(67f, 25f, 41f, 100f) }, + { "Medium Sea Green", CIELabFromRGB(24f, 70f, 44f, 100f) }, + { "Medium Sky Blue", CIELabFromRGB(50f, 85f, 92f, 100f) }, + { "Medium Slate Blue", CIELabFromRGB(48f, 41f, 93f, 100f) }, + { "Medium Spring Bud", CIELabFromRGB(79f, 86f, 53f, 100f) }, + { "Medium Spring Green", CIELabFromRGB(0f, 98f, 60f, 100f) }, + { "Medium Taupe", CIELabFromRGB(40f, 30f, 28f, 100f) }, + { "Medium Turquoise", CIELabFromRGB(28f, 82f, 80f, 100f) }, + { "Medium Tuscan Red", CIELabFromRGB(47f, 27f, 23f, 100f) }, + { "Medium Vermilion", CIELabFromRGB(85f, 38f, 23f, 100f) }, + { "Medium Violet-Red", CIELabFromRGB(78f, 8f, 52f, 100f) }, + { "Mellow Apricot", CIELabFromRGB(97f, 72f, 47f, 100f) }, + { "Mellow Yellow", CIELabFromRGB(97f, 87f, 49f, 100f) }, + { "Melon", CIELabFromRGB(99f, 74f, 71f, 100f) }, + { "Metallic Seaweed", CIELabFromRGB(4f, 49f, 55f, 100f) }, + { "Metallic Sunburst", CIELabFromRGB(61f, 49f, 22f, 100f) }, + { "Mexican Pink", CIELabFromRGB(89f, 0f, 49f, 100f) }, + { "Midnight Blue", CIELabFromRGB(10f, 10f, 44f, 100f) }, + { "Midnight Green (Eagle Green)", CIELabFromRGB(0f, 29f, 33f, 100f) }, + { "Mikado Yellow", CIELabFromRGB(100f, 77f, 5f, 100f) }, + { "Mindaro", CIELabFromRGB(89f, 98f, 53f, 100f) }, + { "Ming", CIELabFromRGB(21f, 45f, 49f, 100f) }, + { "Mint", CIELabFromRGB(24f, 71f, 54f, 100f) }, + { "Mint Cream", CIELabFromRGB(96f, 100f, 98f, 100f) }, + { "Mint Green", CIELabFromRGB(60f, 100f, 60f, 100f) }, + { "Misty Rose", CIELabFromRGB(100f, 89f, 88f, 100f) }, + { "Moccasin", CIELabFromRGB(98f, 92f, 84f, 100f) }, + { "Mode Beige", CIELabFromRGB(59f, 44f, 9f, 100f) }, + { "Moonstone Blue", CIELabFromRGB(45f, 66f, 76f, 100f) }, + { "Mordant Red 19", CIELabFromRGB(68f, 5f, 0f, 100f) }, + { "Moss Green", CIELabFromRGB(54f, 60f, 36f, 100f) }, + { "Mountain Meadow", CIELabFromRGB(19f, 73f, 56f, 100f) }, + { "Mountbatten Pink", CIELabFromRGB(60f, 48f, 55f, 100f) }, + { "MSU Green", CIELabFromRGB(9f, 27f, 23f, 100f) }, + { "Mughal Green", CIELabFromRGB(19f, 38f, 19f, 100f) }, + { "Mulberry", CIELabFromRGB(77f, 29f, 55f, 100f) }, + { "Mustard", CIELabFromRGB(100f, 86f, 35f, 100f) }, + { "Myrtle Green", CIELabFromRGB(19f, 47f, 45f, 100f) }, + { "Nadeshiko Pink", CIELabFromRGB(96f, 68f, 78f, 100f) }, + { "Napier Green", CIELabFromRGB(16f, 50f, 0f, 100f) }, + { "Naples Yellow", CIELabFromRGB(98f, 85f, 37f, 100f) }, + { "Navajo White", CIELabFromRGB(100f, 87f, 68f, 100f) }, + { "Navy", CIELabFromRGB(0f, 0f, 50f, 100f) }, + { "Navy Purple", CIELabFromRGB(58f, 34f, 92f, 100f) }, + { "Neon Carrot", CIELabFromRGB(100f, 64f, 26f, 100f) }, + { "Neon Fuchsia", CIELabFromRGB(100f, 25f, 39f, 100f) }, + { "Neon Green", CIELabFromRGB(22f, 100f, 8f, 100f) }, + { "New Car", CIELabFromRGB(13f, 31f, 78f, 100f) }, + { "New York Pink", CIELabFromRGB(84f, 51f, 50f, 100f) }, + { "Non-Photo Blue", CIELabFromRGB(64f, 87f, 93f, 100f) }, + { "North Texas Green", CIELabFromRGB(2f, 56f, 20f, 100f) }, + { "Nyanza", CIELabFromRGB(91f, 100f, 86f, 100f) }, + { "Ocean Boat Blue", CIELabFromRGB(0f, 47f, 75f, 100f) }, + { "Ochre", CIELabFromRGB(80f, 47f, 13f, 100f) }, + { "Office Green", CIELabFromRGB(0f, 50f, 0f, 100f) }, + { "Old Burgundy", CIELabFromRGB(26f, 19f, 18f, 100f) }, + { "Old Gold", CIELabFromRGB(81f, 71f, 23f, 100f) }, + { "Old Heliotrope", CIELabFromRGB(34f, 24f, 36f, 100f) }, + { "Old Lace", CIELabFromRGB(99f, 96f, 90f, 100f) }, + { "Old Lavender", CIELabFromRGB(47f, 41f, 47f, 100f) }, + { "Old Mauve", CIELabFromRGB(40f, 19f, 28f, 100f) }, + { "Old Moss Green", CIELabFromRGB(53f, 49f, 21f, 100f) }, + { "Old Rose", CIELabFromRGB(75f, 50f, 51f, 100f) }, + { "Old Silver", CIELabFromRGB(52f, 52f, 51f, 100f) }, + { "Olive", CIELabFromRGB(50f, 50f, 0f, 100f) }, + { "Olive Drab", CIELabFromRGB(24f, 20f, 12f, 100f) }, + { "Olivine", CIELabFromRGB(60f, 73f, 45f, 100f) }, + { "Onyx", CIELabFromRGB(21f, 22f, 22f, 100f) }, + { "Opera Mauve", CIELabFromRGB(72f, 52f, 65f, 100f) }, + { "Orange (Color Wheel)", CIELabFromRGB(100f, 50f, 0f, 100f) }, + { "Orange (Crayola)", CIELabFromRGB(100f, 46f, 22f, 100f) }, + { "Orange (Pantone)", CIELabFromRGB(100f, 35f, 0f, 100f) }, + { "Orange (RYB)", CIELabFromRGB(98f, 60f, 1f, 100f) }, + { "Orange (Web)", CIELabFromRGB(100f, 65f, 0f, 100f) }, + { "Orange Peel", CIELabFromRGB(100f, 62f, 0f, 100f) }, + { "Orange-Red", CIELabFromRGB(100f, 27f, 0f, 100f) }, + { "Orange-Yellow", CIELabFromRGB(97f, 84f, 41f, 100f) }, + { "Orchid", CIELabFromRGB(85f, 44f, 84f, 100f) }, + { "Orchid Pink", CIELabFromRGB(95f, 74f, 80f, 100f) }, + { "Orioles Orange", CIELabFromRGB(98f, 31f, 8f, 100f) }, + { "Otter Brown", CIELabFromRGB(40f, 26f, 13f, 100f) }, + { "Outer Space", CIELabFromRGB(25f, 29f, 30f, 100f) }, + { "Outrageous Orange", CIELabFromRGB(100f, 43f, 29f, 100f) }, + { "Oxford Blue", CIELabFromRGB(0f, 13f, 28f, 100f) }, + { "OU Crimson Red", CIELabFromRGB(60f, 0f, 0f, 100f) }, + { "Pakistan Green", CIELabFromRGB(0f, 40f, 0f, 100f) }, + { "Palatinate Blue", CIELabFromRGB(15f, 23f, 89f, 100f) }, + { "Palatinate Purple", CIELabFromRGB(41f, 16f, 38f, 100f) }, + { "Pale Aqua", CIELabFromRGB(74f, 83f, 90f, 100f) }, + { "Pale Blue", CIELabFromRGB(69f, 93f, 93f, 100f) }, + { "Pale Brown", CIELabFromRGB(60f, 46f, 33f, 100f) }, + { "Pale Carmine", CIELabFromRGB(69f, 25f, 21f, 100f) }, + { "Pale Cerulean", CIELabFromRGB(61f, 77f, 89f, 100f) }, + { "Pale Chestnut", CIELabFromRGB(87f, 68f, 69f, 100f) }, + { "Pale Copper", CIELabFromRGB(85f, 54f, 40f, 100f) }, + { "Pale Cornflower Blue", CIELabFromRGB(67f, 80f, 94f, 100f) }, + { "Pale Cyan", CIELabFromRGB(53f, 83f, 97f, 100f) }, + { "Pale Gold", CIELabFromRGB(90f, 75f, 54f, 100f) }, + { "Pale Goldenrod", CIELabFromRGB(93f, 91f, 67f, 100f) }, + { "Pale Green", CIELabFromRGB(60f, 98f, 60f, 100f) }, + { "Pale Lavender", CIELabFromRGB(86f, 82f, 100f, 100f) }, + { "Pale Magenta", CIELabFromRGB(98f, 52f, 90f, 100f) }, + { "Pale Magenta-Pink", CIELabFromRGB(100f, 60f, 80f, 100f) }, + { "Pale Pink", CIELabFromRGB(98f, 85f, 87f, 100f) }, + { "Pale Plum", CIELabFromRGB(87f, 63f, 87f, 100f) }, + { "Pale Red-Violet", CIELabFromRGB(86f, 44f, 58f, 100f) }, + { "Pale Robin Egg Blue", CIELabFromRGB(59f, 87f, 82f, 100f) }, + { "Pale Silver", CIELabFromRGB(79f, 75f, 73f, 100f) }, + { "Pale Spring Bud", CIELabFromRGB(93f, 92f, 74f, 100f) }, + { "Pale Taupe", CIELabFromRGB(74f, 60f, 49f, 100f) }, + { "Pale Turquoise", CIELabFromRGB(69f, 93f, 93f, 100f) }, + { "Pale Violet", CIELabFromRGB(80f, 60f, 100f, 100f) }, + { "Pale Violet-Red", CIELabFromRGB(86f, 44f, 58f, 100f) }, + { "Pansy Purple", CIELabFromRGB(47f, 9f, 29f, 100f) }, + { "Paolo Veronese Green", CIELabFromRGB(0f, 61f, 49f, 100f) }, + { "Papaya Whip", CIELabFromRGB(100f, 94f, 84f, 100f) }, + { "Paradise Pink", CIELabFromRGB(90f, 24f, 38f, 100f) }, + { "Paris Green", CIELabFromRGB(31f, 78f, 47f, 100f) }, + { "Pastel Blue", CIELabFromRGB(68f, 78f, 81f, 100f) }, + { "Pastel Brown", CIELabFromRGB(51f, 41f, 33f, 100f) }, + { "Pastel Gray", CIELabFromRGB(81f, 81f, 77f, 100f) }, + { "Pastel Green", CIELabFromRGB(47f, 87f, 47f, 100f) }, + { "Pastel Magenta", CIELabFromRGB(96f, 60f, 76f, 100f) }, + { "Pastel Orange", CIELabFromRGB(100f, 70f, 28f, 100f) }, + { "Pastel Pink", CIELabFromRGB(87f, 65f, 64f, 100f) }, + { "Pastel Purple", CIELabFromRGB(70f, 62f, 71f, 100f) }, + { "Pastel Red", CIELabFromRGB(100f, 41f, 38f, 100f) }, + { "Pastel Violet", CIELabFromRGB(80f, 60f, 79f, 100f) }, + { "Pastel Yellow", CIELabFromRGB(99f, 99f, 59f, 100f) }, + { "Patriarch", CIELabFromRGB(50f, 0f, 50f, 100f) }, + { "Payne's Grey", CIELabFromRGB(33f, 41f, 47f, 100f) }, + { "Peachier", CIELabFromRGB(100f, 90f, 71f, 100f) }, + { "Peach", CIELabFromRGB(100f, 80f, 64f, 100f) }, + { "Peach-Orange", CIELabFromRGB(100f, 80f, 60f, 100f) }, + { "Peach Puff", CIELabFromRGB(100f, 85f, 73f, 100f) }, + { "Peach-Yellow", CIELabFromRGB(98f, 87f, 68f, 100f) }, + { "Pear", CIELabFromRGB(82f, 89f, 19f, 100f) }, + { "Pearl", CIELabFromRGB(92f, 88f, 78f, 100f) }, + { "Pearl Aqua", CIELabFromRGB(53f, 85f, 75f, 100f) }, + { "Pearly Purple", CIELabFromRGB(72f, 41f, 64f, 100f) }, + { "Peridot", CIELabFromRGB(90f, 89f, 0f, 100f) }, + { "Periwinkle", CIELabFromRGB(80f, 80f, 100f, 100f) }, + { "Persian Blue", CIELabFromRGB(11f, 22f, 73f, 100f) }, + { "Persian Green", CIELabFromRGB(0f, 65f, 58f, 100f) }, + { "Persian Indigo", CIELabFromRGB(20f, 7f, 48f, 100f) }, + { "Persian Orange", CIELabFromRGB(85f, 56f, 35f, 100f) }, + { "Persian Pink", CIELabFromRGB(97f, 50f, 75f, 100f) }, + { "Persian Plum", CIELabFromRGB(44f, 11f, 11f, 100f) }, + { "Persian Red", CIELabFromRGB(80f, 20f, 20f, 100f) }, + { "Persian Rose", CIELabFromRGB(100f, 16f, 64f, 100f) }, + { "Persimmon", CIELabFromRGB(93f, 35f, 0f, 100f) }, + { "Peru", CIELabFromRGB(80f, 52f, 25f, 100f) }, + { "Phlox", CIELabFromRGB(87f, 0f, 100f, 100f) }, + { "Phthalo Blue", CIELabFromRGB(0f, 6f, 54f, 100f) }, + { "Phthalo Green", CIELabFromRGB(7f, 21f, 14f, 100f) }, + { "Picton Blue", CIELabFromRGB(27f, 69f, 91f, 100f) }, + { "Pictorial Carmine", CIELabFromRGB(76f, 4f, 31f, 100f) }, + { "Piggy Pink", CIELabFromRGB(99f, 87f, 90f, 100f) }, + { "Pine Green", CIELabFromRGB(0f, 47f, 44f, 100f) }, + { "Pineapple", CIELabFromRGB(34f, 24f, 5f, 100f) }, + { "Pink", CIELabFromRGB(100f, 75f, 80f, 100f) }, + { "Pink (Pantone)", CIELabFromRGB(84f, 28f, 58f, 100f) }, + { "Pink Lace", CIELabFromRGB(100f, 87f, 96f, 100f) }, + { "Pink Lavender", CIELabFromRGB(85f, 70f, 82f, 100f) }, + { "Pink-Orange", CIELabFromRGB(100f, 60f, 40f, 100f) }, + { "Pink Pearl", CIELabFromRGB(91f, 67f, 81f, 100f) }, + { "Pink Raspberry", CIELabFromRGB(60f, 0f, 21f, 100f) }, + { "Pink Sherbet", CIELabFromRGB(97f, 56f, 65f, 100f) }, + { "Pistachio", CIELabFromRGB(58f, 77f, 45f, 100f) }, + { "Platinum", CIELabFromRGB(90f, 89f, 89f, 100f) }, + { "Plum", CIELabFromRGB(56f, 27f, 52f, 100f) }, + { "Plum (Web)", CIELabFromRGB(87f, 63f, 87f, 100f) }, + { "Pomp And Power", CIELabFromRGB(53f, 38f, 56f, 100f) }, + { "Popstar", CIELabFromRGB(75f, 31f, 38f, 100f) }, + { "Portland Orange", CIELabFromRGB(100f, 35f, 21f, 100f) }, + { "Powder Blue", CIELabFromRGB(69f, 88f, 90f, 100f) }, + { "Princeton Orange", CIELabFromRGB(96f, 50f, 15f, 100f) }, + { "Prune", CIELabFromRGB(44f, 11f, 11f, 100f) }, + { "Prussian Blue", CIELabFromRGB(0f, 19f, 33f, 100f) }, + { "Psychedelic Purple", CIELabFromRGB(87f, 0f, 100f, 100f) }, + { "Puce", CIELabFromRGB(80f, 53f, 60f, 100f) }, + { "Puce Red", CIELabFromRGB(45f, 18f, 22f, 100f) }, + { "Pullman Brown (UPS Brown)", CIELabFromRGB(39f, 25f, 9f, 100f) }, + { "Pullman Green", CIELabFromRGB(23f, 20f, 11f, 100f) }, + { "Pumpkin", CIELabFromRGB(100f, 46f, 9f, 100f) }, + { "Purple (HTML)", CIELabFromRGB(50f, 0f, 50f, 100f) }, + { "Purple (Munsell)", CIELabFromRGB(62f, 0f, 77f, 100f) }, + { "Purple (X11)", CIELabFromRGB(63f, 13f, 94f, 100f) }, + { "Purple Heart", CIELabFromRGB(41f, 21f, 61f, 100f) }, + { "Purple Mountain Majesty", CIELabFromRGB(59f, 47f, 71f, 100f) }, + { "Purple Navy", CIELabFromRGB(31f, 32f, 50f, 100f) }, + { "Purple Pizzazz", CIELabFromRGB(100f, 31f, 85f, 100f) }, + { "Purple Taupe", CIELabFromRGB(31f, 25f, 30f, 100f) }, + { "Purpureus", CIELabFromRGB(60f, 31f, 68f, 100f) }, + { "Quartz", CIELabFromRGB(32f, 28f, 31f, 100f) }, + { "Queen Blue", CIELabFromRGB(26f, 42f, 58f, 100f) }, + { "Queen Pink", CIELabFromRGB(91f, 80f, 84f, 100f) }, + { "Quinacridone Magenta", CIELabFromRGB(56f, 23f, 35f, 100f) }, + { "Rackley", CIELabFromRGB(36f, 54f, 66f, 100f) }, + { "Radical Red", CIELabFromRGB(100f, 21f, 37f, 100f) }, + { "Rajah", CIELabFromRGB(98f, 67f, 38f, 100f) }, + { "Raspberry", CIELabFromRGB(89f, 4f, 36f, 100f) }, + { "Raspberry Glace", CIELabFromRGB(57f, 37f, 43f, 100f) }, + { "Raspberry Pink", CIELabFromRGB(89f, 31f, 60f, 100f) }, + { "Raspberry Rose", CIELabFromRGB(70f, 27f, 42f, 100f) }, + { "Raw Umber", CIELabFromRGB(51f, 40f, 27f, 100f) }, + { "Razzle Dazzle Rose", CIELabFromRGB(100f, 20f, 80f, 100f) }, + { "Razzmatazz", CIELabFromRGB(89f, 15f, 42f, 100f) }, + { "Razzmic Berry", CIELabFromRGB(55f, 31f, 52f, 100f) }, + { "Rebecca Purple", CIELabFromRGB(40f, 20f, 60f, 100f) }, + { "Red", CIELabFromRGB(100f, 0f, 0f, 100f) }, + { "Red (Crayola)", CIELabFromRGB(93f, 13f, 30f, 100f) }, + { "Red (Munsell)", CIELabFromRGB(95f, 0f, 24f, 100f) }, + { "Red (NCS)", CIELabFromRGB(77f, 1f, 20f, 100f) }, + { "Red (Pantone)", CIELabFromRGB(93f, 16f, 22f, 100f) }, + { "Red (Pigment)", CIELabFromRGB(93f, 11f, 14f, 100f) }, + { "Red (RYB)", CIELabFromRGB(100f, 15f, 7f, 100f) }, + { "Red-Brown", CIELabFromRGB(65f, 16f, 16f, 100f) }, + { "Red Devil", CIELabFromRGB(53f, 0f, 7f, 100f) }, + { "Red-Orange", CIELabFromRGB(100f, 33f, 29f, 100f) }, + { "Red-Purple", CIELabFromRGB(89f, 0f, 47f, 100f) }, + { "Red-Violet", CIELabFromRGB(78f, 8f, 52f, 100f) }, + { "Redwood", CIELabFromRGB(64f, 35f, 32f, 100f) }, + { "Regalia", CIELabFromRGB(32f, 18f, 50f, 100f) }, + { "Registration Black", CIELabFromRGB(0f, 0f, 0f, 100f) }, + { "Resolution Blue", CIELabFromRGB(0f, 14f, 53f, 100f) }, + { "Rhythm", CIELabFromRGB(47f, 46f, 59f, 100f) }, + { "Rich Black", CIELabFromRGB(0f, 25f, 25f, 100f) }, + { "Rich Black (FOGRA29)", CIELabFromRGB(0f, 4f, 7f, 100f) }, + { "Rich Black (FOGRA39)", CIELabFromRGB(0f, 1f, 1f, 100f) }, + { "Rich Brilliant Lavender", CIELabFromRGB(95f, 65f, 100f, 100f) }, + { "Rich Carmine", CIELabFromRGB(84f, 0f, 25f, 100f) }, + { "Rich Electric Blue", CIELabFromRGB(3f, 57f, 82f, 100f) }, + { "Rich Lavender", CIELabFromRGB(65f, 42f, 81f, 100f) }, + { "Rich Lilac", CIELabFromRGB(71f, 40f, 82f, 100f) }, + { "Rich Maroon", CIELabFromRGB(69f, 19f, 38f, 100f) }, + { "Rifle Green", CIELabFromRGB(27f, 30f, 22f, 100f) }, + { "Roast Coffee", CIELabFromRGB(44f, 26f, 25f, 100f) }, + { "Robin Egg Blue", CIELabFromRGB(0f, 80f, 80f, 100f) }, + { "Rocket Metallic", CIELabFromRGB(54f, 50f, 50f, 100f) }, + { "Roman Silver", CIELabFromRGB(51f, 54f, 59f, 100f) }, + { "Rose", CIELabFromRGB(100f, 0f, 50f, 100f) }, + { "Rose Bonbon", CIELabFromRGB(98f, 26f, 62f, 100f) }, + { "Rose Ebony", CIELabFromRGB(40f, 28f, 27f, 100f) }, + { "Rose Gold", CIELabFromRGB(72f, 43f, 47f, 100f) }, + { "Rose Madder", CIELabFromRGB(89f, 15f, 21f, 100f) }, + { "Rose Pink", CIELabFromRGB(100f, 40f, 80f, 100f) }, + { "Rose Quartz", CIELabFromRGB(67f, 60f, 66f, 100f) }, + { "Rose Red", CIELabFromRGB(76f, 12f, 34f, 100f) }, + { "Rose Taupe", CIELabFromRGB(56f, 36f, 36f, 100f) }, + { "Rose Vale", CIELabFromRGB(67f, 31f, 32f, 100f) }, + { "Rosewood", CIELabFromRGB(40f, 0f, 4f, 100f) }, + { "Rosso Corsa", CIELabFromRGB(83f, 0f, 0f, 100f) }, + { "Rosy Brown", CIELabFromRGB(74f, 56f, 56f, 100f) }, + { "Royal Azure", CIELabFromRGB(0f, 22f, 66f, 100f) }, + { "Royal Blue", CIELabFromRGB(0f, 14f, 40f, 100f) }, + { "Royal Blue 2", CIELabFromRGB(25f, 41f, 88f, 100f) }, + { "Royal Fuchsia", CIELabFromRGB(79f, 17f, 57f, 100f) }, + { "Royal Purple", CIELabFromRGB(47f, 32f, 66f, 100f) }, + { "Royal Yellow", CIELabFromRGB(98f, 85f, 37f, 100f) }, + { "Ruber", CIELabFromRGB(81f, 27f, 46f, 100f) }, + { "Rubine Red", CIELabFromRGB(82f, 0f, 34f, 100f) }, + { "Ruby", CIELabFromRGB(88f, 7f, 37f, 100f) }, + { "Ruby Red", CIELabFromRGB(61f, 7f, 12f, 100f) }, + { "Ruddy", CIELabFromRGB(100f, 0f, 16f, 100f) }, + { "Ruddy Brown", CIELabFromRGB(73f, 40f, 16f, 100f) }, + { "Ruddy Pink", CIELabFromRGB(88f, 56f, 59f, 100f) }, + { "Rufous", CIELabFromRGB(66f, 11f, 3f, 100f) }, + { "Russet", CIELabFromRGB(50f, 27f, 11f, 100f) }, + { "Russian Green", CIELabFromRGB(40f, 57f, 40f, 100f) }, + { "Russian Violet", CIELabFromRGB(20f, 9f, 30f, 100f) }, + { "Rust", CIELabFromRGB(72f, 25f, 5f, 100f) }, + { "Rusty Red", CIELabFromRGB(85f, 17f, 26f, 100f) }, + { "Sacramento State Green", CIELabFromRGB(0f, 34f, 25f, 100f) }, + { "Saddle Brown", CIELabFromRGB(55f, 27f, 7f, 100f) }, + { "Safety Orange", CIELabFromRGB(100f, 47f, 0f, 100f) }, + { "Safety Orange (Blaze Orange)", CIELabFromRGB(100f, 40f, 0f, 100f) }, + { "Safety Yellow", CIELabFromRGB(93f, 82f, 1f, 100f) }, + { "Saffron", CIELabFromRGB(96f, 77f, 19f, 100f) }, + { "Sage", CIELabFromRGB(74f, 72f, 54f, 100f) }, + { "St. Patrick's Blue", CIELabFromRGB(14f, 16f, 48f, 100f) }, + { "Salmon", CIELabFromRGB(98f, 50f, 45f, 100f) }, + { "Salmon Pink", CIELabFromRGB(100f, 57f, 64f, 100f) }, + { "Sand", CIELabFromRGB(76f, 70f, 50f, 100f) }, + { "Sand Dune", CIELabFromRGB(59f, 44f, 9f, 100f) }, + { "Sandstorm", CIELabFromRGB(93f, 84f, 25f, 100f) }, + { "Sandy Brown", CIELabFromRGB(96f, 64f, 38f, 100f) }, + { "Sandy Taupe", CIELabFromRGB(59f, 44f, 9f, 100f) }, + { "Sangria", CIELabFromRGB(57f, 0f, 4f, 100f) }, + { "Sap Green", CIELabFromRGB(31f, 49f, 16f, 100f) }, + { "Sapphire", CIELabFromRGB(6f, 32f, 73f, 100f) }, + { "Sapphire Blue", CIELabFromRGB(0f, 40f, 65f, 100f) }, + { "Satin Sheen Gold", CIELabFromRGB(80f, 63f, 21f, 100f) }, + { "Scarlet", CIELabFromRGB(100f, 14f, 0f, 100f) }, + { "Scarlet-ier", CIELabFromRGB(99f, 5f, 21f, 100f) }, + { "Schauss Pink", CIELabFromRGB(100f, 57f, 69f, 100f) }, + { "School Bus Yellow", CIELabFromRGB(100f, 85f, 0f, 100f) }, + { "Screamin' Green", CIELabFromRGB(46f, 100f, 48f, 100f) }, + { "Sea Blue", CIELabFromRGB(0f, 41f, 58f, 100f) }, + { "Sea Green", CIELabFromRGB(18f, 55f, 34f, 100f) }, + { "Seal Brown", CIELabFromRGB(20f, 8f, 8f, 100f) }, + { "Seashell", CIELabFromRGB(100f, 96f, 93f, 100f) }, + { "Selective Yellow", CIELabFromRGB(100f, 73f, 0f, 100f) }, + { "Sepia", CIELabFromRGB(44f, 26f, 8f, 100f) }, + { "Shadow", CIELabFromRGB(54f, 47f, 36f, 100f) }, + { "Shadow Blue", CIELabFromRGB(47f, 55f, 65f, 100f) }, + { "Shampoo", CIELabFromRGB(100f, 81f, 95f, 100f) }, + { "Shamrock Green", CIELabFromRGB(0f, 62f, 38f, 100f) }, + { "Sheen Green", CIELabFromRGB(56f, 83f, 0f, 100f) }, + { "Shimmering Blush", CIELabFromRGB(85f, 53f, 58f, 100f) }, + { "Shocking Pink", CIELabFromRGB(99f, 6f, 75f, 100f) }, + { "Shocking Pink (Crayola)", CIELabFromRGB(100f, 44f, 100f, 100f) }, + { "Sienna", CIELabFromRGB(53f, 18f, 9f, 100f) }, + { "Silver", CIELabFromRGB(75f, 75f, 75f, 100f) }, + { "Silver Chalice", CIELabFromRGB(67f, 67f, 67f, 100f) }, + { "Silver Lake Blue", CIELabFromRGB(36f, 54f, 73f, 100f) }, + { "Silver Pink", CIELabFromRGB(77f, 68f, 68f, 100f) }, + { "Silver Sand", CIELabFromRGB(75f, 76f, 76f, 100f) }, + { "Sinopia", CIELabFromRGB(80f, 25f, 4f, 100f) }, + { "Skobeloff", CIELabFromRGB(0f, 45f, 45f, 100f) }, + { "Sky Blue", CIELabFromRGB(53f, 81f, 92f, 100f) }, + { "Sky Magenta", CIELabFromRGB(81f, 44f, 69f, 100f) }, + { "Slate Blue", CIELabFromRGB(42f, 35f, 80f, 100f) }, + { "Slate Gray", CIELabFromRGB(44f, 50f, 56f, 100f) }, + { "Smalt (Dark Powder Blue)", CIELabFromRGB(0f, 20f, 60f, 100f) }, + { "Smitten", CIELabFromRGB(78f, 25f, 53f, 100f) }, + { "Smoke", CIELabFromRGB(45f, 51f, 46f, 100f) }, + { "Smoky Black", CIELabFromRGB(6f, 5f, 3f, 100f) }, + { "Smoky Topaz", CIELabFromRGB(58f, 24f, 25f, 100f) }, + { "Snow", CIELabFromRGB(100f, 98f, 98f, 100f) }, + { "Soap", CIELabFromRGB(81f, 78f, 94f, 100f) }, + { "Solid Pink", CIELabFromRGB(54f, 22f, 26f, 100f) }, + { "Sonic Silver", CIELabFromRGB(46f, 46f, 46f, 100f) }, + { "Spartan Crimson", CIELabFromRGB(62f, 7f, 9f, 100f) }, + { "Space Cadet", CIELabFromRGB(11f, 16f, 32f, 100f) }, + { "Spanish Bistre", CIELabFromRGB(50f, 46f, 20f, 100f) }, + { "Spanish Blue", CIELabFromRGB(0f, 44f, 72f, 100f) }, + { "Spanish Carmine", CIELabFromRGB(82f, 0f, 28f, 100f) }, + { "Spanish Crimson", CIELabFromRGB(90f, 10f, 30f, 100f) }, + { "Spanish Gray", CIELabFromRGB(60f, 60f, 60f, 100f) }, + { "Spanish Green", CIELabFromRGB(0f, 57f, 31f, 100f) }, + { "Spanish Orange", CIELabFromRGB(91f, 38f, 0f, 100f) }, + { "Spanish Pink", CIELabFromRGB(97f, 75f, 75f, 100f) }, + { "Spanish Red", CIELabFromRGB(90f, 0f, 15f, 100f) }, + { "Spanish Sky Blue", CIELabFromRGB(0f, 100f, 100f, 100f) }, + { "Spanish Violet", CIELabFromRGB(30f, 16f, 51f, 100f) }, + { "Spanish Viridian", CIELabFromRGB(0f, 50f, 36f, 100f) }, + { "Spicy Mix", CIELabFromRGB(55f, 37f, 30f, 100f) }, + { "Spiro Disco Ball", CIELabFromRGB(6f, 75f, 99f, 100f) }, + { "Spring Bud", CIELabFromRGB(65f, 99f, 0f, 100f) }, + { "Spring Green", CIELabFromRGB(0f, 100f, 50f, 100f) }, + { "Star Command Blue", CIELabFromRGB(0f, 48f, 72f, 100f) }, + { "Steel Blue", CIELabFromRGB(27f, 51f, 71f, 100f) }, + { "Steel Pink", CIELabFromRGB(80f, 20f, 80f, 100f) }, + { "Stil De Grain Yellow", CIELabFromRGB(98f, 85f, 37f, 100f) }, + { "Stizza", CIELabFromRGB(60f, 0f, 0f, 100f) }, + { "Stormcloud", CIELabFromRGB(31f, 40f, 42f, 100f) }, + { "Thistle", CIELabFromRGB(85f, 75f, 85f, 100f) }, + { "Straw", CIELabFromRGB(89f, 85f, 44f, 100f) }, + { "Strawberry", CIELabFromRGB(99f, 35f, 55f, 100f) }, + { "Sunglow", CIELabFromRGB(100f, 80f, 20f, 100f) }, + { "Sunray", CIELabFromRGB(89f, 67f, 34f, 100f) }, + { "Sunset", CIELabFromRGB(98f, 84f, 65f, 100f) }, + { "Sunset Orange", CIELabFromRGB(99f, 37f, 33f, 100f) }, + { "Super Pink", CIELabFromRGB(81f, 42f, 66f, 100f) }, + { "Tan", CIELabFromRGB(82f, 71f, 55f, 100f) }, + { "Tangelo", CIELabFromRGB(98f, 30f, 0f, 100f) }, + { "Tangerine", CIELabFromRGB(95f, 52f, 0f, 100f) }, + { "Tangerine Yellow", CIELabFromRGB(100f, 80f, 0f, 100f) }, + { "Tango Pink", CIELabFromRGB(89f, 44f, 48f, 100f) }, + { "Taupe", CIELabFromRGB(28f, 24f, 20f, 100f) }, + { "Taupe Gray", CIELabFromRGB(55f, 52f, 54f, 100f) }, + { "Tea Green", CIELabFromRGB(82f, 94f, 75f, 100f) }, + { "Tea Rose", CIELabFromRGB(97f, 51f, 47f, 100f) }, + { "Tea Rosier", CIELabFromRGB(96f, 76f, 76f, 100f) }, + { "Teal", CIELabFromRGB(0f, 50f, 50f, 100f) }, + { "Teal Blue", CIELabFromRGB(21f, 46f, 53f, 100f) }, + { "Teal Deer", CIELabFromRGB(60f, 90f, 70f, 100f) }, + { "Teal Green", CIELabFromRGB(0f, 51f, 50f, 100f) }, + { "Telemagenta", CIELabFromRGB(81f, 20f, 46f, 100f) }, + { "Tenné", CIELabFromRGB(80f, 34f, 0f, 100f) }, + { "Terra Cotta", CIELabFromRGB(89f, 45f, 36f, 100f) }, + { "Thulian Pink", CIELabFromRGB(87f, 44f, 63f, 100f) }, + { "Tickle Me Pink", CIELabFromRGB(99f, 54f, 67f, 100f) }, + { "Tiffany Blue", CIELabFromRGB(4f, 73f, 71f, 100f) }, + { "Tiger's Eye", CIELabFromRGB(88f, 55f, 24f, 100f) }, + { "Timberwolf", CIELabFromRGB(86f, 84f, 82f, 100f) }, + { "Titanium Yellow", CIELabFromRGB(93f, 90f, 0f, 100f) }, + { "Tomato", CIELabFromRGB(100f, 39f, 28f, 100f) }, + { "Toolbox", CIELabFromRGB(45f, 42f, 75f, 100f) }, + { "Topaz", CIELabFromRGB(100f, 78f, 49f, 100f) }, + { "Tractor Red", CIELabFromRGB(99f, 5f, 21f, 100f) }, + { "Trolley Grey", CIELabFromRGB(50f, 50f, 50f, 100f) }, + { "Tropical Rain Forest", CIELabFromRGB(0f, 46f, 37f, 100f) }, + { "True Blue", CIELabFromRGB(0f, 45f, 81f, 100f) }, + { "Tufts Blue", CIELabFromRGB(25f, 49f, 76f, 100f) }, + { "Tulip", CIELabFromRGB(100f, 53f, 55f, 100f) }, + { "Tumbleweed", CIELabFromRGB(87f, 67f, 53f, 100f) }, + { "Turkish Rose", CIELabFromRGB(71f, 45f, 51f, 100f) }, + { "Turquoise", CIELabFromRGB(25f, 88f, 82f, 100f) }, + { "Turquoise Blue", CIELabFromRGB(0f, 100f, 94f, 100f) }, + { "Turquoise Green", CIELabFromRGB(63f, 84f, 71f, 100f) }, + { "Tuscan", CIELabFromRGB(98f, 84f, 65f, 100f) }, + { "Tuscan Brown", CIELabFromRGB(44f, 31f, 22f, 100f) }, + { "Tuscan Red", CIELabFromRGB(49f, 28f, 28f, 100f) }, + { "Tuscan Tan", CIELabFromRGB(65f, 48f, 36f, 100f) }, + { "Tuscany", CIELabFromRGB(75f, 60f, 60f, 100f) }, + { "Twilight Lavender", CIELabFromRGB(54f, 29f, 42f, 100f) }, + { "Tyrian Purple", CIELabFromRGB(40f, 1f, 24f, 100f) }, + { "UA Blue", CIELabFromRGB(0f, 20f, 67f, 100f) }, + { "UA Red", CIELabFromRGB(85f, 0f, 30f, 100f) }, + { "Ube", CIELabFromRGB(53f, 47f, 76f, 100f) }, + { "UCLA Blue", CIELabFromRGB(33f, 41f, 58f, 100f) }, + { "UCLA Gold", CIELabFromRGB(100f, 70f, 0f, 100f) }, + { "UFO Green", CIELabFromRGB(24f, 82f, 44f, 100f) }, + { "Ultramarine", CIELabFromRGB(7f, 4f, 56f, 100f) }, + { "Ultramarine Blue", CIELabFromRGB(25f, 40f, 96f, 100f) }, + { "Ultra Pink", CIELabFromRGB(100f, 44f, 100f, 100f) }, + { "Ultra Red", CIELabFromRGB(99f, 42f, 52f, 100f) }, + { "Umber", CIELabFromRGB(39f, 32f, 28f, 100f) }, + { "Unbleached Silk", CIELabFromRGB(100f, 87f, 79f, 100f) }, + { "United Nations Blue", CIELabFromRGB(36f, 57f, 90f, 100f) }, + { "University Of California Gold", CIELabFromRGB(72f, 53f, 15f, 100f) }, + { "Unmellow Yellow", CIELabFromRGB(100f, 100f, 40f, 100f) }, + { "UP Forest Green", CIELabFromRGB(0f, 27f, 13f, 100f) }, + { "UP Maroon", CIELabFromRGB(48f, 7f, 7f, 100f) }, + { "Upsdell Red", CIELabFromRGB(68f, 13f, 16f, 100f) }, + { "Urobilin", CIELabFromRGB(88f, 68f, 13f, 100f) }, + { "USAFA Blue", CIELabFromRGB(0f, 31f, 60f, 100f) }, + { "USC Cardinal", CIELabFromRGB(60f, 0f, 0f, 100f) }, + { "USC Gold", CIELabFromRGB(100f, 80f, 0f, 100f) }, + { "University Of Tennessee Orange", CIELabFromRGB(97f, 50f, 0f, 100f) }, + { "Utah Crimson", CIELabFromRGB(83f, 0f, 25f, 100f) }, + { "Vanilla", CIELabFromRGB(95f, 90f, 67f, 100f) }, + { "Vanilla Ice", CIELabFromRGB(95f, 56f, 66f, 100f) }, + { "Vegas Gold", CIELabFromRGB(77f, 70f, 35f, 100f) }, + { "Venetian Red", CIELabFromRGB(78f, 3f, 8f, 100f) }, + { "Verdigris", CIELabFromRGB(26f, 70f, 68f, 100f) }, + { "Vermilion", CIELabFromRGB(89f, 26f, 20f, 100f) }, + { "Vermilion 2", CIELabFromRGB(85f, 22f, 12f, 100f) }, + { "Veronica", CIELabFromRGB(63f, 13f, 94f, 100f) }, + { "Very Light Azure", CIELabFromRGB(45f, 73f, 98f, 100f) }, + { "Very Light Blue", CIELabFromRGB(40f, 40f, 100f, 100f) }, + { "Very Light Malachite Green", CIELabFromRGB(39f, 91f, 53f, 100f) }, + { "Very Light Tangelo", CIELabFromRGB(100f, 69f, 47f, 100f) }, + { "Very Pale Orange", CIELabFromRGB(100f, 87f, 75f, 100f) }, + { "Very Pale Yellow", CIELabFromRGB(100f, 100f, 75f, 100f) }, + { "Violet", CIELabFromRGB(56f, 0f, 100f, 100f) }, + { "Violet (Color Wheel)", CIELabFromRGB(50f, 0f, 100f, 100f) }, + { "Violet (RYB)", CIELabFromRGB(53f, 0f, 69f, 100f) }, + { "Violet (Web)", CIELabFromRGB(93f, 51f, 93f, 100f) }, + { "Violet-Blue", CIELabFromRGB(20f, 29f, 70f, 100f) }, + { "Violet-Red", CIELabFromRGB(97f, 33f, 58f, 100f) }, + { "Viridian", CIELabFromRGB(25f, 51f, 43f, 100f) }, + { "Viridian Green", CIELabFromRGB(0f, 59f, 60f, 100f) }, + { "Vista Blue", CIELabFromRGB(49f, 62f, 85f, 100f) }, + { "Vivid Amber", CIELabFromRGB(80f, 60f, 0f, 100f) }, + { "Vivid Auburn", CIELabFromRGB(57f, 15f, 14f, 100f) }, + { "Vivid Burgundy", CIELabFromRGB(62f, 11f, 21f, 100f) }, + { "Vivid Cerise", CIELabFromRGB(85f, 11f, 51f, 100f) }, + { "Vivid Cerulean", CIELabFromRGB(0f, 67f, 93f, 100f) }, + { "Vivid Crimson", CIELabFromRGB(80f, 0f, 20f, 100f) }, + { "Vivid Gamboge", CIELabFromRGB(100f, 60f, 0f, 100f) }, + { "Vivid Lime Green", CIELabFromRGB(65f, 84f, 3f, 100f) }, + { "Vivid Malachite", CIELabFromRGB(0f, 80f, 20f, 100f) }, + { "Vivid Mulberry", CIELabFromRGB(72f, 5f, 89f, 100f) }, + { "Vivid Orange", CIELabFromRGB(100f, 37f, 0f, 100f) }, + { "Vivid Orange Peel", CIELabFromRGB(100f, 63f, 0f, 100f) }, + { "Vivid Orchid", CIELabFromRGB(80f, 0f, 100f, 100f) }, + { "Vivid Raspberry", CIELabFromRGB(100f, 0f, 42f, 100f) }, + { "Vivid Red", CIELabFromRGB(97f, 5f, 10f, 100f) }, + { "Vivid Red-Tangelo", CIELabFromRGB(87f, 38f, 14f, 100f) }, + { "Vivid Sky Blue", CIELabFromRGB(0f, 80f, 100f, 100f) }, + { "Vivid Tangelo", CIELabFromRGB(94f, 45f, 15f, 100f) }, + { "Vivid Tangerine", CIELabFromRGB(100f, 63f, 54f, 100f) }, + { "Vivid Vermilion", CIELabFromRGB(90f, 38f, 14f, 100f) }, + { "Vivid Violet", CIELabFromRGB(62f, 0f, 100f, 100f) }, + { "Vivid Yellow", CIELabFromRGB(100f, 89f, 1f, 100f) }, + { "Warm Black", CIELabFromRGB(0f, 26f, 26f, 100f) }, + { "Waterspout", CIELabFromRGB(64f, 96f, 98f, 100f) }, + { "Wenge", CIELabFromRGB(39f, 33f, 32f, 100f) }, + { "Wheat", CIELabFromRGB(96f, 87f, 70f, 100f) }, + { "White", CIELabFromRGB(100f, 100f, 100f, 100f) }, + { "White Smoke", CIELabFromRGB(96f, 96f, 96f, 100f) }, + { "Wild Blue Yonder", CIELabFromRGB(64f, 68f, 82f, 100f) }, + { "Wild Orchid", CIELabFromRGB(83f, 44f, 64f, 100f) }, + { "Wild Strawberry", CIELabFromRGB(100f, 26f, 64f, 100f) }, + { "Wild Watermelon", CIELabFromRGB(99f, 42f, 52f, 100f) }, + { "Willpower Orange", CIELabFromRGB(99f, 35f, 0f, 100f) }, + { "Windsor Tan", CIELabFromRGB(65f, 33f, 1f, 100f) }, + { "Wine", CIELabFromRGB(45f, 18f, 22f, 100f) }, + { "Wine Dregs", CIELabFromRGB(40f, 19f, 28f, 100f) }, + { "Wisteria", CIELabFromRGB(79f, 63f, 86f, 100f) }, + { "Wood Brown", CIELabFromRGB(76f, 60f, 42f, 100f) }, + { "Xanadu", CIELabFromRGB(45f, 53f, 47f, 100f) }, + { "Yale Blue", CIELabFromRGB(6f, 30f, 57f, 100f) }, + { "Yankees Blue", CIELabFromRGB(11f, 16f, 25f, 100f) }, + { "Yellow", CIELabFromRGB(100f, 100f, 0f, 100f) }, + { "Yellow (Crayola)", CIELabFromRGB(99f, 91f, 51f, 100f) }, + { "Yellow (Munsell)", CIELabFromRGB(94f, 80f, 0f, 100f) }, + { "Yellow (NCS)", CIELabFromRGB(100f, 83f, 0f, 100f) }, + { "Yellow (Pantone)", CIELabFromRGB(100f, 87f, 0f, 100f) }, + { "Yellow (Process)", CIELabFromRGB(100f, 94f, 0f, 100f) }, + { "Yellow (RYB)", CIELabFromRGB(100f, 100f, 20f, 100f) }, + { "Yellow-Green", CIELabFromRGB(60f, 80f, 20f, 100f) }, + { "Yellow Orange", CIELabFromRGB(100f, 68f, 26f, 100f) }, + { "Yellow Rose", CIELabFromRGB(100f, 94f, 0f, 100f) }, + { "Zaffre", CIELabFromRGB(0f, 8f, 66f, 100f) }, + { "Zinnwaldite Brown", CIELabFromRGB(17f, 9f, 3f, 100f) }, + { "Zomp", CIELabFromRGB(22f, 65f, 56f, 100f) } + }; + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColorUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColorUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..07ff0880b69a0ca808766631c60ec96344858d59 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ColorUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98bb5d899143343ec8ccadebc268824c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Edge.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Edge.cs new file mode 100644 index 0000000000000000000000000000000000000000..3b5eed915f74bb76f4eaf77232eecf9df5f842e4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Edge.cs @@ -0,0 +1,187 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// An edge connecting two vertices. May point to an index in the vertices or the sharedIndexes array (local / common in ProBuilder terminology). + /// </summary> + [System.Serializable] + public struct Edge : System.IEquatable<Edge> + { + /// <value> + /// An index corresponding to a mesh vertex array. + /// </value> + public int a; + + /// <value> + /// An index corresponding to a mesh vertex array. + /// </value> + public int b; + + /// <value> + /// An empty edge is defined as -1, -1. + /// </value> + public static readonly Edge Empty = new Edge(-1, -1); + + /// <summary> + /// Create a new edge from two vertex indexes. + /// </summary> + /// <param name="a">An index corresponding to a mesh vertex array.</param> + /// <param name="b">An index corresponding to a mesh vertex array.</param> + public Edge(int a, int b) + { + this.a = a; + this.b = b; + } + + /// <summary> + /// Test if this edge points to valid vertex indexes. + /// </summary> + /// <returns>True if x and y are both greater than -1.</returns> + public bool IsValid() + { + return a > -1 && b > -1 && a != b; + } + + public override string ToString() + { + return "[" + a + ", " + b + "]"; + } + + public bool Equals(Edge other) + { + return (a == other.a && b == other.b) || (a == other.b && b == other.a); + } + + public override bool Equals(object obj) + { + return obj is Edge && Equals((Edge)obj); + } + + public override int GetHashCode() + { + // http://stackoverflow.com/questions/263400/what-is-the-best-algorithm-for-an-overridden-system-object-gethashcode/263416#263416 + int hash = 27; + + unchecked + { + hash = hash * 29 + (a < b ? a : b); + hash = hash * 29 + (a < b ? b : a); + } + + return hash; + } + + public static Edge operator+(Edge a, Edge b) + { + return new Edge(a.a + b.a, a.b + b.b); + } + + public static Edge operator-(Edge a, Edge b) + { + return new Edge(a.a - b.a, a.b - b.b); + } + + public static Edge operator+(Edge a, int b) + { + return new Edge(a.a + b, a.b + b); + } + + public static Edge operator-(Edge a, int b) + { + return new Edge(a.a - b, a.b - b); + } + + public static bool operator==(Edge a, Edge b) + { + return a.Equals(b); + } + + public static bool operator!=(Edge a, Edge b) + { + return !(a == b); + } + + /// <summary> + /// Add two edges index values. + /// </summary> + /// <example> + /// {0, 1} + {4, 5} = {5, 6} + /// </example> + /// <param name="a">Left edge parameter.</param> + /// <param name="b">Right edge parameter.</param> + /// <returns>The sum of a + b.</returns> + public static Edge Add(Edge a, Edge b) + { + return a + b; + } + + /// <summary> + /// Subtract edge b from a. + /// </summary> + /// <example> + /// Subtract( {7, 10}, {4, 5} ) = {3, 5} + /// </example> + /// <param name="a">The edge to subtract from.</param> + /// <param name="b">The value to subtract.</param> + /// <returns>The sum of a - b.</returns> + public static Edge Subtract(Edge a, Edge b) + { + return a - b; + } + + /// <summary> + /// Compares edges and takes shared triangles into account. + /// </summary> + /// <param name="other">The edge to compare against.</param> + /// <param name="lookup">A common vertex indexes lookup dictionary. See pb_IntArray for more information.</param> + /// <remarks>Generally you just pass ProBuilderMesh.sharedIndexes.ToDictionary() to lookup, but it's more efficient to do it once and reuse that dictionary if possible.</remarks> + /// <returns>True if edges are perceptually equal (that is, they point to the same common indexes).</returns> + public bool Equals(Edge other, Dictionary<int, int> lookup) + { + if (lookup == null) + return Equals(other); + int x0 = lookup[a], y0 = lookup[b], x1 = lookup[other.a], y1 = lookup[other.b]; + return (x0 == x1 && y0 == y1) || (x0 == y1 && y0 == x1); + } + + /// <summary> + /// Does this edge contain an index? + /// </summary> + /// <param name="index">The index to compare against x and y.</param> + /// <returns>True if x or y is equal to a. False if not.</returns> + public bool Contains(int index) + { + return (a == index || b == index); + } + + /// <summary> + /// Does this edge have any matching index to edge b? + /// </summary> + /// <param name="other">The edge to compare against.</param> + /// <returns>True if x or y matches either b.x or b.y.</returns> + public bool Contains(Edge other) + { + return (a == other.a || b == other.a || a == other.b || b == other.a); + } + + internal bool Contains(int index, Dictionary<int, int> lookup) + { + var common = lookup[index]; + return lookup[a] == common || lookup[b] == common; + } + + internal static void GetIndices(IEnumerable<Edge> edges, List<int> indices) + { + indices.Clear(); + + foreach (var edge in edges) + { + indices.Add(edge.a); + indices.Add(edge.b); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Edge.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Edge.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..43a93ac2f265ef5597d2daf24095f340cd44c1eb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Edge.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 563a1db348c114475a2d8289cc3e5a84 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EdgeLookup.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EdgeLookup.cs new file mode 100644 index 0000000000000000000000000000000000000000..58c9292611378011d6315fea434c50a6e0f5b14b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EdgeLookup.cs @@ -0,0 +1,133 @@ +using System; +using System.Linq; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// An edge composed of both the local index and common index. + /// <br /> + /// <br /> + /// This is useful when comparing vertex indexes that are coincident. Coincident vertices are defined as vertices that are share the same coordinate space, but are separate values in the vertex array. ProBuilder tracks these coincident values in the @"UnityEngine.ProBuilder.ProBuilderMesh.sharedIndexes" array. A "common" (also called "shared") index is the index of a vertex in the sharedIndexes array. + /// </summary> + /// <seealso cref="P:UnityEngine.ProBuilder.ProBuilderMesh.sharedIndexes" /> + /// <seealso cref="T:UnityEngine.ProBuilder.Edge" /> + public struct EdgeLookup : IEquatable<EdgeLookup> + { + Edge m_Local; + Edge m_Common; + + /// <value> + /// Local edges point to an index in the vertices array. + /// </value> + public Edge local + { + get { return m_Local; } + set { m_Local = value; } + } + + /// <value> + /// Commmon edges point to the vertex index in the sharedIndexes array. + /// </value> + public Edge common + { + get { return m_Common; } + set { m_Common = value; } + } + + /// <summary> + /// Create an edge lookup from a common and local edge. + /// </summary> + /// <param name="common">An edge composed of common indexes (corresponds to @"UnityEngine.ProBuilder.ProBuilderMesh.sharedIndexes").</param> + /// <param name="local">An edge composed of vertex indexes (corresponds to mesh vertex arrays).</param> + public EdgeLookup(Edge common, Edge local) + { + m_Common = common; + m_Local = local; + } + + /// <summary> + /// Create an edge lookup from common and local edges. + /// </summary> + /// <param name="cx">Common edge x.</param> + /// <param name="cy">Common edge y.</param> + /// <param name="x">Local edge x.</param> + /// <param name="y">Local edge y.</param> + public EdgeLookup(int cx, int cy, int x, int y) + { + m_Common = new Edge(cx, cy); + m_Local = new Edge(x, y); + } + + /// <summary> + /// Compares each EdgeLookup common edge (does not take into account local edge differences). + /// </summary> + /// <param name="other">The EdgeLookup to compare against.</param> + /// <returns>True if the common edges are equal, false if not.</returns> + public bool Equals(EdgeLookup other) + { + return other.common.Equals(common); + } + + /// <summary> + /// Compares each EdgeLookup common edge (does not take into account local edge differences). + /// </summary> + /// <param name="obj">The EdgeLookup to compare against. False if obj is not an EdgeLookup type.</param> + /// <returns>True if the common edges are equal, false if not.</returns> + public override bool Equals(object obj) + { + return !ReferenceEquals(obj, null) && Equals((EdgeLookup)obj); + } + + public override int GetHashCode() + { + return common.GetHashCode(); + } + + public static bool operator==(EdgeLookup a, EdgeLookup b) + { + return Equals(a, b); + } + + public static bool operator!=(EdgeLookup a, EdgeLookup b) + { + return !Equals(a, b); + } + + /// <summary> + /// Returns a string representation of the common edge property. + /// </summary> + /// <returns></returns> + public override string ToString() + { + return string.Format("Common: ({0}, {1}), local: ({2}, {3})", common.a, common.b, local.a, local.b); + } + + /// <summary> + /// Create a list of EdgeLookup edges from a set of local edges and a sharedIndexes dictionary. + /// </summary> + /// <param name="edges">A collection of local edges.</param> + /// <param name="lookup">A shared index lookup dictionary (see ProBuilderMesh.sharedIndexes).</param> + /// <returns>A set of EdgeLookup edges.</returns> + public static IEnumerable<EdgeLookup> GetEdgeLookup(IEnumerable<Edge> edges, Dictionary<int, int> lookup) + { + return edges.Select(x => new EdgeLookup(new Edge(lookup[x.a], lookup[x.b]), x)); + } + + /// <summary> + /// Create a hashset of edge lookup values from a collection of local edges and a shared indexes lookup. + /// </summary> + /// <param name="edges">A collection of local edges.</param> + /// <param name="lookup">A shared index lookup dictionary (see ProBuilderMesh.sharedIndexes).</param> + /// <returns>A HashSet of EdgeLookup edges. EdgeLookup values are compared by their common property only - local edges are not compared.</returns> + public static HashSet<EdgeLookup> GetEdgeLookupHashSet(IEnumerable<Edge> edges, Dictionary<int, int> lookup) + { + if (lookup == null || edges == null) + return null; + var hash = new HashSet<EdgeLookup>(); + foreach (var local in edges) + hash.Add(new EdgeLookup(new Edge(lookup[local.a], lookup[local.b]), local)); + return hash; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EdgeLookup.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EdgeLookup.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..692a28216e006f3856fe458ef7a7dfa22dd4e14f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EdgeLookup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71908286421424641b33861431bc9b9d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EdgeUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EdgeUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..2b77b68fecc892927878608aa1cffe5b655771d8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EdgeUtility.cs @@ -0,0 +1,154 @@ +using System.Linq; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Utilities for working with pb_Edge. + /// </summary> + static class EdgeUtility + { + /// <summary> + /// Returns new edges where each edge is composed not of vertex indexes, but rather the index in ProBuilderMesh.sharedIndexes of each vertex. + /// </summary> + /// <param name="mesh"></param> + /// <param name="edges"></param> + /// <returns></returns> + public static IEnumerable<Edge> GetSharedVertexHandleEdges(this ProBuilderMesh mesh, IEnumerable<Edge> edges) + { + return edges.Select(x => GetSharedVertexHandleEdge(mesh, x)); + } + + public static Edge GetSharedVertexHandleEdge(this ProBuilderMesh mesh, Edge edge) + { + return new Edge(mesh.sharedVertexLookup[edge.a], mesh.sharedVertexLookup[edge.b]); + } + + /// <summary> + /// Converts a universal edge to local. Does *not* guarantee that edges will be valid (indexes belong to the same face and edge). + /// </summary> + /// <param name="mesh"></param> + /// <param name="edge"></param> + /// <returns></returns> + internal static Edge GetEdgeWithSharedVertexHandles(this ProBuilderMesh mesh, Edge edge) + { + return new Edge(mesh.sharedVerticesInternal[edge.a][0], mesh.sharedVerticesInternal[edge.b][0]); + } + + /// <summary> + /// Given a local edge, this guarantees that both indexes belong to the same face. + /// Note that this will only return the first valid edge found - there will usually + /// be multiple matches (well, 2 if your geometry is sane). + /// </summary> + /// <param name="mesh"></param> + /// <param name="edge"></param> + /// <param name="validEdge"></param> + /// <returns></returns> + public static bool ValidateEdge(ProBuilderMesh mesh, Edge edge, out SimpleTuple<Face, Edge> validEdge) + { + Face[] faces = mesh.facesInternal; + SharedVertex[] sharedIndexes = mesh.sharedVerticesInternal; + + Edge universal = GetSharedVertexHandleEdge(mesh, edge); + + for (int i = 0; i < faces.Length; i++) + { + int dist_x = -1, + dist_y = -1, + shared_x = -1, + shared_y = -1; + + if (faces[i].distinctIndexesInternal.ContainsMatch(sharedIndexes[universal.a].arrayInternal, out dist_x, out shared_x) && + faces[i].distinctIndexesInternal.ContainsMatch(sharedIndexes[universal.b].arrayInternal, out dist_y, out shared_y)) + { + int x = faces[i].distinctIndexesInternal[dist_x]; + int y = faces[i].distinctIndexesInternal[dist_y]; + + validEdge = new SimpleTuple<Face, Edge>(faces[i], new Edge(x, y)); + return true; + } + } + + validEdge = new SimpleTuple<Face, Edge>(); + + return false; + } + + /// <summary> + /// Fast contains. Doesn't account for shared indexes + /// </summary> + internal static bool Contains(this Edge[] edges, Edge edge) + { + for (int i = 0; i < edges.Length; i++) + { + if (edges[i].Equals(edge)) + return true; + } + + return false; + } + + /// <summary> + /// Fast contains. Doesn't account for shared indexes + /// </summary> + /// <param name="edges"></param> + /// <param name="x"></param> + /// <param name="y"></param> + /// <returns></returns> + internal static bool Contains(this Edge[] edges, int x, int y) + { + for (int i = 0; i < edges.Length; i++) + { + if ((x == edges[i].a && y == edges[i].b) || (x == edges[i].b && y == edges[i].a)) + return true; + } + + return false; + } + + internal static int IndexOf(this ProBuilderMesh mesh, IList<Edge> edges, Edge edge) + { + for (int i = 0; i < edges.Count; i++) + { + if (edges[i].Equals(edge, mesh.sharedVertexLookup)) + return i; + } + + return -1; + } + + internal static int[] AllTriangles(this Edge[] edges) + { + int[] arr = new int[edges.Length * 2]; + int n = 0; + + for (int i = 0; i < edges.Length; i++) + { + arr[n++] = edges[i].a; + arr[n++] = edges[i].b; + } + return arr; + } + + internal static Face GetFace(this ProBuilderMesh mesh, Edge edge) + { + Face res = null; + + foreach (var face in mesh.facesInternal) + { + var edges = face.edgesInternal; + + for (int i = 0, c = edges.Length; i < c; i++) + { + if (edge.Equals(edges[i])) + return face; + + if (edges.Contains(edges[i])) + res = face; + } + } + + return res; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EdgeUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EdgeUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5ce276fe69efa485b3ba0e0a643a43e686a9d1a2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EdgeUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1da3e972186d944ca81f7581615c650d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Entity.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Entity.cs new file mode 100644 index 0000000000000000000000000000000000000000..1a11d465f4db985e070a15bac48a34f86f3dba2e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Entity.cs @@ -0,0 +1,56 @@ +using UnityEngine; +using UnityEngine.Serialization; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Provides some additional functionality to GameObjects, like managing visiblity and colliders. + /// </summary> + [DisallowMultipleComponent] + [AddComponentMenu("")] + sealed class Entity : MonoBehaviour + { + public EntityType entityType { get { return m_EntityType; } } + + [SerializeField] + [HideInInspector] + [FormerlySerializedAs("_entityType")] + EntityType m_EntityType; + + /// <summary> + /// Performs Entity specific initialization tasks (turn off renderer for nodraw faces, hide colliders, etc) + /// </summary> + public void Awake() + { + MeshRenderer mr = GetComponent<MeshRenderer>(); + + if (!mr) return; + + switch (entityType) + { + case EntityType.Occluder: + break; + + case EntityType.Detail: + break; + + case EntityType.Trigger: + mr.enabled = false; + break; + + case EntityType.Collider: + mr.enabled = false; + break; + } + } + + /// <summary> + /// Set the entity type. + /// </summary> + /// <param name="t"></param> + public void SetEntity(EntityType t) + { + m_EntityType = t; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Entity.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Entity.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ba3f080dfe26a1402ea5f5480376eabe962aeb86 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Entity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 69fbd00be8d904b3da640e502905c345 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EntityBehaviour.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EntityBehaviour.cs new file mode 100644 index 0000000000000000000000000000000000000000..b70f27704f31220c801a11208a698bc5dd975813 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EntityBehaviour.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace UnityEngine.ProBuilder +{ + abstract class EntityBehaviour : MonoBehaviour + { + [Tooltip("Allow ProBuilder to automatically hide and show this object when entering or exiting play mode.")] + public bool manageVisibility = true; + + public abstract void Initialize(); + + public abstract void OnEnterPlayMode(); + + public abstract void OnSceneLoaded(Scene scene, LoadSceneMode mode); + + protected void SetMaterial(Material material) + { + if (GetComponent<Renderer>()) + GetComponent<Renderer>().sharedMaterial = material; + else + gameObject.AddComponent<MeshRenderer>().sharedMaterial = material; + } + + // Not necessary because OnEnterPlayMode is operating on an instance of the scene, not the actual scene +// public abstract void OnExitPlayMode(); + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EntityBehaviour.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EntityBehaviour.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e775c87fafa4f2e692323d3932e2349f3fde3162 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/EntityBehaviour.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd4d30ee1f2db48c6be97ed8d2fc9da4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Face.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Face.cs new file mode 100644 index 0000000000000000000000000000000000000000..8b20012d79ca5375d9ed349adfbf0e01658b709c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Face.cs @@ -0,0 +1,499 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.Serialization; +using System.Collections.ObjectModel; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// A face is composed of a set of triangles, and a material. + /// <br /> + /// Triangle indexes may point to the same vertex index as long as the vertices are unique to the face. Ie, every vertex that a face references should only be used by that face's indices. To associate vertices that share common attributes (usually position), use the @"UnityEngine.ProBuilder.ProBuilderMesh.sharedIndexes" property. + /// <br /> + /// ProBuilder automatically manages condensing common vertices in the EditorMeshUtility.Optimize function. + /// </summary> + [Serializable] + public sealed class Face + { + [FormerlySerializedAs("_indices")] + [SerializeField] + int[] m_Indexes; + + /// <summary> + /// Adjacent faces sharing this smoothingGroup will have their abutting edge normals averaged. + /// </summary> + [SerializeField] + [FormerlySerializedAs("_smoothingGroup")] + int m_SmoothingGroup; + + /// <summary> + /// If manualUV is false, these parameters determine how this face's vertices are projected to 2d space. + /// </summary> + [SerializeField] + [FormerlySerializedAs("_uv")] + AutoUnwrapSettings m_Uv; + + /// <summary> + /// What material does this face use. + /// </summary> + [SerializeField] + [FormerlySerializedAs("_mat")] + Material m_Material; + + [SerializeField] + int m_SubmeshIndex; + + + [SerializeField] + [FormerlySerializedAs("manualUV")] + bool m_ManualUV; + + /// <value> + /// If this face has had it's UV coordinates done by hand, don't update them with the auto unwrap crowd. + /// </value> + public bool manualUV + { + get { return m_ManualUV; } + set { m_ManualUV = value; } + } + + /// <value> + /// UV element group. Used by the UV editor to group faces. + /// </value> + [SerializeField] + internal int elementGroup; + + + [SerializeField] + int m_TextureGroup; + + /// <value> + /// What texture group this face belongs to. Used when projecting auto UVs. + /// </value> + public int textureGroup + { + get { return m_TextureGroup;} + set { m_TextureGroup = value; } + } + + /// <value> + /// Return a reference to the triangle indexes that make up this face. + /// </value> + internal int[] indexesInternal + { + get { return m_Indexes; } + set + { + if (m_Indexes == null) + throw new ArgumentNullException("value"); + if (m_Indexes.Length % 3 != 0) + throw new ArgumentException("Face indexes must be a multiple of 3."); + m_Indexes = value; + InvalidateCache(); + } + } + + /// <value> + /// The triangle indexes that make up this face. + /// </value> + public ReadOnlyCollection<int> indexes + { + get { return new ReadOnlyCollection<int>(m_Indexes); } + } + + /// <summary> + /// Set the triangles that compose this face. + /// </summary> + /// <param name="indices">The new triangle array.</param> + public void SetIndexes(IEnumerable<int> indices) + { + if (indices == null) + throw new ArgumentNullException("indices"); + var array = indices.ToArray(); + int len = array.Length; + if (len % 3 != 0) + throw new ArgumentException("Face indexes must be a multiple of 3."); + m_Indexes = array; + InvalidateCache(); + } + + [NonSerialized] + int[] m_DistinctIndexes; + + [NonSerialized] + Edge[] m_Edges; + + /// <value> + /// Returns a reference to the cached distinct indexes (each vertex index is only referenced once in m_DistinctIndexes). + /// </value> + internal int[] distinctIndexesInternal + { + get { return m_DistinctIndexes == null ? CacheDistinctIndexes() : m_DistinctIndexes; } + } + + /// <value> + /// A collection of the vertex indexes that the indexes array references, made distinct. + /// </value> + public ReadOnlyCollection<int> distinctIndexes + { + get { return new ReadOnlyCollection<int>(distinctIndexesInternal); } + } + + internal Edge[] edgesInternal + { + get { return m_Edges == null ? CacheEdges() : m_Edges; } + } + + /// <value> + /// Get the perimeter edges that commpose this face. + /// </value> + public ReadOnlyCollection<Edge> edges + { + get { return new ReadOnlyCollection<Edge>(edgesInternal); } + } + + /// <value> + /// What smoothing group this face belongs to, if any. This is used to calculate vertex normals. + /// </value> + public int smoothingGroup + { + get { return m_SmoothingGroup; } + set { m_SmoothingGroup = value; } + } + + /// <value> + /// Get the material that face uses. + /// </value> + [Obsolete("Face.material is deprecated. Please use submeshIndex instead.")] + public Material material + { + get { return m_Material; } + set { m_Material = value; } + } + + public int submeshIndex + { + get { return m_SubmeshIndex; } + set { m_SubmeshIndex = value; } + } + + /// <value> + /// A reference to the Auto UV mapping parameters. + /// </value> + public AutoUnwrapSettings uv + { + get { return m_Uv; } + set { m_Uv = value; } + } + + /// <summary> + /// Accesses the indexes array. + /// </summary> + /// <param name="i"></param> + public int this[int i] + { + get { return indexesInternal[i]; } + } + + /// <summary> + /// Default constructor creates a face with an empty triangles array. + /// </summary> + public Face() + { + m_SubmeshIndex = 0; + } + + /// <summary> + /// Initialize a Face with a set of triangles and default values. + /// </summary> + /// <param name="indices">The new triangles array.</param> + public Face(IEnumerable<int> indices) + { + SetIndexes(indices); + m_Uv = AutoUnwrapSettings.tile; + m_Material = BuiltinMaterials.defaultMaterial; + m_SmoothingGroup = Smoothing.smoothingGroupNone; + m_SubmeshIndex = 0; + textureGroup = -1; + elementGroup = 0; + } + + [Obsolete("Face.material is deprecated. Please use \"submeshIndex\" instead.")] + internal Face(int[] triangles, Material m, AutoUnwrapSettings u, int smoothing, int texture, int element, bool manualUVs) + { + SetIndexes(triangles); + m_Uv = new AutoUnwrapSettings(u); + m_Material = m; + m_SmoothingGroup = smoothing; + textureGroup = texture; + elementGroup = element; + manualUV = manualUVs; + m_SubmeshIndex = 0; + } + + internal Face(IEnumerable<int> triangles, int submeshIndex, AutoUnwrapSettings u, int smoothing, int texture, int element, bool manualUVs) + { + SetIndexes(triangles); + m_Uv = new AutoUnwrapSettings(u); + m_SmoothingGroup = smoothing; + textureGroup = texture; + elementGroup = element; + manualUV = manualUVs; + m_SubmeshIndex = submeshIndex; + } + + /// <summary> + /// Deep copy constructor. + /// </summary> + /// <param name="other">The Face from which to copy properties.</param> + public Face(Face other) + { + CopyFrom(other); + } + + /// <summary> + /// Copies values from other to this face. + /// </summary> + /// <param name="other">The Face from which to copy properties.</param> + public void CopyFrom(Face other) + { + if (other == null) + throw new ArgumentNullException("other"); + + int len = other.indexesInternal.Length; + m_Indexes = new int[len]; + Array.Copy(other.indexesInternal, m_Indexes, len); + + m_SmoothingGroup = other.smoothingGroup; + m_Uv = new AutoUnwrapSettings(other.uv); +#pragma warning disable 618 + m_Material = other.material; +#pragma warning restore 618 + manualUV = other.manualUV; + m_TextureGroup = other.textureGroup; + elementGroup = other.elementGroup; + m_SubmeshIndex = other.m_SubmeshIndex; + InvalidateCache(); + } + + internal void InvalidateCache() + { + m_Edges = null; + m_DistinctIndexes = null; + } + + Edge[] CacheEdges() + { + if (m_Indexes == null) + return null; + + HashSet<Edge> dist = new HashSet<Edge>(); + List<Edge> dup = new List<Edge>(); + + for (int i = 0; i < indexesInternal.Length; i += 3) + { + Edge a = new Edge(indexesInternal[i + 0], indexesInternal[i + 1]); + Edge b = new Edge(indexesInternal[i + 1], indexesInternal[i + 2]); + Edge c = new Edge(indexesInternal[i + 2], indexesInternal[i + 0]); + + if (!dist.Add(a)) dup.Add(a); + if (!dist.Add(b)) dup.Add(b); + if (!dist.Add(c)) dup.Add(c); + } + + dist.ExceptWith(dup); + m_Edges = dist.ToArray(); + return m_Edges; + } + + int[] CacheDistinctIndexes() + { + if (m_Indexes == null) + return null; + m_DistinctIndexes = m_Indexes.Distinct().ToArray(); + return distinctIndexesInternal; + } + + /// <summary> + /// Test if a triangle is contained within the triangles array of this face. + /// </summary> + /// <param name="a"></param> + /// <param name="b"></param> + /// <param name="c"></param> + /// <returns></returns> + public bool Contains(int a, int b, int c) + { + for (int i = 0, cnt = indexesInternal.Length; i < cnt; i += 3) + { + if (a == indexesInternal[i + 0] + && b == indexesInternal[i + 1] + && c == indexesInternal[i + 2]) + return true; + } + + return false; + } + + /// <summary> + /// Is this face representable as quad? + /// </summary> + /// <returns></returns> + public bool IsQuad() + { + return edgesInternal != null && edgesInternal.Length == 4; + } + + /// <summary> + /// Convert a 2 triangle face to a quad representation. + /// </summary> + /// <returns>A quad (4 indexes), or null if indexes are not able to be represented as a quad.</returns> + public int[] ToQuad() + { + if (!IsQuad()) + throw new InvalidOperationException("Face is not representable as a quad. Use Face.IsQuad to check for validity."); + + int[] quad = new int[4] { edgesInternal[0].a, edgesInternal[0].b, -1, -1 }; + + if (edgesInternal[1].a == quad[1]) + quad[2] = edgesInternal[1].b; + else if (edgesInternal[2].a == quad[1]) + quad[2] = edgesInternal[2].b; + else if (edgesInternal[3].a == quad[1]) + quad[2] = edgesInternal[3].b; + + if (edgesInternal[1].a == quad[2]) + quad[3] = edgesInternal[1].b; + else if (edgesInternal[2].a == quad[2]) + quad[3] = edgesInternal[2].b; + else if (edgesInternal[3].a == quad[2]) + quad[3] = edgesInternal[3].b; + + return quad; + } + + public override string ToString() + { + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + for (int i = 0; i < indexesInternal.Length; i += 3) + { + sb.Append("["); + sb.Append(indexesInternal[i]); + sb.Append(", "); + sb.Append(indexesInternal[i + 1]); + sb.Append(", "); + sb.Append(indexesInternal[i + 2]); + sb.Append("]"); + + if (i < indexesInternal.Length - 3) + sb.Append(", "); + } + + return sb.ToString(); + } + + /// <summary> + /// Add offset to each value in the indexes array. + /// </summary> + /// <param name="offset">The value to add to each index.</param> + public void ShiftIndexes(int offset) + { + for (int i = 0, c = m_Indexes.Length; i < c; i++) + m_Indexes[i] += offset; + + InvalidateCache(); + } + + /// <summary> + /// Find the smallest value in the triangles array. + /// </summary> + /// <returns>The smallest value in the indexes array.</returns> + int SmallestIndexValue() + { + int smallest = m_Indexes[0]; + + for (int i = 1; i < m_Indexes.Length; i++) + { + if (m_Indexes[i] < smallest) + smallest = m_Indexes[i]; + } + + return smallest; + } + + /// <summary> + /// Finds the smallest value in the indexes array, then offsets by subtracting that value from each index. + /// </summary> + /// <example> + /// ``` + /// // sets the indexes array to `{0, 1, 2}`. + /// new Face(3,4,5).ShiftIndexesToZero(); + /// ``` + /// </example> + public void ShiftIndexesToZero() + { + int offset = SmallestIndexValue(); + + for (int i = 0; i < m_Indexes.Length; i++) + m_Indexes[i] -= offset; + + InvalidateCache(); + } + + /// <summary> + /// Reverse the order of the triangle array. This has the effect of reversing the direction that this face renders. + /// </summary> + public void Reverse() + { + Array.Reverse(m_Indexes); + InvalidateCache(); + } + + internal static void GetIndices(IEnumerable<Face> faces, List<int> indices) + { + indices.Clear(); + + foreach (var face in faces) + { + for (int i = 0, c = face.indexesInternal.Length; i < c; ++i) + indices.Add(face.indexesInternal[i]); + } + } + + internal static void GetDistinctIndices(IEnumerable<Face> faces, List<int> indices) + { + indices.Clear(); + + foreach (var face in faces) + { + for (int i = 0, c = face.distinctIndexesInternal.Length; i < c; ++i) + indices.Add(face.distinctIndexesInternal[i]); + } + } + + /// <summary> + /// Advance to the next connected edge given a source edge and the index connect. + /// </summary> + internal bool TryGetNextEdge(Edge source, int index, ref Edge nextEdge, ref int nextIndex) + { + for (int i = 0, c = edgesInternal.Length; i < c; i++) + { + if (edgesInternal[i] == source) + continue; + + nextEdge = edgesInternal[i]; + + if (nextEdge.Contains(index)) + { + nextIndex = nextEdge.a == index ? nextEdge.b : nextEdge.a; + return true; + } + } + + return false; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Face.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Face.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..0d5b2c4e76a0bd61c5bff432fd75d2ab5a100986 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Face.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd0eb60dd72b74385a28317c44ac6377 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/FaceRebuildData.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/FaceRebuildData.cs new file mode 100644 index 0000000000000000000000000000000000000000..c892a05b6a1c477d6c1c27911c271e92c8e6b77d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/FaceRebuildData.cs @@ -0,0 +1,110 @@ +using System; +using UnityEngine; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Information required to append a face to a pb_Object. + /// </summary> + sealed class FaceRebuildData + { +#pragma warning disable 0649 + // new pb_Face + public Face face; + // new vertices (all vertices required to rebuild, not just new) + public List<Vertex> vertices; + // shared indexes pointers (must match vertices length) + public List<int> sharedIndexes; + // shared UV indexes pointers (must match vertices length) + public List<int> sharedIndexesUV; + // The offset applied to this face via Apply() call. + private int _appliedOffset = 0; +#pragma warning restore 0649 + + /** + * If this face has been applied to a pb_Object via Apply() this returns the index offset applied. + */ + public int Offset() + { + return _appliedOffset; + } + + public override string ToString() + { + return string.Format("{0}\n{1}", vertices.ToString(", "), sharedIndexes.ToString(", ")); + } + + public static void Apply( + IEnumerable<FaceRebuildData> newFaces, + ProBuilderMesh mesh, + List<Vertex> vertices = null, + List<Face> faces = null) + { + if (faces == null) + faces = new List<Face>(mesh.facesInternal); + + if (vertices == null) + vertices = new List<Vertex>(mesh.GetVertices()); + + var lookup = mesh.sharedVertexLookup; + var lookupUV = mesh.sharedTextureLookup; + + Apply(newFaces, vertices, faces, lookup, lookupUV); + + mesh.SetVertices(vertices); + mesh.faces = faces; + mesh.SetSharedVertices(lookup); + mesh.SetSharedTextures(lookupUV); + } + + /// <summary> + /// Shift face rebuild data to appropriate positions and update the vertex, face, and shared indexes arrays. + /// </summary> + /// <param name="newFaces"></param> + /// <param name="vertices"></param> + /// <param name="faces"></param> + /// <param name="sharedVertexLookup"></param> + /// <param name="sharedTextureLookup"></param> + public static void Apply( + IEnumerable<FaceRebuildData> newFaces, + List<Vertex> vertices, + List<Face> faces, + Dictionary<int, int> sharedVertexLookup, + Dictionary<int, int> sharedTextureLookup = null) + { + int index = vertices.Count; + + foreach (FaceRebuildData rd in newFaces) + { + Face face = rd.face; + int faceVertexCount = rd.vertices.Count; + + bool hasSharedIndexes = sharedVertexLookup != null && rd.sharedIndexes != null && rd.sharedIndexes.Count == faceVertexCount; + bool hasSharedIndexesUV = sharedTextureLookup != null && rd.sharedIndexesUV != null && rd.sharedIndexesUV.Count == faceVertexCount; + + for (int n = 0; n < faceVertexCount; n++) + { + int localIndex = n; + + if (sharedVertexLookup != null) + sharedVertexLookup.Add(localIndex + index, hasSharedIndexes ? rd.sharedIndexes[localIndex] : -1); + + if (sharedTextureLookup != null && hasSharedIndexesUV) + sharedTextureLookup.Add(localIndex + index, rd.sharedIndexesUV[localIndex]); + } + + rd._appliedOffset = index; + int[] faceIndexes = face.indexesInternal; + + for (int n = 0, c = faceIndexes.Length; n < c; n++) + faceIndexes[n] += index; + + index += rd.vertices.Count; + face.indexesInternal = faceIndexes; + faces.Add(face); + vertices.AddRange(rd.vertices); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/FaceRebuildData.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/FaceRebuildData.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d03daf0f7b7f0cc70a5122eb6371520bc1b1618d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/FaceRebuildData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dfce99e9d622b416d8522fc504aa4459 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleConstraint2D.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleConstraint2D.cs new file mode 100644 index 0000000000000000000000000000000000000000..a3888003e7d53fac83faf271a55f04b210cb74ac --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleConstraint2D.cs @@ -0,0 +1,65 @@ +using UnityEngine; +using System.Collections; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// A class for storing and applying Vector2 masks. + /// </summary> + sealed class HandleConstraint2D + { + public int x, y; + + public HandleConstraint2D(int x, int y) + { + this.x = x; + this.y = y; + } + + public HandleConstraint2D Inverse() + { + return new HandleConstraint2D(x == 1 ? 0 : 1, y == 1 ? 0 : 1); + } + + public Vector2 Mask(Vector2 v) + { + v.x *= this.x; + v.y *= this.y; + return v; + } + + public Vector2 InverseMask(Vector2 v) + { + v.x *= this.x == 1 ? 0f : 1f; + v.y *= this.y == 1 ? 0f : 1f; + return v; + } + + public static readonly HandleConstraint2D None = new HandleConstraint2D(1, 1); + + public static bool operator==(HandleConstraint2D a, HandleConstraint2D b) + { + return a.x == b.x && a.y == b.y; + } + + public static bool operator!=(HandleConstraint2D a, HandleConstraint2D b) + { + return a.x != b.x || a.y != b.y; + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + public override bool Equals(object o) + { + return o is HandleConstraint2D && ((HandleConstraint2D)o).x == this.x && ((HandleConstraint2D)o).y == this.y; + } + + public override string ToString() + { + return "(" + x + ", " + y + ")"; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleConstraint2D.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleConstraint2D.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3ea471f09d5154a0cbec20604c336685d36f961b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleConstraint2D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a88380604e5234adaa98158c5e10950c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleOrientation.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleOrientation.cs new file mode 100644 index 0000000000000000000000000000000000000000..1e8bbad2f95e7658e8ccc5d517e3f89b7cfa1b3d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleOrientation.cs @@ -0,0 +1,32 @@ +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// How the handle gizmo is oriented with regards to the current element selection. + /// </summary> + /// <remarks> + /// This overrides the Unity Pivot / Global setting when editing vertices, faces, or edges. + /// </remarks> + /// <remarks>Editor only.</remarks> + public enum HandleOrientation + { + /// <summary> + /// The gizmo is aligned to identity in world space. + /// </summary> + World = 0, + + /// <summary> + /// The gizmo is aligned relative to the active mesh transform. Also called coordinate or model space. + /// </summary> + ActiveObject = 1, + + /// <summary> + /// The gizmo is aligned relative to the currently selected face. When editing vertices or edges, this falls back to <see cref="ActiveObject"/> alignment. + /// </summary> + ActiveElement = 2, + +// /// <summary> +// /// The transform gizmo is user-set. +// /// </summary> +// Custom = 3 + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleOrientation.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleOrientation.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d1b2d7155e9665d6c5e4b0cfae5271e8664a6e6b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleOrientation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e52c205e35f30d4c81ff62d3f94e234 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..61bed49b2ec997bfb7afc0e0c73744e5adc58545 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleUtility.cs @@ -0,0 +1,575 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Static methods for working with ProBuilderMesh objects in an editor. + /// </summary> + public static class HandleUtility + { + /// <summary> + /// Convert a screen point (0,0 bottom left, in pixels) to a GUI point (0,0 top left, in points). + /// </summary> + /// <param name="camera"></param> + /// <param name="point"></param> + /// <param name="pixelsPerPoint"></param> + /// <returns></returns> + internal static Vector3 ScreenToGuiPoint(this Camera camera, Vector3 point, float pixelsPerPoint) + { + return new Vector3(point.x / pixelsPerPoint, (camera.pixelHeight - point.y) / pixelsPerPoint, point.z); + } + + /// <summary> + /// Find a triangle intersected by InRay on InMesh. InRay is in world space. + /// Returns the index in mesh.faces of the hit face, or -1. Optionally can ignore backfaces. + /// </summary> + /// <param name="worldRay"></param> + /// <param name="mesh"></param> + /// <param name="hit"></param> + /// <param name="ignore"></param> + /// <returns></returns> + internal static bool FaceRaycast(Ray worldRay, ProBuilderMesh mesh, out RaycastHit hit, HashSet<Face> ignore = null) + { + return FaceRaycast(worldRay, mesh, out hit, Mathf.Infinity, CullingMode.Back, ignore); + } + + /// <summary> + /// Find the nearest face intersected by InWorldRay on this pb_Object. + /// </summary> + /// <param name="worldRay">A ray in world space.</param> + /// <param name="mesh">The ProBuilder object to raycast against.</param> + /// <param name="hit">If the mesh was intersected, hit contains information about the intersect point in local coordinate space.</param> + /// <param name="distance">The distance from the ray origin to the intersection point.</param> + /// <param name="cullingMode">Which sides of a face are culled when hit testing. Default is back faces are culled.</param> + /// <param name="ignore">Optional collection of faces to ignore when raycasting.</param> + /// <returns>True if the ray intersects with the mesh, false if not.</returns> + internal static bool FaceRaycast(Ray worldRay, ProBuilderMesh mesh, out RaycastHit hit, float distance, CullingMode cullingMode, HashSet<Face> ignore = null) + { + // Transform ray into model space + worldRay.origin -= mesh.transform.position; // Why doesn't worldToLocalMatrix apply translation? + worldRay.origin = mesh.transform.worldToLocalMatrix * worldRay.origin; + worldRay.direction = mesh.transform.worldToLocalMatrix * worldRay.direction; + + var positions = mesh.positionsInternal; + var faces = mesh.facesInternal; + + float OutHitPoint = Mathf.Infinity; + int OutHitFace = -1; + Vector3 OutNrm = Vector3.zero; + + // Iterate faces, testing for nearest hit to ray origin. Optionally ignores backfaces. + for (int i = 0, fc = faces.Length; i < fc; ++i) + { + if (ignore != null && ignore.Contains(faces[i])) + continue; + + int[] indexes = mesh.facesInternal[i].indexesInternal; + + for (int j = 0, ic = indexes.Length; j < ic; j += 3) + { + Vector3 a = positions[indexes[j + 0]]; + Vector3 b = positions[indexes[j + 1]]; + Vector3 c = positions[indexes[j + 2]]; + + Vector3 nrm = Vector3.Cross(b - a, c - a); + float dot = Vector3.Dot(worldRay.direction, nrm); + + bool skip = false; + + switch (cullingMode) + { + case CullingMode.Front: + if (dot < 0f) skip = true; + break; + + case CullingMode.Back: + if (dot > 0f) skip = true; + break; + } + + var dist = 0f; + + Vector3 point; + if (!skip && Math.RayIntersectsTriangle(worldRay, a, b, c, out dist, out point)) + { + if (dist > OutHitPoint || dist > distance) + continue; + + OutNrm = nrm; + OutHitFace = i; + OutHitPoint = dist; + } + } + } + + hit = new RaycastHit(OutHitPoint, + worldRay.GetPoint(OutHitPoint), + OutNrm, + OutHitFace); + + return OutHitFace > -1; + } + + internal static bool FaceRaycastBothCullModes(Ray worldRay, ProBuilderMesh mesh, ref SimpleTuple<Face, Vector3> back, ref SimpleTuple<Face, Vector3> front) + { + // Transform ray into model space + worldRay.origin -= mesh.transform.position; // Why doesn't worldToLocalMatrix apply translation? + worldRay.origin = mesh.transform.worldToLocalMatrix * worldRay.origin; + worldRay.direction = mesh.transform.worldToLocalMatrix * worldRay.direction; + + var positions = mesh.positionsInternal; + var faces = mesh.facesInternal; + + back.item1 = null; + front.item1 = null; + + float backDistance = Mathf.Infinity; + float frontDistance = Mathf.Infinity; + + // Iterate faces, testing for nearest hit to ray origin. Optionally ignores backfaces. + for (int i = 0, fc = faces.Length; i < fc; ++i) + { + int[] indexes = mesh.facesInternal[i].indexesInternal; + + for (int j = 0, ic = indexes.Length; j < ic; j += 3) + { + Vector3 a = positions[indexes[j + 0]]; + Vector3 b = positions[indexes[j + 1]]; + Vector3 c = positions[indexes[j + 2]]; + + float dist; + Vector3 point; + + if (Math.RayIntersectsTriangle(worldRay, a, b, c, out dist, out point)) + { + if (dist < backDistance || dist < frontDistance) + { + Vector3 nrm = Vector3.Cross(b - a, c - a); + float dot = Vector3.Dot(worldRay.direction, nrm); + + if (dot < 0f) + { + if (dist < backDistance) + { + backDistance = dist; + back.item1 = faces[i]; + } + } + else + { + if (dist < frontDistance) + { + frontDistance = dist; + front.item1 = faces[i]; + } + } + } + } + } + } + + if (back.item1 != null) + back.item2 = worldRay.GetPoint(backDistance); + + if (front.item1 != null) + front.item2 = worldRay.GetPoint(frontDistance); + + return back.item1 != null || front.item1 != null; + } + + /// <summary> + /// Find the all faces intersected by InWorldRay on this pb_Object. + /// </summary> + /// <param name="InWorldRay">A ray in world space.</param> + /// <param name="mesh">The ProBuilder object to raycast against.</param> + /// <param name="hits">If the mesh was intersected, hits contains all intersection point RaycastHit information.</param> + /// <param name="cullingMode">What sides of triangles does the ray intersect with.</param> + /// <param name="ignore">Optional collection of faces to ignore when raycasting.</param> + /// <returns>True if the ray intersects with the mesh, false if not.</returns> + internal static bool FaceRaycast( + Ray InWorldRay, + ProBuilderMesh mesh, + out List<RaycastHit> hits, + CullingMode cullingMode, + HashSet<Face> ignore = null) + { + // Transform ray into model space + InWorldRay.origin -= mesh.transform.position; // Why doesn't worldToLocalMatrix apply translation? + + InWorldRay.origin = mesh.transform.worldToLocalMatrix * InWorldRay.origin; + InWorldRay.direction = mesh.transform.worldToLocalMatrix * InWorldRay.direction; + + Vector3[] vertices = mesh.positionsInternal; + + hits = new List<RaycastHit>(); + + // Iterate faces, testing for nearest hit to ray origin. Optionally ignores backfaces. + for (int CurFace = 0; CurFace < mesh.facesInternal.Length; ++CurFace) + { + if (ignore != null && ignore.Contains(mesh.facesInternal[CurFace])) + continue; + + int[] indexes = mesh.facesInternal[CurFace].indexesInternal; + + for (int CurTriangle = 0; CurTriangle < indexes.Length; CurTriangle += 3) + { + Vector3 a = vertices[indexes[CurTriangle + 0]]; + Vector3 b = vertices[indexes[CurTriangle + 1]]; + Vector3 c = vertices[indexes[CurTriangle + 2]]; + + var dist = 0f; + Vector3 point; + + if (Math.RayIntersectsTriangle(InWorldRay, a, b, c, out dist, out point)) + { + Vector3 nrm = Vector3.Cross(b - a, c - a); + + float dot; // vars used in loop + switch (cullingMode) + { + case CullingMode.Front: + dot = Vector3.Dot(InWorldRay.direction, nrm); + + if (dot > 0f) + goto case CullingMode.FrontBack; + break; + + case CullingMode.Back: + dot = Vector3.Dot(InWorldRay.direction, nrm); + + if (dot < 0f) + goto case CullingMode.FrontBack; + break; + + case CullingMode.FrontBack: + hits.Add(new RaycastHit(dist, + InWorldRay.GetPoint(dist), + nrm, + CurFace)); + break; + } + + continue; + } + } + } + + return hits.Count > 0; + } + + /// <summary> + /// Transform a ray from world space to a transform local space. + /// </summary> + /// <param name="transform"></param> + /// <param name="InWorldRay"></param> + /// <returns></returns> + internal static Ray InverseTransformRay(this Transform transform, Ray InWorldRay) + { + Vector3 o = InWorldRay.origin; + o -= transform.position; + o = transform.worldToLocalMatrix * o; + Vector3 d = transform.worldToLocalMatrix.MultiplyVector(InWorldRay.direction); + return new Ray(o, d); + } + + /// <summary> + /// Find the nearest triangle intersected by InWorldRay on this mesh. + /// </summary> + /// <param name="InWorldRay"></param> + /// <param name="hit"></param> + /// <param name="distance"></param> + /// <returns></returns> + internal static bool MeshRaycast(Ray InWorldRay, GameObject gameObject, out RaycastHit hit, float distance = Mathf.Infinity) + { + var meshFilter = gameObject.GetComponent<MeshFilter>(); + var mesh = meshFilter != null ? meshFilter.sharedMesh : null; + + if (!mesh) + { + hit = default(RaycastHit); + return false; + } + + var transform = gameObject.transform; + var ray = transform.InverseTransformRay(InWorldRay); + return MeshRaycast(ray, mesh.vertices, mesh.triangles, out hit, distance); + } + + /// <summary> + /// Cast a ray (in model space) against a mesh. + /// </summary> + /// <param name="InRay"></param> + /// <param name="mesh"></param> + /// <param name="triangles"></param> + /// <param name="hit"></param> + /// <param name="distance"></param> + /// <returns></returns> + internal static bool MeshRaycast(Ray InRay, Vector3[] mesh, int[] triangles, out RaycastHit hit, float distance = Mathf.Infinity) + { + // float dot; // vars used in loop + float hitDistance = Mathf.Infinity; + Vector3 hitNormal = new Vector3(0f, 0f, 0f); // vars used in loop + Vector3 a, b, c; + int hitFace = -1; + Vector3 o = InRay.origin, d = InRay.direction; + + // Iterate faces, testing for nearest hit to ray origin. + for (int CurTri = 0; CurTri < triangles.Length; CurTri += 3) + { + a = mesh[triangles[CurTri + 0]]; + b = mesh[triangles[CurTri + 1]]; + c = mesh[triangles[CurTri + 2]]; + + if (Math.RayIntersectsTriangle2(o, d, a, b, c, ref distance, ref hitNormal)) + { + hitFace = CurTri / 3; + hitDistance = distance; + break; + } + } + + hit = new RaycastHit(hitDistance, + InRay.GetPoint(hitDistance), + hitNormal, + hitFace); + + return hitFace > -1; + } + + /// <summary> + /// Returns true if this point in world space is occluded by a triangle on this object. + /// </summary> + /// <remarks>This is very slow, do not use.</remarks> + /// <param name="cam"></param> + /// <param name="pb"></param> + /// <param name="worldPoint"></param> + /// <returns></returns> + internal static bool PointIsOccluded(Camera cam, ProBuilderMesh pb, Vector3 worldPoint) + { + Vector3 dir = (cam.transform.position - worldPoint).normalized; + + // move the point slightly towards the camera to avoid colliding with its own triangle + Ray ray = new Ray(worldPoint + dir * .0001f, dir); + + RaycastHit hit; + + return FaceRaycast(ray, pb, out hit, Vector3.Distance(cam.transform.position, worldPoint), CullingMode.Front); + } + + /// <summary> + /// Collects coincident vertices and returns a rotation calculated from the average normal and bitangent. + /// </summary> + /// <param name="mesh">The target mesh.</param> + /// <param name="indices">Vertex indices to consider in the rotation calculations.</param> + /// <returns>A rotation calculated from the average normal of each vertex.</returns> + public static Quaternion GetRotation(ProBuilderMesh mesh, IEnumerable<int> indices) + { + if (!mesh.HasArrays(MeshArrays.Normal)) + Normals.CalculateNormals(mesh); + + if (!mesh.HasArrays(MeshArrays.Tangent)) + Normals.CalculateTangents(mesh); + + var normals = mesh.normalsInternal; + var tangents = mesh.tangentsInternal; + + var nrm = Vector3.zero; + var tan = Vector4.zero; + float count = 0; + + foreach (var index in indices) + { + var n = normals[index]; + var t = tangents[index]; + + nrm.x += n.x; + nrm.y += n.y; + nrm.z += n.z; + + tan.x += t.x; + tan.y += t.y; + tan.z += t.z; + tan.w += t.w; + + count++; + } + + nrm.x /= count; + nrm.y /= count; + nrm.z /= count; + + tan.x /= count; + tan.y /= count; + tan.z /= count; + tan.w /= count; + + if (nrm == Vector3.zero || tan == Vector4.zero) + return mesh.transform.rotation; + + var bit = Vector3.Cross(nrm, tan * tan.w); + + return mesh.transform.rotation * Quaternion.LookRotation(nrm, bit); + } + + /// <summary> + /// Get a rotation suitable for orienting a handle or gizmo relative to the element selection. + /// </summary> + /// <param name="mesh">The target mesh.</param> + /// <param name="orientation">The type of <see cref="HandleOrientation"/> to calculate.</param> + /// <param name="faces">Faces to consider in the rotation calculations. Only used when + /// <see cref="HandleOrientation"/> is <see cref="HandleOrientation.ActiveElement"/>.</param> + /// <returns>A rotation appropriate to the orientation and element selection.</returns> + public static Quaternion GetFaceRotation(ProBuilderMesh mesh, HandleOrientation orientation, IEnumerable<Face> faces) + { + if (mesh == null) + return Quaternion.identity; + + switch (orientation) + { + case HandleOrientation.ActiveElement: + // Intentionally not using coincident vertices here. We want the normal of just the face, not an + // average of it's neighbors. + return GetFaceRotation(mesh, faces.Last()); + + case HandleOrientation.ActiveObject: + return mesh.transform.rotation; + + default: + return Quaternion.identity; + } + } + + /// <summary> + /// Get the rotation of a face in world space. + /// </summary> + /// <param name="mesh">The mesh that face belongs to.</param> + /// <param name="face">The face calculate rotation for.</param> + /// <returns>The rotation of face in world space coordinates.</returns> + public static Quaternion GetFaceRotation(ProBuilderMesh mesh, Face face) + { + if (mesh == null) + return Quaternion.identity; + + if (face == null) + return mesh.transform.rotation; + + // Intentionally not using coincident vertices here. We want the normal of just the face, not an + // average of it's neighbors. + Normal nrm = Math.NormalTangentBitangent(mesh, face); + + if (nrm.normal == Vector3.zero || nrm.bitangent == Vector3.zero) + return mesh.transform.rotation; + + return mesh.transform.rotation * Quaternion.LookRotation(nrm.normal, nrm.bitangent); + } + + /// <summary> + /// Get a rotation suitable for orienting a handle or gizmo relative to the element selection. + /// </summary> + /// <param name="mesh">The target mesh.</param> + /// <param name="orientation">The type of <see cref="HandleOrientation"/> to calculate.</param> + /// <param name="edges">Edges to consider in the rotation calculations. Only used when + /// <see cref="HandleOrientation"/> is <see cref="HandleOrientation.ActiveElement"/>.</param> + /// <returns>A rotation appropriate to the orientation and element selection.</returns> + public static Quaternion GetEdgeRotation(ProBuilderMesh mesh, HandleOrientation orientation, IEnumerable<Edge> edges) + { + if (mesh == null) + return Quaternion.identity; + + switch (orientation) + { + case HandleOrientation.ActiveElement: + // Getting an average of the edge normals isn't very helpful in real world uses, so we just use the + // first selected edge for orientation. + // This function accepts an enumerable because in the future we may want to do something more + // sophisticated, and it's convenient because selections are stored as collections. + return GetEdgeRotation(mesh, edges.Last()); + + case HandleOrientation.ActiveObject: + return mesh.transform.rotation; + + default: + return Quaternion.identity; + } + } + + /// <summary> + /// Get the rotation of an edge in world space. + /// </summary> + /// <param name="mesh">The mesh that edge belongs to.</param> + /// <param name="edge">The edge calculate rotation for.</param> + /// <returns>The rotation of edge in world space coordinates.</returns> + public static Quaternion GetEdgeRotation(ProBuilderMesh mesh, Edge edge) + { + if (mesh == null) + return Quaternion.identity; + + return GetFaceRotation(mesh, EdgeUtility.GetFace(mesh, edge)); + } + + /// <summary> + /// Get a rotation suitable for orienting a handle or gizmo relative to the element selection. + /// </summary> + /// <param name="mesh">The target mesh.</param> + /// <param name="orientation">The type of <see cref="HandleOrientation"/> to calculate.</param> + /// <param name="vertices">Edges to consider in the rotation calculations. Only used when + /// <see cref="HandleOrientation"/> is <see cref="HandleOrientation.ActiveElement"/>.</param> + /// <returns>A rotation appropriate to the orientation and element selection.</returns> + public static Quaternion GetVertexRotation(ProBuilderMesh mesh, HandleOrientation orientation, IEnumerable<int> vertices) + { + if (mesh == null) + return Quaternion.identity; + + switch (orientation) + { + case HandleOrientation.ActiveElement: + if (mesh.selectedVertexCount < 1) + goto case HandleOrientation.ActiveObject; + return GetRotation(mesh, vertices); + + case HandleOrientation.ActiveObject: + return mesh.transform.rotation; + + default: + return Quaternion.identity; + } + } + + /// <summary> + /// Get the rotation of a vertex in world space. + /// </summary> + /// <param name="mesh">The mesh that `vertex` belongs to.</param> + /// <param name="vertex">The vertex to calculate rotation for.</param> + /// <returns>The rotation of a vertex normal in world space coordinates.</returns> + public static Quaternion GetVertexRotation(ProBuilderMesh mesh, int vertex) + { + if (mesh == null) + return Quaternion.identity; + + if (vertex < 0) + return mesh.transform.rotation; + + return GetRotation(mesh, new int[] { vertex }); + } + + internal static Vector3 GetActiveElementPosition(ProBuilderMesh mesh, IEnumerable<Face> faces) + { + return mesh.transform.TransformPoint(Math.GetBounds(mesh.positionsInternal, faces.Last().distinctIndexesInternal).center); + } + + internal static Vector3 GetActiveElementPosition(ProBuilderMesh mesh, IEnumerable<Edge> edges) + { + var edge = edges.Last(); + return mesh.transform.TransformPoint(Math.GetBounds(mesh.positionsInternal, new int[] { edge.a, edge.b }).center); + } + + internal static Vector3 GetActiveElementPosition(ProBuilderMesh mesh, IEnumerable<int> vertices) + { + return mesh.transform.TransformPoint(mesh.positionsInternal[vertices.First()]); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e6409f002ae85c25261c867ac330a2fb585b6d81 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/HandleUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3e8bafb60e2ac40ef92c924f855c65b3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IHasDefault.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IHasDefault.cs new file mode 100644 index 0000000000000000000000000000000000000000..2bc6593d878a4fc79b63e0e9e5faa49b698c6311 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IHasDefault.cs @@ -0,0 +1,15 @@ +using UnityEngine; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Interface for objects that contain a set of default values. Used by generated scriptable objects. + /// </summary> + interface IHasDefault + { + /// <summary> + /// Set this object to use default values. + /// </summary> + void SetDefaultValues(); + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IHasDefault.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IHasDefault.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7cf263c407b7c944eb7493dc8f10b82211924c73 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IHasDefault.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd9b9131766d54225a24d2221d1f49b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec2.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec2.cs new file mode 100644 index 0000000000000000000000000000000000000000..4d93b224bda582582a485febbde1412614d83c1a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec2.cs @@ -0,0 +1,73 @@ +using UnityEngine; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Vertex positions are sorted as integers to avoid floating point precision errors. + /// </summary> + struct IntVec2 : System.IEquatable<IntVec2> + { + public Vector2 value; + + public float x { get { return value.x; } } + public float y { get { return value.y; } } + + public IntVec2(Vector2 vector) + { + this.value = vector; + } + + public override string ToString() + { + return string.Format("({0:F2}, {1:F2})", x, y); + } + + public static bool operator==(IntVec2 a, IntVec2 b) + { + return a.Equals(b); + } + + public static bool operator!=(IntVec2 a, IntVec2 b) + { + return !(a == b); + } + + public bool Equals(IntVec2 p) + { + return round(x) == round(p.x) && + round(y) == round(p.y); + } + + public bool Equals(Vector2 p) + { + return round(x) == round(p.x) && + round(y) == round(p.y); + } + + public override bool Equals(System.Object b) + { + return (b is IntVec2 && (this.Equals((IntVec2)b))) || + (b is Vector2 && this.Equals((Vector2)b)); + } + + public override int GetHashCode() + { + return VectorHash.GetHashCode(value); + } + + private static int round(float v) + { + return System.Convert.ToInt32(v * VectorHash.FltCompareResolution); + } + + public static implicit operator Vector2(IntVec2 p) + { + return p.value; + } + + public static implicit operator IntVec2(Vector2 p) + { + return new IntVec2(p); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec2.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec2.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4b952c5bdfc072e92d779e07f538a5e4bacb3110 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f21d9e5e308b409f9173967b37d19be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec3.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec3.cs new file mode 100644 index 0000000000000000000000000000000000000000..49fb12be893fb6d8300d297613e1af7bf147344e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec3.cs @@ -0,0 +1,76 @@ +using UnityEngine; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Vertex positions are sorted as integers to avoid floating point precision errors. + /// </summary> + struct IntVec3 : System.IEquatable<IntVec3> + { + public Vector3 value; + + public float x { get { return value.x; } } + public float y { get { return value.y; } } + public float z { get { return value.z; } } + + public IntVec3(Vector3 vector) + { + this.value = vector; + } + + public override string ToString() + { + return string.Format("({0:F2}, {1:F2}, {2:F2})", x, y, z); + } + + public static bool operator==(IntVec3 a, IntVec3 b) + { + return a.Equals(b); + } + + public static bool operator!=(IntVec3 a, IntVec3 b) + { + return !(a == b); + } + + public bool Equals(IntVec3 p) + { + return round(x) == round(p.x) && + round(y) == round(p.y) && + round(z) == round(p.z); + } + + public bool Equals(Vector3 p) + { + return round(x) == round(p.x) && + round(y) == round(p.y) && + round(z) == round(p.z); + } + + public override bool Equals(System.Object b) + { + return (b is IntVec3 && (this.Equals((IntVec3)b))) || + (b is Vector3 && this.Equals((Vector3)b)); + } + + public override int GetHashCode() + { + return VectorHash.GetHashCode(value); + } + + private static int round(float v) + { + return System.Convert.ToInt32(v * VectorHash.FltCompareResolution); + } + + public static implicit operator Vector3(IntVec3 p) + { + return p.value; + } + + public static implicit operator IntVec3(Vector3 p) + { + return new IntVec3(p); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec3.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec3.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1c502b00b2e9902644fed96cb62964604bab8ff1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 071d390610ea548df87a9c03c370ced2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec4.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec4.cs new file mode 100644 index 0000000000000000000000000000000000000000..69ec38960a70b65c64d3e8daa80534ffacd21851 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec4.cs @@ -0,0 +1,79 @@ +using UnityEngine; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Vertex positions are sorted as integers to avoid floating point precision errors. + /// </summary> + struct IntVec4 : System.IEquatable<IntVec4> + { + public Vector4 value; + + public float x { get { return value.x; } } + public float y { get { return value.y; } } + public float z { get { return value.z; } } + public float w { get { return value.w; } } + + public IntVec4(Vector4 vector) + { + this.value = vector; + } + + public override string ToString() + { + return string.Format("({0:F2}, {1:F2}, {2:F2}, {3:F2})", x, y, z, w); + } + + public static bool operator==(IntVec4 a, IntVec4 b) + { + return a.Equals(b); + } + + public static bool operator!=(IntVec4 a, IntVec4 b) + { + return !(a == b); + } + + public bool Equals(IntVec4 p) + { + return round(x) == round(p.x) && + round(y) == round(p.y) && + round(z) == round(p.z) && + round(w) == round(p.w); + } + + public bool Equals(Vector4 p) + { + return round(x) == round(p.x) && + round(y) == round(p.y) && + round(z) == round(p.z) && + round(w) == round(p.w); + } + + public override bool Equals(System.Object b) + { + return (b is IntVec4 && (this.Equals((IntVec4)b))) || + (b is Vector4 && this.Equals((Vector4)b)); + } + + public override int GetHashCode() + { + return VectorHash.GetHashCode(value); + } + + private static int round(float v) + { + return System.Convert.ToInt32(v * VectorHash.FltCompareResolution); + } + + public static implicit operator Vector4(IntVec4 p) + { + return p.value; + } + + public static implicit operator IntVec4(Vector4 p) + { + return new IntVec4(p); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec4.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec4.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..43b082e1f01d7add9c006b521c905728c1b3eacd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/IntVec4.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 36dfd625ac38b4b62a04264b3819dc42 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/InternalUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/InternalUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..6ff34eecc9b9e4ff42357b6c08bcec60e69fc1d6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/InternalUtility.cs @@ -0,0 +1,182 @@ +using UnityEngine; +using System; +using System.Linq; +using System.Collections.Generic; +using UnityEngine.Assertions; + +#if UNITY_EDITOR +using UnityEditor.SceneManagement; +#endif + +namespace UnityEngine.ProBuilder +{ + static class InternalUtility + { + [Obsolete] + public static T[] GetComponents<T>(this IEnumerable<GameObject> gameObjects) where T : Component + { + List<T> c = new List<T>(); + foreach (GameObject go in gameObjects) + c.AddRange(go.transform.GetComponentsInChildren<T>()); + return c.ToArray(); + } + + // @todo + public static T[] GetComponents<T>(GameObject go) where T : Component + { + return go.transform.GetComponentsInChildren<T>(); + } + + // @todo + public static T[] GetComponents<T>(this IEnumerable<Transform> transforms) where T : Component + { + List<T> c = new List<T>(); + foreach (Transform t in transforms) + c.AddRange(t.GetComponentsInChildren<T>()); + return c.ToArray() as T[]; + } + + public static GameObject EmptyGameObjectWithTransform(Transform t) + { + GameObject go = new GameObject(); + go.transform.position = t.position; + go.transform.localRotation = t.localRotation; + go.transform.localScale = t.localScale; + + #if UNITY_EDITOR + StageUtility.PlaceGameObjectInCurrentStage(go); + #endif + + return go; + } + + public static T NextEnumValue<T>(this T current) where T : IConvertible + { + Assert.IsTrue(current is Enum); + + var values = Enum.GetValues(current.GetType()); + + for (int i = 0, c = values.Length; i < c; i++) + if (current.Equals(values.GetValue((i)))) + return (T)values.GetValue((i + 1) % c); + + return current; + } + + public static string ControlKeyString(char character) + { + if (character == PreferenceKeys.CMD_SUPER) + return "Control"; + else if (character == PreferenceKeys.CMD_SHIFT) + return "Shift"; + else if (character == PreferenceKeys.CMD_OPTION) + return "Alt"; + else if (character == PreferenceKeys.CMD_ALT) + return "Alt"; + else if (character == PreferenceKeys.CMD_DELETE) +#if UNITY_EDITOR_WIN + return "Backspace"; +#else + return "Delete"; +#endif + else + return character.ToString(); + } + + /** + * Attempt to parse a color from string input. + */ + public static bool TryParseColor(string value, ref Color col) + { + string valid = "01234567890.,"; + value = new string(value.Where(c => valid.Contains(c)).ToArray()); + string[] rgba = value.Split(','); + + if (rgba.Length < 4) + return false; + + try + { + float r = float.Parse(rgba[0]); + float g = float.Parse(rgba[1]); + float b = float.Parse(rgba[2]); + float a = float.Parse(rgba[3]); + + col.r = r; + col.g = g; + col.b = b; + col.a = a; + } + catch + { + return false; + } + + return true; + } + + /** + * \brief Convert a string to a Vector3 array. + () + * @param str A string formatted like so: (x, y, z)\n(x2, y2, z2). + * \sa #StringWithArray + * \returns A Vector3[] array. + */ + public static Vector3[] StringToVector3Array(string str) + { + List<Vector3> v = new List<Vector3>(); + + str = str.Replace(" ", ""); // Remove white space + string[] lines = str.Split('\n'); // split into vector lines + + foreach (string vec in lines) + { + if (vec.Contains("//")) + continue; + + string[] values = vec.Split(','); + + if (values.Length < 3) + continue; + + float v0, v1, v2; + if (!float.TryParse(values[0], System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out v0)) + continue; + if (!float.TryParse(values[1], System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out v1)) + continue; + if (!float.TryParse(values[2], System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out v2)) + continue; + v.Add(new Vector3(v0, v1, v2)); + } + return v.ToArray(); + } + +#if !UNITY_2019_2_OR_NEWER + public static bool TryGetComponent<T>(this Component source, out T component) where T : Component + { + return (component = source.GetComponent<T>()) != null; + } + + public static bool TryGetComponent<T>(this GameObject source, out T component) where T : Component + { + return (component = source.GetComponent<T>()) != null; + } +#endif + + /// <summary> + /// Get a reference to an existing component, or add a new component if one does not already exist. + /// </summary> + public static T DemandComponent<T>(this Component component) where T : Component + { + return component.gameObject.DemandComponent<T>(); + } + + public static T DemandComponent<T>(this GameObject gameObject) where T : Component + { + T component; + if (!gameObject.TryGetComponent<T>(out component)) + component = gameObject.AddComponent<T>(); + return component; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/InternalUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/InternalUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a5c7305119d277bdd721e2701f38f659ed7aca19 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/InternalUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e11b000caeb5451a8d9160606edb8e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Log.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Log.cs new file mode 100644 index 0000000000000000000000000000000000000000..0a71c3bcf267af769cfbe002ba988ed7c1a5405c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Log.cs @@ -0,0 +1,290 @@ +using UnityEngine; +using System; +using System.IO; +using System.Collections.Generic; +using System.Diagnostics; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Describes the various states of chatty-ness. + /// </summary> + [Flags] + enum LogLevel + { + None = 0x0, + Error = 0x1, + Warning = 0x2, + Info = 0x4, + Default = Error | Warning, + All = 0xFF + } + + /// <summary> + /// Where the pb_Log writes to (default is Unity Console). + /// </summary> + /// <remarks> + /// If logging to a File, the pb_Log.outputFile must be set. + /// You may log to one or multiple output sources. + /// </remarks> + [Flags] + enum LogOutput + { + None = 0x0, + Console = 0x1, + File = 0x2, + } + + /// <summary> + /// Debug log replacement. + /// </summary> + /// <remarks> + /// IMPORTANT - pb_LogEditor initializes this class from the Editor side (so preferences can be accessed)! + /// </remarks> + static class Log + { + public const string k_ProBuilderLogFileName = "ProBuilderLog.txt"; + + // Retain a stack of previous log levels. + static Stack<LogLevel> s_logStack = new Stack<LogLevel>(); + + // Current log level. + static LogLevel s_LogLevel = LogLevel.All; + + // Where to write log strings. + static LogOutput s_Output = LogOutput.Console; + + // Path to the log file. + static string s_LogFilePath = k_ProBuilderLogFileName; + + /// <summary> + /// Push the current log level in the stack. See also PopLogLevel. + /// </summary> + /// <param name="level"></param> + public static void PushLogLevel(LogLevel level) + { + s_logStack.Push(s_LogLevel); + s_LogLevel = level; + } + + /// <summary> + /// Pop the current log level in the stack. See also PushLogLevel. + /// </summary> + public static void PopLogLevel() + { + s_LogLevel = s_logStack.Pop(); + } + + /// <summary> + /// Set the log level without modifying the stack. + /// </summary> + /// <param name="level"></param> + public static void SetLogLevel(LogLevel level) + { + s_LogLevel = level; + } + + /// <summary> + /// Set the output destination for logs. + /// If output is file, make sure to also set the log file path (otherwise it defaults to ProBuilderLog.txt in project directory). + /// </summary> + /// <param name="output"></param> + public static void SetOutput(LogOutput output) + { + s_Output = output; + } + + /// <summary> + /// Set the path of the log file that pb_Log writes messages to. + /// </summary> + /// <param name="path"></param> + public static void SetLogFile(string path) + { + s_LogFilePath = path; + } + + /// <summary> + /// Output a debug message. + /// </summary> + /// <remarks>These should not be committed to trunk.</remarks> + /// <param name="value"></param> + /// <typeparam name="T"></typeparam> + [Conditional("DEBUG")] + public static void Debug<T>(T value) + { + Debug(value.ToString()); + } + + /// <summary> + /// Output a debug message. + /// </summary> + /// <remarks> + /// These should not be committed to trunk. + /// </remarks> + /// <param name="message"></param> + [Conditional("DEBUG")] + public static void Debug(string message) + { + DoPrint(message, LogType.Log); + } + + [Conditional("DEBUG")] + public static void Debug(string format, params object[] values) + { + Debug(string.Format(format, values)); + } + + /// <summary> + /// Output an informational message. + /// </summary> + /// <param name="format"></param> + /// <param name="values"></param> + public static void Info(string format, params object[] values) + { + Info(string.Format(format, values)); + } + + public static void Info(string message) + { + if ((s_LogLevel & LogLevel.Info) > 0) + DoPrint(message, LogType.Log); + } + + /// <summary> + /// Output a warning message. + /// </summary> + /// <param name="format"></param> + /// <param name="values"></param> + public static void Warning(string format, params object[] values) + { + Warning(string.Format(format, values)); + } + + public static void Warning(string message) + { + if ((s_LogLevel & LogLevel.Warning) > 0) + DoPrint(message, LogType.Warning); + } + + /// <summary> + /// Output an error message. + /// </summary> + /// <param name="format"></param> + /// <param name="values"></param> + public static void Error(string format, params object[] values) + { + Error(string.Format(format, values)); + } + + public static void Error(string message) + { + if ((s_LogLevel & LogLevel.Error) > 0) + DoPrint(message, LogType.Error); + } + + /// <summary> + /// ConsolePro3 specific functionality - update a single log continuously. + /// </summary> + /// <param name="key"></param> + /// <param name="value"></param> + /// <typeparam name="T"></typeparam> + /// <typeparam name="K"></typeparam> + [Conditional("CONSOLE_PRO_ENABLED")] + internal static void Watch<T, K>(T key, K value) + { + UnityEngine.Debug.Log(string.Format("{0} : {1}\nCPAPI:{{\"cmd\":\"Watch\" \"name\":\"{0}\"}}", key.ToString(), value.ToString())); + } + + static void DoPrint(string message, LogType type) + { + if ((s_Output & LogOutput.Console) > 0) + PrintToConsole(message, type); + + if ((s_Output & LogOutput.File) > 0) + PrintToFile(message, s_LogFilePath); + } + + /// <summary> + /// Print a message to a file. + /// </summary> + /// <param name="message"></param> + /// <param name="path"></param> + static void PrintToFile(string message, string path) + { + if (string.IsNullOrEmpty(path)) + return; + + string full_path = Path.GetFullPath(path); + + if (string.IsNullOrEmpty(full_path)) + { + Log.PrintToConsole("m_LogFilePath bad: " + full_path); + return; + } + + if (!File.Exists(full_path)) + { + string directory = Path.GetDirectoryName(full_path); + + if (string.IsNullOrEmpty(directory)) + { + Log.PrintToConsole("m_LogFilePath bad: " + full_path); + return; + } + + Directory.CreateDirectory(directory); + + using (StreamWriter sw = File.CreateText(full_path)) + { + sw.WriteLine(message); + } + } + else + { + using (StreamWriter sw = File.AppendText(full_path)) + { +// sw.WriteLine(); + sw.WriteLine(message); + } + } + } + + /// <summary> + /// Delete the log file if it exists. + /// </summary> + public static void ClearLogFile() + { + if (File.Exists(s_LogFilePath)) + File.Delete(s_LogFilePath); + } + + /// <summary> + /// Print a message to the Unity console. + /// </summary> + /// <param name="message"></param> + /// <param name="type"></param> + static void PrintToConsole(string message, LogType type = LogType.Log) + { + if (type == LogType.Log) + UnityEngine.Debug.Log(message); + else if (type == LogType.Warning) + UnityEngine.Debug.LogWarning(message); + else if (type == LogType.Error) + UnityEngine.Debug.LogError(message); + else if (type == LogType.Assert) +#if UNITY_5_3_OR_NEWER + UnityEngine.Debug.LogAssertion(message); +#else + UnityEngine.Debug.LogError(message); +#endif + else + UnityEngine.Debug.Log(message); + } + + internal static void NotNull<T>(T obj, string message) + { + if (obj == null) + throw new ArgumentNullException(message); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Log.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Log.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f5081ae80db037ac2c04c2022cdc3841e3a5d499 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Log.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a91947f03a49147a49e5f05ea5737edc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MaterialUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MaterialUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..c12c20420ecfcdcedfa8996608deff6872065787 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MaterialUtility.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace UnityEngine.ProBuilder +{ + static class MaterialUtility + { +#if UNITY_2018_2_OR_NEWER + static List<Material> s_MaterialArray = new List<Material>(); +#endif + + internal static int GetMaterialCount(Renderer renderer) + { +#if UNITY_2018_2_OR_NEWER + s_MaterialArray.Clear(); + renderer.GetSharedMaterials(s_MaterialArray); + return s_MaterialArray.Count; +#else + return renderer.sharedMaterials.Length; +#endif + } + + internal static Material GetSharedMaterial(Renderer renderer, int index) + { +#if UNITY_2018_2_OR_NEWER + s_MaterialArray.Clear(); + renderer.GetSharedMaterials(s_MaterialArray); + var count = s_MaterialArray.Count; + if (count < 1) + return null; + return s_MaterialArray[Math.Clamp(index, 0, count - 1)]; +#else + var array = renderer.sharedMaterials; + var count = array == null ? 0 : array.Length; + if (count < 1) + return null; + return array[Math.Clamp(index, 0, count - 1)]; +#endif + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MaterialUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MaterialUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6d069c4b361cc1a16c7c5d2ff969fe22c5a45c41 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MaterialUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a419cef8f67fa48b8a2420ecc4ea4936 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Math.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Math.cs new file mode 100644 index 0000000000000000000000000000000000000000..459f5320b738fecd0f104bac506bdb01f6429482 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Math.cs @@ -0,0 +1,1449 @@ +using System; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// A collection of math functions that are useful when working with 3d meshes. + /// </summary> + public static class Math + { + /// <value> + /// Pi / 2. + /// </value> + public const float phi = 1.618033988749895f; + + /// <summary> + /// ProBuilder epsilon constant. + /// </summary> + const float k_FltEpsilon = float.Epsilon; + + /// <summary> + /// Epsilon to use when comparing vertex positions for equality. + /// </summary> + const float k_FltCompareEpsilon = .0001f; + + /// <summary> + /// The minimum distance a handle must move on an axis before considering that axis as engaged. + /// </summary> + internal const float handleEpsilon = .0001f; + + /// <summary> + /// Get a point on the circumference of a circle. + /// </summary> + /// <param name="radius">The radius of the circle.</param> + /// <param name="angleInDegrees">Where along the circle should the point be projected. Angle is in degrees.</param> + /// <param name="origin"></param> + /// <returns></returns> + internal static Vector2 PointInCircumference(float radius, float angleInDegrees, Vector2 origin) + { + // Convert from degrees to radians via multiplication by PI/180 + float x = (float)(radius * Mathf.Cos(Mathf.Deg2Rad * angleInDegrees)) + origin.x; + float y = (float)(radius * Mathf.Sin(Mathf.Deg2Rad * angleInDegrees)) + origin.y; + + return new Vector2(x, y); + } + + /// <summary> + /// Provided a radius, latitudinal and longitudinal angle, return a position. + /// </summary> + /// <param name="radius"></param> + /// <param name="latitudeAngle"></param> + /// <param name="longitudeAngle"></param> + /// <returns></returns> + internal static Vector3 PointInSphere(float radius, float latitudeAngle, float longitudeAngle) + { + float x = (radius * Mathf.Cos(Mathf.Deg2Rad * latitudeAngle) * Mathf.Sin(Mathf.Deg2Rad * longitudeAngle)); + float y = (radius * Mathf.Sin(Mathf.Deg2Rad * latitudeAngle) * Mathf.Sin(Mathf.Deg2Rad * longitudeAngle)); + float z = (radius * Mathf.Cos(Mathf.Deg2Rad * longitudeAngle)); + + return new Vector3(x, y, z); + } + + /// <summary> + /// Find the signed angle from direction a to direction b. + /// </summary> + /// <param name="a">The direction from which to rotate.</param> + /// <param name="b">The direction to rotate towards.</param> + /// <returns>A signed angle in degrees from direction a to direction b.</returns> + internal static float SignedAngle(Vector2 a, Vector2 b) + { + float t = Vector2.Angle(a, b); + if (b.x - a.x < 0) + t = 360f - t; + return t; + } + + /// <summary> + /// Squared distance between two points. This is the same as `(b - a).sqrMagnitude`. + /// </summary> + /// <param name="a">First point.</param> + /// <param name="b">Second point.</param> + /// <returns></returns> + public static float SqrDistance(Vector3 a, Vector3 b) + { + float dx = b.x - a.x, + dy = b.y - a.y, + dz = b.z - a.z; + return dx * dx + dy * dy + dz * dz; + } + + /// <summary> + /// Get the area of a triangle. + /// </summary> + /// <remarks>http://www.iquilezles.org/blog/?p=1579</remarks> + /// <param name="x">First vertex position of the triangle.</param> + /// <param name="y">Second vertex position of the triangle.</param> + /// <param name="z">Third vertex position of the triangle.</param> + /// <returns>The area of the triangle.</returns> + public static float TriangleArea(Vector3 x, Vector3 y, Vector3 z) + { + float a = SqrDistance(x, y), + b = SqrDistance(y, z), + c = SqrDistance(z, x); + + return Mathf.Sqrt((2f * a * b + 2f * b * c + 2f * c * a - a * a - b * b - c * c) / 16f); + } + + /// <summary> + /// Returns the Area of a polygon. + /// </summary> + /// <param name="vertices"></param> + /// <param name="indexes"></param> + /// <returns></returns> + internal static float PolygonArea(Vector3[] vertices, int[] indexes) + { + float area = 0f; + + for (int i = 0; i < indexes.Length; i += 3) + area += TriangleArea(vertices[indexes[i]], vertices[indexes[i + 1]], vertices[indexes[i + 2]]); + + return area; + } + + /// <summary> + /// Returns a new point by rotating the Vector2 around an origin point. + /// </summary> + /// <param name="v">Vector2 original point.</param> + /// <param name="origin">The pivot to rotate around.</param> + /// <param name="theta">How far to rotate in degrees.</param> + /// <returns></returns> + internal static Vector2 RotateAroundPoint(this Vector2 v, Vector2 origin, float theta) + { + float cx = origin.x, cy = origin.y; // origin + float px = v.x, py = v.y; // point + + float s = Mathf.Sin(theta * Mathf.Deg2Rad); + float c = Mathf.Cos(theta * Mathf.Deg2Rad); + + // translate point back to origin: + px -= cx; + py -= cy; + + // rotate point + float xnew = px * c + py * s; + float ynew = -px * s + py * c; + + // translate point back: + px = xnew + cx; + py = ynew + cy; + + return new Vector2(px, py); + } + + /// <summary> + /// Scales a Vector2 using origin as the pivot point. + /// </summary> + /// <param name="v"></param> + /// <param name="origin"></param> + /// <param name="scale"></param> + /// <returns></returns> + public static Vector2 ScaleAroundPoint(this Vector2 v, Vector2 origin, Vector2 scale) + { + Vector2 tp = v - origin; + tp = Vector2.Scale(tp, scale); + tp += origin; + + return tp; + } + + internal static Vector2 Perpendicular(Vector2 value) + { + return new Vector2(-value.y, value.x); + } + + /// <summary> + /// Reflects a point across a line segment. + /// </summary> + /// <param name="point">The point to reflect.</param> + /// <param name="lineStart">First point of the line segment.</param> + /// <param name="lineEnd">Second point of the line segment.</param> + /// <returns>The reflected point.</returns> + public static Vector2 ReflectPoint(Vector2 point, Vector2 lineStart, Vector2 lineEnd) + { + Vector2 line = lineEnd - lineStart; + Vector2 perp = new Vector2(-line.y, line.x); // skip normalize + + float dist = Mathf.Sin(Vector2.Angle(line, point - lineStart) * Mathf.Deg2Rad) * Vector2.Distance(point, lineStart); + + return point + perp * (dist * 2f) * (Vector2.Dot(point - lineStart, perp) > 0 ? -1f : 1f); + } + + internal static float SqrDistanceRayPoint(Ray ray, Vector3 point) + { + return Vector3.Cross(ray.direction, point - ray.origin).sqrMagnitude; + } + + /// <summary> + /// Get the distance between a point and a finite line segment. + /// </summary> + /// <remarks>http://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment</remarks> + /// <param name="point">The point.</param> + /// <param name="lineStart">Line start.</param> + /// <param name="lineEnd">Line end.</param> + /// <returns>The distance from point to the nearest point on a line segment.</returns> + public static float DistancePointLineSegment(Vector2 point, Vector2 lineStart, Vector2 lineEnd) + { + // Return minimum distance between line segment vw and point p + float l2 = ((lineStart.x - lineEnd.x) * (lineStart.x - lineEnd.x)) + ((lineStart.y - lineEnd.y) * (lineStart.y - lineEnd.y)); // i.e. |w-v|^2 - avoid a sqrt + + if (l2 == 0.0f) return Vector2.Distance(point, lineStart); // v == w case + + // Consider the line extending the segment, parameterized as v + t (w - v). + // We find projection of point p onto the line. + // It falls where t = [(p-v) . (w-v)] / |w-v|^2 + float t = Vector2.Dot(point - lineStart, lineEnd - lineStart) / l2; + + if (t < 0.0) + return Vector2.Distance(point, lineStart); // Beyond the 'v' end of the segment + else if (t > 1.0) + return Vector2.Distance(point, lineEnd); // Beyond the 'w' end of the segment + + Vector2 projection = lineStart + t * (lineEnd - lineStart); // Projection falls on the segment + + return Vector2.Distance(point, projection); + } + + /// <summary> + /// Get the distance between a point and a finite line segment. + /// </summary> + /// <remarks>http://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment</remarks> + /// <param name="point">The point.</param> + /// <param name="lineStart">Line start.</param> + /// <param name="lineEnd">Line end.</param> + /// <returns>The distance from point to the nearest point on a line segment.</returns> + public static float DistancePointLineSegment(Vector3 point, Vector3 lineStart, Vector3 lineEnd) + { + // Return minimum distance between line segment vw and point p + float l2 = ((lineStart.x - lineEnd.x) * (lineStart.x - lineEnd.x)) + ((lineStart.y - lineEnd.y) * (lineStart.y - lineEnd.y)) + ((lineStart.z - lineEnd.z) * (lineStart.z - lineEnd.z)); // i.e. |w-v|^2 - avoid a sqrt + + if (l2 == 0.0f) return Vector3.Distance(point, lineStart); // v == w case + + // Consider the line extending the segment, parameterized as v + t (w - v). + // We find projection of point p onto the line. + // It falls where t = [(p-v) . (w-v)] / |w-v|^2 + float t = Vector3.Dot(point - lineStart, lineEnd - lineStart) / l2; + + if (t < 0.0) + return Vector3.Distance(point, lineStart); // Beyond the 'v' end of the segment + else if (t > 1.0) + return Vector3.Distance(point, lineEnd); // Beyond the 'w' end of the segment + + Vector3 projection = lineStart + t * (lineEnd - lineStart); // Projection falls on the segment + + return Vector3.Distance(point, projection); + } + + /// <summary> + /// Calculate the nearest point between two rays. + /// </summary> + /// <param name="a">First ray.</param> + /// <param name="b">Second ray.</param> + /// <returns></returns> + public static Vector3 GetNearestPointRayRay(Ray a, Ray b) + { + return GetNearestPointRayRay(a.origin, a.direction, b.origin, b.direction); + } + + internal static Vector3 GetNearestPointRayRay(Vector3 ao, Vector3 ad, Vector3 bo, Vector3 bd) + { + float dot = Vector3.Dot(ad, bd); + float abs = Mathf.Abs(dot); + + // ray is parallel (or garbage) + if ((abs - 1f) > Mathf.Epsilon || abs < Mathf.Epsilon) + return ao; + + Vector3 c = bo - ao; + + float n = -dot * Vector3.Dot(bd, c) + Vector3.Dot(ad, c) * Vector3.Dot(bd, bd); + float d = Vector3.Dot(ad, ad) * Vector3.Dot(bd, bd) - dot * dot; + + return ao + ad * (n / d); + } + + // http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect + // Returns 1 if the lines intersect, otherwise 0. In addition, if the lines + // intersect the intersection point may be stored in the intersect var + internal static bool GetLineSegmentIntersect(Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3, ref Vector2 intersect) + { + intersect = Vector2.zero; + Vector2 s1, s2; + s1.x = p1.x - p0.x; s1.y = p1.y - p0.y; + s2.x = p3.x - p2.x; s2.y = p3.y - p2.y; + + float s, t; + s = (-s1.y * (p0.x - p2.x) + s1.x * (p0.y - p2.y)) / (-s2.x * s1.y + s1.x * s2.y); + t = (s2.x * (p0.y - p2.y) - s2.y * (p0.x - p2.x)) / (-s2.x * s1.y + s1.x * s2.y); + + if (s >= 0 && s <= 1 && t >= 0 && t <= 1) + { + // Collision detected + intersect.x = p0.x + (t * s1.x); + intersect.y = p0.y + (t * s1.y); + return true; + } + + return false; + } + + /// <summary> + /// True or false lines, do lines intersect. + /// </summary> + /// <param name="p0"></param> + /// <param name="p1"></param> + /// <param name="p2"></param> + /// <param name="p3"></param> + /// <returns></returns> + internal static bool GetLineSegmentIntersect(Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3) + { + Vector2 s1, s2; + s1.x = p1.x - p0.x; s1.y = p1.y - p0.y; + s2.x = p3.x - p2.x; s2.y = p3.y - p2.y; + + float s, t; + s = (-s1.y * (p0.x - p2.x) + s1.x * (p0.y - p2.y)) / (-s2.x * s1.y + s1.x * s2.y); + t = (s2.x * (p0.y - p2.y) - s2.y * (p0.x - p2.x)) / (-s2.x * s1.y + s1.x * s2.y); + + return (s >= 0 && s <= 1 && t >= 0 && t <= 1); + } + + /// <summary> + /// Casts a ray from outside the bounds to the polygon and checks how many edges are hit. + /// </summary> + /// <param name="polygon">A series of individual edges composing a polygon. polygon length *must* be divisible by 2.</param> + /// <param name="point"></param> + /// <param name="indexes">If present these indexes make up the border of polygon. If not, polygon is assumed to be in correct order.</param> + /// <returns>True if the polygon contains point. False otherwise.</returns> + internal static bool PointInPolygon(Vector2[] polygon, Vector2 point, int[] indexes = null) + { + int len = indexes != null ? indexes.Length : polygon.Length; + + if (len % 2 != 0) + { + Debug.LogError("PointInPolygon requires polygon indexes be divisible by 2!"); + return false; + } + + Bounds2D bounds = new Bounds2D(polygon, indexes); + + if (bounds.ContainsPoint(point)) + { + //Get the direction toward the first edge of the polygon + Vector2 p1 = polygon[indexes != null ? indexes[0] : 0]; + Vector2 p2 = polygon[indexes != null ? indexes[1] : 1]; + Vector2 center = p1 + (p2 - p1) * 0.5f; + Vector2 dir = center - bounds.center; + + Vector2 rayStart = bounds.center + dir * (bounds.size.y + bounds.size.x + 2f); + int collisions = 0; + + for (int i = 0; i < len; i += 2) + { + int a = indexes != null ? indexes[i] : i; + int b = indexes != null ? indexes[i + 1] : i + 1; + + if (GetLineSegmentIntersect(rayStart, point, polygon[a], polygon[b])) + collisions++; + } + + return collisions % 2 != 0; + } + else + return false; + } + + /// <summary> + /// Is the point within a polygon? + /// </summary> + /// <remarks> + /// Assumes polygon has already been tested with AABB + /// </remarks> + /// <param name="positions"></param> + /// <param name="polyBounds"></param> + /// <param name="edges"></param> + /// <param name="point"></param> + /// <returns></returns> + internal static bool PointInPolygon(Vector2[] positions, Bounds2D polyBounds, Edge[] edges, Vector2 point) + { + int len = edges.Length * 2; + + Vector2 rayStart = polyBounds.center + Vector2.up * (polyBounds.size.y + 2f); + + int collisions = 0; + + for (int i = 0; i < len; i += 2) + { + if (GetLineSegmentIntersect(rayStart, point, positions[i], positions[i + 1])) + collisions++; + } + + return collisions % 2 != 0; + } + + /// <summary> + /// Is the 2d point within a 2d polygon? This overload is provided as a convenience for 2d arrays coming from cam.WorldToScreenPoint (which includes a Z value). + /// </summary> + /// <remarks> + /// Assumes polygon has already been tested with AABB + /// </remarks> + /// <param name="positions"></param> + /// <param name="polyBounds"></param> + /// <param name="edges"></param> + /// <param name="point"></param> + /// <returns></returns> + internal static bool PointInPolygon(Vector3[] positions, Bounds2D polyBounds, Edge[] edges, Vector2 point) + { + int len = edges.Length * 2; + + Vector2 rayStart = polyBounds.center + Vector2.up * (polyBounds.size.y + 2f); + + int collisions = 0; + + for (int i = 0; i < len; i += 2) + { + if (GetLineSegmentIntersect(rayStart, point, positions[i], positions[i + 1])) + collisions++; + } + + return collisions % 2 != 0; + } + + internal static bool RectIntersectsLineSegment(Rect rect, Vector2 a, Vector2 b) + { + return Clipping.RectContainsLineSegment(rect, a.x, a.y, b.x, b.y); + } + + internal static bool RectIntersectsLineSegment(Rect rect, Vector3 a, Vector3 b) + { + return Clipping.RectContainsLineSegment(rect, a.x, a.y, b.x, b.y); + } + + /// <summary> + /// Test if a raycast intersects a triangle. Does not test for culling. + /// </summary> + /// <remarks> + /// http://en.wikipedia.org/wiki/M%C3%B6ller%E2%80%93Trumbore_intersection_algorithm + /// http://www.cs.virginia.edu/~gfx/Courses/2003/ImageSynthesis/papers/Acceleration/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf + /// </remarks> + /// <param name="InRay"></param> + /// <param name="InTriangleA">First vertex position in the triangle.</param> + /// <param name="InTriangleB">Second vertex position in the triangle.</param> + /// <param name="InTriangleC">Third vertex position in the triangle.</param> + /// <param name="OutDistance">If triangle is intersected, this is the distance of intersection point from ray origin. Zero if not intersected.</param> + /// <param name="OutPoint">If triangle is intersected, this is the point of collision. Zero if not intersected.</param> + /// <returns>True if ray intersects, false if not.</returns> + public static bool RayIntersectsTriangle(Ray InRay, Vector3 InTriangleA, Vector3 InTriangleB, Vector3 InTriangleC, + out float OutDistance, out Vector3 OutPoint) + { + OutDistance = 0f; + OutPoint = Vector3.zero; + + //Find vectors for two edges sharing V1 + Vector3 e1 = InTriangleB - InTriangleA; + Vector3 e2 = InTriangleC - InTriangleA; + + //Begin calculating determinant - also used to calculate `u` parameter + Vector3 P = Vector3.Cross(InRay.direction, e2); + + //if determinant is near zero, ray lies in plane of triangle + float det = Vector3.Dot(e1, P); + + // Non-culling branch + // { + if (det > -Mathf.Epsilon && det < Mathf.Epsilon) + return false; + + float inv_det = 1f / det; + + //calculate distance from V1 to ray origin + Vector3 T = InRay.origin - InTriangleA; + + // Calculate u parameter and test bound + float u = Vector3.Dot(T, P) * inv_det; + + //The intersection lies outside of the triangle + if (u < 0f || u > 1f) + return false; + + //Prepare to test v parameter + Vector3 Q = Vector3.Cross(T, e1); + + //Calculate V parameter and test bound + float v = Vector3.Dot(InRay.direction, Q) * inv_det; + + //The intersection lies outside of the triangle + if (v < 0f || u + v > 1f) + return false; + + float t = Vector3.Dot(e2, Q) * inv_det; + // } + + if (t > Mathf.Epsilon) + { + //ray intersection + OutDistance = t; + + OutPoint.x = (u * InTriangleB.x + v * InTriangleC.x + (1 - (u + v)) * InTriangleA.x); + OutPoint.y = (u * InTriangleB.y + v * InTriangleC.y + (1 - (u + v)) * InTriangleA.y); + OutPoint.z = (u * InTriangleB.z + v * InTriangleC.z + (1 - (u + v)) * InTriangleA.z); + + return true; + } + + return false; + } + + // Temporary vector3 values + static Vector3 tv1, tv2, tv3, tv4; + + /// <summary> + /// Non-allocating version of Ray / Triangle intersection. + /// </summary> + /// <param name="origin"></param> + /// <param name="dir"></param> + /// <param name="vert0"></param> + /// <param name="vert1"></param> + /// <param name="vert2"></param> + /// <param name="distance"></param> + /// <param name="normal"></param> + /// <returns></returns> + internal static bool RayIntersectsTriangle2(Vector3 origin, + Vector3 dir, + Vector3 vert0, + Vector3 vert1, + Vector3 vert2, + ref float distance, + ref Vector3 normal) + { + Math.Subtract(vert0, vert1, ref tv1); + Math.Subtract(vert0, vert2, ref tv2); + + Math.Cross(dir, tv2, ref tv4); + float det = Vector3.Dot(tv1, tv4); + + if (det < Mathf.Epsilon) + return false; + + Math.Subtract(vert0, origin, ref tv3); + + float u = Vector3.Dot(tv3, tv4); + + if (u < 0f || u > det) + return false; + + Math.Cross(tv3, tv1, ref tv4); + + float v = Vector3.Dot(dir, tv4); + + if (v < 0f || u + v > det) + return false; + + distance = Vector3.Dot(tv2, tv4) * (1f / det); + Math.Cross(tv1, tv2, ref normal); + + return true; + } + + /// <summary> + /// Return the secant of a radian. + /// Equivalent to: `1f / cos(x)`. + /// </summary> + /// <param name="x">The radian to calculate the secant of.</param> + /// <returns>The secant of radian x.</returns> + public static float Secant(float x) + { + return 1f / Mathf.Cos(x); + } + + /// <summary> + /// Calculate the unit vector normal of 3 points. + /// <br /> + /// Equivalent to: `B-A x C-A` + /// </summary> + /// <param name="p0">First point of the triangle.</param> + /// <param name="p1">Second point of the triangle.</param> + /// <param name="p2">Third point of the triangle.</param> + /// <returns></returns> + public static Vector3 Normal(Vector3 p0, Vector3 p1, Vector3 p2) + { + float ax = p1.x - p0.x, + ay = p1.y - p0.y, + az = p1.z - p0.z, + bx = p2.x - p0.x, + by = p2.y - p0.y, + bz = p2.z - p0.z; + + Vector3 cross = Vector3.zero; + + Cross(ax, ay, az, bx, by, bz, ref cross.x, ref cross.y, ref cross.z); + + if (cross.magnitude < Mathf.Epsilon) + { + return new Vector3(0f, 0f, 0f); // bad triangle + } + else + { + cross.Normalize(); + return cross; + } + } + + /// <summary> + /// Calculate the normal of a set of vertices. If indexes is null or not divisible by 3, the first 3 positions are used. If indexes is valid, an average of each set of 3 is taken. + /// </summary> + /// <param name="vertices"></param> + /// <param name="indexes"></param> + /// <returns></returns> + internal static Vector3 Normal(IList<Vertex> vertices, IList<int> indexes = null) + { + if (indexes == null || indexes.Count % 3 != 0) + { + Vector3 cross = Vector3.Cross(vertices[1].position - vertices[0].position, vertices[2].position - vertices[0].position); + cross.Normalize(); + return cross; + } + else + { + int len = indexes.Count; + Vector3 nrm = Vector3.zero; + + for (int i = 0; i < len; i += 3) + nrm += Normal(vertices[indexes[i]].position, vertices[indexes[i + 1]].position, vertices[indexes[i + 2]].position); + + nrm /= (len / 3f); + nrm.Normalize(); + + return nrm; + } + } + + /// <summary> + /// Finds the best normal for a face. + /// </summary> + /// <param name="mesh">The mesh that the target face belongs to.</param> + /// <param name="face">The face to calculate a normal for.</param> + /// <returns>A normal that most closely matches the face orientation in model corrdinates.</returns> + public static Vector3 Normal(ProBuilderMesh mesh, Face face) + { + if (mesh == null || face == null) + throw new ArgumentNullException("mesh"); + + var positions = mesh.positionsInternal; + + // if the face is just a quad, use the first + // triangle normal. + // otherwise it's not safe to assume that the face + // has even generally uniform normals + Vector3 nrm = Normal( + positions[face.indexesInternal[0]], + positions[face.indexesInternal[1]], + positions[face.indexesInternal[2]]); + + if (face.indexesInternal.Length > 6) + { + Vector3 prj = Projection.FindBestPlane(positions, face.distinctIndexesInternal).normal; + + if (Vector3.Dot(nrm, prj) < 0f) + { + nrm.x = -prj.x; + nrm.y = -prj.y; + nrm.z = -prj.z; + } + else + { + nrm.x = prj.x; + nrm.y = prj.y; + nrm.z = prj.z; + } + } + + return nrm; + } + + /// <summary> + /// Get the average normal of a set of individual triangles. + /// If p.Length % 3 == 0, finds the normal of each triangle in a face and returns the average. Otherwise return the normal of the first three points. + /// </summary> + /// <param name="p"></param> + /// <returns></returns> + internal static Vector3 Normal(IList<Vector3> p) + { + if (p == null || p.Count < 3) + return Vector3.zero; + + int c = p.Count; + + if (c % 3 == 0) + { + Vector3 nrm = Vector3.zero; + for (int i = 0; i < c; i += 3) + nrm += Normal(p[i + 0], p[i + 1], p[i + 2]); + nrm /= (c / 3f); + nrm.Normalize(); + return nrm; + } + Vector3 cross = Vector3.Cross(p[1] - p[0], p[2] - p[0]); + + if (cross.magnitude < Mathf.Epsilon) + return new Vector3(0f, 0f, 0f); // bad triangle + + return cross.normalized; + } + + /// <summary> + /// Returns the first normal, tangent, and bitangent for this face using the first triangle available for tangent and bitangent. + /// </summary> + /// <param name="mesh">The mesh that the target face belongs to.</param> + /// <param name="face">The face to calculate normal information for.</param> + /// <returns>The normal, bitangent, and tangent for the face.</returns> + public static Normal NormalTangentBitangent(ProBuilderMesh mesh, Face face) + { + if (mesh == null || face == null || face.indexesInternal.Length < 3) + throw new System.ArgumentNullException("mesh", "Cannot find normal, tangent, and bitangent for null object, or faces with < 3 indexes."); + + if (mesh.texturesInternal == null || mesh.texturesInternal.Length != mesh.vertexCount) + throw new ArgumentException("Mesh textures[0] channel is not present, cannot calculate tangents."); + + var nrm = Math.Normal(mesh, face); + + Vector3 tan1 = Vector3.zero; + Vector3 tan2 = Vector3.zero; + Vector4 tan = new Vector4(0f, 0f, 0f, 1f); + + long i1 = face.indexesInternal[0]; + long i2 = face.indexesInternal[1]; + long i3 = face.indexesInternal[2]; + + Vector3 v1 = mesh.positionsInternal[i1]; + Vector3 v2 = mesh.positionsInternal[i2]; + Vector3 v3 = mesh.positionsInternal[i3]; + + Vector2 w1 = mesh.texturesInternal[i1]; + Vector2 w2 = mesh.texturesInternal[i2]; + Vector2 w3 = mesh.texturesInternal[i3]; + + float x1 = v2.x - v1.x; + float x2 = v3.x - v1.x; + float y1 = v2.y - v1.y; + float y2 = v3.y - v1.y; + float z1 = v2.z - v1.z; + float z2 = v3.z - v1.z; + + float s1 = w2.x - w1.x; + float s2 = w3.x - w1.x; + float t1 = w2.y - w1.y; + float t2 = w3.y - w1.y; + + float r = 1.0f / (s1 * t2 - s2 * t1); + + Vector3 sdir = new Vector3((t2 * x1 - t1 * x2) * r, (t2 * y1 - t1 * y2) * r, (t2 * z1 - t1 * z2) * r); + Vector3 tdir = new Vector3((s1 * x2 - s2 * x1) * r, (s1 * y2 - s2 * y1) * r, (s1 * z2 - s2 * z1) * r); + + tan1 += sdir; + tan2 += tdir; + + Vector3 n = nrm; + Vector3.OrthoNormalize(ref n, ref tan1); + + tan.x = tan1.x; + tan.y = tan1.y; + tan.z = tan1.z; + + tan.w = (Vector3.Dot(Vector3.Cross(n, tan1), tan2) < 0.0f) ? -1.0f : 1.0f; + + return new Normal() + { + normal = nrm, + tangent = tan, + bitangent = Vector3.Cross(nrm, ((Vector3)tan) * tan.w) + }; + } + + /// <summary> + /// Is the direction within epsilon of Up, Down, Left, Right, Forward, or Backwards? + /// </summary> + /// <param name="v"></param> + /// <param name="epsilon"></param> + /// <returns></returns> + internal static bool IsCardinalAxis(Vector3 v, float epsilon = k_FltEpsilon) + { + if (v == Vector3.zero) + return false; + + v.Normalize(); + + return (1f - Mathf.Abs(Vector3.Dot(Vector3.up, v))) < epsilon || + (1f - Mathf.Abs(Vector3.Dot(Vector3.forward, v))) < epsilon || + (1f - Mathf.Abs(Vector3.Dot(Vector3.right, v))) < epsilon; + } + + /// <summary> + /// Component-wise division. + /// </summary> + /// <param name="v"></param> + /// <param name="o"></param> + /// <returns></returns> + internal static Vector2 DivideBy(this Vector2 v, Vector2 o) + { + return new Vector2(v.x / o.x, v.y / o.y); + } + + /// <summary> + /// Component-wise division. + /// </summary> + /// <param name="v"></param> + /// <param name="o"></param> + /// <returns></returns> + internal static Vector3 DivideBy(this Vector3 v, Vector3 o) + { + return new Vector3(v.x / o.x, v.y / o.y, v.z / o.z); + } + + /// <summary> + /// Find the largest value in an array. + /// </summary> + /// <param name="array"></param> + /// <typeparam name="T"></typeparam> + /// <returns></returns> + internal static T Max<T>(T[] array) where T : System.IComparable<T> + { + if (array == null || array.Length < 1) + return default(T); + + T max = array[0]; + for (int i = 1; i < array.Length; i++) + if (array[i].CompareTo(max) >= 0) + max = array[i]; + return max; + } + + /// <summary> + /// Find the smallest value in an array. + /// </summary> + /// <param name="array"></param> + /// <typeparam name="T"></typeparam> + /// <returns></returns> + internal static T Min<T>(T[] array) where T : System.IComparable<T> + { + if (array == null || array.Length < 1) + return default(T); + + T min = array[0]; + for (int i = 1; i < array.Length; i++) + if (array[i].CompareTo(min) < 0) + min = array[i]; + return min; + } + + /// <summary> + /// Return the largest axis in a Vector3. + /// </summary> + /// <param name="v"></param> + /// <returns></returns> + internal static float LargestValue(Vector3 v) + { + if (v.x > v.y && v.x > v.z) return v.x; + if (v.y > v.x && v.y > v.z) return v.y; + return v.z; + } + + /// <summary> + /// Return the largest axis in a Vector2. + /// </summary> + /// <param name="v"></param> + /// <returns></returns> + internal static float LargestValue(Vector2 v) + { + return (v.x > v.y) ? v.x : v.y; + } + + /// <summary> + /// The smallest X and Y value found in an array of Vector2. May or may not belong to the same Vector2. + /// </summary> + /// <param name="v"></param> + /// <returns></returns> + internal static Vector2 SmallestVector2(Vector2[] v) + { + int len = v.Length; + Vector2 l = v[0]; + for (int i = 0; i < len; i++) + { + if (v[i].x < l.x) l.x = v[i].x; + if (v[i].y < l.y) l.y = v[i].y; + } + return l; + } + + /// <summary> + /// The smallest X and Y value found in an array of Vector2. May or may not belong to the same Vector2. + /// </summary> + /// <param name="v"></param> + /// <param name="indexes">Indexes of v array to test.</param> + /// <returns></returns> + internal static Vector2 SmallestVector2(Vector2[] v, int[] indexes) + { + int len = indexes.Length; + Vector2 l = v[indexes[0]]; + for (int i = 0; i < len; i++) + { + if (v[indexes[i]].x < l.x) l.x = v[indexes[i]].x; + if (v[indexes[i]].y < l.y) l.y = v[indexes[i]].y; + } + return l; + } + + internal static Vector2 SmallestVector2(Vector2[] v, IList<int> indexes) + { + int len = indexes.Count; + Vector2 l = v[indexes[0]]; + for (int i = 0; i < len; i++) + { + if (v[indexes[i]].x < l.x) l.x = v[indexes[i]].x; + if (v[indexes[i]].y < l.y) l.y = v[indexes[i]].y; + } + return l; + } + + /// <summary> + /// The largest X and Y value in an array. May or may not belong to the same Vector2. + /// </summary> + /// <param name="v"></param> + /// <returns></returns> + internal static Vector2 LargestVector2(Vector2[] v) + { + int len = v.Length; + Vector2 l = v[0]; + for (int i = 0; i < len; i++) + { + if (v[i].x > l.x) l.x = v[i].x; + if (v[i].y > l.y) l.y = v[i].y; + } + return l; + } + + internal static Vector2 LargestVector2(Vector2[] v, int[] indexes) + { + int len = indexes.Length; + Vector2 l = v[indexes[0]]; + for (int i = 0; i < len; i++) + { + if (v[indexes[i]].x > l.x) l.x = v[indexes[i]].x; + if (v[indexes[i]].y > l.y) l.y = v[indexes[i]].y; + } + return l; + } + + internal static Vector2 LargestVector2(Vector2[] v, IList<int> indexes) + { + int len = indexes.Count; + Vector2 l = v[indexes[0]]; + for (int i = 0; i < len; i++) + { + if (v[indexes[i]].x > l.x) l.x = v[indexes[i]].x; + if (v[indexes[i]].y > l.y) l.y = v[indexes[i]].y; + } + return l; + } + + /// <summary> + /// Creates an AABB with a set of vertices. + /// </summary> + /// <param name="positions"></param> + /// <returns></returns> + internal static Bounds GetBounds(Vector3[] positions, IList<int> indices = null) + { + bool hasIndices = indices != null; + + if ((hasIndices && indices.Count < 1) || positions.Length < 1) + return default(Bounds); + + Vector3 min = positions[hasIndices ? indices[0] : 0]; + Vector3 max = min; + + if (hasIndices) + { + for (int i = 1, c = indices.Count; i < c; i++) + { + min.x = Mathf.Min(positions[indices[i]].x, min.x); + max.x = Mathf.Max(positions[indices[i]].x, max.x); + + min.y = Mathf.Min(positions[indices[i]].y, min.y); + max.y = Mathf.Max(positions[indices[i]].y, max.y); + + min.z = Mathf.Min(positions[indices[i]].z, min.z); + max.z = Mathf.Max(positions[indices[i]].z, max.z); + } + } + else + { + for (int i = 1, c = positions.Length; i < c; i++) + { + min.x = Mathf.Min(positions[i].x, min.x); + max.x = Mathf.Max(positions[i].x, max.x); + + min.y = Mathf.Min(positions[i].y, min.y); + max.y = Mathf.Max(positions[i].y, max.y); + + min.z = Mathf.Min(positions[i].z, min.z); + max.z = Mathf.Max(positions[i].z, max.z); + } + } + + return new Bounds((min + max) * .5f, max - min); + } + + /// <summary> + /// Creates an AABB with a set of vertices. + /// </summary> + /// <param name="positions"></param> + /// <returns></returns> + internal static Bounds GetBounds(Vector3[] positions, IEnumerable<Face> faces) + { + bool initialized = false; + + Vector3 min = Vector3.zero; + Vector3 max = min; + + foreach (var face in faces) + { + var indices = face.distinctIndexesInternal; + + if (!initialized) + { + initialized = true; + min = positions[indices[0]]; + max = positions[indices[0]]; + } + + for (int i = 0, c = indices.Length; i < c; i++) + { + min.x = Mathf.Min(positions[indices[i]].x, min.x); + max.x = Mathf.Max(positions[indices[i]].x, max.x); + + min.y = Mathf.Min(positions[indices[i]].y, min.y); + max.y = Mathf.Max(positions[indices[i]].y, max.y); + + min.z = Mathf.Min(positions[indices[i]].z, min.z); + max.z = Mathf.Max(positions[indices[i]].z, max.z); + } + } + + return new Bounds((min + max) * .5f, max - min); + } + + static Vector3 ComponentMin(Vector3 a, Vector3 b) + { + return new Vector3(Mathf.Min(a.x, b.x), Mathf.Min(a.y, b.y), Mathf.Min(a.z, b.z)); + } + + static Vector3 ComponentMax(Vector3 a, Vector3 b) + { + return new Vector3(Mathf.Max(a.x, b.x), Mathf.Max(a.y, b.y), Mathf.Max(a.z, b.z)); + } + + /// <summary> + /// Creates an AABB with a set of vertices. + /// </summary> + /// <param name="positions"></param> + /// <returns></returns> + internal static Bounds GetBounds(Vector3[] positions, IEnumerable<Edge> edges) + { + bool initialized = false; + + Vector3 min = Vector3.zero; + Vector3 max = min; + + foreach (var edge in edges) + { + if (!initialized) + { + initialized = true; + min = positions[edge.a]; + max = positions[edge.a]; + } + + min = ComponentMin(positions[edge.a], min); + max = ComponentMax(positions[edge.a], max); + + min = ComponentMin(positions[edge.b], min); + max = ComponentMax(positions[edge.b], max); + } + + return new Bounds((min + max) * .5f, max - min); + } + + /// <summary> + /// Gets the average of a vector array. + /// </summary> + /// <param name="array">The array</param> + /// <param name="indexes">If provided the average is the sum of all points contained in the indexes array. If not, the entire v array is used.</param> + /// <returns>Average Vector3 of passed vertex array.</returns> + public static Vector2 Average(IList<Vector2> array, IList<int> indexes = null) + { + if (array == null) + throw new ArgumentNullException("array"); + + Vector2 sum = Vector2.zero; + float len = indexes == null ? array.Count : indexes.Count; + + if (indexes == null) + for (int i = 0; i < len; i++) sum += array[i]; + else + for (int i = 0; i < len; i++) sum += array[indexes[i]]; + + return sum / len; + } + + /// <summary> + /// Gets the average of a vector array. + /// </summary> + /// <param name="array">The array.</param> + /// <param name="indexes">If provided the average is the sum of all points contained in the indexes array. If not, the entire v array is used.</param> + /// <returns>Average Vector3 of passed vertex array.</returns> + public static Vector3 Average(IList<Vector3> array, IList<int> indexes = null) + { + if (array == null) + throw new ArgumentNullException("array"); + + Vector3 sum = Vector3.zero; + + float len = indexes == null ? array.Count : indexes.Count; + + if (indexes == null) + { + for (int i = 0; i < len; i++) + { + sum.x += array[i].x; + sum.y += array[i].y; + sum.z += array[i].z; + } + } + else + { + for (int i = 0; i < len; i++) + { + sum.x += array[indexes[i]].x; + sum.y += array[indexes[i]].y; + sum.z += array[indexes[i]].z; + } + } + + return sum / len; + } + + /// <summary> + /// Average a set of vertices. + /// </summary> + /// <param name="list">The collection from which to select indices.</param> + /// <param name="selector">The function used to get vertex values.</param> + /// <param name="indexes"></param> + /// <typeparam name="T"></typeparam> + /// <returns></returns> + internal static Vector3 Average<T>(this IList<T> list, Func<T, Vector3> selector, IList<int> indexes = null) + { + if (list == null) + throw new ArgumentNullException("list"); + + if (selector == null) + throw new ArgumentNullException("selector"); + + Vector3 sum = Vector3.zero; + float len = indexes == null ? list.Count : indexes.Count; + + if (indexes == null) + { + for (int i = 0; i < len; i++) + sum += selector(list[i]); + } + else + { + for (int i = 0; i < len; i++) + sum += selector(list[indexes[i]]); + } + + return sum / len; + } + + public static Vector4 Average(IList<Vector4> v, IList<int> indexes = null) + { + Vector4 sum = Vector4.zero; + float len = indexes == null ? v.Count : indexes.Count; + if (indexes == null) + for (int i = 0; i < len; i++) sum += v[i]; + else + for (int i = 0; i < len; i++) sum += v[indexes[i]]; + return sum / len; + } + + internal static Color Average(IList<Color> c, IList<int> indexes = null) + { + Color sum = c[0]; + float len = indexes == null ? c.Count : indexes.Count; + if (indexes == null) + for (int i = 1; i < len; i++) sum += c[i]; + else + for (int i = 1; i < len; i++) sum += c[indexes[i]]; + return sum / len; + } + + /// <summary> + /// Compares two Vector2 values component-wise, allowing for a margin of error. + /// </summary> + /// <param name="a">First Vector2 value.</param> + /// <param name="b">Second Vector2 value.</param> + /// <param name="delta">The maximum difference between components allowed.</param> + /// <returns>True if a and b components are respectively within delta distance of one another.</returns> + internal static bool Approx2(this Vector2 a, Vector2 b, float delta = k_FltCompareEpsilon) + { + return + Mathf.Abs(a.x - b.x) < delta && + Mathf.Abs(a.y - b.y) < delta; + } + + /// <summary> + /// Compares two Vector3 values component-wise, allowing for a margin of error. + /// </summary> + /// <param name="a">First Vector3 value.</param> + /// <param name="b">Second Vector3 value.</param> + /// <param name="delta">The maximum difference between components allowed.</param> + /// <returns>True if a and b components are respectively within delta distance of one another.</returns> + internal static bool Approx3(this Vector3 a, Vector3 b, float delta = k_FltCompareEpsilon) + { + return + Mathf.Abs(a.x - b.x) < delta && + Mathf.Abs(a.y - b.y) < delta && + Mathf.Abs(a.z - b.z) < delta; + } + + /// <summary> + /// Compares two Vector4 values component-wise, allowing for a margin of error. + /// </summary> + /// <param name="a">First Vector4 value.</param> + /// <param name="b">Second Vector4 value.</param> + /// <param name="delta">The maximum difference between components allowed.</param> + /// <returns>True if a and b components are respectively within delta distance of one another.</returns> + + internal static bool Approx4(this Vector4 a, Vector4 b, float delta = k_FltCompareEpsilon) + { + return + Mathf.Abs(a.x - b.x) < delta && + Mathf.Abs(a.y - b.y) < delta && + Mathf.Abs(a.z - b.z) < delta && + Mathf.Abs(a.w - b.w) < delta; + } + + /// <summary> + /// Compares two Color values component-wise, allowing for a margin of error. + /// </summary> + /// <param name="a">First Color value.</param> + /// <param name="b">Second Color value.</param> + /// <param name="delta">The maximum difference between components allowed.</param> + /// <returns>True if a and b components are respectively within delta distance of one another.</returns> + internal static bool ApproxC(this Color a, Color b, float delta = k_FltCompareEpsilon) + { + return Mathf.Abs(a.r - b.r) < delta && + Mathf.Abs(a.g - b.g) < delta && + Mathf.Abs(a.b - b.b) < delta && + Mathf.Abs(a.a - b.a) < delta; + } + + /// <summary> + /// Compares two float values component-wise, allowing for a margin of error. + /// </summary> + /// <param name="a">First float value.</param> + /// <param name="b">Second float value.</param> + /// <param name="delta">The maximum difference between components allowed.</param> + /// <returns>True if a and b components are respectively within delta distance of one another.</returns> + + internal static bool Approx(this float a, float b, float delta = k_FltCompareEpsilon) + { + return Mathf.Abs(b - a) < Mathf.Abs(delta); + } + + /// <summary> + /// Wrap value to range. + /// </summary> + /// <remarks> + /// http://stackoverflow.com/questions/707370/clean-efficient-algorithm-for-wrapping-integers-in-c + /// </remarks> + /// <param name="value"></param> + /// <param name="lowerBound"></param> + /// <param name="upperBound"></param> + /// <returns></returns> + internal static int Wrap(int value, int lowerBound, int upperBound) + { + int range_size = upperBound - lowerBound + 1; + + if (value < lowerBound) + value += range_size * ((lowerBound - value) / range_size + 1); + + return lowerBound + (value - lowerBound) % range_size; + } + + /// <summary> + /// Clamp a int to a range. + /// </summary> + /// <param name="value">The value to clamp.</param> + /// <param name="lowerBound">The lowest value that the clamped value can be.</param> + /// <param name="upperBound">The highest value that the clamped value can be.</param> + /// <returns>A value clamped with the range of lowerBound and upperBound.</returns> + public static int Clamp(int value, int lowerBound, int upperBound) + { + return value < lowerBound + ? lowerBound + : value > upperBound + ? upperBound + : value; + } + + internal static Vector3 Clamp(Vector3 value, Vector3 lowerBound, Vector3 upperBound) + { + return Vector3.Max(Vector3.Min(value, upperBound), lowerBound); + } + + internal static Vector3 ToSignedMask(this Vector3 vec, float delta = k_FltEpsilon) + { + return new Vector3( + Mathf.Abs(vec.x) > delta ? vec.x / Mathf.Abs(vec.x) : 0f, + Mathf.Abs(vec.y) > delta ? vec.y / Mathf.Abs(vec.y) : 0f, + Mathf.Abs(vec.z) > delta ? vec.z / Mathf.Abs(vec.z) : 0f + ); + } + + internal static Vector3 Abs(this Vector3 v) + { + return new Vector3(Mathf.Abs(v.x), Mathf.Abs(v.y), Mathf.Abs(v.z)); + } + + internal static int IntSum(this Vector3 mask) + { + return (int)Mathf.Abs(mask.x) + (int)Mathf.Abs(mask.y) + (int)Mathf.Abs(mask.z); + } + + internal static float Sum(this Vector3 v) + { + return Mathf.Abs(v.x) + Mathf.Abs(v.y) + Mathf.Abs(v.z); + } + + /// <summary> + /// Non-allocating cross product. + /// </summary> + /// <remarks> + /// `ref` does not box with primitive types (https://msdn.microsoft.com/en-us/library/14akc2c7.aspx) + /// </remarks> + /// <param name="a"></param> + /// <param name="b"></param> + /// <param name="x"></param> + /// <param name="y"></param> + /// <param name="z"></param> + internal static void Cross(Vector3 a, Vector3 b, ref float x, ref float y, ref float z) + { + x = a.y * b.z - a.z * b.y; + y = a.z * b.x - a.x * b.z; + z = a.x * b.y - a.y * b.x; + } + + /// <summary> + /// Non-allocating cross product. + /// </summary> + /// <param name="a"></param> + /// <param name="b"></param> + /// <param name="res"></param> + internal static void Cross(Vector3 a, Vector3 b, ref Vector3 res) + { + res.x = a.y * b.z - a.z * b.y; + res.y = a.z * b.x - a.x * b.z; + res.z = a.x * b.y - a.y * b.x; + } + + /// <summary> + /// Non-allocating cross product. + /// </summary> + /// <param name="ax"></param> + /// <param name="ay"></param> + /// <param name="az"></param> + /// <param name="bx"></param> + /// <param name="by"></param> + /// <param name="bz"></param> + /// <param name="x"></param> + /// <param name="y"></param> + /// <param name="z"></param> + internal static void Cross(float ax, float ay, float az, float bx, float by, float bz, ref float x, ref float y, ref float z) + { + x = ay * bz - az * by; + y = az * bx - ax * bz; + z = ax * by - ay * bx; + } + + /// <summary> + /// Vector subtraction without allocating a new vector. + /// </summary> + /// <param name="a"></param> + /// <param name="b"></param> + /// <param name="res"></param> + internal static void Subtract(Vector3 a, Vector3 b, ref Vector3 res) + { + res.x = b.x - a.x; + res.y = b.y - a.y; + res.z = b.z - a.z; + } + + internal static int Min(int a, int b) + { + return a < b ? a : b; + } + + internal static int Max(int a, int b) + { + return a > b ? a : b; + } + + internal static bool IsNumber(float value) + { + return !(float.IsInfinity(value) || float.IsNaN(value)); + } + + internal static bool IsNumber(Vector2 value) + { + return IsNumber(value.x) && IsNumber(value.y); + } + + internal static bool IsNumber(Vector3 value) + { + return IsNumber(value.x) && IsNumber(value.y) && IsNumber(value.z); + } + + internal static bool IsNumber(Vector4 value) + { + return IsNumber(value.x) && IsNumber(value.y) && IsNumber(value.z) && IsNumber(value.w); + } + + internal static float MakeNonZero(float value, float min = .0001f) + { + if (float.IsNaN(value) || float.IsInfinity(value) || Mathf.Abs(value) < min) + return min * Mathf.Sign(value); + return value; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Math.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Math.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..54e823f40f1bef7512722acae40d92bdbb12e361 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Math.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0b49a83783b3e5944b25d6c66eaa11e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshHandle.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshHandle.cs new file mode 100644 index 0000000000000000000000000000000000000000..6bb84220244afc9e2fbcbdc9d78cc7637f5e4770 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshHandle.cs @@ -0,0 +1,30 @@ +using UnityEngine; +using System.Collections; + +namespace UnityEngine.ProBuilder +{ + sealed class MeshHandle + { + Transform m_Transform; + Mesh m_Mesh; + + public Mesh mesh + { + get { return m_Mesh; } + } + + public MeshHandle(Transform transform, Mesh mesh) + { + m_Transform = transform; + m_Mesh = mesh; + } + + public void DrawMeshNow(int submeshIndex) + { + if (m_Transform == null || m_Mesh == null) + return; + + Graphics.DrawMeshNow(m_Mesh, m_Transform.localToWorldMatrix, submeshIndex); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshHandle.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshHandle.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..870a2cca0fbc2f757b8dcfd4796ee29545fb5630 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshHandle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1113544478cee6a4caafac0b3b7a06f1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshHandles.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshHandles.cs new file mode 100644 index 0000000000000000000000000000000000000000..bee73f017ec7126ac3abced94d25a54e7322a966 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshHandles.cs @@ -0,0 +1,329 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine.Rendering; + +namespace UnityEngine.ProBuilder +{ + static class MeshHandles + { + static List<Vector3> s_Vector2List = new List<Vector3>(); + static List<Vector3> s_Vector3List = new List<Vector3>(); + static List<Vector4> s_Vector4List = new List<Vector4>(); + static List<int> s_IndexList = new List<int>(); + static List<int> s_SharedVertexIndexList = new List<int>(); + + static readonly Vector2 k_Billboard0 = new Vector2(-1f, -1f); + static readonly Vector2 k_Billboard1 = new Vector2(-1f, 1f); + static readonly Vector2 k_Billboard2 = new Vector2( 1f, -1f); + static readonly Vector2 k_Billboard3 = new Vector2( 1f, 1f); + + internal static void CreateFaceMesh(ProBuilderMesh mesh, Mesh target) + { + target.Clear(); + target.vertices = mesh.positionsInternal; + target.triangles = mesh.selectedFacesInternal.SelectMany(x => x.indexes).ToArray(); + } + + internal static void CreateEdgeMesh(ProBuilderMesh mesh, Mesh target) + { + int edgeCount = 0; + int faceCount = mesh.faceCount; + + for (int i = 0; i < faceCount; i++) + edgeCount += mesh.facesInternal[i].edgesInternal.Length; + + s_IndexList.Clear(); + s_IndexList.Capacity = edgeCount * 2; + + int edgeIndex = 0; + + for (int i = 0; i < faceCount && edgeIndex < edgeCount; i++) + { + for (int n = 0; n < mesh.facesInternal[i].edgesInternal.Length && edgeIndex < edgeCount; n++) + { + var edge = mesh.facesInternal[i].edgesInternal[n]; + s_IndexList.Add(edge.a); + s_IndexList.Add(edge.b); + + edgeIndex++; + } + } + + target.Clear(); + target.indexFormat = edgeCount * 2 > ushort.MaxValue ? Rendering.IndexFormat.UInt16 : Rendering.IndexFormat.UInt32; + target.name = "ProBuilder::EdgeMesh" + target.GetInstanceID(); + target.vertices = mesh.positionsInternal; + target.subMeshCount = 1; +#if UNITY_2019_3_OR_NEWER + target.SetIndices(s_IndexList, MeshTopology.Lines, 0); +#else + target.SetIndices(s_IndexList.ToArray(), MeshTopology.Lines, 0); +#endif + } + + internal static void CreateEdgeMesh(ProBuilderMesh mesh, Mesh target, Edge[] edges) + { + int edgeCount = edges.Length; + int vertexCount = edgeCount * 2; + + s_IndexList.Clear(); + s_IndexList.Capacity = vertexCount; + + for (int n = 0; n < edgeCount; n++) + { + var edge = edges[n]; + s_IndexList.Add(edge.a); + s_IndexList.Add(edge.b); + } + + target.Clear(); + target.indexFormat = vertexCount > ushort.MaxValue ? Rendering.IndexFormat.UInt16 : Rendering.IndexFormat.UInt32; + target.name = "ProBuilder::EdgeMesh" + target.GetInstanceID(); + target.vertices = mesh.positionsInternal; + target.subMeshCount = 1; +#if UNITY_2019_3_OR_NEWER + target.SetIndices(s_IndexList, MeshTopology.Lines, 0); +#else + target.SetIndices(s_IndexList.ToArray(), MeshTopology.Lines, 0); +#endif + } + + internal static void CreateVertexMesh(ProBuilderMesh mesh, Mesh target) + { + s_SharedVertexIndexList.Clear(); + int sharedVertexCount = mesh.sharedVerticesInternal.Length; + s_SharedVertexIndexList.Capacity = sharedVertexCount; + + for (int i = 0; i < sharedVertexCount; i++) + s_SharedVertexIndexList.Add(mesh.sharedVerticesInternal[i][0]); + + CreateVertexMesh(mesh, target, s_SharedVertexIndexList); + } + + internal static void CreateVertexMesh(ProBuilderMesh mesh, Mesh target, IList<int> indexes) + { + if (BuiltinMaterials.geometryShadersSupported) + CreatePointMesh(mesh.positionsInternal, indexes, target); + else + CreatePointBillboardMesh(mesh.positionsInternal, indexes, target); + } + + static void CreatePointMesh(Vector3[] positions, IList<int> indexes, Mesh target) + { + int vertexCount = positions.Length; + target.Clear(); + target.indexFormat = vertexCount > ushort.MaxValue ? Rendering.IndexFormat.UInt16 : Rendering.IndexFormat.UInt32; + target.name = "ProBuilder::PointMesh"; + target.vertices = positions; + target.subMeshCount = 1; + + if(indexes is int[]) + target.SetIndices((int[]) indexes, MeshTopology.Points, 0); +#if UNITY_2019_3_OR_NEWER + else if(indexes is List<int>) + target.SetIndices((List<int>) indexes, MeshTopology.Points, 0); +#endif + else + target.SetIndices(indexes.ToArray(), MeshTopology.Points, 0); + } + + internal static void CreatePointBillboardMesh(IList<Vector3> positions, Mesh target) + { + var pointCount = positions.Count; + var vertexCount = pointCount * 4; + + s_Vector2List.Clear(); + s_Vector3List.Clear(); + s_IndexList.Clear(); + s_Vector2List.Capacity = vertexCount; + s_Vector3List.Capacity = vertexCount; + s_IndexList.Capacity = vertexCount; + + for (int i = 0; i < pointCount; i++) + { + s_Vector3List.Add(positions[i]); + s_Vector3List.Add(positions[i]); + s_Vector3List.Add(positions[i]); + s_Vector3List.Add(positions[i]); + + s_Vector2List.Add(k_Billboard0); + s_Vector2List.Add(k_Billboard1); + s_Vector2List.Add(k_Billboard2); + s_Vector2List.Add(k_Billboard3); + + s_IndexList.Add(i * 4 + 0); + s_IndexList.Add(i * 4 + 1); + s_IndexList.Add(i * 4 + 3); + s_IndexList.Add(i * 4 + 2); + } + + target.Clear(); + target.indexFormat = vertexCount > ushort.MaxValue ? Rendering.IndexFormat.UInt32 : Rendering.IndexFormat.UInt16; + target.SetVertices(s_Vector3List); + target.SetUVs(0, s_Vector2List); + target.subMeshCount = 1; +#if UNITY_2019_3_OR_NEWER + target.SetIndices(s_IndexList, MeshTopology.Quads, 0); +#else + target.SetIndices(s_IndexList.ToArray(), MeshTopology.Quads, 0); +#endif + } + + static void CreatePointBillboardMesh(IList<Vector3> positions, IList<int> indexes, Mesh target) + { + var pointCount = indexes.Count; + var vertexCount = pointCount * 4; + + s_Vector2List.Clear(); + s_Vector3List.Clear(); + s_IndexList.Clear(); + s_Vector2List.Capacity = vertexCount; + s_Vector3List.Capacity = vertexCount; + s_IndexList.Capacity = vertexCount; + + for (int i = 0; i < pointCount; i++) + { + var index = indexes[i]; + + s_Vector3List.Add(positions[index]); + s_Vector3List.Add(positions[index]); + s_Vector3List.Add(positions[index]); + s_Vector3List.Add(positions[index]); + + s_Vector2List.Add(k_Billboard0); + s_Vector2List.Add(k_Billboard1); + s_Vector2List.Add(k_Billboard2); + s_Vector2List.Add(k_Billboard3); + + s_IndexList.Add(i * 4 + 0); + s_IndexList.Add(i * 4 + 1); + s_IndexList.Add(i * 4 + 3); + s_IndexList.Add(i * 4 + 2); + } + + target.Clear(); + target.indexFormat = vertexCount > ushort.MaxValue ? Rendering.IndexFormat.UInt32 : Rendering.IndexFormat.UInt16; + target.SetVertices(s_Vector3List); + target.SetUVs(0, s_Vector2List); + target.subMeshCount = 1; +#if UNITY_2019_3_OR_NEWER + target.SetIndices(s_IndexList, MeshTopology.Quads, 0); +#else + target.SetIndices(s_IndexList.ToArray(), MeshTopology.Quads, 0); +#endif + } + + internal static void CreateEdgeBillboardMesh(ProBuilderMesh mesh, Mesh target) + { + target.Clear(); + const ushort k_MaxPointCountUShort = ushort.MaxValue / 4; + var lineCount = mesh.edgeCount; + + target.indexFormat = lineCount > k_MaxPointCountUShort + ? Rendering.IndexFormat.UInt32 + : Rendering.IndexFormat.UInt16; + + var vertices = mesh.positionsInternal; + + s_Vector3List.Clear(); + s_Vector4List.Clear(); + s_IndexList.Clear(); + s_Vector3List.Capacity = lineCount * 4; + s_Vector4List.Capacity = lineCount * 4; + s_IndexList.Capacity = lineCount * 4; + + int n = 0; + + foreach(var face in mesh.facesInternal) + { + foreach (var edge in face.edgesInternal) + { + Vector3 a = vertices[edge.a], b = vertices[edge.b]; + Vector3 c = b + (b - a); + + s_Vector3List.Add(a); + s_Vector3List.Add(a); + s_Vector3List.Add(b); + s_Vector3List.Add(b); + + s_Vector4List.Add(new Vector4(b.x, b.y, b.z, 1f)); + s_Vector4List.Add(new Vector4(b.x, b.y, b.z, -1f)); + s_Vector4List.Add(new Vector4(c.x, c.y, c.z, 1f)); + s_Vector4List.Add(new Vector4(c.x, c.y, c.z, -1f)); + + s_IndexList.Add(n + 0); + s_IndexList.Add(n + 1); + s_IndexList.Add(n + 3); + s_IndexList.Add(n + 2); + + n += 4; + } + } + + target.SetVertices(s_Vector3List); + target.SetTangents(s_Vector4List); + target.subMeshCount = 1; +#if UNITY_2019_3_OR_NEWER + target.SetIndices(s_IndexList, MeshTopology.Quads, 0); +#else + target.SetIndices(s_IndexList.ToArray(), MeshTopology.Quads, 0); +#endif + } + + internal static void CreateEdgeBillboardMesh(ProBuilderMesh mesh, Mesh target, ICollection<Edge> edges) + { + target.Clear(); + + const ushort k_MaxPointCountUShort = ushort.MaxValue / 4; + + var lineCount = edges.Count; + + target.indexFormat = lineCount > k_MaxPointCountUShort + ? Rendering.IndexFormat.UInt32 + : Rendering.IndexFormat.UInt16; + + var vertices = mesh.positionsInternal; + + s_Vector3List.Clear(); + s_Vector4List.Clear(); + s_IndexList.Clear(); + s_Vector3List.Capacity = lineCount * 4; + s_Vector4List.Capacity = lineCount * 4; + s_IndexList.Capacity = lineCount * 4; + + int n = 0; + + foreach (var edge in edges) + { + Vector3 a = vertices[edge.a], b = vertices[edge.b]; + Vector3 c = b + (b - a); + + s_Vector3List.Add(a); + s_Vector3List.Add(a); + s_Vector3List.Add(b); + s_Vector3List.Add(b); + + s_Vector4List.Add(new Vector4(b.x, b.y, b.z, 1f)); + s_Vector4List.Add(new Vector4(b.x, b.y, b.z, -1f)); + s_Vector4List.Add(new Vector4(c.x, c.y, c.z, 1f)); + s_Vector4List.Add(new Vector4(c.x, c.y, c.z, -1f)); + + s_IndexList.Add(n + 0); + s_IndexList.Add(n + 1); + s_IndexList.Add(n + 3); + s_IndexList.Add(n + 2); + + n += 4; + } + + target.SetVertices(s_Vector3List); + target.SetTangents(s_Vector4List); + target.subMeshCount = 1; +#if UNITY_2019_3_OR_NEWER + target.SetIndices(s_IndexList, MeshTopology.Quads, 0); +#else + target.SetIndices(s_IndexList.ToArray(), MeshTopology.Quads, 0); +#endif + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshHandles.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshHandles.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..51760aecc5d8b8141054b770189d70f30c62aa46 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshHandles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2734476e9b233c14987be5fbd0b43264 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..2c2a343818c97d47339dbb757d2ea7acd45a800f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshUtility.cs @@ -0,0 +1,596 @@ +using UnityEngine; +using System; +using System.Linq; +using System.Collections.Generic; +using System.Collections; +using System.Text; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Functions for generating mesh attributes and various other mesh utilities. + /// </summary> + public static class MeshUtility + { + /// <summary> + /// Create an array of @"UnityEngine.ProBuilder.Vertex" values that are ordered as individual triangles. This modifies the source mesh to match the new individual triangles format. + /// </summary> + /// <param name="mesh">The mesh to extract vertices from, and apply per-triangle topology to.</param> + /// <returns>A @"UnityEngine.ProBuilder.Vertex" array of the per-triangle vertices.</returns> + internal static Vertex[] GeneratePerTriangleMesh(Mesh mesh) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + Vertex[] vertices = mesh.GetVertices(); + int smc = mesh.subMeshCount; + Vertex[] tv = new Vertex[mesh.triangles.Length]; + int[][] triangles = new int[smc][]; + int triIndex = 0; + + for (int s = 0; s < smc; s++) + { + triangles[s] = mesh.GetTriangles(s); + int tl = triangles[s].Length; + + for (int i = 0; i < tl; i++) + { + tv[triIndex++] = new Vertex(vertices[triangles[s][i]]); + triangles[s][i] = triIndex - 1; + } + } + + Vertex.SetMesh(mesh, tv); + + mesh.subMeshCount = smc; + + for (int s = 0; s < smc; s++) + mesh.SetTriangles(triangles[s], s); + + return tv; + } + + /// <summary> + /// Generate tangents and apply them. + /// </summary> + /// <param name="mesh">The UnityEngine.Mesh mesh target.</param> + public static void GenerateTangent(Mesh mesh) + { + if (mesh == null) + throw new System.ArgumentNullException("mesh"); + + // http://answers.unity3d.com/questions/7789/calculating-tangents-vector4.html + + // speed up math by copying the mesh arrays + int[] triangles = mesh.triangles; + Vector3[] vertices = mesh.vertices; + Vector2[] uv = mesh.uv; + Vector3[] normals = mesh.normals; + + //variable definitions + int triangleCount = triangles.Length; + int vertexCount = vertices.Length; + + Vector3[] tan1 = new Vector3[vertexCount]; + Vector3[] tan2 = new Vector3[vertexCount]; + + Vector4[] tangents = new Vector4[vertexCount]; + + for (long a = 0; a < triangleCount; a += 3) + { + long i1 = triangles[a + 0]; + long i2 = triangles[a + 1]; + long i3 = triangles[a + 2]; + + Vector3 v1 = vertices[i1]; + Vector3 v2 = vertices[i2]; + Vector3 v3 = vertices[i3]; + + Vector2 w1 = uv[i1]; + Vector2 w2 = uv[i2]; + Vector2 w3 = uv[i3]; + + float x1 = v2.x - v1.x; + float x2 = v3.x - v1.x; + float y1 = v2.y - v1.y; + float y2 = v3.y - v1.y; + float z1 = v2.z - v1.z; + float z2 = v3.z - v1.z; + + float s1 = w2.x - w1.x; + float s2 = w3.x - w1.x; + float t1 = w2.y - w1.y; + float t2 = w3.y - w1.y; + + float r = 1.0f / (s1 * t2 - s2 * t1); + + Vector3 sdir = new Vector3((t2 * x1 - t1 * x2) * r, (t2 * y1 - t1 * y2) * r, (t2 * z1 - t1 * z2) * r); + Vector3 tdir = new Vector3((s1 * x2 - s2 * x1) * r, (s1 * y2 - s2 * y1) * r, (s1 * z2 - s2 * z1) * r); + + tan1[i1] += sdir; + tan1[i2] += sdir; + tan1[i3] += sdir; + + tan2[i1] += tdir; + tan2[i2] += tdir; + tan2[i3] += tdir; + } + + + for (long a = 0; a < vertexCount; ++a) + { + Vector3 n = normals[a]; + Vector3 t = tan1[a]; + + Vector3.OrthoNormalize(ref n, ref t); + tangents[a].x = t.x; + tangents[a].y = t.y; + tangents[a].z = t.z; + + tangents[a].w = (Vector3.Dot(Vector3.Cross(n, t), tan2[a]) < 0.0f) ? -1.0f : 1.0f; + } + + mesh.tangents = tangents; + } + + /// <summary> + /// Performs a deep copy of a mesh and returns a new mesh object. + /// </summary> + /// <param name="source">The source mesh.</param> + /// <returns>A new UnityEngine.Mesh object with the same values as source.</returns> + public static Mesh DeepCopy(Mesh source) + { + Mesh m = new Mesh(); + CopyTo(source, m); + return m; + } + + /// <summary> + /// Copy source mesh values to destination mesh. + /// </summary> + /// <param name="source">The mesh from which to copy attributes.</param> + /// <param name="destination">The destination mesh to copy attribute values to.</param> + /// <exception cref="ArgumentNullException">Throws if source or destination is null.</exception> + public static void CopyTo(Mesh source, Mesh destination) + { + if (source == null) + throw new System.ArgumentNullException("source"); + + if (destination == null) + throw new System.ArgumentNullException("destination"); + + Vector3[] v = new Vector3[source.vertices.Length]; + int[][] t = new int[source.subMeshCount][]; + Vector2[] u = new Vector2[source.uv.Length]; + Vector2[] u2 = new Vector2[source.uv2.Length]; + Vector4[] tan = new Vector4[source.tangents.Length]; + Vector3[] n = new Vector3[source.normals.Length]; + Color32[] c = new Color32[source.colors32.Length]; + + System.Array.Copy(source.vertices, v, v.Length); + + for (int i = 0; i < t.Length; i++) + t[i] = source.GetTriangles(i); + + System.Array.Copy(source.uv, u, u.Length); + System.Array.Copy(source.uv2, u2, u2.Length); + System.Array.Copy(source.normals, n, n.Length); + System.Array.Copy(source.tangents, tan, tan.Length); + System.Array.Copy(source.colors32, c, c.Length); + + destination.Clear(); + destination.name = source.name; + + destination.vertices = v; + + destination.subMeshCount = t.Length; + + for (int i = 0; i < t.Length; i++) + destination.SetTriangles(t[i], i); + + destination.uv = u; + destination.uv2 = u2; + destination.tangents = tan; + destination.normals = n; + destination.colors32 = c; + } + + /// <summary> + /// Get a mesh attribute from either the MeshFilter.sharedMesh or the MeshRenderer.additionalVertexStreams mesh. The additional vertex stream mesh has priority. + /// </summary> + /// <typeparam name="T">The type of the attribute to fetch.</typeparam> + /// <param name="gameObject">The GameObject with the MeshFilter and (optional) MeshRenderer to search for mesh attributes.</param> + /// <param name="attributeGetter">The function used to extract mesh attribute.</param> + /// <returns>A List of the mesh attribute values from the Additional Vertex Streams mesh if it exists and contains the attribute, or the MeshFilter.sharedMesh attribute values.</returns> + internal static T GetMeshChannel<T>(GameObject gameObject, Func<Mesh, T> attributeGetter) where T : IList + { + if (gameObject == null) + throw new System.ArgumentNullException("gameObject"); + + if (attributeGetter == null) + throw new System.ArgumentNullException("attributeGetter"); + + MeshFilter mf = gameObject.GetComponent<MeshFilter>(); + Mesh mesh = mf != null ? mf.sharedMesh : null; + T res = default(T); + + if (mesh == null) + return res; + + int vertexCount = mesh.vertexCount; + +#if !UNITY_4_6 && !UNITY_4_7 + MeshRenderer renderer = gameObject.GetComponent<MeshRenderer>(); + Mesh vertexStream = renderer != null ? renderer.additionalVertexStreams : null; + + if (vertexStream != null) + { + res = attributeGetter(vertexStream); + + if (res != null && res.Count == vertexCount) + return res; + } +#endif + res = attributeGetter(mesh); + + return res != null && res.Count == vertexCount ? res : default(T); + } + + /// <summary> + /// Print a detailed string summary of the mesh attributes. + /// </summary> + /// <param name="mesh"></param> + /// <returns></returns> + public static string Print(Mesh mesh) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + sb.AppendLine(string.Format("vertices: {0}\ntriangles: {1}\nsubmeshes: {2}", mesh.vertexCount, mesh.triangles.Length, mesh.subMeshCount)); + + sb.AppendLine(string.Format(" {0,-28}{1,-28}{2,-28}{3,-28}{4,-28}{5,-28}{6,-28}{7,-28}", + "Positions", + "Normals", + "Colors", + "Tangents", + "UV0", + "UV2", + "UV3", + "UV4")); + + Vector3[] positions = mesh.vertices; + Vector3[] normals = mesh.normals; + Color[] colors = mesh.colors; + Vector4[] tangents = mesh.tangents; + + List<Vector4> uv0 = new List<Vector4>(); + Vector2[] uv2 = mesh.uv2; + List<Vector4> uv3 = new List<Vector4>(); + List<Vector4> uv4 = new List<Vector4>(); + + mesh.GetUVs(0, uv0); + mesh.GetUVs(2, uv3); + mesh.GetUVs(3, uv4); + + if (positions != null && positions.Count() != mesh.vertexCount) + positions = null; + if (normals != null && normals.Count() != mesh.vertexCount) + normals = null; + if (colors != null && colors.Count() != mesh.vertexCount) + colors = null; + if (tangents != null && tangents.Count() != mesh.vertexCount) + tangents = null; + if (uv0.Count() != mesh.vertexCount) + uv0 = null; + if (uv2.Count() != mesh.vertexCount) + uv2 = null; + if (uv3.Count() != mesh.vertexCount) + uv3 = null; + if (uv4.Count() != mesh.vertexCount) + uv4 = null; + + sb.AppendLine("# Attributes"); + + for (int i = 0, c = mesh.vertexCount; i < c; i++) + { + sb.AppendLine(string.Format("\t{8,-5}{0,-28}{1,-28}{2,-28}{3,-28}{4,-28}{5,-28}{6,-28}{7,-28}", + positions == null ? "null" : string.Format("{0:F3}, {1:F3}, {2:F3}", positions[i].x, positions[i].y, positions[i].z), + normals == null ? "null" : string.Format("{0:F3}, {1:F3}, {2:F3}", normals[i].x, normals[i].y, normals[i].z), + colors == null ? "null" : string.Format("{0:F2}, {1:F2}, {2:F2}, {3:F2}", colors[i].r, colors[i].g, colors[i].b, colors[i].a), + tangents == null ? "null" : string.Format("{0:F2}, {1:F2}, {2:F2}, {3:F2}", tangents[i].x, tangents[i].y, tangents[i].z, tangents[i].w), + uv0 == null ? "null" : string.Format("{0:F2}, {1:F2}, {2:F2}, {3:F2}", uv0[i].x, uv0[i].y, uv0[i].z, uv0[i].w), + uv2 == null ? "null" : string.Format("{0:F2}, {1:F2}", uv2[i].x, uv2[i].y), + uv3 == null ? "null" : string.Format("{0:F2}, {1:F2}, {2:F2}, {3:F2}", uv3[i].x, uv3[i].y, uv3[i].z, uv3[i].w), + uv4 == null ? "null" : string.Format("{0:F2}, {1:F2}, {2:F2}, {3:F2}", uv4[i].x, uv4[i].y, uv4[i].z, uv4[i].w), + i)); + } + + sb.AppendLine("# Topology"); + + for (int i = 0; i < mesh.subMeshCount; i++) + { + var topo = mesh.GetTopology(i); + var submesh = mesh.GetIndices(i); + sb.AppendLine($" Submesh[{i}] ({topo})"); + + switch (topo) + { + case MeshTopology.Points: + for (int n = 0; n < submesh.Length; n += 1) + sb.AppendLine(string.Format("\t{0}", submesh[n])); + break; + case MeshTopology.Lines: + for (int n = 0; n < submesh.Length; n += 2) + sb.AppendLine(string.Format("\t{0}, {1}", submesh[n], submesh[n + 1])); + break; + case MeshTopology.Triangles: + for (int n = 0; n < submesh.Length; n += 3) + sb.AppendLine(string.Format("\t{0}, {1}, {2}", submesh[n], submesh[n + 1], submesh[n + 2])); + break; + case MeshTopology.Quads: + for (int n = 0; n < submesh.Length; n += 4) + sb.AppendLine(string.Format("\t{0}, {1}, {2}, {3}", submesh[n], submesh[n + 1], submesh[n + 2], submesh[n + 3])); + break; + } + } + + return sb.ToString(); + } + + /// <summary> + /// Get the number of indexes this mesh contains. + /// </summary> + /// <param name="mesh">The source mesh to sum submesh index counts from.</param> + /// <returns>The count of all indexes contained within this meshes submeshes.</returns> + public static uint GetIndexCount(Mesh mesh) + { + uint sum = 0; + + if (mesh == null) + return sum; + + for (int i = 0, c = mesh.subMeshCount; i < c; i++) + sum += mesh.GetIndexCount(i); + + return sum; + } + + /// <summary> + /// Get the number of triangles or quads this mesh contains. Other mesh topologies are not considered. + /// </summary> + /// <param name="mesh">The source mesh to sum submesh primitive counts from.</param> + /// <returns>The count of all triangles or quads contained within this meshes submeshes.</returns> + public static uint GetPrimitiveCount(Mesh mesh) + { + uint sum = 0; + + if (mesh == null) + return sum; + + for (int i = 0, c = mesh.subMeshCount; i < c; i++) + { + if (mesh.GetTopology(i) == MeshTopology.Triangles) + sum += mesh.GetIndexCount(i) / 3; + else if (mesh.GetTopology(i) == MeshTopology.Quads) + sum += mesh.GetIndexCount(i) / 4; + } + + return sum; + } + + /// <summary> + /// Compile a UnityEngine.Mesh from a ProBuilderMesh. + /// </summary> + /// <param name="probuilderMesh">The mesh source.</param> + /// <param name="targetMesh">Destination UnityEngine.Mesh.</param> + /// <param name="preferredTopology">If specified, the function will try to create topology matching the reqested format (and falling back on triangles where necessary).</param> + /// <returns>The resulting material array from the compiled faces array. This is suitable to assign to the MeshRenderer.sharedMaterials property.</returns> + public static void Compile(ProBuilderMesh probuilderMesh, Mesh targetMesh, MeshTopology preferredTopology = MeshTopology.Triangles) + { + if (probuilderMesh == null) + throw new ArgumentNullException("probuilderMesh"); + + if (targetMesh == null) + throw new ArgumentNullException("targetMesh"); + + targetMesh.Clear(); + + targetMesh.vertices = probuilderMesh.positionsInternal; + targetMesh.uv = probuilderMesh.texturesInternal; + + if (probuilderMesh.HasArrays(MeshArrays.Texture2)) + { + List<Vector4> uvChannel = new List<Vector4>(); + probuilderMesh.GetUVs(2, uvChannel); + targetMesh.SetUVs(2, uvChannel); + } + + if (probuilderMesh.HasArrays(MeshArrays.Texture3)) + { + List<Vector4> uvChannel = new List<Vector4>(); + probuilderMesh.GetUVs(3, uvChannel); + targetMesh.SetUVs(3, uvChannel); + } + + targetMesh.normals = probuilderMesh.GetNormals(); + targetMesh.tangents = probuilderMesh.GetTangents(); + + if (probuilderMesh.HasArrays(MeshArrays.Color)) + targetMesh.colors = probuilderMesh.colorsInternal; + + var materialCount = probuilderMesh.GetComponent<Renderer>().sharedMaterials.Length; + var submeshes = Submesh.GetSubmeshes(probuilderMesh.facesInternal, materialCount, preferredTopology); + targetMesh.subMeshCount = submeshes.Length; + + for (int i = 0; i < targetMesh.subMeshCount; i++) + targetMesh.SetIndices(submeshes[i].m_Indexes, submeshes[i].m_Topology, i, false); + + targetMesh.name = string.Format("pb_Mesh{0}", probuilderMesh.id); + } + + /// <summary> + /// Creates a new array of vertices with values from a UnityEngine.Mesh. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <returns>An array of vertices.</returns> + public static Vertex[] GetVertices(this Mesh mesh) + { + if (mesh == null) + return null; + + int vertexCount = mesh.vertexCount; + Vertex[] v = new Vertex[vertexCount]; + + Vector3[] positions = mesh.vertices; + Color[] colors = mesh.colors; + Vector3[] normals = mesh.normals; + Vector4[] tangents = mesh.tangents; + Vector2[] uv0s = mesh.uv; + Vector2[] uv2s = mesh.uv2; + List<Vector4> uv3s = new List<Vector4>(); + List<Vector4> uv4s = new List<Vector4>(); + mesh.GetUVs(2, uv3s); + mesh.GetUVs(3, uv4s); + + bool _hasPositions = positions != null && positions.Count() == vertexCount; + bool _hasColors = colors != null && colors.Count() == vertexCount; + bool _hasNormals = normals != null && normals.Count() == vertexCount; + bool _hasTangents = tangents != null && tangents.Count() == vertexCount; + bool _hasUv0 = uv0s != null && uv0s.Count() == vertexCount; + bool _hasUv2 = uv2s != null && uv2s.Count() == vertexCount; + bool _hasUv3 = uv3s.Count() == vertexCount; + bool _hasUv4 = uv4s.Count() == vertexCount; + + for (int i = 0; i < vertexCount; i++) + { + v[i] = new Vertex(); + + if (_hasPositions) + v[i].position = positions[i]; + + if (_hasColors) + v[i].color = colors[i]; + + if (_hasNormals) + v[i].normal = normals[i]; + + if (_hasTangents) + v[i].tangent = tangents[i]; + + if (_hasUv0) + v[i].uv0 = uv0s[i]; + + if (_hasUv2) + v[i].uv2 = uv2s[i]; + + if (_hasUv3) + v[i].uv3 = uv3s[i]; + + if (_hasUv4) + v[i].uv4 = uv4s[i]; + } + + return v; + } + + /// <summary> + /// Merge coincident vertices where possible, optimizing the vertex count of a UnityEngine.Mesh. + /// </summary> + /// <param name="mesh">The mesh to optimize.</param> + /// <param name="vertices"> + /// If provided these values are used in place of extracting attributes from the Mesh. + /// <br /> + /// This is a performance optimization for when this array already exists. If not provided this array will be + /// automatically generated for you. + /// </param> + public static void CollapseSharedVertices(Mesh mesh, Vertex[] vertices = null) + { + if (mesh == null) + throw new System.ArgumentNullException("mesh"); + + if (vertices == null) + vertices = mesh.GetVertices(); + + int smc = mesh.subMeshCount; + List<Dictionary<Vertex, int>> subVertices = new List<Dictionary<Vertex, int>>(); + int[][] tris = new int[smc][]; + int subIndex = 0; + + for (int i = 0; i < smc; ++i) + { + tris[i] = mesh.GetTriangles(i); + Dictionary<Vertex, int> newVertices = new Dictionary<Vertex, int>(); + + for (int n = 0; n < tris[i].Length; n++) + { + Vertex v = vertices[tris[i][n]]; + int index; + + if (newVertices.TryGetValue(v, out index)) + { + tris[i][n] = index; + } + else + { + tris[i][n] = subIndex; + newVertices.Add(v, subIndex); + subIndex++; + } + } + + subVertices.Add(newVertices); + } + + Vertex[] collapsed = subVertices.SelectMany(x => x.Keys).ToArray(); + Vertex.SetMesh(mesh, collapsed); + mesh.subMeshCount = smc; + for (int i = 0; i < smc; i++) + mesh.SetTriangles(tris[i], i); + } + + internal static string SanityCheck(ProBuilderMesh mesh) + { + return SanityCheck(mesh.GetVertices()); + } + + /// <summary> + /// Check mesh for invalid properties. + /// </summary> + /// <param name="mesh"></param> + /// <returns>Returns true if mesh is valid, false if a problem was found.</returns> + internal static string SanityCheck(Mesh mesh) + { + return SanityCheck(mesh.GetVertices()); + } + + /// <summary> + /// Check mesh for invalid properties. + /// </summary> + /// <returns>Returns true if mesh is valid, false if a problem was found.</returns> + internal static string SanityCheck(IList<Vertex> vertices) + { + var sb = new StringBuilder(); + + for (int i = 0, c = vertices.Count; i < c; i++) + { + var vertex = vertices[i]; + + if (Math.IsNumber(vertex.position) + && Math.IsNumber(vertex.color) + && Math.IsNumber(vertex.uv0) + && Math.IsNumber(vertex.normal) + && Math.IsNumber(vertex.tangent) + && Math.IsNumber(vertex.uv2) + && Math.IsNumber(vertex.uv3) + && Math.IsNumber(vertex.uv4)) + continue; + + sb.AppendFormat("vertex {0} contains invalid values:\n{1}\n\n", i, vertex.ToString()); + } + + return sb.ToString(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3cae512ffac62ff186065e6174565d2680759093 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/MeshUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3208ba508d5e047c7bd843fc986a4f7a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Normal.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Normal.cs new file mode 100644 index 0000000000000000000000000000000000000000..175b3cba70d196ebbb5e1888ba05e962224dfc8c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Normal.cs @@ -0,0 +1,58 @@ +using System; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// A container for normal, tangent, and bitangent values. + /// </summary> + public struct Normal : IEquatable<Normal> + { + /// <value> + /// A unit normal. + /// </value> + public Vector3 normal { get; set; } + + /// <value> + /// A unit tangent. + /// </value> + public Vector4 tangent { get; set; } + + /// <value> + /// A unit bitangent (sometimes called binormal). + /// </value> + public Vector3 bitangent { get; set; } + + public override bool Equals(object obj) + { + return obj is Normal && Equals((Normal)obj); + } + + public override int GetHashCode() + { + unchecked + { + int hashCode = VectorHash.GetHashCode(normal); + hashCode = (hashCode * 397) ^ VectorHash.GetHashCode(tangent); + hashCode = (hashCode * 397) ^ VectorHash.GetHashCode(bitangent); + return hashCode; + } + } + + public bool Equals(Normal other) + { + return Math.Approx3(normal, other.normal) && + Math.Approx3(tangent, other.tangent) && + Math.Approx3(bitangent, other.bitangent); + } + + public static bool operator==(Normal a, Normal b) + { + return a.Equals(b); + } + + public static bool operator!=(Normal a, Normal b) + { + return !(a == b); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Normal.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Normal.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a7ac8207122099e609624973cd557d3d3fc419f8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Normal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b0cf5260e6d70b428dab29748b1b3fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Normals.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Normals.cs new file mode 100644 index 0000000000000000000000000000000000000000..7e18d17dd7b1e8031a2850cb85f340ec48bfbb1e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Normals.cs @@ -0,0 +1,247 @@ +using System; + +namespace UnityEngine.ProBuilder +{ + public static class Normals + { + static Vector3[] s_SmoothAvg = new Vector3[Smoothing.smoothRangeMax]; + static float[] s_SmoothAvgCount = new float[Smoothing.smoothRangeMax]; + static int[] s_CachedIntArray = new int[ushort.MaxValue]; + + static void ClearIntArray(int count) + { + if (count > s_CachedIntArray.Length) + Array.Resize(ref s_CachedIntArray, count); + + for (int i = 0; i < count; i++) + s_CachedIntArray[i] = 0; + } + + public static void CalculateTangents(ProBuilderMesh mesh) + { + int vc = mesh.vertexCount; + + if (!mesh.HasArrays(MeshArrays.Tangent)) + mesh.tangentsInternal = new Vector4[vc]; + + if (!mesh.HasArrays(MeshArrays.Position) || !mesh.HasArrays(MeshArrays.Texture0)) + return; + + // http://answers.unity3d.com/questions/7789/calculating-tangents-vector4.html + Vector3[] normals = mesh.GetNormals(); + + var positions = mesh.positionsInternal; + var textures = mesh.texturesInternal; + + var tan1 = new Vector3[vc]; + var tan2 = new Vector3[vc]; + + var tangents = mesh.tangentsInternal; + + foreach (var face in mesh.facesInternal) + { + int[] triangles = face.indexesInternal; + + for (int a = 0, c = triangles.Length; a < c; a += 3) + { + long i1 = triangles[a + 0]; + long i2 = triangles[a + 1]; + long i3 = triangles[a + 2]; + + Vector3 v1 = positions[i1]; + Vector3 v2 = positions[i2]; + Vector3 v3 = positions[i3]; + + Vector2 w1 = textures[i1]; + Vector2 w2 = textures[i2]; + Vector2 w3 = textures[i3]; + + float x1 = v2.x - v1.x; + float x2 = v3.x - v1.x; + float y1 = v2.y - v1.y; + float y2 = v3.y - v1.y; + float z1 = v2.z - v1.z; + float z2 = v3.z - v1.z; + + float s1 = w2.x - w1.x; + float s2 = w3.x - w1.x; + float t1 = w2.y - w1.y; + float t2 = w3.y - w1.y; + + float r = 1.0f / (s1 * t2 - s2 * t1); + + Vector3 sdir = new Vector3((t2 * x1 - t1 * x2) * r, (t2 * y1 - t1 * y2) * r, (t2 * z1 - t1 * z2) * r); + Vector3 tdir = new Vector3((s1 * x2 - s2 * x1) * r, (s1 * y2 - s2 * y1) * r, (s1 * z2 - s2 * z1) * r); + + tan1[i1] += sdir; + tan1[i2] += sdir; + tan1[i3] += sdir; + + tan2[i1] += tdir; + tan2[i2] += tdir; + tan2[i3] += tdir; + } + } + + for (long a = 0; a < vc; ++a) + { + Vector3 n = normals[a]; + Vector3 t = tan1[a]; + + Vector3.OrthoNormalize(ref n, ref t); + + tangents[a].x = t.x; + tangents[a].y = t.y; + tangents[a].z = t.z; + tangents[a].w = (Vector3.Dot(Vector3.Cross(n, t), tan2[a]) < 0.0f) ? -1.0f : 1.0f; + } + } + + /// <summary> + /// Calculate mesh normals without taking into account smoothing groups. + /// </summary> + /// <returns>A new array of the vertex normals.</returns> + /// <seealso cref="CalculateNormals"/> + static void CalculateHardNormals(ProBuilderMesh mesh) + { + var vertexCount = mesh.vertexCount; + var positions = mesh.positionsInternal; + var faces = mesh.facesInternal; + // s_CachedIntArray acts as the average count per-normal + ClearIntArray(vertexCount); + + if (!mesh.HasArrays(MeshArrays.Normal)) + mesh.normalsInternal = new Vector3[vertexCount]; + + var normals = mesh.normalsInternal; + + for (int i = 0; i < vertexCount; i++) + { + normals[i].x = 0f; + normals[i].y = 0f; + normals[i].z = 0f; + } + + for (int faceIndex = 0, fc = faces.Length; faceIndex < fc; faceIndex++) + { + int[] indexes = faces[faceIndex].indexesInternal; + + for (var tri = 0; tri < indexes.Length; tri += 3) + { + int a = indexes[tri], b = indexes[tri + 1], c = indexes[tri + 2]; + + Vector3 cross = Math.Normal(positions[a], positions[b], positions[c]); + cross.Normalize(); + + normals[a].x += cross.x; + normals[b].x += cross.x; + normals[c].x += cross.x; + + normals[a].y += cross.y; + normals[b].y += cross.y; + normals[c].y += cross.y; + + normals[a].z += cross.z; + normals[b].z += cross.z; + normals[c].z += cross.z; + + s_CachedIntArray[a]++; + s_CachedIntArray[b]++; + s_CachedIntArray[c]++; + } + } + + for (var i = 0; i < vertexCount; i++) + { + normals[i].x = normals[i].x / s_CachedIntArray[i]; + normals[i].y = normals[i].y / s_CachedIntArray[i]; + normals[i].z = normals[i].z / s_CachedIntArray[i]; + } + } + + /// <summary> + /// Calculates the normals for a mesh, taking into account smoothing groups. + /// </summary> + /// <returns>A Vector3 array of the mesh normals</returns> + public static void CalculateNormals(ProBuilderMesh mesh) + { + CalculateHardNormals(mesh); + + var sharedVertices = mesh.sharedVerticesInternal; + var faces = mesh.facesInternal; + // CalculateHardNormals ensures that normals array is initialized + var normals = mesh.normalsInternal; + int smoothGroupMax = 24; + // s_CachedIntArray acts as the smoothingGroup lookup for each vertex + ClearIntArray(mesh.vertexCount); + + // Create a lookup of each triangles smoothing group. + for (int i = 0, c = mesh.faceCount; i < c; i++) + { + var face = faces[i]; + var indices = face.distinctIndexesInternal; + + for (int n = 0, d = indices.Length; n < d; n++) + { + s_CachedIntArray[indices[n]] = face.smoothingGroup; + + if (face.smoothingGroup >= smoothGroupMax) + smoothGroupMax = face.smoothingGroup + 1; + } + } + + // Increase buffers size if we have more smoothing groups than usual. + if (smoothGroupMax > s_SmoothAvg.Length) + { + Array.Resize(ref s_SmoothAvg, smoothGroupMax); + Array.Resize(ref s_SmoothAvgCount, smoothGroupMax); + } + + // For each sharedIndexes group (individual vertex), find vertices that are in the same smoothing + // group and average their normals. + for (var i = 0; i < sharedVertices.Length; i++) + { + for (var n = 0; n < smoothGroupMax; n++) + { + s_SmoothAvg[n].x = 0f; + s_SmoothAvg[n].y = 0f; + s_SmoothAvg[n].z = 0f; + s_SmoothAvgCount[n] = 0f; + } + + for (var n = 0; n < sharedVertices[i].Count; n++) + { + int index = sharedVertices[i][n]; + int group = s_CachedIntArray[index]; + + // Ideally this should only continue on group == NONE, but historically negative values have also + // been treated as no smoothing. + if (group <= Smoothing.smoothingGroupNone || + (group > Smoothing.smoothRangeMax && group < Smoothing.hardRangeMax)) + continue; + + s_SmoothAvg[group].x += normals[index].x; + s_SmoothAvg[group].y += normals[index].y; + s_SmoothAvg[group].z += normals[index].z; + s_SmoothAvgCount[group] += 1f; + } + + for (int n = 0; n < sharedVertices[i].Count; n++) + { + int index = sharedVertices[i][n]; + int group = s_CachedIntArray[index]; + + if (group <= Smoothing.smoothingGroupNone || + (group > Smoothing.smoothRangeMax && group < Smoothing.hardRangeMax)) + continue; + + normals[index].x = s_SmoothAvg[group].x / s_SmoothAvgCount[group]; + normals[index].y = s_SmoothAvg[group].y / s_SmoothAvgCount[group]; + normals[index].z = s_SmoothAvg[group].z / s_SmoothAvgCount[group]; + + normals[index].Normalize(); + } + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Normals.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Normals.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..66d4bbb95f070b88787987434324ff41a642e5b4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Normals.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13fe1d05e56c65b4ca8c935f648e6cbb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ObjectPool.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ObjectPool.cs new file mode 100644 index 0000000000000000000000000000000000000000..758382be39128b9b8a888d983135edfdb18ce257 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ObjectPool.cs @@ -0,0 +1,73 @@ +using System; +using UnityEngine; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Simple object pool implementation. + /// </summary> + /// <typeparam name="T"></typeparam> + sealed class ObjectPool<T> : IDisposable + { + bool m_IsDisposed; + Queue<T> m_Pool = new Queue<T>(); + + public int desiredSize; + public Func<T> constructor; + public Action<T> destructor; + + public ObjectPool(int initialSize, int desiredSize, Func<T> constructor, Action<T> destructor, bool lazyInitialization = false) + { + if (constructor == null) + throw new ArgumentNullException("constructor"); + + if (destructor == null) + throw new ArgumentNullException("destructor"); + + this.constructor = constructor; + this.destructor = destructor; + this.desiredSize = desiredSize; + + for (int i = 0; i < initialSize && i < desiredSize && !lazyInitialization; i++) + m_Pool.Enqueue(constructor()); + } + + public T Dequeue() + { + if (m_Pool.Count > 0) + return m_Pool.Dequeue(); + return constructor(); + } + + public void Enqueue(T obj) + { + if (m_Pool.Count < desiredSize) + m_Pool.Enqueue(obj); + else + destructor(obj); + } + + public void Empty() + { + int count = m_Pool.Count; + + for (int i = 0; i < count; i++) + destructor(m_Pool.Dequeue()); + } + + public void Dispose() + { + Dispose(true); + } + + void Dispose(bool disposing) + { + if (disposing && !m_IsDisposed) + { + Empty(); + m_IsDisposed = true; + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ObjectPool.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ObjectPool.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c5954f3ee2297a246ee6644e0a9c843da6b7ba74 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ObjectPool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72ae47ebb978a4f6fad1a2ba92c3c110 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PivotPoint.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PivotPoint.cs new file mode 100644 index 0000000000000000000000000000000000000000..94951400671d0d8da8901014205cb1b7987fa3e0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PivotPoint.cs @@ -0,0 +1,26 @@ +namespace UnityEngine.ProBuilder +{ + public enum PivotPoint + { + /// <summary> + /// Transforms are applied from the center point of the selection bounding box. + /// Corresponds with <see cref="UnityEditor.PivotMode.Center"/>. + /// </summary> + Center, + + /// <summary> + /// Transforms are applied from the origin of each selection group. + /// </summary> + IndividualOrigins, + + /// <summary> + /// Transforms are applied from the active selection center. + /// </summary> + ActiveElement, + +// /// <summary> +// /// Transforms are applied from a user-defined pivot point. +// /// </summary> +// Custom + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PivotPoint.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PivotPoint.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1ba99919a733473a06e7524af1eef91e48781754 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PivotPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3abdb0569285bbf4389d38655d5a90a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PolyShape.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PolyShape.cs new file mode 100644 index 0000000000000000000000000000000000000000..d2eba4263d59ce392608ab71f35c3786b33bfc0d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PolyShape.cs @@ -0,0 +1,116 @@ +using UnityEngine; +using System.Collections.Generic; +using UnityEngine.Serialization; +using System.Collections.ObjectModel; +using System.Linq; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// PolyShape is a component that handles the creation of <see cref="ProBuilderMesh"/> shapes from a set of contiguous points. + /// </summary> + [AddComponentMenu("")] + [DisallowMultipleComponent] + [ExcludeFromPreset, ExcludeFromObjectFactory] + [ProGridsConditionalSnap] + public sealed class PolyShape : MonoBehaviour + { + /// <summary> + /// Describes the different input states this tool operates in. + /// </summary> + internal enum PolyEditMode + { + None, + Path, + Height, + Edit + } + + ProBuilderMesh m_Mesh; + + [FormerlySerializedAs("points")] + [SerializeField] + internal List<Vector3> m_Points = new List<Vector3>(); + + [FormerlySerializedAs("extrude")] + [SerializeField] + float m_Extrude = 0f; + + [FormerlySerializedAs("polyEditMode")] + [SerializeField] + PolyEditMode m_EditMode; + + [FormerlySerializedAs("flipNormals")] + [SerializeField] + bool m_FlipNormals; + + [SerializeField] + internal bool isOnGrid = true; + + /// <value> + /// Get the points that form the path for the base of this shape. + /// </value> + public ReadOnlyCollection<Vector3> controlPoints + { + get { return new ReadOnlyCollection<Vector3>(m_Points); } + } + + /// <summary> + /// Set the points that form the path for the base of this shape. + /// </summary> + public void SetControlPoints(IList<Vector3> points) + { + m_Points = points.ToList(); + } + + /// <value> + /// Set the distance that this shape should extrude from the base. After setting this value, you will need to + /// invoke <see cref="MeshOperations.AppendElements.CreateShapeFromPolygon"/> to rebuild the <see cref="ProBuilderMesh"/> component. + /// </value> + public float extrude + { + get { return m_Extrude; } + set { m_Extrude = value; } + } + + internal PolyEditMode polyEditMode + { + get { return m_EditMode; } + set { m_EditMode = value; } + } + + /// <value> + /// Defines what direction the normals of this shape will face. Use this to invert the normals, creating a volume with the normals facing inwards. + /// </value> + public bool flipNormals + { + get { return m_FlipNormals; } + set { m_FlipNormals = value; } + } + + internal ProBuilderMesh mesh + { + get + { + if (m_Mesh == null) + m_Mesh = GetComponent<ProBuilderMesh>(); + + return m_Mesh; + } + + set + { + m_Mesh = value; + } + } + + /// <summary> + /// ProGridsConditionalSnap tells pg_Editor to reflect this value. + /// </summary> + /// <returns></returns> + bool IsSnapEnabled() + { + return isOnGrid; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PolyShape.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PolyShape.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c61e7d8f76c7698ed71097faf12dbcdbfd622e40 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PolyShape.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb977b126bc1b4f15813dcf9da9bb600 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PreferenceDictionary.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PreferenceDictionary.cs new file mode 100644 index 0000000000000000000000000000000000000000..04c59476463fcd9687306116b436084b5c6044f1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PreferenceDictionary.cs @@ -0,0 +1,417 @@ +using UnityEngine; +using System.Linq; +using System.Collections; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Store settings in a project local manner. + /// </summary> + sealed class PreferenceDictionary : + ScriptableObject, + ISerializationCallbackReceiver, + IHasDefault + { + Dictionary<string, bool> m_Bool = new Dictionary<string, bool>(); + Dictionary<string, int> m_Int = new Dictionary<string, int>(); + Dictionary<string, float> m_Float = new Dictionary<string, float>(); + Dictionary<string, string> m_String = new Dictionary<string, string>(); + Dictionary<string, Color> m_Color = new Dictionary<string, Color>(); + Dictionary<string, Material> m_Material = new Dictionary<string, Material>(); + + [SerializeField] List<string> m_Bool_keys; + [SerializeField] List<string> m_Int_keys; + [SerializeField] List<string> m_Float_keys; + [SerializeField] List<string> m_String_keys; + [SerializeField] List<string> m_Color_keys; + [SerializeField] List<string> m_Material_keys; + + [SerializeField] List<bool> m_Bool_values; + [SerializeField] List<int> m_Int_values; + [SerializeField] List<float> m_Float_values; + [SerializeField] List<string> m_String_values; + [SerializeField] List<Color> m_Color_values; + [SerializeField] List<Material> m_Material_values; + + /// <summary> + /// Perform the ritual "Please Serialize My Dictionary" dance. + /// </summary> + public void OnBeforeSerialize() + { + m_Bool_keys = m_Bool.Keys.ToList(); + m_Int_keys = m_Int.Keys.ToList(); + m_Float_keys = m_Float.Keys.ToList(); + m_String_keys = m_String.Keys.ToList(); + m_Color_keys = m_Color.Keys.ToList(); + m_Material_keys = m_Material.Keys.ToList(); + + m_Bool_values = m_Bool.Values.ToList(); + m_Int_values = m_Int.Values.ToList(); + m_Float_values = m_Float.Values.ToList(); + m_String_values = m_String.Values.ToList(); + m_Color_values = m_Color.Values.ToList(); + m_Material_values = m_Material.Values.ToList(); + } + + /// <summary> + /// Reconstruct preference dictionaries from serialized lists. + /// </summary> + public void OnAfterDeserialize() + { + for (int i = 0; i < m_Bool_keys.Count; i++) + m_Bool.Add(m_Bool_keys[i], m_Bool_values[i]); + + for (int i = 0; i < m_Int_keys.Count; i++) + m_Int.Add(m_Int_keys[i], m_Int_values[i]); + + for (int i = 0; i < m_Float_keys.Count; i++) + m_Float.Add(m_Float_keys[i], m_Float_values[i]); + + for (int i = 0; i < m_String_keys.Count; i++) + m_String.Add(m_String_keys[i], m_String_values[i]); + + for (int i = 0; i < m_Color_keys.Count; i++) + m_Color.Add(m_Color_keys[i], m_Color_values[i]); + + for (int i = 0; i < m_Material_keys.Count; i++) + m_Material.Add(m_Material_keys[i], m_Material_values[i]); + } + + /// <summary> + /// Clear dictionary values. + /// </summary> + public void SetDefaultValues() + { + m_Bool.Clear(); + m_Int.Clear(); + m_Float.Clear(); + m_String.Clear(); + m_Color.Clear(); + m_Material.Clear(); + } + + /// <summary> + /// Check if a key is contained within any type dictionary. + /// </summary> + /// <param name="key"></param> + /// <returns></returns> + public bool HasKey(string key) + { + return m_Bool.ContainsKey(key) || + m_Int.ContainsKey(key) || + m_Float.ContainsKey(key) || + m_String.ContainsKey(key) || + m_Color.ContainsKey(key) || + m_Material.ContainsKey(key); + } + + /// <summary> + /// Test if specific type dictionary contains a key. + /// </summary> + /// <param name="key"></param> + /// <typeparam name="T"></typeparam> + /// <returns></returns> + public bool HasKey<T>(string key) + { + System.Type type = typeof(T); + + if (type == typeof(int)) + return m_Int.ContainsKey(key); + else if (type == typeof(float)) + return m_Float.ContainsKey(key); + else if (type == typeof(bool)) + return m_Bool.ContainsKey(key); + else if (type == typeof(string)) + return m_String.ContainsKey(key); + else if (type == typeof(Color)) + return m_Color.ContainsKey(key); + else if (type == typeof(Material)) + return m_Material.ContainsKey(key); + else + { + Debug.LogWarning(string.Format("HasKey<{0}>({1}) not valid preference type.", + typeof(T).ToString(), + key)); + } + + return false; + } + + public void DeleteKey(string key) + { + if (m_Bool.ContainsKey(key)) + m_Bool.Remove(key); + if (m_Int.ContainsKey(key)) + m_Int.Remove(key); + if (m_Float.ContainsKey(key)) + m_Float.Remove(key); + if (m_String.ContainsKey(key)) + m_String.Remove(key); + if (m_Color.ContainsKey(key)) + m_Color.Remove(key); + if (m_Material.ContainsKey(key)) + m_Material.Remove(key); + } + + /// <summary> + /// "Generic" Get preference for key function. + /// </summary> + /// <param name="key"></param> + /// <param name="fallback"></param> + /// <typeparam name="T"></typeparam> + /// <returns></returns> + public T Get<T>(string key, T fallback = default(T)) + { + System.Type type = typeof(T); + + if (type == typeof(int)) + { + if (m_Int.ContainsKey(key)) + return (T)(object)GetInt(key); + } + else if (type == typeof(float)) + { + if (m_Float.ContainsKey(key)) + return (T)(object)GetFloat(key); + } + else if (type == typeof(bool)) + { + if (m_Bool.ContainsKey(key)) + return (T)(object)GetBool(key); + } + else if (type == typeof(string)) + { + if (m_String.ContainsKey(key)) + return (T)(object)GetString(key); + } + else if (type == typeof(Color)) + { + if (m_Color.ContainsKey(key)) + return (T)(object)GetColor(key); + } + else if (type == typeof(Material)) + { + if (m_Material.ContainsKey(key)) + return (T)(object)GetMaterial(key); + } + else + { + Debug.LogWarning(string.Format("Get<{0}>({1}) not valid preference type.", + typeof(T).ToString(), + key)); + } + + return fallback; + } + + /// <summary> + /// "Generic" set value. Only accepts: + /// - int, + /// - float, + /// - bool, + /// - string, + /// - Color, + /// - Material + /// </summary> + /// <param name="key"></param> + /// <param name="value"></param> + /// <typeparam name="T"></typeparam> + public void Set<T>(string key, T value) + { + object o = (object)value; + + if (value is int) + SetInt(key, (int)o); + else if (value is float) + SetFloat(key, (float)o); + else if (value is bool) + SetBool(key, (bool)o); + else if (value is string) + SetString(key, (string)o); + else if (value is Color) + SetColor(key, (Color)o); + else if (value is Material) + SetMaterial(key, (Material)o); + else + Debug.LogWarning(string.Format("Set<{0}>({1}, {2}) not valid preference type.", + typeof(T).ToString(), + key, + value.ToString())); + } + + /// <summary> + /// Fetch a value from the stored preferences. If key is not found, a default value is returned. + /// </summary> + public bool GetBool(string key, bool fallback = default(bool)) + { + bool value; + if (m_Bool.TryGetValue(key, out value)) + return value; + return fallback; + } + + /// <summary> + /// Fetch a value from the stored preferences. If key is not found, a default value is returned. + /// </summary> + public int GetInt(string key, int fallback = default(int)) + { + int value; + if (m_Int.TryGetValue(key, out value)) + return value; + return fallback; + } + + /// <summary> + /// Fetch a value from the stored preferences. If key is not found, a default value is returned. + /// </summary> + public float GetFloat(string key, float fallback = default(float)) + { + float value; + if (m_Float.TryGetValue(key, out value)) + return value; + return fallback; + } + + /// <summary> + /// Fetch a value from the stored preferences. If key is not found, a default value is returned. + /// </summary> + public string GetString(string key, string fallback = default(string)) + { + string value; + if (m_String.TryGetValue(key, out value)) + return value; + return fallback; + } + + /// <summary> + /// Fetch a value from the stored preferences. If key is not found, a default value is returned. + /// </summary> + public Color GetColor(string key, Color fallback = default(Color)) + { + Color value; + if (m_Color.TryGetValue(key, out value)) + return value; + return fallback; + } + + /// <summary> + /// Fetch a value from the stored preferences. If key is not found, a default value is returned. + /// </summary> + public Material GetMaterial(string key, Material fallback = default(Material)) + { + Material value; + if (m_Material.TryGetValue(key, out value)) + return value; + return fallback; + } + + /// <summary> + /// Set a value for key in the saved prefs. + /// </summary> + public void SetBool(string key, bool value) + { + if (m_Bool.ContainsKey(key)) + m_Bool[key] = value; + else + m_Bool.Add(key, value); + } + + /// <summary> + /// Set a value for key in the saved prefs. + /// </summary> + public void SetInt(string key, int value) + { + if (m_Int.ContainsKey(key)) + m_Int[key] = value; + else + m_Int.Add(key, value); + } + + /// <summary> + /// Set a value for key in the saved prefs. + /// </summary> + public void SetFloat(string key, float value) + { + if (m_Float.ContainsKey(key)) + m_Float[key] = value; + else + m_Float.Add(key, value); + } + + /// <summary> + /// Set a value for key in the saved prefs. + /// </summary> + public void SetString(string key, string value) + { + if (m_String.ContainsKey(key)) + m_String[key] = value; + else + m_String.Add(key, value); + } + + /// <summary> + /// Set a value for key in the saved prefs. + /// </summary> + public void SetColor(string key, Color value) + { + if (m_Color.ContainsKey(key)) + m_Color[key] = value; + else + m_Color.Add(key, value); + } + + /// <summary> + /// Set a value for key in the saved prefs. + /// </summary> + public void SetMaterial(string key, Material value) + { + if (m_Material.ContainsKey(key)) + m_Material[key] = value; + else + m_Material.Add(key, value); + } + + /// <summary> + /// Get the internal <key, bool> dictionary. + /// </summary> + public Dictionary<string, bool> GetBoolDictionary() { return m_Bool; } + + /// <summary> + /// Get the internal <key, int> dictionary. + /// </summary> + public Dictionary<string, int> GetIntDictionary() { return m_Int; } + + /// <summary> + /// Get the internal <key, float> dictionary. + /// </summary> + public Dictionary<string, float> GetFloatDictionary() { return m_Float; } + + /// <summary> + /// Get the internal <key, string> dictionary. + /// </summary> + public Dictionary<string, string> GetStringDictionary() { return m_String; } + + /// <summary> + /// Get the internal <key, Color> dictionary. + /// </summary> + public Dictionary<string, Color> GetColorDictionary() { return m_Color; } + + /// <summary> + /// Get the internal <key, Material> dictionary. + /// </summary> + public Dictionary<string, Material> GetMaterialDictionary() { return m_Material; } + + /// <summary> + /// Clear all stored preference key value pairs. + /// </summary> + public void Clear() + { + m_Bool.Clear(); + m_Int.Clear(); + m_Float.Clear(); + m_String.Clear(); + m_Color.Clear(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PreferenceDictionary.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PreferenceDictionary.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2472680b8b6c4a70f0ab950e6ffd58fbc832aa67 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PreferenceDictionary.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c04d9be0543234e9cbb340e7ee259a5c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PreferenceKeys.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PreferenceKeys.cs new file mode 100644 index 0000000000000000000000000000000000000000..4c5e0ed650bd5b90fb94c9dd75f2d14dc10bce38 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PreferenceKeys.cs @@ -0,0 +1,242 @@ +using System; +using UnityEngine; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// A collection of constant values the ProBuilder uses regularly. + /// </summary> + static class PreferenceKeys + { + /// <summary> + /// The product name ("ProBuilder" or "ProBuilder Basic" depending on assembly definition). + /// </summary> + public const string pluginTitle = "ProBuilder"; + + internal const float k_MaxPointDistanceFromControl = 20f; + internal const char DEGREE_SYMBOL = (char)176; + internal const char CMD_SUPER = '\u2318'; + internal const char CMD_SHIFT = '\u21E7'; + internal const char CMD_OPTION = '\u2325'; + internal const char CMD_ALT = '\u2387'; + internal const char CMD_DELETE = '\u232B'; + + internal static readonly Color proBuilderBlue = new Color(0f, .682f, .937f, 1f); + internal static readonly Color proBuilderLightGray = new Color(.35f, .35f, .35f, .4f); + internal static readonly Color proBuilderDarkGray = new Color(.1f, .1f, .1f, .3f); + + /// <summary> + /// The starting range for editor menu items. + /// </summary> + public const int menuEditor = 100; + + /// <summary> + /// The starting range for selection menu items. + /// </summary> + public const int menuSelection = 200; + + /// <summary> + /// Starting range for geometry menu actions. + /// </summary> + public const int menuGeometry = 200; + + /// <summary> + /// Starting range for action menu actions. + /// </summary> + public const int menuActions = 300; + + /// <summary> + /// Starting range for material color menu items. + /// </summary> + public const int menuMaterialColors = 400; + + /// <summary> + /// Starting range for vertex color menu items. + /// </summary> + public const int menuVertexColors = 400; + + /// <summary> + /// Starting range for repair menu items. + /// </summary> + public const int menuRepair = 600; + + /// <summary> + /// Starting range for other misc. menu items that belong in the ProBuilder menu subtree. + /// </summary> + public const int menuMisc = 600; + + /// <summary> + /// Starting range for export menu items. + /// </summary> + public const int menuExport = 800; + + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbDefaultEditLevel = "pbDefaultEditLevel"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbDefaultSelectionMode = "pbDefaultSelectionMode"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbHandleAlignment = "pbHandleAlignment"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbVertexColorTool = "pbVertexColorTool"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbToolbarLocation = "pbToolbarLocation"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbDefaultEntity = "pbDefaultEntity"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbExtrudeMethod = "pbExtrudeMethod"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbDefaultStaticFlags = "pbDefaultStaticFlags"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbSelectedFaceColor = "pbDefaultFaceColor"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbWireframeColor = "pbDefaultEdgeColor"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbUnselectedEdgeColor = "pbUnselectedEdgeColor"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbSelectedEdgeColor = "pbSelectedEdgeColor"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbSelectedVertexColor = "pbDefaultSelectedVertexColor"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbUnselectedVertexColor = "pbDefaultVertexColor"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbPreselectionColor = "pbPreselectionColor"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbDefaultOpenInDockableWindow = "pbDefaultOpenInDockableWindow"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbEditorPrefVersion = "pbEditorPrefVersion"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbEditorShortcutsVersion = "pbEditorShortcutsVersion"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbDefaultCollider = "pbDefaultCollider"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbForceConvex = "pbForceConvex"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbVertexColorPrefs = "pbVertexColorPrefs"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbShowEditorNotifications = "pbShowEditorNotifications"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbDragCheckLimit = "pbDragCheckLimit"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbForceVertexPivot = "pbForceVertexPivot"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbForceGridPivot = "pbForceGridPivot"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbManifoldEdgeExtrusion = "pbManifoldEdgeExtrusion"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbPerimeterEdgeBridgeOnly = "pbPerimeterEdgeBridgeOnly"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbPBOSelectionOnly = "pbPBOSelectionOnly"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbCloseShapeWindow = "pbCloseShapeWindow"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbUVEditorFloating = "pbUVEditorFloating"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbUVMaterialPreview = "pbUVMaterialPreview"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbShowSceneToolbar = "pbShowSceneToolbar"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbNormalizeUVsOnPlanarProjection = "pbNormalizeUVsOnPlanarProjection"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbStripProBuilderOnBuild = "pbStripProBuilderOnBuild"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbDisableAutoUV2Generation = "pbDisableAutoUV2Generation"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbShowSceneInfo = "pbShowSceneInfo"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbEnableBackfaceSelection = "pbEnableBackfaceSelection"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbVertexPaletteDockable = "pbVertexPaletteDockable"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbExtrudeAsGroup = "pbExtrudeAsGroup"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbUniqueModeShortcuts = "pbUniqueModeShortcuts"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbMaterialEditorFloating = "pbMaterialEditorFloating"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbShapeWindowFloating = "pbShapeWindowFloating"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbIconGUI = "pbIconGUI"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbShiftOnlyTooltips = "pbShiftOnlyTooltips"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbDrawAxisLines = "pbDrawAxisLines"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbCollapseVertexToFirst = "pbCollapseVertexToFirst"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbMeshesAreAssets = "pbMeshesAreAssets"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbElementSelectIsHamFisted = "pbElementSelectIsHamFisted"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbFillHoleSelectsEntirePath = "pbFillHoleSelectsEntirePath"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbDetachToNewObject = "pbDetachToNewObject"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbPreserveFaces = "pbPreserveFaces"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbDragSelectWholeElement = "pbDragSelectWholeElement"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbShowPreselectionHighlight = "pbShowPreselectionHighlight"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbRectSelectMode = "pbRectSelectMode"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbDragSelectMode = "pbDragSelectMode"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbShadowCastingMode = "pbShadowCastingMode"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbEnableExperimental = "pbEnableExperimental"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbCheckForProBuilderUpdates = "pbCheckForProBuilderUpdates"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbManageLightmappingStaticFlag = "pbManageLightmappingStaticFlag"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbShowMissingLightmapUvWarning = "pb_Lightmapping::showMissingLightmapUvWarning"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbSelectedFaceDither = "pbSelectedFaceDither"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbUseUnityColors = "pbUseUnityColors"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbVertexHandleSize = "pbVertexHandleSize"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbUVGridSnapValue = "pbUVGridSnapValue"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbUVWeldDistance = "pbUVWeldDistance"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbLineHandleSize = "pbLineHandleSize"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbWireframeSize = "pbWireframeSize"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbWeldDistance = "pbWeldDistance"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbExtrudeDistance = "pbExtrudeDistance"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbBevelAmount = "pbBevelAmount"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbEdgeSubdivisions = "pbEdgeSubdivisions"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbDefaultShortcuts = "pbDefaultShortcuts"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbDefaultMaterial = "pbDefaultMaterial"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbCurrentMaterialPalette = "pbCurrentMaterialPalette"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbGrowSelectionUsingAngle = "pbGrowSelectionUsingAngle"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbGrowSelectionAngle = "pbGrowSelectionAngle"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbGrowSelectionAngleIterative = "pbGrowSelectionAngleIterative"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbShowDetail = "pbShowDetail"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbShowOccluder = "pbShowOccluder"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbShowMover = "pbShowMover"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbShowCollider = "pbShowCollider"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbShowTrigger = "pbShowTrigger"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string pbShowNoDraw = "pbShowNoDraw"; + [Obsolete("Use Pref<T> or Settings class directly.")] + internal const string defaultUnwrapParameters = "pbDefaultUnwrapParameters"; + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PreferenceKeys.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PreferenceKeys.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..02e811dfebba165e3b66697346c4654eb16a3822 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/PreferenceKeys.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 914c2d056412b4f1ca64740fc2cb1c66 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderEnum.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderEnum.cs new file mode 100644 index 0000000000000000000000000000000000000000..218e05c67c802e96e937079e3cb11f6b6287ed6d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderEnum.cs @@ -0,0 +1,420 @@ +using System; +using UnityEngine; +using System.Collections; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Defines what objects are selectable for the scene tool. + /// </summary> + [System.Flags] + public enum SelectMode + { + /// <summary> + /// No selection mode defined. + /// </summary> + None = 0 << 0, + + /// <summary> + /// Objects are selectable. + /// </summary> + Object = 1 << 0, + + /// <summary> + /// Vertices are selectable. + /// </summary> + Vertex = 1 << 1, + + /// <summary> + /// Edges are selectable. + /// </summary> + Edge = 1 << 2, + + /// <summary> + /// Faces are selectable. + /// </summary> + Face = 1 << 3, + + /// <summary> + /// Texture coordinates are selectable. + /// </summary> + TextureFace = 1 << 4, + + /// <summary> + /// Texture coordinates are selectable. + /// </summary> + TextureEdge = 1 << 5, + + /// <summary> + /// Texture coordinates are selectable. + /// </summary> + TextureVertex = 1 << 6, + + /// <summary> + /// Other input tool (Poly Shape editor, Bezier editor, etc) + /// </summary> + InputTool = 1 << 7, + + /// <summary> + /// Match any value. + /// </summary> + Any = 0xFFFF + } + + /// <summary> + /// Element selection mode. + /// </summary> + enum ComponentMode + { + /// <summary> + /// Vertices are selectable. + /// </summary> + Vertex = 0x0, + /// <summary> + /// Edges are selectable. + /// </summary> + Edge = 0x1, + /// <summary> + /// Faces are selectable. + /// </summary> + Face = 0x2 + } + + /// <summary> + /// Defines what the current tool interacts with in the scene view. + /// </summary>' + internal enum EditLevel + { + /// <summary> + /// The transform tools interact with GameObjects. + /// </summary> + Top = 0, + /// <summary> + /// The current tool interacts with mesh geometry (faces, edges, vertices). + /// </summary> + Geometry = 1, + /// <summary> + /// Tools are affecting mesh UVs. This corresponds to UVEditor in-scene editing. + /// </summary> + Texture = 2, + /// <summary> + /// A custom ProBuilder tool mode is engaged. + /// </summary> + Plugin = 3 + } + + /// <summary> + /// Determines what GameObject flags this object will have. + /// </summary> + enum EntityType + { + Detail, + Occluder, + Trigger, + Collider, + Mover + } + + enum ColliderType + { + None, + BoxCollider, + MeshCollider + } + + /// <summary> + /// Axis used in projecting UVs. + /// </summary> + public enum ProjectionAxis + { + /// <summary> + /// Projects on x axis. + /// </summary> + X, + /// <summary> + /// Projects on y axis. + /// </summary> + Y, + /// <summary> + /// Projects on z axis. + /// </summary> + Z, + /// <summary> + /// Projects on -x axis. + /// </summary> + XNegative, + /// <summary> + /// Projects on -y axis. + /// </summary> + YNegative, + /// <summary> + /// Projects on -z axis. + /// </summary> + ZNegative + } + + enum HandleAxis + { + X = 1 << 0, + Y = 1 << 1, + Z = 1 << 2, + Free = 1 << 3 + } + + /// <summary> + /// pb_ShapeEditor enum. + /// </summary> + [System.Obsolete("See pb_ShapeType")] + enum Shape + { + Cube, + Stair, + Prism, + Cylinder, + Plane, + Door, + Pipe, + Cone, + Sprite, + Arch, + Icosahedron, + Torus, + Custom + } + + /// <summary> + /// Human readable axis enum. + /// </summary> + public enum Axis + { + /// <summary> + /// X axis. + /// </summary> + Right, + /// <summary> + /// -X axis. + /// </summary> + Left, + /// <summary> + /// Y axis. + /// </summary> + Up, + /// <summary> + /// -Y axis. + /// </summary> + Down, + /// <summary> + /// Z axis. + /// </summary> + Forward, + /// <summary> + /// -Z axis. + /// </summary> + Backward + } + + /// <summary> + /// Describes the winding order of mesh triangles. + /// </summary> + public enum WindingOrder + { + /// <summary> + /// Winding order could not be determined. + /// </summary> + Unknown, + /// <summary> + /// Winding is clockwise (right handed). + /// </summary> + Clockwise, + /// <summary> + /// Winding is counter-clockwise (left handed). + /// </summary> + CounterClockwise + } + + /// <summary> + /// Describes methods of sorting points in 2d space. + /// </summary> + public enum SortMethod + { + /// <summary> + /// Order the vertices clockwise. + /// </summary> + Clockwise, + /// <summary> + /// Order the vertices counter-clockwise. + /// </summary> + CounterClockwise + }; + + /// <summary> + /// A flag which sets the triangle culling mode. + /// </summary> + [System.Flags] + public enum CullingMode + { + /// <summary> + /// Both front and back faces are rendered. + /// </summary> + None = 0 << 0, + /// <summary> + /// Back faces are culled. + /// </summary> + Back = 1 << 0, + /// <summary> + /// Front faces are culled. + /// </summary> + Front = 1 << 1, + /// <summary> + /// Both front and back faces are culled. + /// </summary> + FrontBack = Front | Back, + } + + /// <summary> + /// Defines the behavior of drag selection in the scene view for mesh elements. + /// </summary> + public enum RectSelectMode + { + /// <summary> + /// Any mesh element touching the drag rectangle is selected. + /// </summary> + Partial, + /// <summary> + /// Mesh elements must be completely enveloped by the drag rect to be selected. + /// </summary> + Complete + } + + /// <summary> + /// Describes why a @"UnityEngine.ProBuilder.ProBuilderMesh" is considered to be out of sync with it's UnityEngine.MeshFilter component. + /// </summary> + public enum MeshSyncState + { + /// <summary> + /// The MeshFilter mesh is null. + /// </summary> + Null, + /// <summary> + /// The MeshFilter mesh is not owned by the ProBuilderMesh component. Use @"UnityEngine.ProBuilder.ProBuilderMesh.MakeUnique" to remedy. + /// </summary> + /// <remarks>This is only used in editor.</remarks> + InstanceIDMismatch, + /// <summary> + /// The mesh is valid, but does not have a UV2 channel. + /// </summary> + /// <remarks>This is only used in editor.</remarks> + Lightmap, + /// <summary> + /// The mesh is in sync. + /// </summary> + InSync + } + + /// <summary> + /// Mesh attributes bitmask. + /// </summary> + [System.Flags] + public enum MeshArrays + { + /// <summary> + /// Vertex positions. + /// </summary> + Position = 0x1, + /// <summary> + /// First UV channel. + /// </summary> + Texture0 = 0x2, + /// <summary> + /// Second UV channel. Commonly called UV2 or Lightmap UVs in Unity terms. + /// </summary> + Texture1 = 0x4, + /// <summary> + /// Second UV channel. Commonly called UV2 or Lightmap UVs in Unity terms. + /// </summary> + Lightmap = 0x4, + /// <summary> + /// Third UV channel. + /// </summary> + Texture2 = 0x8, + /// <summary> + /// Vertex UV4. + /// </summary> + Texture3 = 0x10, + /// <summary> + /// Vertex colors. + /// </summary> + Color = 0x20, + /// <summary> + /// Vertex normals. + /// </summary> + Normal = 0x40, + /// <summary> + /// Vertex tangents. + /// </summary> + Tangent = 0x80, + /// <summary> + /// All ProBuilder stored mesh attributes. + /// </summary> + All = 0xFF + }; + + enum IndexFormat + { + Local = 0x0, + Common = 0x1, + Both = 0x2 + }; + + /// <summary> + /// Selectively rebuild and apply mesh attributes to the UnityEngine.Mesh asset. + /// </summary> + /// <seealso cref="ProBuilderMesh.Refresh"/> + [System.Flags] + public enum RefreshMask + { + /// <summary> + /// Textures channel will be rebuilt. + /// </summary> + UV = 0x1, + /// <summary> + /// Colors will be rebuilt. + /// </summary> + Colors = 0x2, + /// <summary> + /// Normals will be recalculated and applied. + /// </summary> + Normals = 0x4, + /// <summary> + /// Tangents will be recalculated and applied. + /// </summary> + Tangents = 0x8, + /// <summary> + /// Re-assign the MeshCollider sharedMesh. + /// </summary> + Collisions = 0x10, + /// <summary> + /// Refresh all optional mesh attributes. + /// </summary> + All = UV | Colors | Normals | Tangents | Collisions + }; + + /// <summary> + /// Describes the different methods of face extrusion. + /// </summary> + public enum ExtrudeMethod + { + /// <summary> + /// Each face is extruded separately. + /// </summary> + IndividualFaces = 0, + /// <summary> + /// Adjacent faces are merged as a group along the averaged normals. + /// </summary> + VertexNormal = 1, + /// <summary> + /// Adjacent faces are merged as a group, but faces are extruded from each face normal. + /// </summary> + FaceNormal = 2 + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderEnum.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderEnum.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..75df0ff7a786ca176026ed39971607fbb0584132 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderEnum.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 42d1d51e272f34868beefb1d9a2688f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMesh.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMesh.cs new file mode 100644 index 0000000000000000000000000000000000000000..f9a6de46ad7715b8891febab7e4d97626190deba --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMesh.cs @@ -0,0 +1,863 @@ +using UnityEngine; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.Serialization; +using System; +using System.Collections.ObjectModel; +using UnityEngine.Rendering; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// This component is responsible for storing all the data necessary for editing and compiling UnityEngine.Mesh objects. + /// </summary> + // The double "//" sets this component as hidden in the menu, but is used by ObjectNames.cs to get the component name. + [AddComponentMenu("//ProBuilder MeshFilter")] + // Don't include MeshFilter in the required components because it gets registered with serialization before we have a + // chance to mark it with the correct HideFlags. + [RequireComponent(typeof(MeshRenderer))] + [DisallowMultipleComponent, ExecuteInEditMode, ExcludeFromPreset, ExcludeFromObjectFactory] +// [MonoBehaviourIcon("Packages/com.unity.probuilder/Content/Icons/Scripts/ProBuilderMesh@64.png")] + public sealed partial class ProBuilderMesh : MonoBehaviour + { +#if ENABLE_DRIVEN_PROPERTIES + internal const HideFlags k_MeshFilterHideFlags = HideFlags.DontSave | HideFlags.HideInInspector | HideFlags.NotEditable; +#else + internal const HideFlags k_MeshFilterHideFlags = HideFlags.HideInInspector | HideFlags.NotEditable; +#endif + + /// <summary> + /// Max number of UV channels that ProBuilderMesh format supports. + /// </summary> + const int k_UVChannelCount = 4; + + /// <summary> + /// The current mesh format version. This is used to run expensive upgrade functions once in ToMesh(). + /// </summary> + const int k_MeshFormatVersion = 1; + + const int k_MeshFormatVersionSubmeshMaterialRefactor = 1; + + /// <summary> + /// The maximum number of vertices that a ProBuilderMesh can accomodate. + /// </summary> + public const uint maxVertexCount = ushort.MaxValue; + + [SerializeField] + int m_MeshFormatVersion; + + [SerializeField] + [FormerlySerializedAs("_quads")] + Face[] m_Faces; + + [SerializeField] + [FormerlySerializedAs("_sharedIndices")] + [FormerlySerializedAs("m_SharedVertexes")] + SharedVertex[] m_SharedVertices; + + [Flags] + enum CacheValidState : byte + { + SharedVertex = 1 << 0, + SharedTexture = 1 << 1 + } + + [NonSerialized] + CacheValidState m_CacheValid; + + [NonSerialized] + Dictionary<int, int> m_SharedVertexLookup; + + [SerializeField] + [FormerlySerializedAs("_sharedIndicesUV")] + SharedVertex[] m_SharedTextures; + + [NonSerialized] + Dictionary<int, int> m_SharedTextureLookup; + + [SerializeField] + [FormerlySerializedAs("_vertices")] + Vector3[] m_Positions; + + [SerializeField] + [FormerlySerializedAs("_uv")] + Vector2[] m_Textures0; + + [SerializeField] + [FormerlySerializedAs("_uv3")] + List<Vector4> m_Textures2; + + [SerializeField] + [FormerlySerializedAs("_uv4")] + List<Vector4> m_Textures3; + + [SerializeField] + [FormerlySerializedAs("_tangents")] + Vector4[] m_Tangents; + + [NonSerialized] + Vector3[] m_Normals; + + [SerializeField] + [FormerlySerializedAs("_colors")] + Color[] m_Colors; + + /// <value> + /// If false, ProBuilder will automatically create and scale colliders. + /// </value> + public bool userCollisions { get; set; } + + [FormerlySerializedAs("unwrapParameters")] + [SerializeField] + UnwrapParameters m_UnwrapParameters; + + /// <value> + /// UV2 generation parameters. + /// </value> + public UnwrapParameters unwrapParameters + { + get { return m_UnwrapParameters; } + set { m_UnwrapParameters = value; } + } + + [FormerlySerializedAs("dontDestroyMeshOnDelete")] + [SerializeField] + bool m_PreserveMeshAssetOnDestroy; + + /// <value> + /// If "Meshes are Assets" feature is enabled, this is used to relate pb_Objects to stored meshes. + /// </value> + [SerializeField] + internal string assetGuid; + + [SerializeField] + Mesh m_Mesh; + + [NonSerialized] + MeshRenderer m_MeshRenderer; + +#pragma warning disable 109 + internal new MeshRenderer renderer + { + get + { + if (!gameObject.TryGetComponent<MeshRenderer>(out m_MeshRenderer)) + return null; + return m_MeshRenderer; + } + } +#pragma warning restore 109 + + [NonSerialized] + MeshFilter m_MeshFilter; + +#pragma warning disable 109 + internal new MeshFilter filter + { + get + { + if (m_MeshFilter == null) + { + if (!gameObject.TryGetComponent<MeshFilter>(out m_MeshFilter)) + return null; +#if UNITY_EDITOR + m_MeshFilter.hideFlags = k_MeshFilterHideFlags; +#endif + } + + return m_MeshFilter; + } + } +#pragma warning restore 109 + + /// <value> + /// In the editor, when you delete a ProBuilderMesh you usually also want to destroy the mesh asset. + /// However, there are situations you'd want to keep the mesh around, like when stripping probuilder scripts. + /// </value> + public bool preserveMeshAssetOnDestroy + { + get { return m_PreserveMeshAssetOnDestroy; } + set { m_PreserveMeshAssetOnDestroy = value; } + } + + /// <summary> + /// Check if the mesh contains the requested arrays. + /// </summary> + /// <param name="channels">A flag containing the array types that a ProBuilder mesh stores.</param> + /// <returns>True if all arrays in the flag are present, false if not.</returns> + public bool HasArrays(MeshArrays channels) + { + bool missing = false; + + int vc = vertexCount; + + missing |= (channels & MeshArrays.Position) == MeshArrays.Position && m_Positions == null; + missing |= (channels & MeshArrays.Normal) == MeshArrays.Normal && (m_Normals == null || m_Normals.Length != vc); + missing |= (channels & MeshArrays.Texture0) == MeshArrays.Texture0 && (m_Textures0 == null || m_Textures0.Length != vc); + missing |= (channels & MeshArrays.Texture2) == MeshArrays.Texture2 && (m_Textures2 == null || m_Textures2.Count != vc); + missing |= (channels & MeshArrays.Texture3) == MeshArrays.Texture3 && (m_Textures3 == null || m_Textures3.Count != vc); + missing |= (channels & MeshArrays.Color) == MeshArrays.Color && (m_Colors == null || m_Colors.Length != vc); + missing |= (channels & MeshArrays.Tangent) == MeshArrays.Tangent && (m_Tangents == null || m_Tangents.Length != vc); + + // UV2 is a special case. It is not stored in ProBuilderMesh, does not necessarily match the vertex count, + // at it has a cost to check. + if ((channels & MeshArrays.Texture1) == MeshArrays.Texture1 && mesh != null) + { +#if UNITY_2019_3_OR_NEWER + missing |= !mesh.HasVertexAttribute(VertexAttribute.TexCoord1); +#else + var m_Textures1 = m_Mesh.uv2; + missing |= (m_Textures1 == null || m_Textures1.Length < 3); +#endif + } + + return !missing; + } + + internal Face[] facesInternal + { + get { return m_Faces; } + set { m_Faces = value; } + } + + /// <summary> + /// Meshes are composed of vertices and faces. Faces primarily contain triangles and material information. With these components, ProBuilder will compile a mesh. + /// </summary> + /// <value> + /// A collection of the @"UnityEngine.ProBuilder.Face"'s that make up this mesh. + /// </value> + public IList<Face> faces + { + get { return new ReadOnlyCollection<Face>(m_Faces); } + set + { + if (value == null) + throw new ArgumentNullException("value"); + m_Faces = value.ToArray(); + } + } + + internal void InvalidateSharedVertexLookup() + { + if (m_SharedVertexLookup == null) + m_SharedVertexLookup = new Dictionary<int, int>(); + m_SharedVertexLookup.Clear(); + m_CacheValid &= ~CacheValidState.SharedVertex; + } + + internal void InvalidateSharedTextureLookup() + { + if (m_SharedTextureLookup == null) + m_SharedTextureLookup = new Dictionary<int, int>(); + m_SharedTextureLookup.Clear(); + m_CacheValid &= ~CacheValidState.SharedTexture; + } + + internal void InvalidateFaces() + { + if (m_Faces == null) + { + m_Faces = new Face[0]; + return; + } + + foreach (var face in faces) + face.InvalidateCache(); + } + + internal void InvalidateCaches() + { + InvalidateSharedVertexLookup(); + InvalidateSharedTextureLookup(); + InvalidateFaces(); + m_SelectedCacheDirty = true; + } + + internal SharedVertex[] sharedVerticesInternal + { + get { return m_SharedVertices; } + + set + { + m_SharedVertices = value; + InvalidateSharedVertexLookup(); + } + } + + /// <summary> + /// ProBuilder makes the assumption that no @"UnityEngine.ProBuilder.Face" references a vertex used by another. + /// However, we need a way to associate vertices in the editor for many operations. These vertices are usually + /// called coincident, or shared vertices. ProBuilder manages these associations with the sharedIndexes array. + /// Each array contains a list of triangles that point to vertices considered to be coincident. When ProBuilder + /// compiles a UnityEngine.Mesh from the ProBuilderMesh, these vertices will be condensed to a single vertex + /// where possible. + /// </summary> + /// <value> + /// The shared (or common) index array for this mesh. + /// </value> + public IList<SharedVertex> sharedVertices + { + get { return new ReadOnlyCollection<SharedVertex>(m_SharedVertices); } + + set + { + if (value == null) + throw new ArgumentNullException("value"); + + int len = value.Count; + m_SharedVertices = new SharedVertex[len]; + for (var i = 0; i < len; i++) + m_SharedVertices[i] = new SharedVertex(value[i]); + + InvalidateSharedVertexLookup(); + } + } + + internal Dictionary<int, int> sharedVertexLookup + { + get + { + if ((m_CacheValid & CacheValidState.SharedVertex) != CacheValidState.SharedVertex) + { + if (m_SharedVertexLookup == null) + m_SharedVertexLookup = new Dictionary<int, int>(); + SharedVertex.GetSharedVertexLookup(m_SharedVertices, m_SharedVertexLookup); + m_CacheValid |= CacheValidState.SharedVertex; + } + + return m_SharedVertexLookup; + } + } + + /// <summary> + /// Set the sharedIndexes array for this mesh with a lookup dictionary. + /// </summary> + /// <param name="indexes"> + /// The new sharedIndexes array. + /// </param> + /// <seealso cref="sharedVertices"/> + internal void SetSharedVertices(IEnumerable<KeyValuePair<int, int>> indexes) + { + if (indexes == null) + throw new ArgumentNullException("indexes"); + m_SharedVertices = SharedVertex.ToSharedVertices(indexes); + InvalidateSharedVertexLookup(); + } + + internal SharedVertex[] sharedTextures + { + get { return m_SharedTextures; } + set + { + m_SharedTextures = value; + InvalidateSharedTextureLookup(); + } + } + + internal Dictionary<int, int> sharedTextureLookup + { + get + { + if ((m_CacheValid & CacheValidState.SharedTexture) != CacheValidState.SharedTexture) + { + m_CacheValid |= CacheValidState.SharedTexture; + if (m_SharedTextureLookup == null) + m_SharedTextureLookup = new Dictionary<int, int>(); + SharedVertex.GetSharedVertexLookup(m_SharedTextures, m_SharedTextureLookup); + } + + return m_SharedTextureLookup; + } + } + + internal void SetSharedTextures(IEnumerable<KeyValuePair<int, int>> indexes) + { + if (indexes == null) + throw new ArgumentNullException("indexes"); + m_SharedTextures = SharedVertex.ToSharedVertices(indexes); + InvalidateSharedTextureLookup(); + } + + internal Vector3[] positionsInternal + { + get { return m_Positions; } + set { m_Positions = value; } + } + + /// <value> + /// The vertex positions that make up this mesh. + /// </value> + public IList<Vector3> positions + { + get { return new ReadOnlyCollection<Vector3>(m_Positions); } + set + { + if (value == null) + throw new ArgumentNullException("value"); + m_Positions = value.ToArray(); + } + } + + /// <summary> + /// Creates a new array of vertices with values from a @"UnityEngine.ProBuilder.ProBuilderMesh" component. + /// </summary> + /// <param name="indexes">An optional list of indexes pointing to the mesh attribute indexes to include in the returned Vertex array.</param> + /// <returns>An array of vertices.</returns> + public Vertex[] GetVertices(IList<int> indexes = null) + { + int meshVertexCount = vertexCount; + int vc = indexes != null ? indexes.Count : vertexCount; + + Vertex[] v = new Vertex[vc]; + + Vector3[] positions = positionsInternal; + Color[] colors = colorsInternal; + Vector2[] uv0s = texturesInternal; + Vector4[] tangents = GetTangents(); + Vector3[] normals = GetNormals(); + Vector2[] uv2s = mesh != null ? mesh.uv2 : null; + + List<Vector4> uv3s = new List<Vector4>(); + List<Vector4> uv4s = new List<Vector4>(); + + GetUVs(2, uv3s); + GetUVs(3, uv4s); + + bool _hasPositions = positions != null && positions.Count() == meshVertexCount; + bool _hasColors = colors != null && colors.Count() == meshVertexCount; + bool _hasNormals = normals != null && normals.Count() == meshVertexCount; + bool _hasTangents = tangents != null && tangents.Count() == meshVertexCount; + bool _hasUv0 = uv0s != null && uv0s.Count() == meshVertexCount; + bool _hasUv2 = uv2s != null && uv2s.Count() == meshVertexCount; + bool _hasUv3 = uv3s.Count() == meshVertexCount; + bool _hasUv4 = uv4s.Count() == meshVertexCount; + + for (int i = 0; i < vc; i++) + { + v[i] = new Vertex(); + + int ind = indexes == null ? i : indexes[i]; + + if (_hasPositions) + v[i].position = positions[ind]; + + if (_hasColors) + v[i].color = colors[ind]; + + if (_hasNormals) + v[i].normal = normals[ind]; + + if (_hasTangents) + v[i].tangent = tangents[ind]; + + if (_hasUv0) + v[i].uv0 = uv0s[ind]; + + if (_hasUv2) + v[i].uv2 = uv2s[ind]; + + if (_hasUv3) + v[i].uv3 = uv3s[ind]; + + if (_hasUv4) + v[i].uv4 = uv4s[ind]; + } + + return v; + } + + /// <summary> + /// Set the vertex element arrays on this mesh. + /// </summary> + /// <param name="vertices">The new vertex array.</param> + /// <param name="applyMesh">An optional parameter that will apply elements to the MeshFilter.sharedMesh. Note that this should only be used when the mesh is in its original state, not optimized (meaning it won't affect triangles which can be modified by Optimize).</param> + public void SetVertices(IList<Vertex> vertices, bool applyMesh = false) + { + if (vertices == null) + throw new ArgumentNullException("vertices"); + + var first = vertices.FirstOrDefault(); + + if (first == null || !first.HasArrays(MeshArrays.Position)) + { + Clear(); + return; + } + + Vector3[] position; + Color[] color; + Vector3[] normal; + Vector4[] tangent; + Vector2[] uv0; + Vector2[] uv2; + List<Vector4> uv3; + List<Vector4> uv4; + + Vertex.GetArrays(vertices, out position, out color, out uv0, out normal, out tangent, out uv2, out uv3, out uv4); + + m_Positions = position; + m_Colors = color; + m_Tangents = tangent; + m_Textures0 = uv0; + m_Textures2 = uv3; + m_Textures3 = uv4; + + if (applyMesh) + { + Mesh umesh = mesh; + + if (first.HasArrays(MeshArrays.Position)) + umesh.vertices = position; + if (first.HasArrays(MeshArrays.Color)) + umesh.colors = color; + if (first.HasArrays(MeshArrays.Texture0)) + umesh.uv = uv0; + if (first.HasArrays(MeshArrays.Normal)) + umesh.normals = normal; + if (first.HasArrays(MeshArrays.Tangent)) + umesh.tangents = tangent; + if (first.HasArrays(MeshArrays.Texture1)) + umesh.uv2 = uv2; + if (first.HasArrays(MeshArrays.Texture2)) + umesh.SetUVs(2, uv3); + if (first.HasArrays(MeshArrays.Texture3)) + umesh.SetUVs(3, uv4); + } + } + + /// <value> + /// The mesh normals. + /// </value> + /// <see cref="Refresh"/> + /// <see cref="Normals.CalculateNormals"/> + public IList<Vector3> normals + { + get { return m_Normals != null ? new ReadOnlyCollection<Vector3>(m_Normals) : null; } + } + + internal Vector3[] normalsInternal + { + get { return m_Normals; } + set { m_Normals = value; } + } + + /// <value> + /// Get the normals array for this mesh. + /// </value> + /// <returns> + /// Returns the normals for this mesh. + /// </returns> + public Vector3[] GetNormals() + { + if (!HasArrays(MeshArrays.Normal)) + Normals.CalculateNormals(this); + + return normals.ToArray(); + } + + internal Color[] colorsInternal + { + get { return m_Colors; } + set { m_Colors = value; } + } + + /// <value> + /// Vertex colors array for this mesh. When setting, the value must match the length of positions. + /// </value> + public IList<Color> colors + { + get { return m_Colors != null ? new ReadOnlyCollection<Color>(m_Colors) : null; } + + set + { + if (value == null) + m_Colors = null; + else if (value.Count() != vertexCount) + throw new ArgumentOutOfRangeException("value", "Array length must match vertex count."); + else + m_Colors = value.ToArray(); + } + } + + /// <summary> + /// Get an array of Color values from the mesh. + /// </summary> + /// <returns>The colors array for this mesh. If mesh does not contain colors, a new array is returned filled with the default value (Color.white).</returns> + public Color[] GetColors() + { + if (HasArrays(MeshArrays.Color)) + return colors.ToArray(); + return ArrayUtility.Fill(Color.white, vertexCount); + } + + /// <value> + /// Get the user-set tangents array for this mesh. If tangents have not been explicitly set, this value will be null. + /// </value> + /// <remarks> + /// To get the generated tangents that are applied to the mesh through Refresh(), use GetTangents(). + /// </remarks> + /// <seealso cref="GetTangents"/> + public IList<Vector4> tangents + { + get + { + return m_Tangents == null || m_Tangents.Length != vertexCount + ? null + : new ReadOnlyCollection<Vector4>(m_Tangents); + } + + set + { + if (value == null) + m_Tangents = null; + else if (value.Count() != vertexCount) + throw new ArgumentOutOfRangeException("value", "Tangent array length must match vertex count"); + else + m_Tangents = value.ToArray(); + } + } + + internal Vector4[] tangentsInternal + { + get { return m_Tangents; } + set { m_Tangents = value; } + } + + /// <summary> + /// Get the tangents applied to the mesh, or create and cache them if not yet initialized. + /// </summary> + /// <returns>The tangents applied to the MeshFilter.sharedMesh. If the tangents array length does not match the vertex count, null is returned.</returns> + public Vector4[] GetTangents() + { + if (!HasArrays(MeshArrays.Tangent)) + Normals.CalculateTangents(this); + + return tangents.ToArray(); + } + + internal Vector2[] texturesInternal + { + get { return m_Textures0; } + set { m_Textures0 = value; } + } + + /// <value> + /// The UV0 channel. Null if not present. + /// </value> + /// <seealso cref="GetUVs"/> + public IList<Vector2> textures + { + get { return m_Textures0 != null ? new ReadOnlyCollection<Vector2>(m_Textures0) : null; } + set + { + if (value == null) + m_Textures0 = null; + else if (value.Count() != vertexCount) + throw new ArgumentOutOfRangeException("value"); + else + m_Textures0 = value.ToArray(); + } + } + + /// <summary> + /// Copy values in a UV channel to uvs. + /// </summary> + /// <param name="channel">The index of the UV channel to fetch values from. The valid range is `{0, 1, 2, 3}`.</param> + /// <param name="uvs">A list that will be cleared and populated with the UVs copied from this mesh.</param> + public void GetUVs(int channel, List<Vector4> uvs) + { + if (uvs == null) + throw new ArgumentNullException("uvs"); + + if (channel < 0 || channel > 3) + throw new ArgumentOutOfRangeException("channel"); + + uvs.Clear(); + + switch (channel) + { + case 0: + for (int i = 0; i < vertexCount; i++) + uvs.Add((Vector4)m_Textures0[i]); + break; + + case 1: + if (mesh != null && mesh.uv2 != null) + { + Vector2[] uv2 = mesh.uv2; + for (int i = 0; i < uv2.Length; i++) + uvs.Add((Vector4)uv2[i]); + } + break; + + case 2: + if (m_Textures2 != null) + uvs.AddRange(m_Textures2); + break; + + case 3: + if (m_Textures3 != null) + uvs.AddRange(m_Textures3); + break; + } + } + + internal ReadOnlyCollection<Vector2> GetUVs(int channel) + { + if (channel == 0) + return new ReadOnlyCollection<Vector2>(m_Textures0); + + if (channel == 1) + return new ReadOnlyCollection<Vector2>(mesh.uv2); + + if (channel == 2) + return m_Textures2 == null ? null : new ReadOnlyCollection<Vector2>(m_Textures2.Cast<Vector2>().ToList()); + + if (channel == 3) + return m_Textures3 == null ? null : new ReadOnlyCollection<Vector2>(m_Textures3.Cast<Vector2>().ToList()); + + return null; + } + + /// <summary> + /// Set the mesh UVs per-channel. Channels 0 and 1 are cast to Vector2, where channels 2 and 3 are kept Vector4. + /// </summary> + /// <remarks>Does not apply to mesh (use Refresh to reflect changes after application).</remarks> + /// <param name="channel">The index of the UV channel to fetch values from. The valid range is `{0, 1, 2, 3}`.</param> + /// <param name="uvs">The new UV values.</param> + public void SetUVs(int channel, List<Vector4> uvs) + { + switch (channel) + { + case 0: + m_Textures0 = uvs != null ? uvs.Select(x => (Vector2)x).ToArray() : null; + break; + + case 1: + mesh.uv2 = uvs != null ? uvs.Select(x => (Vector2)x).ToArray() : null; + break; + + case 2: + m_Textures2 = uvs != null ? new List<Vector4>(uvs) : null; + break; + + case 3: + m_Textures3 = uvs != null ? new List<Vector4>(uvs) : null; + break; + } + } + + /// <value> + /// How many faces does this mesh have? + /// </value> + public int faceCount + { + get { return m_Faces == null ? 0 : m_Faces.Length; } + } + + /// <value> + /// How many vertices are in the positions array. + /// </value> + public int vertexCount + { + get { return m_Positions == null ? 0 : m_Positions.Length; } + } + + /// <value> + /// How many edges compose this mesh. + /// </value> + public int edgeCount + { + get + { + int count = 0; + for (int i = 0, c = faceCount; i < c; i++) + count += facesInternal[i].edgesInternal.Length; + return count; + } + } + + /// <value> + /// How many vertex indexes make up this mesh. + /// </value> + public int indexCount + { + get { return m_Faces == null ? 0 : m_Faces.Sum(x => x.indexesInternal.Length); } + } + + /// <value> + /// How many triangles make up this mesh. + /// </value> + public int triangleCount + { + get { return m_Faces == null ? 0 : m_Faces.Sum(x => x.indexesInternal.Length) / 3; } + } + + /// <summary> + /// In the editor, when a ProBuilderMesh is destroyed it will also destroy the MeshFilter.sharedMesh that is + /// found with the parent GameObject. You may override this behaviour by subscribing to onDestroyObject. + /// </summary> + /// <value> + /// If onDestroyObject has a subscriber ProBuilder will invoke it instead of cleaning up unused meshes by itself. + /// </value> + /// <seealso cref="preserveMeshAssetOnDestroy"/> + public static event Action<ProBuilderMesh> meshWillBeDestroyed; + + /// <value> + /// Invoked from ProBuilderMesh.OnDestroy before any cleanup is performed. + /// </value> + internal static event Action<ProBuilderMesh> componentWillBeDestroyed; + + /// <value> + /// Invoked from ProBuilderMesh.Reset after component is rebuilt. + /// </value> + internal static event Action<ProBuilderMesh> componentHasBeenReset; + + /// <value> + /// Invoked when the element selection changes on any ProBuilderMesh. + /// </value> + /// <seealso cref="SetSelectedFaces"/> + /// <seealso cref="SetSelectedVertices"/> + /// <seealso cref="SetSelectedEdges"/> + public static event Action<ProBuilderMesh> elementSelectionChanged; + + internal Mesh mesh + { + get + { + if (m_Mesh == null && filter != null) + m_Mesh = filter.sharedMesh; + return m_Mesh; + } + + set { m_Mesh = value; } + } + + internal int id + { + get { return gameObject.GetInstanceID(); } + } + + /// <summary> + /// Ensure that the UnityEngine.Mesh is in sync with the ProBuilderMesh. + /// </summary> + /// <returns>A flag describing the state of the synchronicity between the MeshFilter.sharedMesh and ProBuilderMesh components.</returns> + public MeshSyncState meshSyncState + { + get + { + if (mesh == null) + return MeshSyncState.Null; + + int meshNo; + + int.TryParse(mesh.name.Replace("pb_Mesh", ""), out meshNo); + + if (meshNo != id) + return MeshSyncState.InstanceIDMismatch; + + return mesh.uv2 == null ? MeshSyncState.Lightmap : MeshSyncState.InSync; + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMesh.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMesh.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c1260e1635e30dff202674faac0070c875066b5f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMesh.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8233d90336aea43098adf6dbabd606a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 432b3086cebdc438d9d33de3669fb063, type: 2} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMeshFunction.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMeshFunction.cs new file mode 100644 index 0000000000000000000000000000000000000000..ad157b86b85ca801db893431fc4303ec2fd817b7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMeshFunction.cs @@ -0,0 +1,797 @@ +using UnityEngine; +using System.Collections.Generic; +using System.Linq; +using System; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace UnityEngine.ProBuilder +{ +#if UNITY_EDITOR + public sealed partial class ProBuilderMesh : ISerializationCallbackReceiver +#else + public sealed partial class ProBuilderMesh +#endif + { + static HashSet<int> s_CachedHashSet = new HashSet<int>(); + +#if UNITY_EDITOR + public void OnBeforeSerialize() {} + + public void OnAfterDeserialize() + { + InvalidateCaches(); + } + +#if ENABLE_DRIVEN_PROPERTIES + // Using the internal callbacks here to avoid registering this component as "enable-able" + void OnEnableINTERNAL() + { + ApplyDrivenProperties(); + } + + void OnDisableINTERNAL() + { + // Don't call DrivenPropertyManager.Unregister in OnDestroy. At that point GameObject::m_ActivationState is + // already set to kDestroying, and DrivenPropertyManager.Unregister will try to revert the driven values to + // their previous state (which will assert that the object is _not_ being destroyed) + ClearDrivenProperties(); + } + + internal void ApplyDrivenProperties() + { + SerializationUtility.RegisterDrivenProperty(this, this, "m_Mesh"); + if(gameObject != null && gameObject.TryGetComponent(out MeshCollider meshCollider)) + SerializationUtility.RegisterDrivenProperty(this, meshCollider, "m_Mesh"); + } + + internal void ClearDrivenProperties() + { + SerializationUtility.UnregisterDrivenProperty(this, this, "m_Mesh"); + if(gameObject != null && gameObject.TryGetComponent(out MeshCollider meshCollider)) + SerializationUtility.UnregisterDrivenProperty(this, meshCollider, "m_Mesh"); + } +#endif +#endif + + void Awake() + { + EnsureMeshFilterIsAssigned(); + EnsureMeshColliderIsAssigned(); + + if (vertexCount > 0 + && faceCount > 0 + && meshSyncState == MeshSyncState.Null) + Rebuild(); + } + + void Reset() + { + if (meshSyncState != MeshSyncState.Null && meshSyncState != MeshSyncState.InstanceIDMismatch) + { + Rebuild(); + if (componentHasBeenReset != null) + componentHasBeenReset(this); + } + } + + void OnDestroy() + { + // Always re-enable the MeshFilter when the ProBuilderMesh component is removed + if (m_MeshFilter != null || this.TryGetComponent(out m_MeshFilter)) + m_MeshFilter.hideFlags = HideFlags.None; + + if (componentWillBeDestroyed != null) + componentWillBeDestroyed(this); + + // Time.frameCount is zero when loading scenes in the Editor. It's the only way I could figure to + // differentiate between OnDestroy invoked from user delete & editor scene loading. + if (!preserveMeshAssetOnDestroy && + Application.isEditor && + !Application.isPlaying && + Time.frameCount > 0) + { + if (meshWillBeDestroyed != null) + meshWillBeDestroyed(this); + else + DestroyImmediate(gameObject.GetComponent<MeshFilter>().sharedMesh, true); + } + } + + /// <summary> + /// Reset all the attribute arrays on this object. + /// </summary> + public void Clear() + { + // various editor tools expect faces & vertices to always be valid. + // ideally we'd null everything here, but that would break a lot of existing code. + m_Faces = new Face[0]; + m_Positions = new Vector3[0]; + m_Textures0 = new Vector2[0]; + m_Textures2 = null; + m_Textures3 = null; + m_Tangents = null; + m_SharedVertices = new SharedVertex[0]; + m_SharedTextures = new SharedVertex[0]; + InvalidateSharedVertexLookup(); + InvalidateSharedTextureLookup(); + m_Colors = null; + ClearSelection(); + } + + internal void EnsureMeshFilterIsAssigned() + { + if (filter == null) + m_MeshFilter = gameObject.AddComponent<MeshFilter>(); + +#if UNITY_EDITOR + m_MeshFilter.hideFlags = k_MeshFilterHideFlags; +#endif + + if (!renderer.isPartOfStaticBatch && filter.sharedMesh != m_Mesh) + filter.sharedMesh = m_Mesh; + } + + internal static ProBuilderMesh CreateInstanceWithPoints(Vector3[] positions) + { + if (positions.Length % 4 != 0) + { + Log.Warning("Invalid Geometry. Make sure vertices in are pairs of 4 (faces)."); + return null; + } + + GameObject go = new GameObject(); + go.name = "ProBuilder Mesh"; + ProBuilderMesh pb = go.AddComponent<ProBuilderMesh>(); + pb.m_MeshFormatVersion = k_MeshFormatVersion; + pb.GeometryWithPoints(positions); + + return pb; + } + + /// <summary> + /// Create a new GameObject with a ProBuilderMesh component, MeshFilter, and MeshRenderer. All arrays are + /// initialized as empty. + /// </summary> + /// <returns>A reference to the new ProBuilderMesh component.</returns> + public static ProBuilderMesh Create() + { + var go = new GameObject(); + var pb = go.AddComponent<ProBuilderMesh>(); + pb.m_MeshFormatVersion = k_MeshFormatVersion; + pb.Clear(); + return pb; + } + + /// <summary> + /// Create a new GameObject with a ProBuilderMesh component, MeshFilter, and MeshRenderer, then initializes the ProBuilderMesh with a set of positions and faces. + /// </summary> + /// <param name="positions">Vertex positions array.</param> + /// <param name="faces">Faces array.</param> + /// <returns>A reference to the new ProBuilderMesh component.</returns> + public static ProBuilderMesh Create(IEnumerable<Vector3> positions, IEnumerable<Face> faces) + { + GameObject go = new GameObject(); + ProBuilderMesh pb = go.AddComponent<ProBuilderMesh>(); + go.name = "ProBuilder Mesh"; + pb.m_MeshFormatVersion = k_MeshFormatVersion; + pb.RebuildWithPositionsAndFaces(positions, faces); + return pb; + } + + /// <summary> + /// Create a new GameObject with a ProBuilderMesh component, MeshFilter, and MeshRenderer, then initializes the ProBuilderMesh with a set of positions and faces. + /// </summary> + /// <param name="vertices">Vertex positions array.</param> + /// <param name="faces">Faces array.</param> + /// <param name="sharedVertices">Optional SharedVertex[] defines coincident vertices.</param> + /// <param name="sharedTextures">Optional SharedVertex[] defines coincident texture coordinates (UV0).</param> + /// <param name="materials">Optional array of materials that will be assigned to the MeshRenderer.</param> + /// <returns></returns> + public static ProBuilderMesh Create( + IList<Vertex> vertices, + IList<Face> faces, + IList<SharedVertex> sharedVertices = null, + IList<SharedVertex> sharedTextures = null, + IList<Material> materials = null) + { + var go = new GameObject(); + go.name = "ProBuilder Mesh"; + var mesh = go.AddComponent<ProBuilderMesh>(); + if (materials != null) + mesh.renderer.sharedMaterials = materials.ToArray(); + mesh.m_MeshFormatVersion = k_MeshFormatVersion; + mesh.SetVertices(vertices); + mesh.faces = faces; + mesh.sharedVertices = sharedVertices; + mesh.sharedTextures = sharedTextures != null ? sharedTextures.ToArray() : null; + mesh.ToMesh(); + mesh.Refresh(); + return mesh; + } + + void GeometryWithPoints(Vector3[] points) + { + // Wrap in faces + Face[] f = new Face[points.Length / 4]; + + for (int i = 0; i < points.Length; i += 4) + { + f[i / 4] = new Face(new int[6] + { + i + 0, i + 1, i + 2, + i + 1, i + 3, i + 2 + }, + 0, + AutoUnwrapSettings.tile, + 0, + -1, + -1, + false); + } + + Clear(); + positions = points; + m_Faces = f; + m_SharedVertices = SharedVertex.GetSharedVerticesWithPositions(points); + InvalidateSharedVertexLookup(); + ToMesh(); + Refresh(); + } + + /// <summary> + /// Clear all mesh attributes and reinitialize with new positions and face collections. + /// </summary> + /// <param name="vertices">Vertex positions array.</param> + /// <param name="faces">Faces array.</param> + public void RebuildWithPositionsAndFaces(IEnumerable<Vector3> vertices, IEnumerable<Face> faces) + { + if (vertices == null) + throw new ArgumentNullException("vertices"); + + Clear(); + m_Positions = vertices.ToArray(); + m_Faces = faces.ToArray(); + m_SharedVertices = SharedVertex.GetSharedVerticesWithPositions(m_Positions); + InvalidateSharedVertexLookup(); + InvalidateSharedTextureLookup(); + ToMesh(); + Refresh(); + } + + /// <summary> + /// Wraps <see cref="ToMesh"/> and <see cref="Refresh"/>. + /// </summary> + internal void Rebuild() + { + ToMesh(); + Refresh(); + } + + /// <summary> + /// Rebuild the mesh positions and submeshes. If vertex count matches new positions array the existing attributes are kept, otherwise the mesh is cleared. UV2 is the exception, it is always cleared. + /// </summary> + /// <param name="preferredTopology">Triangles and Quads are supported.</param> + public void ToMesh(MeshTopology preferredTopology = MeshTopology.Triangles) + { + // if the mesh vertex count hasn't been modified, we can keep most of the mesh elements around + if (mesh == null) + { +#if ENABLE_DRIVEN_PROPERTIES + SerializationUtility.RegisterDrivenProperty(this, this, "m_Mesh"); +#endif + mesh = new Mesh(); + } + else if (mesh.vertexCount != vertexCount) + { + mesh.Clear(); + } + + mesh.indexFormat = vertexCount > ushort.MaxValue ? Rendering.IndexFormat.UInt32 : Rendering.IndexFormat.UInt16; + mesh.vertices = m_Positions; + mesh.uv2 = null; + + if (m_MeshFormatVersion < k_MeshFormatVersion) + { + if (m_MeshFormatVersion < k_MeshFormatVersionSubmeshMaterialRefactor) + Submesh.MapFaceMaterialsToSubmeshIndex(this); + + m_MeshFormatVersion = k_MeshFormatVersion; + } + + m_MeshFormatVersion = k_MeshFormatVersion; + + int materialCount = MaterialUtility.GetMaterialCount(renderer); + + Submesh[] submeshes = Submesh.GetSubmeshes(facesInternal, materialCount, preferredTopology); + + mesh.subMeshCount = materialCount; + + for (int i = 0; i < mesh.subMeshCount; i++) + { +#if DEVELOPER_MODE + if (i >= materialCount) + Log.Warning("Submesh index " + i + " is out of bounds of the MeshRenderer materials array."); + if (submeshes[i] == null) + throw new Exception("Attempting to assign a null submesh. " + i + "/" + materialCount); +#endif + mesh.SetIndices(submeshes[i].m_Indexes, submeshes[i].m_Topology, i, false); + } + + mesh.name = string.Format("pb_Mesh{0}", id); + + EnsureMeshFilterIsAssigned(); + } + + /// <summary> + /// Ensure that the UnityEngine.Mesh associated with this object is unique + /// </summary> + internal void MakeUnique() + { + // set a new UnityEngine.Mesh instance + mesh = new Mesh(); + ToMesh(); + Refresh(); + } + + /// <summary> + /// Copy mesh data from another mesh to self. + /// </summary> + /// <param name="other"></param> + public void CopyFrom(ProBuilderMesh other) + { + if (other == null) + throw new ArgumentNullException("other"); + + Clear(); + positions = other.positions; + sharedVertices = other.sharedVerticesInternal; + SetSharedTextures(other.sharedTextureLookup); + facesInternal = other.faces.Select(x => new Face(x)).ToArray(); + + List<Vector4> uvs = new List<Vector4>(); + + for (var i = 0; i < k_UVChannelCount; i++) + { + other.GetUVs(i, uvs); + SetUVs(i, uvs); + } + + tangents = other.tangents; + colors = other.colors; + userCollisions = other.userCollisions; + selectable = other.selectable; + unwrapParameters = new UnwrapParameters(other.unwrapParameters); + } + + /// <summary> + /// Recalculates mesh attributes: normals, collisions, UVs, tangents, and colors. + /// </summary> + /// <param name="mask"> + /// Optionally pass a mask to define what components are updated (UV and collisions are expensive to rebuild, and can usually be deferred til completion of task). + /// </param> + public void Refresh(RefreshMask mask = RefreshMask.All) + { + // Mesh + if ((mask & RefreshMask.UV) > 0) + RefreshUV(facesInternal); + + if ((mask & RefreshMask.Colors) > 0) + RefreshColors(); + + if ((mask & RefreshMask.Normals) > 0) + RefreshNormals(); + + if ((mask & RefreshMask.Tangents) > 0) + RefreshTangents(); + + if ((mask & RefreshMask.Collisions) > 0) + EnsureMeshColliderIsAssigned(); + } + + internal void EnsureMeshColliderIsAssigned() + { + if(gameObject.TryGetComponent<MeshCollider>(out MeshCollider collider)) + { +#if ENABLE_DRIVEN_PROPERTIES + SerializationUtility.RegisterDrivenProperty(this, collider, "m_Mesh"); +#endif + if (collider.sharedMesh != mesh) + { + collider.sharedMesh = null; + collider.sharedMesh = mesh; + } + } + } + + /// <summary> + /// Returns a new unused texture group id. + /// Will be greater than or equal to i. + /// </summary> + /// <param name="i"></param> + /// <returns></returns> + internal int GetUnusedTextureGroup(int i = 1) + { + while (Array.Exists(facesInternal, element => element.textureGroup == i)) + i++; + + return i; + } + + static bool IsValidTextureGroup(int group) + { + return group > 0; + } + + /// <summary> + /// Returns a new unused element group. + /// Will be greater than or equal to i. + /// </summary> + /// <param name="i"></param> + /// <returns></returns> + internal int UnusedElementGroup(int i = 1) + { + while (Array.Exists(facesInternal, element => element.elementGroup == i)) + i++; + + return i; + } + + public void RefreshUV(IEnumerable<Face> facesToRefresh) + { + // If the UV array has gone out of sync with the positions array, reset all faces to Auto UV so that we can + // correct the texture array. + if (!HasArrays(MeshArrays.Texture0)) + { + m_Textures0 = new Vector2[vertexCount]; + foreach (Face f in facesInternal) + f.manualUV = false; + facesToRefresh = facesInternal; + } + + s_CachedHashSet.Clear(); + + foreach (var face in facesToRefresh) + { + if (face.manualUV || face.indexesInternal?.Length < 3) + continue; + + int textureGroup = face.textureGroup; + + if (!IsValidTextureGroup(textureGroup)) + UvUnwrapping.Unwrap(this, face); + else if (s_CachedHashSet.Add(textureGroup)) + UvUnwrapping.ProjectTextureGroup(this, textureGroup, face.uv); + } + + mesh.uv = m_Textures0; + + if (HasArrays(MeshArrays.Texture2)) + mesh.SetUVs(2, m_Textures2); + if (HasArrays(MeshArrays.Texture3)) + mesh.SetUVs(3, m_Textures3); + } + + internal void SetGroupUV(AutoUnwrapSettings settings, int group) + { + if (!IsValidTextureGroup(group)) + return; + + foreach (var face in facesInternal) + { + if (face.textureGroup != group) + continue; + + face.uv = settings; + } + } + + void RefreshColors() + { + Mesh m = filter.sharedMesh; + m.colors = m_Colors; + } + + /// <summary> + /// Set the vertex colors for a @"UnityEngine.ProBuilder.Face". + /// </summary> + /// <param name="face">The target face.</param> + /// <param name="color">The color to set this face's referenced vertices to.</param> + public void SetFaceColor(Face face, Color color) + { + if (face == null) + throw new ArgumentNullException("face"); + + if (!HasArrays(MeshArrays.Color)) + m_Colors = ArrayUtility.Fill(Color.white, vertexCount); + + foreach (int i in face.distinctIndexes) + m_Colors[i] = color; + } + + /// <summary> + /// Set the material for a collection of faces. + /// </summary> + /// <remarks> + /// To apply the changes to the UnityEngine.Mesh, make sure to call ToMesh and Refresh. + /// </remarks> + /// <param name="faces">The faces to apply the material to.</param> + /// <param name="material">The material to apply.</param> + public void SetMaterial(IEnumerable<Face> faces, Material material) + { + var materials = renderer.sharedMaterials; + var submeshCount = materials.Length; + var index = -1; + + for (int i = 0; i < submeshCount && index < 0; i++) + { + if (materials[i] == material) + index = i; + } + + if (index < 0) + { + // Material doesn't exist in MeshRenderer.sharedMaterials, now check if there is an unused + // submeshIndex that we can replace with this value instead of creating a new entry. + var submeshIndexes = new bool[submeshCount]; + + foreach (var face in m_Faces) + submeshIndexes[Math.Clamp(face.submeshIndex, 0, submeshCount - 1)] = true; + + index = Array.IndexOf(submeshIndexes, false); + + // Found an unused submeshIndex, replace it with the material. + if (index > -1) + { + materials[index] = material; + renderer.sharedMaterials = materials; + } + else + { + // There were no unused submesh indices, append another submesh and material. + index = materials.Length; + var copy = new Material[index + 1]; + Array.Copy(materials, copy, index); + copy[index] = material; + renderer.sharedMaterials = copy; + } + } + + foreach (var face in faces) + face.submeshIndex = index; + } + + void RefreshNormals() + { + Normals.CalculateNormals(this); + mesh.normals = m_Normals; + } + + void RefreshTangents() + { + Normals.CalculateTangents(this); + mesh.tangents = m_Tangents; + } + + /// <summary> + /// Find the index of a vertex index (triangle) in an IntArray[]. The index returned is called the common index, or shared index in some cases. + /// </summary> + /// <remarks>Aids in removing duplicate vertex indexes.</remarks> + /// <returns>The common (or shared) index.</returns> + internal int GetSharedVertexHandle(int vertex) + { + int res; + + if (m_SharedVertexLookup.TryGetValue(vertex, out res)) + return res; + + for (int i = 0; i < m_SharedVertices.Length; i++) + { + for (int n = 0, c = m_SharedVertices[i].Count; n < c; n++) + if (m_SharedVertices[i][n] == vertex) + return i; + } + + throw new ArgumentOutOfRangeException("vertex"); + } + + internal HashSet<int> GetSharedVertexHandles(IEnumerable<int> vertices) + { + var lookup = sharedVertexLookup; + HashSet<int> common = new HashSet<int>(); + foreach (var i in vertices) + common.Add(lookup[i]); + return common; + } + + /// <summary> + /// Get a list of vertices that are coincident to any of the vertices in the passed vertices parameter. + /// </summary> + /// <param name="vertices">A collection of indexes relative to the mesh positions.</param> + /// <returns>A list of all vertices that share a position with any of the passed vertices.</returns> + /// <exception cref="ArgumentNullException">The vertices parameter may not be null.</exception> + public List<int> GetCoincidentVertices(IEnumerable<int> vertices) + { + if (vertices == null) + throw new ArgumentNullException("vertices"); + + List<int> shared = new List<int>(); + GetCoincidentVertices(vertices, shared); + return shared; + } + + /// <summary> + /// Populate a list of vertices that are coincident to any of the vertices in the passed vertices parameter. + /// </summary> + /// <param name="faces">A collection of faces to gather vertices from.</param> + /// <param name="coincident">A list to be cleared and populated with any vertices that are coincident.</param> + /// <exception cref="ArgumentNullException">The vertices and coincident parameters may not be null.</exception> + public void GetCoincidentVertices(IEnumerable<Face> faces, List<int> coincident) + { + if (faces == null) + throw new ArgumentNullException("faces"); + + if (coincident == null) + throw new ArgumentNullException("coincident"); + + coincident.Clear(); + s_CachedHashSet.Clear(); + var lookup = sharedVertexLookup; + + foreach (var face in faces) + { + foreach (var v in face.distinctIndexesInternal) + { + var common = lookup[v]; + + if (s_CachedHashSet.Add(common)) + { + var indices = m_SharedVertices[common]; + + for (int i = 0, c = indices.Count; i < c; i++) + coincident.Add(indices[i]); + } + } + } + } + + /// <summary> + /// Populate a list of vertices that are coincident to any of the vertices in the passed vertices parameter. + /// </summary> + /// <param name="edges">A collection of edges to gather vertices from.</param> + /// <param name="coincident">A list to be cleared and populated with any vertices that are coincident.</param> + /// <exception cref="ArgumentNullException">The vertices and coincident parameters may not be null.</exception> + public void GetCoincidentVertices(IEnumerable<Edge> edges, List<int> coincident) + { + if (faces == null) + throw new ArgumentNullException("edges"); + + if (coincident == null) + throw new ArgumentNullException("coincident"); + + coincident.Clear(); + s_CachedHashSet.Clear(); + var lookup = sharedVertexLookup; + + foreach (var edge in edges) + { + var common = lookup[edge.a]; + + if (s_CachedHashSet.Add(common)) + { + var indices = m_SharedVertices[common]; + + for (int i = 0, c = indices.Count; i < c; i++) + coincident.Add(indices[i]); + } + + common = lookup[edge.b]; + + if (s_CachedHashSet.Add(common)) + { + var indices = m_SharedVertices[common]; + + for (int i = 0, c = indices.Count; i < c; i++) + coincident.Add(indices[i]); + } + } + } + + /// <summary> + /// Populate a list of vertices that are coincident to any of the vertices in the passed vertices parameter. + /// </summary> + /// <param name="vertices">A collection of indexes relative to the mesh positions.</param> + /// <param name="coincident">A list to be cleared and populated with any vertices that are coincident.</param> + /// <exception cref="ArgumentNullException">The vertices and coincident parameters may not be null.</exception> + public void GetCoincidentVertices(IEnumerable<int> vertices, List<int> coincident) + { + if (vertices == null) + throw new ArgumentNullException("vertices"); + + if (coincident == null) + throw new ArgumentNullException("coincident"); + + coincident.Clear(); + s_CachedHashSet.Clear(); + var lookup = sharedVertexLookup; + + foreach (var v in vertices) + { + var common = lookup[v]; + + if (s_CachedHashSet.Add(common)) + { + var indices = m_SharedVertices[common]; + + for (int i = 0, c = indices.Count; i < c; i++) + coincident.Add(indices[i]); + } + } + } + + /// <summary> + /// Populate a list with all the vertices that are coincident to the requested vertex. + /// </summary> + /// <param name="vertex">An index relative to a positions array.</param> + /// <param name="coincident">A list to be populated with all coincident vertices.</param> + /// <exception cref="ArgumentNullException">The coincident list may not be null.</exception> + /// <exception cref="ArgumentOutOfRangeException">The SharedVertex[] does not contain an entry for the requested vertex.</exception> + public void GetCoincidentVertices(int vertex, List<int> coincident) + { + if (coincident == null) + throw new ArgumentNullException("coincident"); + + int common; + + if (!sharedVertexLookup.TryGetValue(vertex, out common)) + throw new ArgumentOutOfRangeException("vertex"); + + var indices = m_SharedVertices[common]; + + for (int i = 0, c = indices.Count; i < c; i++) + coincident.Add(indices[i]); + } + + /// <summary> + /// Sets the passed vertices as being considered coincident by the ProBuilderMesh. + /// </summary> + /// <remarks> + /// Note that it is up to the caller to ensure that the passed vertices are indeed sharing a position. + /// </remarks> + /// <param name="vertices">Returns a list of vertices to be associated as coincident.</param> + public void SetVerticesCoincident(IEnumerable<int> vertices) + { + var lookup = sharedVertexLookup; + List<int> coincident = new List<int>(); + GetCoincidentVertices(vertices, coincident); + SharedVertex.SetCoincident(ref lookup, coincident); + SetSharedVertices(lookup); + } + + internal void SetTexturesCoincident(IEnumerable<int> vertices) + { + var lookup = sharedTextureLookup; + SharedVertex.SetCoincident(ref lookup, vertices); + SetSharedTextures(lookup); + } + + internal void AddToSharedVertex(int sharedVertexHandle, int vertex) + { + if (sharedVertexHandle < 0 || sharedVertexHandle >= m_SharedVertices.Length) + throw new ArgumentOutOfRangeException("sharedVertexHandle"); + + m_SharedVertices[sharedVertexHandle].Add(vertex); + InvalidateSharedVertexLookup(); + } + + internal void AddSharedVertex(SharedVertex vertex) + { + if (vertex == null) + throw new ArgumentNullException("vertex"); + + m_SharedVertices = m_SharedVertices.Add(vertex); + InvalidateSharedVertexLookup(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMeshFunction.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMeshFunction.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3ad8348467da9c09b785617a2e8e0fd17f073fb8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMeshFunction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd856323da4211845ae7b4c7a54b294f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMeshSelection.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMeshSelection.cs new file mode 100644 index 0000000000000000000000000000000000000000..84451755f2bcf5f3bc9b4572a74805cf91f1a884 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMeshSelection.cs @@ -0,0 +1,307 @@ +using System.Collections.Generic; +using System.Linq; +using System; +using System.Collections.ObjectModel; + +namespace UnityEngine.ProBuilder +{ + public sealed partial class ProBuilderMesh + { + [SerializeField] + bool m_IsSelectable = true; + + // Serialized for undo in the editor + [SerializeField] + int[] m_SelectedFaces = new int[] {}; + [SerializeField] + Edge[] m_SelectedEdges = new Edge[] {}; + [SerializeField] + int[] m_SelectedVertices = new int[] {}; + + bool m_SelectedCacheDirty; + int m_SelectedSharedVerticesCount = 0; + int m_SelectedCoincidentVertexCount = 0; + HashSet<int> m_SelectedSharedVertices = new HashSet<int>(); + List<int> m_SelectedCoincidentVertices = new List<int>(); + + /// <value> + /// If false mesh elements will not be selectable. This is used by @"UnityEditor.ProBuilder.ProBuilderEditor". + /// </value> + public bool selectable + { + get { return m_IsSelectable; } + set { m_IsSelectable = value; } + } + + /// <value> + /// Get the number of faces that are currently selected on this object. + /// </value> + public int selectedFaceCount + { + get { return m_SelectedFaces.Length; } + } + + /// <value> + /// Get the number of selected vertex indexes. + /// </value> + public int selectedVertexCount + { + get { return m_SelectedVertices.Length; } + } + + /// <value> + /// Get the number of selected edges. + /// </value> + public int selectedEdgeCount + { + get { return m_SelectedEdges.Length; } + } + + internal int selectedSharedVerticesCount + { + get + { + CacheSelection(); + return m_SelectedSharedVerticesCount; + } + } + + internal int selectedCoincidentVertexCount + { + get + { + CacheSelection(); + return m_SelectedCoincidentVertexCount; + } + } + + internal IEnumerable<int> selectedSharedVertices + { + get + { + CacheSelection(); + return m_SelectedSharedVertices; + } + } + + /// <summary> + /// All selected vertices and their coincident neighbors. + /// </summary> + internal IEnumerable<int> selectedCoincidentVertices + { + get + { + CacheSelection(); + return m_SelectedCoincidentVertices; + } + } + + void CacheSelection() + { + if (m_SelectedCacheDirty) + { + m_SelectedCacheDirty = false; + m_SelectedSharedVertices.Clear(); + m_SelectedCoincidentVertices.Clear(); + var lookup = sharedVertexLookup; + m_SelectedSharedVerticesCount = 0; + m_SelectedCoincidentVertexCount = 0; + + try + { + foreach (var i in m_SelectedVertices) + { + if (m_SelectedSharedVertices.Add(lookup[i])) + { + var coincident = sharedVerticesInternal[lookup[i]]; + + m_SelectedSharedVerticesCount++; + m_SelectedCoincidentVertexCount += coincident.Count; + + foreach (var n in coincident) + m_SelectedCoincidentVertices.Add(n); + } + } + } + catch + { + ClearSelection(); + } + } + } + + /// <summary> + /// Get a copy of the selected face array. + /// </summary> + public Face[] GetSelectedFaces() + { + int len = m_SelectedFaces.Length; + var selected = new Face[len]; + for (var i = 0; i < len; i++) + selected[i] = m_Faces[m_SelectedFaces[i]]; + return selected; + } + + /// <value> + /// A collection of the currently selected faces by their index in the @"UnityEngine.ProBuilder.ProBuilderMesh.faces" array. + /// </value> + public ReadOnlyCollection<int> selectedFaceIndexes + { + get { return new ReadOnlyCollection<int>(m_SelectedFaces); } + } + + /// <value> + /// A collection of the currently selected vertices by their index in the @"UnityEngine.ProBuilder.ProBuilderMesh.positions" array. + /// </value> + public ReadOnlyCollection<int> selectedVertices + { + get { return new ReadOnlyCollection<int>(m_SelectedVertices); } + } + + /// <value> + /// A collection of the currently selected edges. + /// </value> + public ReadOnlyCollection<Edge> selectedEdges + { + get { return new ReadOnlyCollection<Edge>(m_SelectedEdges); } + } + + internal Face[] selectedFacesInternal + { + get { return GetSelectedFaces(); } + set { m_SelectedFaces = value.Select(x => Array.IndexOf(m_Faces, x)).ToArray(); } + } + + internal int[] selectedFaceIndicesInternal + { + get { return m_SelectedFaces; } + set { m_SelectedFaces = value; } + } + + internal Edge[] selectedEdgesInternal + { + get { return m_SelectedEdges; } + set { m_SelectedEdges = value; } + } + + internal int[] selectedIndexesInternal + { + get { return m_SelectedVertices; } + set { m_SelectedVertices = value; } + } + + internal Face GetActiveFace() + { + if (selectedFaceCount < 1) + return null; + return m_Faces[selectedFaceIndicesInternal[selectedFaceCount - 1]]; + } + + internal Edge GetActiveEdge() + { + if (selectedEdgeCount < 1) + return Edge.Empty; + return m_SelectedEdges[selectedEdgeCount - 1]; + } + + internal int GetActiveVertex() + { + if (selectedVertexCount < 1) + return -1; + return m_SelectedVertices[selectedVertexCount - 1]; + } + + internal void AddToFaceSelection(int index) + { + if (index > -1) + SetSelectedFaces(m_SelectedFaces.Add(index)); + } + + /// <summary> + /// Set the face selection for this mesh. Also sets the vertex and edge selection to match. + /// </summary> + /// <param name="selected">The new face selection.</param> + public void SetSelectedFaces(IEnumerable<Face> selected) + { + SetSelectedFaces(selected != null ? selected.Select(x => Array.IndexOf(facesInternal, x)) : null); + } + + internal void SetSelectedFaces(IEnumerable<int> selected) + { + if (selected == null) + { + ClearSelection(); + } + else + { + m_SelectedFaces = selected.ToArray(); + m_SelectedVertices = m_SelectedFaces.SelectMany(x => facesInternal[x].distinctIndexesInternal).ToArray(); + m_SelectedEdges = m_SelectedFaces.SelectMany(x => facesInternal[x].edges).ToArray(); + } + + m_SelectedCacheDirty = true; + + if (elementSelectionChanged != null) + elementSelectionChanged(this); + } + + /// <summary> + /// Set the edge selection for this mesh. Also sets the face and vertex selection to match. + /// </summary> + /// <param name="edges">The new edge selection.</param> + public void SetSelectedEdges(IEnumerable<Edge> edges) + { + if (edges == null) + { + ClearSelection(); + } + else + { + m_SelectedFaces = new int[0]; + m_SelectedEdges = edges.ToArray(); + m_SelectedVertices = m_SelectedEdges.AllTriangles(); + } + + m_SelectedCacheDirty = true; + + if (elementSelectionChanged != null) + elementSelectionChanged(this); + } + + /// <summary> + /// Sets the selected vertices array. Clears SelectedFaces and SelectedEdges arrays. + /// </summary> + /// <param name="vertices">The new vertex selection.</param> + public void SetSelectedVertices(IEnumerable<int> vertices) + { + m_SelectedFaces = new int[0]; + m_SelectedEdges = new Edge[0]; + m_SelectedVertices = vertices != null ? vertices.Distinct().ToArray() : new int[0]; + + m_SelectedCacheDirty = true; + + if (elementSelectionChanged != null) + elementSelectionChanged(this); + } + + /// <summary> + /// Removes face at index in SelectedFaces array, and updates the SelectedTriangles and SelectedEdges arrays to match. + /// </summary> + /// <param name="index"></param> + internal void RemoveFromFaceSelectionAtIndex(int index) + { + SetSelectedFaces(m_SelectedFaces.RemoveAt(index)); + } + + /// <summary> + /// Clears selected face, edge, and vertex arrays. You do not need to call this when setting an individual array, as the setter methods will handle updating the associated caches. + /// </summary> + public void ClearSelection() + { + m_SelectedFaces = new int[0]; + m_SelectedEdges = new Edge[0]; + m_SelectedVertices = new int[0]; + m_SelectedCacheDirty = true; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMeshSelection.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMeshSelection.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d6a72e29cad508284ed4328a31e73721241bee9f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderMeshSelection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 957c62bbae19ee54cb800714912d2a2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderSnapping.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderSnapping.cs new file mode 100644 index 0000000000000000000000000000000000000000..d53824c6eac15b91d625c851424f7692a07b598d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderSnapping.cs @@ -0,0 +1,119 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Snapping functions + /// </summary> + static class ProBuilderSnapping + { + const float k_MaxRaySnapDistance = Mathf.Infinity; + + /// <summary> + /// Round value to nearest snpVal increment. + /// </summary> + /// <param name="vertex"></param> + /// <param name="snpVal"></param> + /// <returns></returns> + public static Vector3 SnapValue(Vector3 vertex, float snpVal) + { + // snapValue is a global setting that comes from ProGrids + return new Vector3( + snpVal * Mathf.Round(vertex.x / snpVal), + snpVal * Mathf.Round(vertex.y / snpVal), + snpVal * Mathf.Round(vertex.z / snpVal)); + } + + /// <summary> + /// Round value to nearest snpVal increment. + /// </summary> + /// <param name="val"></param> + /// <param name="snpVal"></param> + /// <returns></returns> + public static float SnapValue(float val, float snpVal) + { + if (snpVal < Mathf.Epsilon) + return val; + return snpVal * Mathf.Round(val / snpVal); + } + + /// <summary> + /// An override that accepts a vector3 to use as a mask for which values to snap. Ex; + /// Snap((.3f, 3f, 41f), (0f, 1f, .4f)) only snaps Y and Z values (to 1 & .4 unit increments). + /// </summary> + /// <param name="vertex"></param> + /// <param name="snap"></param> + /// <returns></returns> + public static Vector3 SnapValue(Vector3 vertex, Vector3 snap) + { + float x = vertex.x, y = vertex.y, z = vertex.z; + Vector3 v = new Vector3( + (Mathf.Abs(snap.x) < 0.0001f ? x : snap.x * Mathf.Round(x / snap.x)), + (Mathf.Abs(snap.y) < 0.0001f ? y : snap.y * Mathf.Round(y / snap.y)), + (Mathf.Abs(snap.z) < 0.0001f ? z : snap.z * Mathf.Round(z / snap.z)) + ); + return v; + } + + /// <summary> + /// Snap all vertices to an increment of @snapValue in world space. + /// </summary> + /// <param name="mesh"></param> + /// <param name="indexes"></param> + /// <param name="snap"></param> + public static void SnapVertices(ProBuilderMesh mesh, IEnumerable<int> indexes, Vector3 snap) + { + Vector3[] verts = mesh.positionsInternal; + + foreach (var v in indexes) + verts[v] = mesh.transform.InverseTransformPoint(SnapValue(mesh.transform.TransformPoint(verts[v]), snap)); + } + + internal static Vector3 GetSnappingMaskBasedOnNormalVector(Vector3 normal) + { + return new Vector3( + (Mathf.Approximately(Mathf.Abs(normal.x), 1f)) ? 0f : 1f, + (Mathf.Approximately(Mathf.Abs(normal.y), 1f)) ? 0f : 1f, + (Mathf.Approximately(Mathf.Abs(normal.z), 1f)) ? 0f : 1f); + } + + internal static Vector3 SnapValueOnRay(Ray ray, float distance, float snap, Vector3Mask mask) + { + var nearest = k_MaxRaySnapDistance; + + var forwardRay = new Ray(ray.origin, ray.direction); + var backwardsRay = new Ray(ray.origin, -ray.direction); + + for (int i = 0; i < 3; i++) + { + if (mask[i] > 0f) + { + var dir = new Vector3Mask(new Vector3Mask((byte) (1 << i))); + + var prj = Vector3.Project( + ray.direction * Math.MakeNonZero(distance), + dir * Mathf.Sign(ray.direction[i])); + + var pnt = ray.origin + prj; + var plane = new Plane(dir, SnapValue(pnt, dir * snap)); + + if(Mathf.Abs(plane.GetDistanceToPoint(ray.origin)) < .0001f) + { + nearest = 0f; + continue; + } + + float d; + + if (plane.Raycast(forwardRay, out d) && Mathf.Abs(d) < Mathf.Abs(nearest)) + nearest = d; + if (plane.Raycast(backwardsRay, out d) && Mathf.Abs(d) < Mathf.Abs(nearest)) + nearest = -d; + } + } + + return ray.origin + ray.direction * (Mathf.Abs(nearest) >= k_MaxRaySnapDistance ? distance : nearest); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderSnapping.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderSnapping.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..0c8e758d0864e5e4b0780d7b6ce26b11f981ba2a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProBuilderSnapping.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5d62e0d1462c4f02ae2aae1659cb748 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProGridsIgnoreSnap.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProGridsIgnoreSnap.cs new file mode 100644 index 0000000000000000000000000000000000000000..05a7c2ea20ccf347a0e6a9431ec33d06ba6c649f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProGridsIgnoreSnap.cs @@ -0,0 +1,29 @@ +using UnityEngine; +using System; + +namespace UnityEngine.ProBuilder +{ + /// <inheritdoc /> + /// <summary> + /// ProGridsNoSnapAttribute tells ProGrids to skip snapping on this object. + /// </summary> + /// <remarks> + /// This exists only as a stub for the ProGrids defined attribute. + /// </remarks> + [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] + sealed class ProGridsNoSnapAttribute : Attribute + { + } + + /// <inheritdoc /> + /// <summary> + /// ProGridsConditionalSnapAttribute tells ProGrids to check IsSnapEnabled function on this object. + /// </summary> + /// <remarks> + /// This exists only as a stub for the ProGrids defined attribute. + /// </remarks> + [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] + sealed class ProGridsConditionalSnapAttribute : Attribute + { + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProGridsIgnoreSnap.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProGridsIgnoreSnap.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..eb3a544f75aab9295b8005d2a7c0137a31e5660b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ProGridsIgnoreSnap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 599cab2fb037142fd9fe246b0b364bc1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Projection.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Projection.cs new file mode 100644 index 0000000000000000000000000000000000000000..9da713d0f09257a36b10eb7c1c775c0c147ed576 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Projection.cs @@ -0,0 +1,450 @@ +using System; +using UnityEngine; +using System.Linq; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Functions for projecting 3d points to 2d space. + /// </summary> + public static class Projection + { + /// <summary> + /// Project a collection of 3d positions to a 2d plane. The direction from which the vertices are projected + /// is calculated using <see cref="FindBestPlane"/>. + /// </summary> + /// <param name="positions">A collection of positions to project based on a direction.</param> + /// <param name="indexes"></param> + /// <returns>The positions array projected into 2d coordinates.</returns> + public static Vector2[] PlanarProject(IList<Vector3> positions, IList<int> indexes = null) + { + return PlanarProject(positions, indexes, FindBestPlane(positions, indexes).normal); + } + + /// <summary> + /// Project a collection of 3d positions to a 2d plane. + /// </summary> + /// <param name="positions">A collection of positions to project based on a direction.</param> + /// <param name="indexes"> + /// A collection of indices to project. The returned array will match the length of indices. + /// </param> + /// <param name="direction">The direction from which vertex positions are projected into 2d space.</param> + /// <returns>The positions array projected into 2d coordinates.</returns> + public static Vector2[] PlanarProject(IList<Vector3> positions, IList<int> indexes, Vector3 direction) + { + List<Vector2> results = new List<Vector2>(indexes != null ? indexes.Count : positions.Count); + PlanarProject(positions, indexes, direction, results); + return results.ToArray(); + } + + internal static void PlanarProject(IList<Vector3> positions, IList<int> indexes, Vector3 direction, List<Vector2> results) + { + if(positions == null) + throw new ArgumentNullException("positions"); + + if(results == null) + throw new ArgumentNullException("results"); + + var nrm = direction; + var axis = VectorToProjectionAxis(nrm); + var prj = GetTangentToAxis(axis); + var len = indexes == null ? positions.Count : indexes.Count; + results.Clear(); + + var u = Vector3.Cross(nrm, prj); + var v = Vector3.Cross(u, nrm); + + u.Normalize(); + v.Normalize(); + + if (indexes != null) + { + for (int i = 0, ic = len; i < ic; ++i) + results.Add(new Vector2(Vector3.Dot(u, positions[indexes[i]]), Vector3.Dot(v, positions[indexes[i]]))); + } + else + { + for (int i = 0, ic = len; i < ic; ++i) + results.Add(new Vector2(Vector3.Dot(u, positions[i]), Vector3.Dot(v, positions[i]))); + } + } + + internal static void PlanarProject(ProBuilderMesh mesh, int textureGroup, AutoUnwrapSettings unwrapSettings) + { + var worldSpace = unwrapSettings.useWorldSpace; + var trs = (Transform)null; + var faces = mesh.facesInternal; + + // Get a projection direction by averaging the normals of all selected faces + var projectionDirection = Vector3.zero; + + for (int f = 0, fc = faces.Length; f < fc; ++f) + { + if (faces[f].textureGroup != textureGroup) + continue; + + var nrm = Math.Normal(mesh, faces[f]); + projectionDirection += nrm; + } + + if (worldSpace) + { + trs = mesh.transform; + projectionDirection = trs.TransformDirection(projectionDirection); + } + + var axis = VectorToProjectionAxis(projectionDirection); + var prj = GetTangentToAxis(axis); + + var u = Vector3.Cross(projectionDirection, prj); + var v = Vector3.Cross(u, projectionDirection); + + u.Normalize(); + v.Normalize(); + + var positions = mesh.positionsInternal; + var textures = mesh.texturesInternal; + + for (int f = 0, fc = faces.Length; f < fc; ++f) + { + if (faces[f].textureGroup != textureGroup) + continue; + + var indexes = faces[f].distinctIndexesInternal; + + for (int i = 0, ic = indexes.Length; i < ic; ++i) + { + var p = worldSpace ? trs.TransformPoint(positions[indexes[i]]) : positions[indexes[i]]; + + textures[indexes[i]].x = Vector3.Dot(u, p); + textures[indexes[i]].y = Vector3.Dot(v, p); + } + } + } + + internal static void PlanarProject(ProBuilderMesh mesh, Face face, Vector3 projection = default) + { + var nrm = Math.Normal(mesh, face); + var trs = (Transform)null; + var worldSpace = face.uv.useWorldSpace; + + if (worldSpace) + { + trs = mesh.transform; + nrm = trs.TransformDirection(nrm); + } + + Vector3 prj = projection; + if (prj == Vector3.zero) + { + var axis = VectorToProjectionAxis(nrm); + prj = GetTangentToAxis(axis); + } + + var uAxis = Vector3.Cross(nrm, prj); + var vAxis = Vector3.Cross(uAxis, nrm); + + uAxis.Normalize(); + vAxis.Normalize(); + + var positions = mesh.positionsInternal; + var textures = mesh.texturesInternal; + + int[] indexes = face.distinctIndexesInternal; + + for (int i = 0, ic = indexes.Length; i < ic; ++i) + { + var p = worldSpace ? trs.TransformPoint(positions[indexes[i]]) : positions[indexes[i]]; + + textures[indexes[i]].x = Vector3.Dot(uAxis, p); + textures[indexes[i]].y = Vector3.Dot(vAxis, p); + } + } + + internal static Vector2[] SphericalProject(IList<Vector3> vertices, IList<int> indexes = null) + { + int len = indexes == null ? vertices.Count : indexes.Count; + Vector2[] uv = new Vector2[len]; + Vector3 cen = Math.Average(vertices, indexes); + + for (int i = 0; i < len; i++) + { + int indx = indexes == null ? i : indexes[i]; + Vector3 p = (vertices[indx] - cen); + p.Normalize(); + uv[i].x = .5f + (Mathf.Atan2(p.z, p.x) / (2f * Mathf.PI)); + uv[i].y = .5f - (Mathf.Asin(p.y) / Mathf.PI); + } + + return uv; + } + + /// <summary> + /// Returns a new set of points wound as a contour counter-clockwise. + /// </summary> + /// <param name="verts"></param> + /// <param name="method"></param> + /// <returns></returns> + internal static IList<Vector2> Sort(IList<Vector2> verts, SortMethod method = SortMethod.CounterClockwise) + { + Vector2 cen = Math.Average(verts); + Vector2 up = Vector2.up; + int count = verts.Count; + + List<SimpleTuple<float, Vector2>> angles = new List<SimpleTuple<float, Vector2>>(count); + + for (int i = 0; i < count; i++) + angles.Add(new SimpleTuple<float, Vector2>(Math.SignedAngle(up, verts[i] - cen), verts[i])); + + angles.Sort((a, b) => { return a.item1 < b.item1 ? -1 : 1; }); + + IList<Vector2> values = angles.Select(x => x.item2).ToList(); + + if (method == SortMethod.Clockwise) + values = values.Reverse().ToList(); + + return values; + } + + internal static Vector3 GetTangentToAxis(ProjectionAxis axis) + { + // old probuilder didn't respect project axis settings properly, and changing it to the correct version + // (ProjectionAxisToVector) would break existing models. + switch (axis) + { + case ProjectionAxis.X: + case ProjectionAxis.XNegative: + return Vector3.up; + + case ProjectionAxis.Y: + case ProjectionAxis.YNegative: + return Vector3.forward; + + case ProjectionAxis.Z: + case ProjectionAxis.ZNegative: + return Vector3.up; + + default: + return Vector3.up; + } + } + + /// <summary> + /// Given a ProjectionAxis, return the appropriate Vector3 conversion. + /// </summary> + /// <param name="axis"></param> + /// <returns></returns> + internal static Vector3 ProjectionAxisToVector(ProjectionAxis axis) + { + switch (axis) + { + case ProjectionAxis.X: + return Vector3.right; + + case ProjectionAxis.Y: + return Vector3.up; + + case ProjectionAxis.Z: + return Vector3.forward; + + case ProjectionAxis.XNegative: + return -Vector3.right; + + case ProjectionAxis.YNegative: + return -Vector3.up; + + case ProjectionAxis.ZNegative: + return -Vector3.forward; + + default: + return Vector3.zero; + } + } + + /// <summary> + /// Returns a projection axis based on which axis is the largest + /// </summary> + /// <param name="direction"></param> + /// <returns></returns> + internal static ProjectionAxis VectorToProjectionAxis(Vector3 direction) + { + float x = System.Math.Abs(direction.x); + float y = System.Math.Abs(direction.y); + float z = System.Math.Abs(direction.z); + + // Prior to 2019.1 Vector3.Normalize did not use System.Math for Magnitude calculations. There is a slight + // difference between 2018.3 and 2019.1 in accuracy, with 2019.1 being more correct. This inaccuracy results + // in float comparison problems (ex, .00700000001 > .007). To account for that we add an additional equality + // check here. + // In most other cases this doesn't matter, but since we need this function to be deterministic regardless + // of floating point inaccuracy it is necessary here. + if (!Math.Approx(x, y) && x > y && !Math.Approx(x, z) && x > z) + return direction.x > 0 ? ProjectionAxis.X : ProjectionAxis.XNegative; + + if (!Math.Approx(y, z) && y > z) + return direction.y > 0 ? ProjectionAxis.Y : ProjectionAxis.YNegative; + + return direction.z > 0 ? ProjectionAxis.Z : ProjectionAxis.ZNegative; + } + + /// <summary> + /// Find a plane that best fits a set of 3d points. + /// </summary> + /// <remarks>http://www.ilikebigbits.com/blog/2015/3/2/plane-from-points</remarks> + /// <param name="points">The points to find a plane for. Order does not matter.</param> + /// <param name="indexes">If provided, only the vertices referenced by the indexes array will be considered.</param> + /// <returns>A plane that best matches the layout of the points array.</returns> + public static Plane FindBestPlane(IList<Vector3> points, IList<int> indexes = null) + { + float xx = 0f, xy = 0f, xz = 0f, + yy = 0f, yz = 0f, zz = 0f; + + if (points == null) + throw new System.ArgumentNullException("points"); + + bool ind = indexes != null && indexes.Count > 0; + int len = ind ? indexes.Count : points.Count; + + Vector3 c = Vector3.zero, n = Vector3.zero; + + for (int i = 0; i < len; i++) + { + c.x += points[ind ? indexes[i] : i].x; + c.y += points[ind ? indexes[i] : i].y; + c.z += points[ind ? indexes[i] : i].z; + } + + c.x /= (float)len; + c.y /= (float)len; + c.z /= (float)len; + + for (int i = 0; i < len; i++) + { + Vector3 r = points[ind ? indexes[i] : i] - c; + + xx += r.x * r.x; + xy += r.x * r.y; + xz += r.x * r.z; + yy += r.y * r.y; + yz += r.y * r.z; + zz += r.z * r.z; + } + + float det_x = yy * zz - yz * yz; + float det_y = xx * zz - xz * xz; + float det_z = xx * yy - xy * xy; + + if (det_x > det_y && det_x > det_z) + { + n.x = 1f; + n.y = (xz * yz - xy * zz) / det_x; + n.z = (xy * yz - xz * yy) / det_x; + } + else if (det_y > det_z) + { + n.x = (yz * xz - xy * zz) / det_y; + n.y = 1f; + n.z = (xy * xz - yz * xx) / det_y; + } + else + { + n.x = (yz * xy - xz * yy) / det_z; + n.y = (xz * xy - yz * xx) / det_z; + n.z = 1f; + } + + n.Normalize(); + + return new Plane(n, c); + } + + /// <summary> + /// Find a plane that best fits a set of faces within a texture group. + /// </summary> + /// <returns>A plane that best matches the layout of the points array.</returns> + internal static Plane FindBestPlane(ProBuilderMesh mesh, int textureGroup) + { + float xx = 0f, xy = 0f, xz = 0f, + yy = 0f, yz = 0f, zz = 0f; + + if (mesh == null) + throw new System.ArgumentNullException("mesh"); + + Vector3 c = Vector3.zero; + int len = 0; + Vector3[] positions = mesh.positionsInternal; + int faceCount = mesh.faceCount; + Face[] faces = mesh.facesInternal; + + for (int faceIndex = 0; faceIndex < faceCount; faceIndex++) + { + if (faces[faceIndex].textureGroup != textureGroup) + continue; + + int[] indexes = faces[faceIndex].indexesInternal; + + for (int index = 0, indexCount = indexes.Length; index < indexCount; index++) + { + c.x += positions[indexes[index]].x; + c.y += positions[indexes[index]].y; + c.z += positions[indexes[index]].z; + + len++; + } + } + + c.x /= len; + c.y /= len; + c.z /= len; + + for (int faceIndex = 0; faceIndex < faceCount; faceIndex++) + { + if (faces[faceIndex].textureGroup != textureGroup) + continue; + + int[] indexes = faces[faceIndex].indexesInternal; + + for (int index = 0, indexCount = indexes.Length; index < indexCount; index++) + { + Vector3 r = positions[indexes[index]] - c; + + xx += r.x * r.x; + xy += r.x * r.y; + xz += r.x * r.z; + yy += r.y * r.y; + yz += r.y * r.z; + zz += r.z * r.z; + } + } + + float det_x = yy * zz - yz * yz; + float det_y = xx * zz - xz * xz; + float det_z = xx * yy - xy * xy; + Vector3 n = Vector3.zero; + + if (det_x > det_y && det_x > det_z) + { + n.x = 1f; + n.y = (xz * yz - xy * zz) / det_x; + n.z = (xy * yz - xz * yy) / det_x; + } + else if (det_y > det_z) + { + n.x = (yz * xz - xy * zz) / det_y; + n.y = 1f; + n.z = (xy * xz - yz * xx) / det_y; + } + else + { + n.x = (yz * xy - xz * yy) / det_z; + n.y = (xz * xy - yz * xx) / det_z; + n.z = 1f; + } + + n.Normalize(); + + return new Plane(n, c); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Projection.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Projection.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d0807e727d8c74bda4a57e007521323d57b1b00b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Projection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac19f03e418a945ba9d37c7d32e5cecb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/RaycastHit.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/RaycastHit.cs new file mode 100644 index 0000000000000000000000000000000000000000..72cc849ea515399f1bbbd932f8504bf11526cd15 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/RaycastHit.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// The results of a raycast hit. + /// </summary> + sealed class RaycastHit + { + public float distance; + public Vector3 point; + public Vector3 normal; + public int face; + + public RaycastHit( + float distance, + Vector3 point, + Vector3 normal, + int face) + { + this.distance = distance; + this.point = point; + this.normal = normal; + this.face = face; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/RaycastHit.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/RaycastHit.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a35cd141d326c09adf61ba28d7939135c2ee48a5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/RaycastHit.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 77656e4f6ab6544caa81cbd3e5784e03 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectPathFaces.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectPathFaces.cs new file mode 100644 index 0000000000000000000000000000000000000000..52142ad6cbb526fdad704c6db63acbbec4943e54 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectPathFaces.cs @@ -0,0 +1,181 @@ +using System.Collections.Generic; +using System.Linq; + +namespace UnityEngine.ProBuilder +{ + static class SelectPathFaces + { + static int[] s_cachedPredecessors; + static int s_cachedStart; + static ProBuilderMesh s_cachedMesh; + static int s_cachedFacesCount; + static List<WingedEdge> s_cachedWings; + static Dictionary<Face, int> s_cachedFacesIndex = new Dictionary<Face, int>(); + + /// <summary> + /// Calculates the indexes of all faces in the shortest path between start and end + /// </summary> + /// <param name="start">The index of the starting face</param> + /// <param name="end">The index of the ending face</param> + /// <param name="mesh">The mesh of the object</param> + /// <returns>The indexes of all faces </returns> + public static List<int> GetPath(ProBuilderMesh mesh, int start, int end) + { + if (mesh == null) + throw new System.ArgumentException("Parameter cannot be null", "mesh"); + if (start < 0 || start > mesh.faceCount - 1) + throw new System.ArgumentException("Parameter is out of bounds", "start"); + if (end < 0 || end > mesh.faceCount - 1) + throw new System.ArgumentException("Parameter is out of bounds", "end"); + + List<int> path; + + if (start == s_cachedStart && mesh == s_cachedMesh && mesh.faceCount == s_cachedFacesCount) + return GetMinimalPath(s_cachedPredecessors, start, end); + + var predecessors = Dijkstra(mesh, start); + path = GetMinimalPath(predecessors, start, end); + s_cachedPredecessors = predecessors; + s_cachedStart = start; + s_cachedMesh = mesh; + + return path; + } + + /// <summary> + /// Builds a list of predecessors from a given face index to all other faces + /// Uses the Djikstra pathfinding algorithm + /// </summary> + /// <param name="mesh">The mesh of the object</param> + /// <param name="start">The index of the starting face</param> + /// <returns>A list of predecessors from a face index to all other faces</returns> + static int[] Dijkstra(ProBuilderMesh mesh, int start) + { + HashSet<int> visited = new HashSet<int>(); + HashSet<int> toVisit = new HashSet<int>(); + if (s_cachedMesh != mesh || s_cachedFacesCount != mesh.faceCount) + { + s_cachedWings = WingedEdge.GetWingedEdges(mesh, true); + s_cachedFacesIndex.Clear(); + s_cachedFacesCount = mesh.faceCount; + + for (int i = 0; i < mesh.facesInternal.Length; i++) + { + s_cachedFacesIndex.Add(mesh.facesInternal[i], i); + } + } + int wingCount = s_cachedWings.Count; + + float[] weights = new float[wingCount]; + int[] predecessors = new int[wingCount]; + + for (int i = 0; i < wingCount; i++) + { + weights[i] = float.MaxValue; + predecessors[i] = -1; + } + + int current = start; + weights[current] = 0; + visited.Add(current); + + // Construct the paths between the start face and every other faces + while (visited.Count < wingCount) + { + var currentWing = s_cachedWings[current]; + var otherWing = currentWing; + // Update the weight array for each face next to the current one + do + { + var opposite = otherWing.opposite; + if (opposite == null) + { + otherWing = otherWing.next; + continue; + } + + var idx = s_cachedFacesIndex[opposite.face]; + var weight = GetWeight(current, idx, mesh); + // Change the predecessor and weight if the new path found if shorter + if (weights[current] + weight < weights[idx]) + { + weights[idx] = weights[current] + weight; + predecessors[idx] = current; + } + // Add the face to the ones we can visit next, if not yet visited + if (!toVisit.Contains(idx) && !visited.Contains(idx)) + { + toVisit.Add(idx); + } + + otherWing = otherWing.next; + + } while (otherWing != currentWing); + + // This means there is an isolated face + if (toVisit.Count == 0) + { + return predecessors; + } + // Look for the next face to visit, choosing the one with less weight + float min = float.MaxValue; + foreach (var i in toVisit) + { + if (weights[i] < min) + { + min = weights[i]; + current = i; + } + } + visited.Add(current); + toVisit.Remove(current); + } + + return predecessors; + } + + static float GetWeight(int face1, int face2, ProBuilderMesh mesh) + { + const float baseCost = 10f; + const float normalMult = 2f; + const float distMult = 1f; + + // Calculates the difference between the normals of the faces + var n1 = Math.Normal(mesh, mesh.facesInternal[face1]); + var n2 = Math.Normal(mesh, mesh.facesInternal[face2]); + float normalCost = (1f - Vector3.Dot(n1.normalized, n2.normalized)) * normalMult; + + // Calculates the distance between the center of the faces + Vector3 p1 = Vector3.zero; + Vector3 p2 = Vector3.zero; + foreach (var point in mesh.facesInternal[face1].indexesInternal) + { + p1 += mesh.positionsInternal[point] / mesh.facesInternal[face1].indexesInternal.Count(); + } + foreach (var point in mesh.facesInternal[face2].indexesInternal) + { + p2 += mesh.positionsInternal[point] / mesh.facesInternal[face2].indexesInternal.Count(); + } + + float distCost = (p2 - p1).magnitude * distMult; + + return baseCost + distCost + normalCost; + } + + static List<int> GetMinimalPath(int[] predecessors, int start, int end) + { + if (predecessors[end] == -1) + { + return null; + } + Stack<int> list = new Stack<int>(); + int a = end; + while (a != start) + { + list.Push(a); + a = predecessors[a]; + } + return list.ToList(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectPathFaces.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectPathFaces.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e76fd273aa23fdb20b37a9152bb4b3068ae7c750 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectPathFaces.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cf31008f4dc1fb548a315685bb054730 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionModifierBehaviour.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionModifierBehaviour.cs new file mode 100644 index 0000000000000000000000000000000000000000..891752f5fed74c66291bbbf59d766eb31a835363 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionModifierBehaviour.cs @@ -0,0 +1,22 @@ +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// When drag selecting mesh elements, this defines how the Shift key will modify the selection. + /// </summary> + /// <remarks>Editor only.</remarks> + public enum SelectionModifierBehavior + { + /// <summary> + /// Always add to the selection. + /// </summary> + Add, + /// <summary> + /// Always subtract from the selection. + /// </summary> + Subtract, + /// <summary> + /// Invert the selected faces (default). + /// </summary> + Difference + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionModifierBehaviour.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionModifierBehaviour.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e441871640c428eee0b587bfae23ecbf6b324ec7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionModifierBehaviour.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a581c9a381f68455db0779169a94180c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPicker.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPicker.cs new file mode 100644 index 0000000000000000000000000000000000000000..a4142db56c8308f55596d61450941dd2f7215e52 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPicker.cs @@ -0,0 +1,311 @@ +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Functions for picking mesh elements in a view. Can either render a texture to test, or cast a ray. Prefer this over calling SelectionPickerRenderer directly. + /// </summary> + public static class SelectionPicker + { + /// <summary> + /// Pick the vertex indexes contained within a rect. + /// </summary> + /// <param name="cam"></param> + /// <param name="rect">Rect is in GUI space, where 0,0 is top left of screen, width = cam.pixelWidth / pointsPerPixel.</param> + /// <param name="selectable">The objects to hit test.</param> + /// <param name="options">Culling options.</param> + /// <param name="pixelsPerPoint">Scale the render texture to match rect coordinates. Generally you'll just pass in EditorGUIUtility.pointsPerPixel.</param> + /// <returns>A dictionary of ProBuilderMesh and sharedIndexes that are in the selection rect. To get triangle indexes access the pb.sharedIndexes[index] array.</returns> + public static Dictionary<ProBuilderMesh, HashSet<int>> PickVerticesInRect( + Camera cam, + Rect rect, + IList<ProBuilderMesh> selectable, + PickerOptions options, + float pixelsPerPoint = 1f) + { + if (options.depthTest) + { + return SelectionPickerRenderer.PickVerticesInRect( + cam, + rect, + selectable, + true, + (int)(cam.pixelWidth / pixelsPerPoint), + (int)(cam.pixelHeight / pixelsPerPoint)); + } + + // while the selectionpicker render path supports no depth test picking, it's usually faster to skip + // the render. also avoids issues with vertex billboards obscuring one another. + var selected = new Dictionary<ProBuilderMesh, HashSet<int>>(); + + foreach (var pb in selectable) + { + if (!pb.selectable) + continue; + + SharedVertex[] sharedIndexes = pb.sharedVerticesInternal; + HashSet<int> inRect = new HashSet<int>(); + Vector3[] positions = pb.positionsInternal; + var trs = pb.transform; + float pixelHeight = cam.pixelHeight; + + for (int n = 0; n < sharedIndexes.Length; n++) + { + Vector3 v = trs.TransformPoint(positions[sharedIndexes[n][0]]); + Vector3 p = cam.WorldToScreenPoint(v); + + if (p.z < cam.nearClipPlane) + continue; + + p.x /= pixelsPerPoint; + p.y = (pixelHeight - p.y) / pixelsPerPoint; + + if (rect.Contains(p)) + inRect.Add(n); + } + + selected.Add(pb, inRect); + } + + return selected; + } + + /// <summary> + /// Pick faces contained within rect. + /// </summary> + /// <param name="cam"></param> + /// <param name="rect">Rect is in GUI space, where 0,0 is top left of screen, width = cam.pixelWidth / pointsPerPixel.</param> + /// <param name="selectable"></param> + /// <param name="options"></param> + /// <param name="pixelsPerPoint">Scale the render texture to match rect coordinates. Generally you'll just pass in EditorGUIUtility.pixelsPerPoint.</param> + /// <returns></returns> + public static Dictionary<ProBuilderMesh, HashSet<Face>> PickFacesInRect( + Camera cam, + Rect rect, + IList<ProBuilderMesh> selectable, + PickerOptions options, + float pixelsPerPoint = 1f) + { + if (options.depthTest && options.rectSelectMode == RectSelectMode.Partial) + { + return SelectionPickerRenderer.PickFacesInRect( + cam, + rect, + selectable, + (int)(cam.pixelWidth / pixelsPerPoint), + (int)(cam.pixelHeight / pixelsPerPoint)); + } + + var selected = new Dictionary<ProBuilderMesh, HashSet<Face>>(); + + foreach (var pb in selectable) + { + if (!pb.selectable) + continue; + + HashSet<Face> selectedFaces = new HashSet<Face>(); + Transform trs = pb.transform; + Vector3[] positions = pb.positionsInternal; + Vector3[] screenPoints = new Vector3[pb.vertexCount]; + + for (int nn = 0; nn < pb.vertexCount; nn++) + screenPoints[nn] = cam.ScreenToGuiPoint(cam.WorldToScreenPoint(trs.TransformPoint(positions[nn])), pixelsPerPoint); + + for (int n = 0; n < pb.facesInternal.Length; n++) + { + Face face = pb.facesInternal[n]; + + // rect select = complete + if (options.rectSelectMode == RectSelectMode.Complete) + { + // face is behind the camera + if (screenPoints[face.indexesInternal[0]].z < cam.nearClipPlane) + continue; + + // only check the first index per quad, and if it checks out, then check every other point + if (rect.Contains(screenPoints[face.indexesInternal[0]])) + { + bool nope = false; + + for (int q = 1; q < face.distinctIndexesInternal.Length; q++) + { + int index = face.distinctIndexesInternal[q]; + + if (screenPoints[index].z < cam.nearClipPlane || !rect.Contains(screenPoints[index])) + { + nope = true; + break; + } + } + + if (!nope) + { + if (!options.depthTest || + !HandleUtility.PointIsOccluded(cam, pb, trs.TransformPoint(Math.Average(positions, face.distinctIndexesInternal)))) + { + selectedFaces.Add(face); + } + } + } + } + // rect select = partial + else + { + Bounds2D poly = new Bounds2D(screenPoints, face.edgesInternal); + bool overlaps = false; + + if (poly.Intersects(rect)) + { + // if rect contains one point of polygon, it overlaps + for (int nn = 0; nn < face.distinctIndexesInternal.Length && !overlaps; nn++) + { + Vector3 p = screenPoints[face.distinctIndexesInternal[nn]]; + overlaps = p.z > cam.nearClipPlane && rect.Contains(p); + } + + // if polygon contains one point of rect, it overlaps. otherwise check for edge intersections + if (!overlaps) + { + Vector2 tl = new Vector2(rect.xMin, rect.yMax); + Vector2 tr = new Vector2(rect.xMax, rect.yMax); + Vector2 bl = new Vector2(rect.xMin, rect.yMin); + Vector2 br = new Vector2(rect.xMax, rect.yMin); + + overlaps = Math.PointInPolygon(screenPoints, poly, face.edgesInternal, tl); + if (!overlaps) overlaps = Math.PointInPolygon(screenPoints, poly, face.edgesInternal, tr); + if (!overlaps) overlaps = Math.PointInPolygon(screenPoints, poly, face.edgesInternal, br); + if (!overlaps) overlaps = Math.PointInPolygon(screenPoints, poly, face.edgesInternal, bl); + + // if any polygon edge intersects rect + for (int nn = 0; nn < face.edgesInternal.Length && !overlaps; nn++) + { + if (Math.GetLineSegmentIntersect(tr, tl, screenPoints[face.edgesInternal[nn].a], screenPoints[face.edgesInternal[nn].b])) + overlaps = true; + else if (Math.GetLineSegmentIntersect(tl, bl, screenPoints[face.edgesInternal[nn].a], screenPoints[face.edgesInternal[nn].b])) + overlaps = true; + else if (Math.GetLineSegmentIntersect(bl, br, screenPoints[face.edgesInternal[nn].a], screenPoints[face.edgesInternal[nn].b])) + overlaps = true; + else if (Math.GetLineSegmentIntersect(br, tl, screenPoints[face.edgesInternal[nn].a], screenPoints[face.edgesInternal[nn].b])) + overlaps = true; + } + } + } + + // don't test occlusion since that case is handled special + if (overlaps) + selectedFaces.Add(face); + } + } + + selected.Add(pb, selectedFaces); + } + + return selected; + } + + /// <summary> + /// Pick the edges contained within a rect. + /// </summary> + /// <param name="cam"></param> + /// <param name="rect">Rect is in GUI space, where 0,0 is top left of screen, width = cam.pixelWidth / pointsPerPixel.</param> + /// <param name="selectable">The ProBuilder mesh objects to consider when hit testing.</param> + /// <param name="options">Culling options.</param> + /// <param name="pixelsPerPoint">Scale the render texture to match rect coordinates. Generally you'll just pass in EditorGUIUtility.pointsPerPixel.</param> + /// <returns>A dictionary of ProBuilderMesh and edges that are in the selection rect.</returns> + public static Dictionary<ProBuilderMesh, HashSet<Edge>> PickEdgesInRect( + Camera cam, + Rect rect, + IList<ProBuilderMesh> selectable, + PickerOptions options, + float pixelsPerPoint = 1f) + { + if (options.depthTest && options.rectSelectMode == RectSelectMode.Partial) + { + return SelectionPickerRenderer.PickEdgesInRect( + cam, + rect, + selectable, + true, + (int)(cam.pixelWidth / pixelsPerPoint), + (int)(cam.pixelHeight / pixelsPerPoint)); + } + + var selected = new Dictionary<ProBuilderMesh, HashSet<Edge>>(); + + foreach (var pb in selectable) + { + if (!pb.selectable) + continue; + + Transform trs = pb.transform; + var selectedEdges = new HashSet<Edge>(); + + for (int i = 0, fc = pb.faceCount; i < fc; i++) + { + var edges = pb.facesInternal[i].edgesInternal; + + for (int n = 0, ec = edges.Length; n < ec; n++) + { + var edge = edges[n]; + + var posA = trs.TransformPoint(pb.positionsInternal[edge.a]); + var posB = trs.TransformPoint(pb.positionsInternal[edge.b]); + + Vector3 a = cam.ScreenToGuiPoint(cam.WorldToScreenPoint(posA), pixelsPerPoint); + Vector3 b = cam.ScreenToGuiPoint(cam.WorldToScreenPoint(posB), pixelsPerPoint); + + switch (options.rectSelectMode) + { + case RectSelectMode.Complete: + { + // if either of the positions are clipped by the camera we cannot possibly select both, skip it + if ((a.z < cam.nearClipPlane || b.z < cam.nearClipPlane)) + continue; + + if (rect.Contains(a) && rect.Contains(b)) + { + if (!options.depthTest || !HandleUtility.PointIsOccluded(cam, pb, (posA + posB) * .5f)) + selectedEdges.Add(edge); + } + + break; + } + + case RectSelectMode.Partial: + { + // partial + depth test is covered earlier + if (Math.RectIntersectsLineSegment(rect, a, b)) + selectedEdges.Add(edge); + + break; + } + } + } + } + + selected.Add(pb, selectedEdges); + } + + return selected; + } + + /// <summary> + /// Returns the first hit face on a ProBuilder mesh given a screen position and camera. + /// </summary> + /// <param name="camera">The camera to use when calculating the raycast.</param> + /// <param name="mousePosition">The screen position to use when calculating the raycast.</param> + /// <param name="pickable">The ProBuilderMesh to test for ray/face intersection.</param> + /// <returns>A Face if successful, null if the hit test failed.</returns> + public static Face PickFace(Camera camera, Vector3 mousePosition, ProBuilderMesh pickable) + { + Ray ray = camera.ScreenPointToRay(mousePosition); + + RaycastHit hit; + + if (HandleUtility.FaceRaycast(ray, pickable, out hit, Mathf.Infinity, CullingMode.Back)) + return pickable.facesInternal[hit.face]; + + return null; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPicker.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPicker.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..70d8394bcbe8c0e5fcd3192432bf6371c5690949 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPicker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38d00192cfb7943ebaa2898af4577852 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRenderer.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRenderer.cs new file mode 100644 index 0000000000000000000000000000000000000000..94d24c696622eaddb6a2e5c12a8f7f407eea6fa6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRenderer.cs @@ -0,0 +1,835 @@ +//#define PB_RENDER_PICKER_TEXTURE + +using System.Collections.Generic; +using System.Linq; +using UObject = UnityEngine.Object; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// A collection of settings defining how mesh element picking behaves. + /// </summary> + public struct PickerOptions + { + /// <value> + /// Should depth testing be performed when hit testing elements? + /// Enable to select only visible elements, disable to select all elements regardless of visibility. + /// </value> + public bool depthTest { get; set; } + + /// <value> + /// Require elements to be completely encompassed by the rect selection (Complete) or only touched (Partial). + /// </value> + /// <remarks> + /// Does not apply to vertex picking. + /// </remarks> + public RectSelectMode rectSelectMode { get; set; } + + static readonly PickerOptions k_Default = new PickerOptions() + { + depthTest = true, + rectSelectMode = RectSelectMode.Partial, + }; + + /// <value> + /// A set of options with default values. + /// </value> + public static PickerOptions Default + { + get { return k_Default; } + } + + public override bool Equals(object obj) + { + if (!(obj is PickerOptions)) + return false; + + return Equals((PickerOptions)obj); + } + + public bool Equals(PickerOptions other) + { + return depthTest == other.depthTest && rectSelectMode == other.rectSelectMode; + } + + public override int GetHashCode() + { + unchecked + { + return (depthTest.GetHashCode() * 397) ^ (int)rectSelectMode; + } + } + + public static bool operator==(PickerOptions a, PickerOptions b) + { + return a.Equals(b); + } + + public static bool operator!=(PickerOptions a, PickerOptions b) + { + return !a.Equals(b); + } + } + + /// <summary> + /// Functions for picking elements in a view by rendering a picker texture and testing pixels. + /// </summary> + static partial class SelectionPickerRenderer + { + internal interface ISelectionPickerRenderer + { + Texture2D RenderLookupTexture(Camera camera, Shader shader, string tag, int width, int height); + } + + const string k_FacePickerOcclusionTintUniform = "_Tint"; + static readonly Color k_Blackf = new Color(0f, 0f, 0f, 1f); + static readonly Color k_Whitef = new Color(1f, 1f, 1f, 1f); + const uint k_PickerHashNone = 0x00; + const uint k_PickerHashMin = 0x1; + const uint k_PickerHashMax = 0x00FFFFFF; + const uint k_MinEdgePixelsForValidSelection = 1; + + static bool s_Initialized = false; + static ISelectionPickerRenderer s_PickerRenderer = null; + + static RenderTextureFormat renderTextureFormat + { + get + { + if (s_Initialized) + return s_RenderTextureFormat; + + s_Initialized = true; + + for (int i = 0; i < s_PreferredFormats.Length; i++) + { + if (SystemInfo.SupportsRenderTextureFormat(s_PreferredFormats[i])) + { + s_RenderTextureFormat = s_PreferredFormats[i]; + break; + } + } + + return s_RenderTextureFormat; + } + } + + static TextureFormat textureFormat { get { return TextureFormat.ARGB32; } } + + static RenderTextureFormat s_RenderTextureFormat = RenderTextureFormat.Default; + + static RenderTextureFormat[] s_PreferredFormats = new RenderTextureFormat[] + { +#if UNITY_5_6 + RenderTextureFormat.ARGBFloat, + RenderTextureFormat.ARGB32, +#else + RenderTextureFormat.ARGB32, + RenderTextureFormat.ARGBFloat, +#endif + }; + + /// <summary> + /// Returns an appropriate implementation based on the graphic pipeline + /// to generate the lookup texture. + /// URP and Standard pipeline share the same picker implementation for now. + /// </summary> + static ISelectionPickerRenderer pickerRenderer + { + get + { + if (s_PickerRenderer == null) + s_PickerRenderer = + ShouldUseHDRP()? + (ISelectionPickerRenderer)new SelectionPickerRendererHDRP() + : new SelectionPickerRendererStandard(); + return s_PickerRenderer; + } + } + + /// <summary> + /// Given a camera and selection rect (in screen space) return a Dictionary containing the number of faces touched by the rect. + /// </summary> + /// <param name="camera"></param> + /// <param name="pickerRect"></param> + /// <param name="selection"></param> + /// <param name="renderTextureWidth"></param> + /// <param name="renderTextureHeight"></param> + /// <returns></returns> + public static Dictionary<ProBuilderMesh, HashSet<Face>> PickFacesInRect( + Camera camera, + Rect pickerRect, + IList<ProBuilderMesh> selection, + int renderTextureWidth = -1, + int renderTextureHeight = -1) + { + Dictionary<uint, SimpleTuple<ProBuilderMesh, Face>> map; + Texture2D tex = RenderSelectionPickerTexture(camera, selection, out map, renderTextureWidth, renderTextureHeight); + + Color32[] pix = tex.GetPixels32(); + + int ox = System.Math.Max(0, Mathf.FloorToInt(pickerRect.x)); + int oy = System.Math.Max(0, Mathf.FloorToInt((tex.height - pickerRect.y) - pickerRect.height)); + int imageWidth = tex.width; + int imageHeight = tex.height; + int width = Mathf.FloorToInt(pickerRect.width); + int height = Mathf.FloorToInt(pickerRect.height); + UObject.DestroyImmediate(tex); + + Dictionary<ProBuilderMesh, HashSet<Face>> selected = new Dictionary<ProBuilderMesh, HashSet<Face>>(); + SimpleTuple<ProBuilderMesh, Face> hit; + HashSet<Face> faces = null; + HashSet<uint> used = new HashSet<uint>(); + +#if PB_RENDER_PICKER_TEXTURE + List<Color> rectImg = new List<Color>(); +#endif + + for (int y = oy; y < System.Math.Min(oy + height, imageHeight); y++) + { + for (int x = ox; x < System.Math.Min(ox + width, imageWidth); x++) + { +#if PB_RENDER_PICKER_TEXTURE + rectImg.Add(pix[y * imageWidth + x]); +#endif + + uint v = SelectionPickerRenderer.DecodeRGBA(pix[y * imageWidth + x]); + + if (used.Add(v) && map.TryGetValue(v, out hit)) + { + if (selected.TryGetValue(hit.item1, out faces)) + faces.Add(hit.item2); + else + selected.Add(hit.item1, new HashSet<Face>() { hit.item2 }); + } + } + } + +#if PB_RENDER_PICKER_TEXTURE + if (width > 0 && height > 0) + { +// Debug.Log("used: \n" + used.Select(x => string.Format("{0} ({1})", x, EncodeRGBA(x))).ToString("\n")); + Texture2D img = new Texture2D(width, height); + img.SetPixels(rectImg.ToArray()); + img.Apply(); + byte[] bytes = img.EncodeToPNG(); + System.IO.File.WriteAllBytes("Assets/rect.png", bytes); +#if UNITY_EDITOR + UnityEditor.AssetDatabase.Refresh(); +#endif + UObject.DestroyImmediate(img); + } +#endif + + return selected; + } + + /// <summary> + /// Select vertex indexes contained within a rect. + /// </summary> + /// <param name="camera"></param> + /// <param name="pickerRect"></param> + /// <param name="selection"></param> + /// <param name="doDepthTest"></param> + /// <param name="renderTextureWidth"></param> + /// <param name="renderTextureHeight"></param> + /// <returns>A dictionary of pb_Object selected vertex indexes.</returns> + public static Dictionary<ProBuilderMesh, HashSet<int>> PickVerticesInRect( + Camera camera, + Rect pickerRect, + IList<ProBuilderMesh> selection, + bool doDepthTest, + int renderTextureWidth = -1, + int renderTextureHeight = -1) + { + Dictionary<uint, SimpleTuple<ProBuilderMesh, int>> map; + Dictionary<ProBuilderMesh, HashSet<int>> selected = new Dictionary<ProBuilderMesh, HashSet<int>>(); + +#if PB_RENDER_PICKER_TEXTURE + List<Color> rectImg = new List<Color>(); +#endif + + Texture2D tex = RenderSelectionPickerTexture(camera, selection, doDepthTest, out map, renderTextureWidth, renderTextureHeight); + Color32[] pix = tex.GetPixels32(); + + int ox = System.Math.Max(0, Mathf.FloorToInt(pickerRect.x)); + int oy = System.Math.Max(0, Mathf.FloorToInt((tex.height - pickerRect.y) - pickerRect.height)); + int imageWidth = tex.width; + int imageHeight = tex.height; + int width = Mathf.FloorToInt(pickerRect.width); + int height = Mathf.FloorToInt(pickerRect.height); + + UObject.DestroyImmediate(tex); + + SimpleTuple<ProBuilderMesh, int> hit; + HashSet<int> indexes = null; + HashSet<uint> used = new HashSet<uint>(); + + for (int y = oy; y < System.Math.Min(oy + height, imageHeight); y++) + { + for (int x = ox; x < System.Math.Min(ox + width, imageWidth); x++) + { + uint v = DecodeRGBA(pix[y * imageWidth + x]); + +#if PB_RENDER_PICKER_TEXTURE + rectImg.Add(pix[y * imageWidth + x]); +#endif + + if (used.Add(v) && map.TryGetValue(v, out hit)) + { + if (selected.TryGetValue(hit.item1, out indexes)) + indexes.Add(hit.item2); + else + selected.Add(hit.item1, new HashSet<int>() { hit.item2 }); + } + } + } + + var coincidentSelection = new Dictionary<ProBuilderMesh, HashSet<int>>(); + + // workaround for picking vertices that share a position but are not shared + foreach (var meshSelection in selected) + { + var positions = meshSelection.Key.positionsInternal; + var sharedVertices = meshSelection.Key.sharedVerticesInternal; + var positionHash = new HashSet<int>(meshSelection.Value.Select(x => VectorHash.GetHashCode(positions[sharedVertices[x][0]]))); + var collected = new HashSet<int>(); + + for (int i = 0, c = sharedVertices.Length; i < c; i++) + { + var hash = VectorHash.GetHashCode(positions[sharedVertices[i][0]]); + if (positionHash.Contains(hash)) + collected.Add(i); + } + + coincidentSelection.Add(meshSelection.Key, collected); + } + selected = coincidentSelection; + +#if PB_RENDER_PICKER_TEXTURE + if (width > 0 && height > 0) + { + Texture2D img = new Texture2D(width, height); + img.SetPixels(rectImg.ToArray()); + img.Apply(); + System.IO.File.WriteAllBytes("Assets/rect_" + s_RenderTextureFormat.ToString() + ".png", img.EncodeToPNG()); +#if UNITY_EDITOR + UnityEditor.AssetDatabase.Refresh(); +#endif + UObject.DestroyImmediate(img); + } +#endif + + return selected; + } + + /// <summary> + /// Select edges touching a rect. + /// </summary> + /// <param name="camera"></param> + /// <param name="pickerRect"></param> + /// <param name="selection"></param> + /// <param name="doDepthTest"></param> + /// <param name="renderTextureWidth"></param> + /// <param name="renderTextureHeight"></param> + /// <returns>A dictionary of pb_Object and selected edges.</returns> + public static Dictionary<ProBuilderMesh, HashSet<Edge>> PickEdgesInRect( + Camera camera, + Rect pickerRect, + IList<ProBuilderMesh> selection, + bool doDepthTest, + int renderTextureWidth = -1, + int renderTextureHeight = -1) + { + var selected = new Dictionary<ProBuilderMesh, HashSet<Edge>>(); + +#if PB_RENDER_PICKER_TEXTURE + List<Color> rectImg = new List<Color>(); +#endif + + Dictionary<uint, SimpleTuple<ProBuilderMesh, Edge>> map; + Texture2D tex = RenderSelectionPickerTexture(camera, selection, doDepthTest, out map, renderTextureWidth, renderTextureHeight); + Color32[] pix = tex.GetPixels32(); + +#if PB_RENDER_PICKER_TEXTURE + System.IO.File.WriteAllBytes("Assets/edge_scene.png", tex.EncodeToPNG()); +#endif + + int ox = System.Math.Max(0, Mathf.FloorToInt(pickerRect.x)); + int oy = System.Math.Max(0, Mathf.FloorToInt((tex.height - pickerRect.y) - pickerRect.height)); + int imageWidth = tex.width; + int imageHeight = tex.height; + int width = Mathf.FloorToInt(pickerRect.width); + int height = Mathf.FloorToInt(pickerRect.height); + UObject.DestroyImmediate(tex); + + var pixelCount = new Dictionary<uint, uint>(); + + for (int y = oy; y < System.Math.Min(oy + height, imageHeight); y++) + { + for (int x = ox; x < System.Math.Min(ox + width, imageWidth); x++) + { +#if PB_RENDER_PICKER_TEXTURE + rectImg.Add(pix[y * imageWidth + x]); +#endif + uint v = DecodeRGBA(pix[y * imageWidth + x]); + + if (v == k_PickerHashNone || v == k_PickerHashMax) + continue; + + if (!pixelCount.ContainsKey(v)) + pixelCount.Add(v, 1); + else + pixelCount[v] = pixelCount[v] + 1; + } + } + + foreach (var kvp in pixelCount) + { + SimpleTuple<ProBuilderMesh, Edge> hit; + + if (kvp.Value > k_MinEdgePixelsForValidSelection && map.TryGetValue(kvp.Key, out hit)) + { + HashSet<Edge> edges = null; + + if (selected.TryGetValue(hit.item1, out edges)) + edges.Add(hit.item2); + else + selected.Add(hit.item1, new HashSet<Edge>() {hit.item2}); + } + } + +#if PB_RENDER_PICKER_TEXTURE + if (width > 0 && height > 0) + { + Texture2D img = new Texture2D(width, height); + img.SetPixels(rectImg.ToArray()); + img.Apply(); + System.IO.File.WriteAllBytes("Assets/edge_rect_" + s_RenderTextureFormat.ToString() + ".png", img.EncodeToPNG()); +#if UNITY_EDITOR + UnityEditor.AssetDatabase.Refresh(); +#endif + UObject.DestroyImmediate(img); + } +#endif + + return selected; + } + + /// <summary> + /// Render the pb_Object selection with the special selection picker shader and return a texture and color -> {object, face} dictionary. + /// </summary> + /// <param name="camera"></param> + /// <param name="selection"></param> + /// <param name="map"></param> + /// <param name="width"></param> + /// <param name="height"></param> + /// <returns></returns> + internal static Texture2D RenderSelectionPickerTexture( + Camera camera, + IList<ProBuilderMesh> selection, + out Dictionary<uint, SimpleTuple<ProBuilderMesh, Face>> map, + int width = -1, + int height = -1) + { + var pickerObjects = GenerateFacePickingObjects(selection, out map); + + BuiltinMaterials.facePickerMaterial.SetColor(k_FacePickerOcclusionTintUniform, k_Whitef); + + Texture2D tex = pickerRenderer.RenderLookupTexture(camera, BuiltinMaterials.selectionPickerShader, "ProBuilderPicker", width, height); + + foreach (GameObject go in pickerObjects) + { + UObject.DestroyImmediate(go.GetComponent<MeshFilter>().sharedMesh); + UObject.DestroyImmediate(go); + } + + return tex; + } + + /// <summary> + /// Render the pb_Object selection with the special selection picker shader and return a texture and color -> {object, sharedIndex} dictionary. + /// </summary> + /// <param name="camera"></param> + /// <param name="selection"></param> + /// <param name="doDepthTest"></param> + /// <param name="map"></param> + /// <param name="width"></param> + /// <param name="height"></param> + /// <returns></returns> + internal static Texture2D RenderSelectionPickerTexture( + Camera camera, + IList<ProBuilderMesh> selection, + bool doDepthTest, + out Dictionary<uint, SimpleTuple<ProBuilderMesh, int>> map, + int width = -1, + int height = -1) + { + GameObject[] depthObjects, pickerObjects; + + GenerateVertexPickingObjects(selection, doDepthTest, out map, out depthObjects, out pickerObjects); + + BuiltinMaterials.facePickerMaterial.SetColor(k_FacePickerOcclusionTintUniform, k_Blackf); + + Texture2D tex = pickerRenderer.RenderLookupTexture(camera, BuiltinMaterials.selectionPickerShader, "ProBuilderPicker", width, height); + + for (int i = 0, c = pickerObjects.Length; i < c; i++) + { + UObject.DestroyImmediate(pickerObjects[i].GetComponent<MeshFilter>().sharedMesh); + UObject.DestroyImmediate(pickerObjects[i]); + } + + if (doDepthTest) + { + for (int i = 0, c = depthObjects.Length; i < c; i++) + { + UObject.DestroyImmediate(depthObjects[i]); + } + } + + return tex; + } + + /// <summary> + /// Render the pb_Object selection with the special selection picker shader and return a texture and color -> {object, edge} dictionary. + /// </summary> + /// <param name="camera"></param> + /// <param name="selection"></param> + /// <param name="doDepthTest"></param> + /// <param name="map"></param> + /// <param name="width"></param> + /// <param name="height"></param> + /// <returns></returns> + internal static Texture2D RenderSelectionPickerTexture( + Camera camera, + IList<ProBuilderMesh> selection, + bool doDepthTest, + out Dictionary<uint, SimpleTuple<ProBuilderMesh, Edge>> map, + int width = -1, + int height = -1) + { + GameObject[] depthObjects, pickerObjects; + GenerateEdgePickingObjects(selection, doDepthTest, out map, out depthObjects, out pickerObjects); + + BuiltinMaterials.facePickerMaterial.SetColor(k_FacePickerOcclusionTintUniform, k_Blackf); + + Texture2D tex = pickerRenderer.RenderLookupTexture(camera, BuiltinMaterials.selectionPickerShader, "ProBuilderPicker", width, height); + + for (int i = 0, c = pickerObjects.Length; i < c; i++) + { + UObject.DestroyImmediate(pickerObjects[i].GetComponent<MeshFilter>().sharedMesh); + UObject.DestroyImmediate(pickerObjects[i]); + } + + if (doDepthTest) + { + for (int i = 0, c = depthObjects.Length; i < c; i++) + { + UObject.DestroyImmediate(depthObjects[i]); + } + } + return tex; + } + + static GameObject[] GenerateFacePickingObjects( + IList<ProBuilderMesh> selection, + out Dictionary<uint, SimpleTuple<ProBuilderMesh, Face>> map) + { + int selectionCount = selection.Count; + GameObject[] pickerObjects = new GameObject[selectionCount]; + map = new Dictionary<uint, SimpleTuple<ProBuilderMesh, Face>>(); + + uint index = 0; + + for (int i = 0; i < selectionCount; i++) + { + var pb = selection[i]; + + GameObject go = InternalUtility.EmptyGameObjectWithTransform(pb.transform); + go.name = pb.name + " (Face Depth Test)"; + + Mesh m = new Mesh(); + m.vertices = pb.positionsInternal; + m.triangles = pb.facesInternal.SelectMany(x => x.indexesInternal).ToArray(); + Color32[] colors = new Color32[m.vertexCount]; + + foreach (Face f in pb.facesInternal) + { + Color32 color = EncodeRGBA(index++); + map.Add(DecodeRGBA(color), new SimpleTuple<ProBuilderMesh, Face>(pb, f)); + + for (int n = 0; n < f.distinctIndexesInternal.Length; n++) + colors[f.distinctIndexesInternal[n]] = color; + } + + m.colors32 = colors; + + go.AddComponent<MeshFilter>().sharedMesh = m; + go.AddComponent<MeshRenderer>().sharedMaterial = BuiltinMaterials.facePickerMaterial; + + pickerObjects[i] = go; + } + + return pickerObjects; + } + + static void GenerateVertexPickingObjects( + IList<ProBuilderMesh> selection, + bool doDepthTest, + out Dictionary<uint, SimpleTuple<ProBuilderMesh, int>> map, + out GameObject[] depthObjects, + out GameObject[] pickerObjects) + { + map = new Dictionary<uint, SimpleTuple<ProBuilderMesh, int>>(); + + // don't start at 0 because that means one vertex would be black, matching + // the color used to cull hidden vertices. + uint index = 0x02; + int selectionCount = selection.Count; + pickerObjects = new GameObject[selectionCount]; + + for (int i = 0; i < selectionCount; i++) + { + // build vertex billboards + var pb = selection[i]; + GameObject go = InternalUtility.EmptyGameObjectWithTransform(pb.transform); + go.name = pb.name + " (Vertex Billboards)"; + go.AddComponent<MeshFilter>().sharedMesh = BuildVertexMesh(pb, map, ref index); + go.AddComponent<MeshRenderer>().sharedMaterial = BuiltinMaterials.vertexPickerMaterial; + pickerObjects[i] = go; + } + + if (doDepthTest) + { + depthObjects = new GameObject[selectionCount]; + + // copy the select gameobject just for z-write + for (int i = 0; i < selectionCount; i++) + { + var pb = selection[i]; + GameObject go = InternalUtility.EmptyGameObjectWithTransform(pb.transform); + go.name = pb.name + " (Depth Mask)"; + go.AddComponent<MeshFilter>().sharedMesh = pb.mesh; + go.AddComponent<MeshRenderer>().sharedMaterial = BuiltinMaterials.facePickerMaterial; + depthObjects[i] = go; + } + } + else + { + depthObjects = null; + } + } + + static void GenerateEdgePickingObjects( + IList<ProBuilderMesh> selection, + bool doDepthTest, + out Dictionary<uint, SimpleTuple<ProBuilderMesh, Edge>> map, + out GameObject[] depthObjects, + out GameObject[] pickerObjects) + { + map = new Dictionary<uint, SimpleTuple<ProBuilderMesh, Edge>>(); + + uint index = 0x2; + int selectionCount = selection.Count; + pickerObjects = new GameObject[selectionCount]; + + for (int i = 0; i < selectionCount; i++) + { + // build edge billboards + var pb = selection[i]; + GameObject go = InternalUtility.EmptyGameObjectWithTransform(pb.transform); + go.name = pb.name + " (Edge Billboards)"; + go.AddComponent<MeshFilter>().sharedMesh = BuildEdgeMesh(pb, map, ref index); + go.AddComponent<MeshRenderer>().sharedMaterial = BuiltinMaterials.edgePickerMaterial; + pickerObjects[i] = go; + } + + if (doDepthTest) + { + depthObjects = new GameObject[selectionCount]; + + for (int i = 0; i < selectionCount; i++) + { + var pb = selection[i]; + // copy the select gameobject just for z-write + GameObject go = InternalUtility.EmptyGameObjectWithTransform(pb.transform); + go.name = pb.name + " (Depth Mask)"; + go.AddComponent<MeshFilter>().sharedMesh = pb.mesh; + go.AddComponent<MeshRenderer>().sharedMaterial = BuiltinMaterials.facePickerMaterial; + depthObjects[i] = go; + } + } + else + { + depthObjects = null; + } + } + + static Mesh BuildVertexMesh(ProBuilderMesh pb, Dictionary<uint, SimpleTuple<ProBuilderMesh, int>> map, ref uint index) + { + int length = System.Math.Min(pb.sharedVerticesInternal.Length, ushort.MaxValue / 4 - 1); + + Vector3[] t_billboards = new Vector3[length * 4]; + Vector2[] t_uvs = new Vector2[length * 4]; + Vector2[] t_uv2 = new Vector2[length * 4]; + Color[] t_col = new Color[length * 4]; + int[] t_tris = new int[length * 6]; + + int n = 0; + int t = 0; + + Vector3 up = Vector3.up; + Vector3 right = Vector3.right; + + for (int i = 0; i < length; i++) + { + Vector3 v = pb.positionsInternal[pb.sharedVerticesInternal[i][0]]; + + t_billboards[t + 0] = v; + t_billboards[t + 1] = v; + t_billboards[t + 2] = v; + t_billboards[t + 3] = v; + + t_uvs[t + 0] = Vector3.zero; + t_uvs[t + 1] = Vector3.right; + t_uvs[t + 2] = Vector3.up; + t_uvs[t + 3] = Vector3.one; + + t_uv2[t + 0] = -up - right; + t_uv2[t + 1] = -up + right; + t_uv2[t + 2] = up - right; + t_uv2[t + 3] = up + right; + + t_tris[n + 0] = t + 0; + t_tris[n + 1] = t + 1; + t_tris[n + 2] = t + 2; + t_tris[n + 3] = t + 1; + t_tris[n + 4] = t + 3; + t_tris[n + 5] = t + 2; + + Color32 color = EncodeRGBA(index); + map.Add(index++, new SimpleTuple<ProBuilderMesh, int>(pb, i)); + + t_col[t + 0] = color; + t_col[t + 1] = color; + t_col[t + 2] = color; + t_col[t + 3] = color; + + t += 4; + n += 6; + } + + Mesh mesh = new Mesh(); + mesh.name = "Vertex Billboard"; + mesh.vertices = t_billboards; + mesh.uv = t_uvs; + mesh.uv2 = t_uv2; + mesh.colors = t_col; + mesh.triangles = t_tris; + + return mesh; + } + + static Mesh BuildEdgeMesh(ProBuilderMesh pb, Dictionary<uint, SimpleTuple<ProBuilderMesh, Edge>> map, ref uint index) + { + int edgeCount = 0; + int faceCount = pb.faceCount; + + for (int i = 0; i < faceCount; i++) + edgeCount += pb.facesInternal[i].edgesInternal.Length; + + int elementCount = System.Math.Min(edgeCount, ushort.MaxValue / 2 - 1); + + Vector3[] positions = new Vector3[elementCount * 2]; + Color32[] color = new Color32[elementCount * 2]; + int[] tris = new int[elementCount * 2]; + + int edgeIndex = 0; + + for (int i = 0; i < faceCount && edgeIndex < elementCount; i++) + { + for (int n = 0; n < pb.facesInternal[i].edgesInternal.Length && edgeIndex < elementCount; n++) + { + var edge = pb.facesInternal[i].edgesInternal[n]; + + Vector3 a = pb.positionsInternal[edge.a]; + Vector3 b = pb.positionsInternal[edge.b]; + int positionIndex = edgeIndex * 2; + + positions[positionIndex + 0] = a; + positions[positionIndex + 1] = b; + + Color32 c = EncodeRGBA(index); + + map.Add(index++, new SimpleTuple<ProBuilderMesh, Edge>(pb, edge)); + + color[positionIndex + 0] = c; + color[positionIndex + 1] = c; + + tris[positionIndex + 0] = positionIndex + 0; + tris[positionIndex + 1] = positionIndex + 1; + + edgeIndex++; + } + } + + Mesh mesh = new Mesh(); + mesh.name = "Edge Billboard"; + mesh.vertices = positions; + mesh.colors32 = color; + mesh.subMeshCount = 1; + mesh.SetIndices(tris, MeshTopology.Lines, 0); + + return mesh; + } + + /// <summary> + /// Decode Color32.RGB values to a 32 bit unsigned int, using the RGB as the little bytes. Discards the hi byte (alpha) + /// </summary> + /// <param name="color"></param> + /// <returns></returns> + public static uint DecodeRGBA(Color32 color) + { + uint r = (uint)color.r; + uint g = (uint)color.g; + uint b = (uint)color.b; + + if (System.BitConverter.IsLittleEndian) + return r << 16 | g << 8 | b; + else + return r << 24 | g << 16 | b << 8; + } + + /// <summary> + /// Encode the low 24 bits of a UInt32 to RGB of Color32, using 255 for A. + /// </summary> + /// <param name="hash"></param> + /// <returns></returns> + public static Color32 EncodeRGBA(uint hash) + { + // skip using BitConverter.GetBytes since this is super simple + // bit math, and allocating arrays for each conversion is expensive + if (System.BitConverter.IsLittleEndian) + return new Color32( + (byte)(hash >> 16 & 0xFF), + (byte)(hash >> 8 & 0xFF), + (byte)(hash & 0xFF), + (byte)(255)); + else + return new Color32( + (byte)(hash >> 24 & 0xFF), + (byte)(hash >> 16 & 0xFF), + (byte)(hash >> 8 & 0xFF), + (byte)(255)); + } + + static bool ShouldUseHDRP() + { +#if HDRP_7_1_0_OR_NEWER + return true; +#else + return false; +#endif + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRenderer.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRenderer.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..34d8a4874aba4dc70205fdfb406eaf0b1d18db2d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1cd423070c2f8094db80d14ac61e4a89 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRendererHDRP.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRendererHDRP.cs new file mode 100644 index 0000000000000000000000000000000000000000..6f1b0bbf29244edbf9bd06160abe063c2cb98d12 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRendererHDRP.cs @@ -0,0 +1,101 @@ +using UObject = UnityEngine.Object; + +namespace UnityEngine.ProBuilder +{ + internal partial class SelectionPickerRenderer + { + internal class SelectionPickerRendererHDRP : ISelectionPickerRenderer + { + + public Texture2D RenderLookupTexture( + Camera camera, + Shader shader, + string tag, + int width = -1, + int height = -1) + { +#if HDRP_7_1_0_OR_NEWER + bool autoSize = width < 0 || height < 0; + + int _width = autoSize ? (int)camera.pixelRect.width : width; + int _height = autoSize ? (int)camera.pixelRect.height : height; + + GameObject go = new GameObject(); + Camera renderCam = go.AddComponent<Camera>(); + renderCam.CopyFrom(camera); + + renderCam.renderingPath = RenderingPath.Forward; + renderCam.enabled = false; + renderCam.clearFlags = CameraClearFlags.SolidColor; + renderCam.backgroundColor = Color.white; + renderCam.allowHDR = false; + renderCam.allowMSAA = false; + renderCam.forceIntoRenderTexture = true; + + Rendering.HighDefinition.HDAdditionalCameraData hdCamData = go.AddComponent<Rendering.HighDefinition.HDAdditionalCameraData>(); + hdCamData.flipYMode = Rendering.HighDefinition.HDAdditionalCameraData.FlipYMode.ForceFlipY; + hdCamData.customRender += CustomRenderPass; + + RenderTextureDescriptor descriptor = new RenderTextureDescriptor() + { + width = _width, + height = _height, + colorFormat = renderTextureFormat, + autoGenerateMips = false, + depthBufferBits = 16, + dimension = UnityEngine.Rendering.TextureDimension.Tex2D, + enableRandomWrite = false, + memoryless = RenderTextureMemoryless.None, + sRGB = false, + useMipMap = false, + volumeDepth = 1, + msaaSamples = 1 + }; + RenderTexture rt = RenderTexture.GetTemporary(descriptor); + + RenderTexture prev = RenderTexture.active; + renderCam.targetTexture = rt; + RenderTexture.active = rt; + + renderCam.Render(); + + Texture2D img = new Texture2D(_width, _height, textureFormat, false, false); + img.ReadPixels(new Rect(0, 0, _width, _height), 0, 0); + img.Apply(); + + RenderTexture.active = prev; + RenderTexture.ReleaseTemporary(rt); + + UObject.DestroyImmediate(go); + + return img; +#else + return null; +#endif + } + +#if HDRP_7_1_0_OR_NEWER + static void CustomRenderPass(Rendering.ScriptableRenderContext ctx, Rendering.HighDefinition.HDCamera camera) + { + ctx.SetupCameraProperties(camera.camera); + + Rendering.CommandBuffer cb = new Rendering.CommandBuffer(); + cb.ClearRenderTarget(true, true, Color.white); + ctx.ExecuteCommandBuffer(cb); + ctx.Submit(); + + Rendering.DrawingSettings drawSettings = new Rendering.DrawingSettings(); + drawSettings.SetShaderPassName(0, new Rendering.ShaderTagId("Always")); + + Rendering.FilteringSettings filterSettings = Rendering.FilteringSettings.defaultValue; + + if (camera.camera.TryGetCullingParameters(out Rendering.ScriptableCullingParameters cullParams)) + { + Rendering.CullingResults cullResuts = ctx.Cull(ref cullParams); + ctx.DrawRenderers(cullResuts, ref drawSettings, ref filterSettings); + } + } +#endif + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRendererHDRP.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRendererHDRP.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6206883e9a63c49aad7430f6f958464e0f46f7ad --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRendererHDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f130a448e6f0cc45bacc05a4653fc41 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRendererStandard.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRendererStandard.cs new file mode 100644 index 0000000000000000000000000000000000000000..845bbb6468545aec7e8ad4a04f6d9f671d17b4f5 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRendererStandard.cs @@ -0,0 +1,107 @@ +using UnityEditor; +using UnityEngine.Rendering; +using UObject = UnityEngine.Object; + +namespace UnityEngine.ProBuilder +{ + internal partial class SelectionPickerRenderer + { + internal class SelectionPickerRendererStandard: ISelectionPickerRenderer + { + /// <summary> + /// Render the camera with a replacement shader and return the resulting image. + /// RenderTexture is always initialized with no gamma conversion (RenderTextureReadWrite.Linear) + /// </summary> + /// <param name="camera"></param> + /// <param name="shader"></param> + /// <param name="tag"></param> + /// <param name="width"></param> + /// <param name="height"></param> + /// <returns></returns> + public Texture2D RenderLookupTexture( + Camera camera, + Shader shader, + string tag, + int width = -1, + int height = -1) + { + bool autoSize = width < 0 || height < 0; + + int _width = autoSize ? (int)camera.pixelRect.width : width; + int _height = autoSize ? (int)camera.pixelRect.height : height; + + GameObject go = new GameObject(); + Camera renderCam = go.AddComponent<Camera>(); + renderCam.CopyFrom(camera); + + renderCam.renderingPath = RenderingPath.Forward; + renderCam.enabled = false; + renderCam.clearFlags = CameraClearFlags.SolidColor; + renderCam.backgroundColor = Color.white; + renderCam.allowHDR = false; + renderCam.allowMSAA = false; + renderCam.forceIntoRenderTexture = true; + + RenderTextureDescriptor descriptor = new RenderTextureDescriptor() + { + width = _width, + height = _height, + colorFormat = renderTextureFormat, + autoGenerateMips = false, + depthBufferBits = 16, + dimension = UnityEngine.Rendering.TextureDimension.Tex2D, + enableRandomWrite = false, + memoryless = RenderTextureMemoryless.None, + sRGB = false, + useMipMap = false, + volumeDepth = 1, + msaaSamples = 1 + }; + RenderTexture rt = RenderTexture.GetTemporary(descriptor); + RenderTexture prev = RenderTexture.active; + renderCam.targetTexture = rt; + RenderTexture.active = rt; + +#if PB_DEBUG + /* Debug.Log(string.Format("antiAliasing {0}\nautoGenerateMips {1}\ncolorBuffer {2}\ndepth {3}\ndepthBuffer {4}\ndimension {5}\nenableRandomWrite {6}\nformat {7}\nheight {8}\nmemorylessMode {9}\nsRGB {10}\nuseMipMap {11}\nvolumeDepth {12}\nwidth {13}", + RenderTexture.active.antiAliasing, + RenderTexture.active.autoGenerateMips, + RenderTexture.active.colorBuffer, + RenderTexture.active.depth, + RenderTexture.active.depthBuffer, + RenderTexture.active.dimension, + RenderTexture.active.enableRandomWrite, + RenderTexture.active.format, + RenderTexture.active.height, + RenderTexture.active.memorylessMode, + RenderTexture.active.sRGB, + RenderTexture.active.useMipMap, + RenderTexture.active.volumeDepth, + RenderTexture.active.width)); + */ +#endif + + // URP does not support replacement shaders or custom passes from code, so for now it is necessary to + // force the pipeline to built-in when rendering. In editor it may be possible to use Handles.DrawCamera + // to avoid disposing and re-assigning the pipeline, as the RenderEditorCamera function has some logic + // that switches rendering path if replacement shaders are in use, but I wasn't able to get that + // approach to work without also requiring that the drawing happen during a repaint event. + var currentRenderPipeline = GraphicsSettings.renderPipelineAsset; + GraphicsSettings.renderPipelineAsset = null; + renderCam.RenderWithShader(shader, tag); + GraphicsSettings.renderPipelineAsset = currentRenderPipeline; + + Texture2D img = new Texture2D(_width, _height, textureFormat, false, false); + img.ReadPixels(new Rect(0, 0, _width, _height), 0, 0); + img.Apply(); + + RenderTexture.active = prev; + RenderTexture.ReleaseTemporary(rt); + + UObject.DestroyImmediate(go); + + return img; + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRendererStandard.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRendererStandard.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ce86ea1fbfe8ffabca47926fa0be5517fcb8c80d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerRendererStandard.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2347b9342bafaa845b0b25387d6fa381 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerSettings.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..d72fc9a5060bec30f350b84c596cd3d6bd1e96c7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerSettings.cs @@ -0,0 +1,188 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; + +namespace UnityEngine.ProBuilder +{ + // This should not be public until there is something meaningful that can be done with it. However it has been + // public in the past, so we can't change it until the next major version increment. + [EditorBrowsable(EditorBrowsableState.Never)] + public class SceneSelection : IEquatable<SceneSelection> + { + public GameObject gameObject; + public ProBuilderMesh mesh; + + List<int> m_Vertices; + List<Edge> m_Edges; + List<Face> m_Faces; + + public List<int> vertexes + { + get { return m_Vertices; } + set { m_Vertices = value; } + } + + public List<Edge> edges + { + get { return m_Edges; } + set { m_Edges = value; } + } + + public List<Face> faces + { + get { return m_Faces; } + set { m_Faces = value; } + } + + [Obsolete("Use SetSingleVertex")] + public int vertex; + + [Obsolete("Use SetSingleEdge")] + public Edge edge; + + [Obsolete("Use SetSingleFace")] + public Face face; + + public SceneSelection(GameObject gameObject = null) + { + this.gameObject = gameObject; + m_Vertices = new List<int>(); + m_Edges = new List<Edge>(); + m_Faces = new List<Face>(); + } + + public SceneSelection(ProBuilderMesh mesh, int vertex) : this(mesh, new List<int>() { vertex }) { } + + public SceneSelection(ProBuilderMesh mesh, Edge edge) : this(mesh, new List<Edge>() { edge }) { } + + public SceneSelection(ProBuilderMesh mesh, Face face) : this(mesh, new List<Face>() { face }) { } + + internal SceneSelection(ProBuilderMesh mesh, List<int> vertexes) : this(mesh != null ? mesh.gameObject : null) + { + this.mesh = mesh; + m_Vertices = vertexes; + m_Edges = new List<Edge>(); + m_Faces = new List<Face>(); + } + + internal SceneSelection(ProBuilderMesh mesh, List<Edge> edges) : this(mesh != null ? mesh.gameObject : null) + { + this.mesh = mesh; + vertexes = new List<int>(); + this.edges = edges; + faces = new List<Face>(); + } + + internal SceneSelection(ProBuilderMesh mesh, List<Face> faces) : this(mesh != null ? mesh.gameObject : null) + { + this.mesh = mesh; + vertexes = new List<int>(); + edges = new List<Edge>(); + this.faces = faces; + } + + public void SetSingleFace(Face face) + { + faces.Clear(); + faces.Add(face); + } + + public void SetSingleVertex(int vertex) + { + vertexes.Clear(); + vertexes.Add(vertex); + } + + public void SetSingleEdge(Edge edge) + { + edges.Clear(); + edges.Add(edge); + } + + public void Clear() + { + gameObject = null; + mesh = null; + faces.Clear(); + edges.Clear(); + vertexes.Clear(); + } + + public void CopyTo(SceneSelection dst) + { + dst.gameObject = gameObject; + dst.mesh = mesh; + dst.faces.Clear(); + dst.edges.Clear(); + dst.vertexes.Clear(); + foreach (var x in faces) + dst.faces.Add(x); + foreach (var x in edges) + dst.edges.Add(x); + foreach (var x in vertexes) + dst.vertexes.Add(x); + } + + public override string ToString() + { + var sb = new System.Text.StringBuilder(); + sb.AppendLine("GameObject: " + (gameObject != null ? gameObject.name : null)); + sb.AppendLine("ProBuilderMesh: " + (mesh != null ? mesh.name : null)); + sb.AppendLine("Face: " + (faces != null ? faces.ToString() : null)); + sb.AppendLine("Edge: " + edges.ToString()); + sb.AppendLine("Vertex: " + vertexes); + return sb.ToString(); + } + + public bool Equals(SceneSelection other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return Equals(gameObject, other.gameObject) + && Equals(mesh, other.mesh) + && Enumerable.SequenceEqual(vertexes, other.vertexes) + && Enumerable.SequenceEqual(edges, other.edges) + && Enumerable.SequenceEqual(faces, other.faces); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != this.GetType()) return false; + return Equals((SceneSelection)obj); + } + + public override int GetHashCode() + { + unchecked + { + int hashCode = (gameObject != null ? gameObject.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (mesh != null ? mesh.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (vertexes != null ? vertexes.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (edges != null ? edges.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (faces != null ? faces.GetHashCode() : 0); + return hashCode; + } + } + + public static bool operator==(SceneSelection left, SceneSelection right) + { + return Equals(left, right); + } + + public static bool operator!=(SceneSelection left, SceneSelection right) + { + return !Equals(left, right); + } + } + + struct VertexPickerEntry + { + public ProBuilderMesh mesh; + public int vertex; + public float screenDistance; + public Vector3 worldPosition; + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerSettings.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerSettings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..aaf6a49b0746ce9331fe4c7d00d46b527ce1f0f4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SelectionPickerSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a893ddeb6fc42463f9d81a87e03c8455 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SemVer.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SemVer.cs new file mode 100644 index 0000000000000000000000000000000000000000..e72ce5f4556d24ce587489992933c0f08b207944 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SemVer.cs @@ -0,0 +1,399 @@ +using System; +using System.Text; +using System.Text.RegularExpressions; +using UnityEngine; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Version information container that is comparable. + /// </summary> + [Serializable] + sealed class SemVer : IEquatable<SemVer>, IComparable<SemVer>, IComparable + { + [SerializeField] + int m_Major = -1; + + [SerializeField] + int m_Minor = -1; + + [SerializeField] + int m_Patch = -1; + + [SerializeField] + int m_Build = -1; + + [SerializeField] + string m_Type; + + [SerializeField] + string m_Metadata; + + [SerializeField] + string m_Date; + + public int major { get { return m_Major; } } + public int minor { get { return m_Minor; } } + public int patch { get { return m_Patch; } } + public int build { get { return m_Build; } } + public string type { get { return m_Type != null ? m_Type : ""; } } + public string metadata { get { return m_Metadata != null ? m_Metadata : ""; } } + public string date { get { return m_Date != null ? m_Date : ""; } } + + /// <summary> + /// Get a new version info with just the major, minor, and patch values. + /// </summary> + public SemVer MajorMinorPatch + { + get { return new SemVer(major, minor, patch); } + } + + public const string DefaultStringFormat = "M.m.p-t.b"; + + public SemVer() + { + m_Major = 0; + m_Minor = 0; + m_Patch = 0; + m_Build = -1; + m_Type = null; + m_Date = null; + m_Metadata = null; + } + + public SemVer(string formatted, string date = null) + { + SemVer parsed; + + m_Metadata = formatted; + m_Date = date; + + if (TryGetVersionInfo(formatted, out parsed)) + { + m_Major = parsed.m_Major; + m_Minor = parsed.m_Minor; + m_Patch = parsed.m_Patch; + m_Build = parsed.m_Build; + m_Type = parsed.m_Type; + m_Metadata = parsed.metadata; + } +#if PB_DEBUG + else + { + Log.Error("Failed parsing version info: " + formatted); + } +#endif + } + + public SemVer(int major, int minor, int patch, int build = -1, string type = null, string date = null, string metadata = null) + { + m_Major = major; + m_Minor = minor; + m_Patch = patch; + m_Build = build; + m_Type = type; + m_Metadata = metadata; + m_Date = date; + } + + public bool IsValid() + { + return major != -1 && + minor != -1 && + patch != -1; + } + + public override bool Equals(object o) + { + return o is SemVer && Equals((SemVer)o); + } + + public override int GetHashCode() + { + int hash = 13; + + unchecked + { + if (IsValid()) + { + hash = (hash * 7) + major.GetHashCode(); + hash = (hash * 7) + minor.GetHashCode(); + hash = (hash * 7) + patch.GetHashCode(); + hash = (hash * 7) + build.GetHashCode(); + hash = (hash * 7) + type.GetHashCode(); + } + else + { + return string.IsNullOrEmpty(metadata) ? metadata.GetHashCode() : base.GetHashCode(); + } + } + + return hash; + } + + public bool Equals(SemVer version) + { + if (object.ReferenceEquals(version, null)) + return false; + + if (IsValid() != version.IsValid()) + return false; + + if (IsValid()) + { + return major == version.major && + minor == version.minor && + patch == version.patch && + type.Equals(version.type) && + build.Equals(version.build); + } + else + { + if (string.IsNullOrEmpty(metadata) || string.IsNullOrEmpty(version.metadata)) + return false; + + return metadata.Equals(version.metadata); + } + } + + public int CompareTo(object obj) + { + return CompareTo(obj as SemVer); + } + + static int WrapNoValue(int value) + { + return value < 0 ? int.MaxValue : value; + } + + public int CompareTo(SemVer version) + { + const int GREATER = 1; + const int EVEN = 0; + const int LESS = -1; + + if (object.ReferenceEquals(version, null)) + return GREATER; + + if (Equals(version)) + return EVEN; + + if (major > version.major) + return GREATER; + if (major < version.major) + return LESS; + if (minor > version.minor) + return GREATER; + if (minor < version.minor) + return LESS; + + // missing values in the following categories are > than existing. + + if (WrapNoValue(patch) > WrapNoValue(version.patch)) + return GREATER; + if (WrapNoValue(patch) < WrapNoValue(version.patch)) + return LESS; + if (string.IsNullOrEmpty(type) && !string.IsNullOrEmpty(version.type)) + return GREATER; + if (!string.IsNullOrEmpty(type) && string.IsNullOrEmpty(version.type)) + return LESS; + if (WrapNoValue(build) > WrapNoValue(version.build)) + return GREATER; + if (WrapNoValue(build) < WrapNoValue(version.build)) + return LESS; + + return EVEN; + } + + public static bool operator==(SemVer left, SemVer right) + { + if (object.ReferenceEquals(left, null)) + return object.ReferenceEquals(right, null); + + return left.Equals(right); + } + + public static bool operator!=(SemVer left, SemVer right) + { + return !(left == right); + } + + public static bool operator<(SemVer left, SemVer right) + { + if (object.ReferenceEquals(left, null)) + return !object.ReferenceEquals(right, null); + + return left.CompareTo(right) < 0; + } + + public static bool operator>(SemVer left, SemVer right) + { + // null < null still equals false + if (object.ReferenceEquals(left, null)) + return false; + + return left.CompareTo(right) > 0; + } + + public static bool operator <=(SemVer left, SemVer right) + { + return left == right || left < right; + } + + public static bool operator>=(SemVer left, SemVer right) + { + return left == right || left > right; + } + + /// <summary> + /// Simple formatting for a version info. The following characters are available: + /// 'M' Major + /// 'm' Minor + /// 'p' Patch + /// 'b' Build + /// 'T' Type + /// 'd' Date + /// 'D' Metadata + /// Escape characters with '\'. + /// </summary> + /// <example> + /// ToString("\buil\d: T:M.m.p") returns "build: Final:2.10.1" + /// </example> + /// <param name="format"></param> + /// <returns></returns> + public string ToString(string format) + { + var sb = new StringBuilder(); + bool skip = false; + + foreach (char c in format.ToCharArray()) + { + if (skip) + { + sb.Append(c); + skip = false; + continue; + } + + if (c == '\\') + skip = true; + else if (c == 'M') + sb.Append(major); + else if (c == 'm') + sb.Append(minor); + else if (c == 'p') + sb.Append(patch); + else if (c == 'b') + sb.Append(build); + else if (c == 'T' || c == 't') + sb.Append(type); + else if (c == 'd') + sb.Append(date); + else if (c == 'D') + sb.Append(metadata); + else + sb.Append(c); + } + + return sb.ToString(); + } + + /// <summary> + /// Returns a string with all the information that this version contains, including date. + /// </summary> + /// <returns></returns> + public override string ToString() + { + var sb = new StringBuilder(); + + sb.Append(ToString("M.m.p")); + + if (!string.IsNullOrEmpty(type)) + { + sb.Append("-"); + sb.Append(type); + + if (build > -1) + { + sb.Append("."); + sb.Append(build.ToString()); + } + } + + if (!string.IsNullOrEmpty(date)) + { + sb.Append(" "); + sb.Append(date); + } + + return sb.ToString(); + } + + /// <summary> + /// Create a pb_VersionInfo type from a string formatted in valid semantic versioning format. + /// https://semver.org/ + /// Ex: TryGetVersionInfo("2.5.3-b.1", out info) + /// </summary> + /// <param name="input"></param> + /// <param name="version"></param> + /// <returns></returns> + public static bool TryGetVersionInfo(string input, out SemVer version) + { + version = new SemVer(); + bool ret = false; + + const string k_MajorMinorPatchRegex = "^([0-9]+\\.[0-9]+\\.[0-9]+)"; + const string k_VersionReleaseRegex = "(?i)(?<=\\-)[a-z0-9\\-]+"; + const string k_VersionBuildRegex = "(?i)(?<=\\-[a-z0-9\\-]+\\.)[0-9]+"; + const string k_MetadataRegex = "(?<=\\+).+"; + + try + { + var mmp = Regex.Match(input, k_MajorMinorPatchRegex); + + if (!mmp.Success) + return false; + + string[] mmpSplit = mmp.Value.Split('.'); + + int.TryParse(mmpSplit[0], out version.m_Major); + int.TryParse(mmpSplit[1], out version.m_Minor); + int.TryParse(mmpSplit[2], out version.m_Patch); + + ret = true; + + // from here down is not required + var preReleaseVersion = Regex.Match(input, k_VersionReleaseRegex); + + if (preReleaseVersion.Success) + version.m_Type = preReleaseVersion.Value; + + var preReleaseBuild = Regex.Match(input, k_VersionBuildRegex); + version.m_Build = preReleaseBuild.Success ? GetBuildNumber(preReleaseBuild.Value) : -1; + + var meta = Regex.Match(input, k_MetadataRegex); + + if (meta.Success) + version.m_Metadata = meta.Value; + } + catch + { + ret = false; + } + + return ret; + } + + static int GetBuildNumber(string input) + { + var number = Regex.Match(input, "[0-9]+"); + + int buildNo = 0; + + if (number.Success && int.TryParse(number.Value, out buildNo)) + return buildNo; + + return -1; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SemVer.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SemVer.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3327a9b1019c1b53a7a95569f0e38df82b6086b7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SemVer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: daab597c96b98b840aff1e885c4ca0f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SerializationUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SerializationUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..f6e5b991bb5b5bf5a4ecaea3747382a433205406 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SerializationUtility.cs @@ -0,0 +1,61 @@ +#if ENABLE_DRIVEN_PROPERTIES +using System.Reflection; +using System; +using System.Diagnostics; + +namespace UnityEngine.ProBuilder +{ + static class SerializationUtility + { + static MethodInfo m_RegisterProperty; + static MethodInfo m_UnregisterProperty; + + // used by tests + internal static MethodInfo registerProperty + { + get + { + if (m_RegisterProperty == null) + { + Type drivenPropertyManager = typeof(Transform).Assembly.GetType("UnityEngine.DrivenPropertyManager"); + m_RegisterProperty = drivenPropertyManager.GetMethod("RegisterProperty", BindingFlags.Public | BindingFlags.Static); + } + return m_RegisterProperty; + } + } + + internal static MethodInfo unregisterProperty + { + get + { + if (m_UnregisterProperty == null) + { + Type drivenPropertyManager = typeof(Transform).Assembly.GetType("UnityEngine.DrivenPropertyManager"); + m_UnregisterProperty = drivenPropertyManager.GetMethod("UnregisterProperty", BindingFlags.Public | BindingFlags.Static); + } + return m_UnregisterProperty; + } + } + + [Conditional("UNITY_EDITOR")] + public static void RegisterDrivenProperty(Object driver, Object target, string property) + { +#if UNITY_2020_1_OR_NEWER && RUNTIME_VISIBLE_TO_PROBUILDER_LANDED + DrivenPropertyManager.RegisterProperty(driver, target, property); +#else + registerProperty.Invoke(null, new object[] { driver, target, property }); +#endif + } + + [Conditional("UNITY_EDITOR")] + public static void UnregisterDrivenProperty(Object driver, Object target, string property) + { +#if UNITY_2020_1_OR_NEWER && RUNTIME_VISIBLE_TO_PROBUILDER_LANDED + DrivenPropertyManager.UnregisterProperty(driver, target, property); +#else + unregisterProperty.Invoke(null, new object[] { driver, target, property }); +#endif + } + } +} +#endif diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SerializationUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SerializationUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..deaa31f590cd3774fc201d6001510e9375781437 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SerializationUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c23e2e2798e8047eabd581579b050162 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ShapeGenerator.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ShapeGenerator.cs new file mode 100644 index 0000000000000000000000000000000000000000..23100217f143b49a6f6faabd4bf17a17f67a678f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ShapeGenerator.cs @@ -0,0 +1,1594 @@ +using UnityEngine; +using System.Collections.Generic; +using UnityEngine.ProBuilder.MeshOperations; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Describes each primitive ProBuilder can create by default. Pass to @"UnityEngine.ProBuilder.ShapeGenerator.CreateShape" to get a primitive with default parameters. + /// </summary> + public enum ShapeType + { + /// <summary> + /// Cube shape. + /// </summary> + Cube, + /// <summary> + /// Stair shape. + /// </summary> + Stair, + /// <summary> + /// Curved stairs shape. + /// </summary> + CurvedStair, + /// <summary> + /// A prism shape. + /// </summary> + Prism, + /// <summary> + /// Cylinder shape. + /// </summary> + Cylinder, + /// <summary> + /// A 10x10 plane with 2 subdivisions. + /// </summary> + Plane, + /// <summary> + /// Door shape. + /// </summary> + Door, + /// <summary> + /// Pipe shape. + /// </summary> + Pipe, + /// <summary> + /// Cone shape. + /// </summary> + Cone, + /// <summary> + /// A 1x1 quad. + /// </summary> + Sprite, + /// <summary> + /// A 180 degree arch. + /// </summary> + Arch, + /// <summary> + /// Sphere shape. Also called icosphere, or icosahedron. + /// </summary> + Sphere, + /// <summary> + /// Torus shape. + /// </summary> + /// <remarks> + /// The tastiest of all shapes. + /// </remarks> + Torus + } + + /// <summary> + /// Describes the type of pivot ProBuilder would automatically assign on primitive creation. + /// </summary> + public enum PivotLocation + { + Center, + FirstVertex + } + + /// <summary> + /// Functions for creating ProBuilderMesh primitives. + /// </summary> + public static class ShapeGenerator + { + static readonly Vector3[] k_IcosphereVertices = new Vector3[12] + { + new Vector3(-1f, Math.phi, 0f), + new Vector3(1f, Math.phi, 0f), + new Vector3(-1f, -Math.phi, 0f), + new Vector3(1f, -Math.phi, 0f), + + new Vector3(0f, -1f, Math.phi), + new Vector3(0f, 1f, Math.phi), + new Vector3(0f, -1f, -Math.phi), + new Vector3(0f, 1f, -Math.phi), + + new Vector3(Math.phi, 0f, -1f), + new Vector3(Math.phi, 0f, 1f), + new Vector3(-Math.phi, 0f, -1f), + new Vector3(-Math.phi, 0f, 1f) + }; + + static readonly int[] k_IcosphereTriangles = new int[60] + { + 0, 11, 5, + 0, 5, 1, + 0, 1, 7, + 0, 7, 10, + 0, 10, 11, + + 1, 5, 9, + 5, 11, 4, + 11, 10, 2, + 10, 7, 6, + 7, 1, 8, + + 3, 9, 4, + 3, 4, 2, + 3, 2, 6, + 3, 6, 8, + 3, 8, 9, + + 4, 9, 5, + 2, 4, 11, + 6, 2, 10, + 8, 6, 7, + 9, 8, 1 + }; + + /// <summary> + /// A set of 8 vertices forming the template for a cube mesh. + /// </summary> + static readonly Vector3[] k_CubeVertices = new Vector3[] { + // bottom 4 verts + new Vector3(-.5f, -.5f, .5f), // 0 + new Vector3(.5f, -.5f, .5f), // 1 + new Vector3(.5f, -.5f, -.5f), // 2 + new Vector3(-.5f, -.5f, -.5f), // 3 + + // top 4 verts + new Vector3(-.5f, .5f, .5f), // 4 + new Vector3(.5f, .5f, .5f), // 5 + new Vector3(.5f, .5f, -.5f), // 6 + new Vector3(-.5f, .5f, -.5f) // 7 + }; + + /// <summary> + /// A set of triangles forming a cube with reference to the k_CubeVertices array. + /// </summary> + static readonly int[] k_CubeTriangles = new int[] { + 0, 1, 4, 5, 1, 2, 5, 6, 2, 3, 6, 7, 3, 0, 7, 4, 4, 5, 7, 6, 3, 2, 0, 1 + }; + + /// <summary> + /// Create a shape with default parameters. + /// </summary> + /// <param name="shape">The ShapeType to create.</param> + /// <param name="pivotType">Where the shape's pivot will be.</param> + /// <returns>A new GameObject with the ProBuilderMesh initialized to the primitve shape.</returns> + public static ProBuilderMesh CreateShape(ShapeType shape, PivotLocation pivotType = PivotLocation.Center) + { + ProBuilderMesh pb = null; + + if (shape == ShapeType.Cube) + pb = GenerateCube(pivotType, Vector3.one); + if (shape == ShapeType.Stair) + pb = GenerateStair(pivotType, new Vector3(2f, 2.5f, 4f), 6, true); + if (shape == ShapeType.CurvedStair) + pb = GenerateCurvedStair(pivotType, 2f, 2.5f, 2f, 180f, 8, true); + if (shape == ShapeType.Prism) + pb = GeneratePrism(pivotType, Vector3.one); + if (shape == ShapeType.Cylinder) + pb = GenerateCylinder(pivotType, 8, 1f, 2f, 2); + if (shape == ShapeType.Plane) + pb = GeneratePlane(pivotType, 5f, 5f, 5, 5, Axis.Up); + if (shape == ShapeType.Door) + pb = GenerateDoor(pivotType, 3f, 2.5f, .5f, .75f, 1f); + if (shape == ShapeType.Pipe) + pb = GeneratePipe(pivotType, 1f, 2f, .25f, 8, 2); + if (shape == ShapeType.Cone) + pb = GenerateCone(pivotType, .5f, 1f, 8); + if (shape == ShapeType.Sprite) + pb = GeneratePlane(pivotType, 1f, 1f, 0, 0, Axis.Up); + if (shape == ShapeType.Arch) + pb = GenerateArch(pivotType, 180f, 2f, 1f, 1f, 9, true, true, true, true, true); + if (shape == ShapeType.Sphere) + pb = GenerateIcosahedron(pivotType, .5f, 2, true, false); + if (shape == ShapeType.Torus) + { + pb = GenerateTorus(pivotType, 12, 16, 1f, .3f, true, 360f, 360f, true); + UVEditing.ProjectFacesBox(pb, pb.facesInternal); + } + + if (pb == null) + { +#if DEBUG + Log.Error(shape.ToString() + " type has no default!"); +#endif + pb = GenerateCube(pivotType, Vector3.one); + } + + pb.gameObject.name = shape.ToString(); + pb.renderer.sharedMaterial = BuiltinMaterials.defaultMaterial; + + return pb; + } + + /// <summary> + /// Create a set of stairs. + /// </summary> + /// <param name="pivotType">Where the shape's pivot will be.</param> + /// <param name="size">The bounds of the stairs.</param> + /// <param name="steps">How many steps does the stairset have.</param> + /// <param name="buildSides">If true, build the side and back walls. If false, only the stair top and connecting planes will be built.</param> + /// <returns>A new GameObject with a reference to the ProBuilderMesh component.</returns> + public static ProBuilderMesh GenerateStair(PivotLocation pivotType, Vector3 size, int steps, bool buildSides) + { + // 4 vertices per quad, 2 quads per step. + Vector3[] vertices = new Vector3[4 * steps * 2]; + Face[] faces = new Face[steps * 2]; + + // vertex index, face index + int v = 0, t = 0; + + for (int i = 0; i < steps; i++) + { + float inc0 = i / (float)steps; + float inc1 = (i + 1) / (float)steps; + + float x0 = size.x; + float x1 = 0; + float y0 = size.y * inc0; + float y1 = size.y * inc1; + float z0 = size.z * inc0; + float z1 = size.z * inc1; + + vertices[v + 0] = new Vector3(x0, y0, z0); + vertices[v + 1] = new Vector3(x1, y0, z0); + vertices[v + 2] = new Vector3(x0, y1, z0); + vertices[v + 3] = new Vector3(x1, y1, z0); + + vertices[v + 4] = new Vector3(x0, y1, z0); + vertices[v + 5] = new Vector3(x1, y1, z0); + vertices[v + 6] = new Vector3(x0, y1, z1); + vertices[v + 7] = new Vector3(x1, y1, z1); + + faces[t + 0] = new Face(new int[] { v + 0, + v + 1, + v + 2, + v + 1, + v + 3, + v + 2 }); + + faces[t + 1] = new Face(new int[] { v + 4, + v + 5, + v + 6, + v + 5, + v + 7, + v + 6 }); + + v += 8; + t += 2; + } + + // sides + if (buildSides) + { + // first step is special case - only needs a quad, but all other steps need + // a quad and tri. + float x = 0f; + + for (int side = 0; side < 2; side++) + { + Vector3[] sides_v = new Vector3[steps * 4 + (steps - 1) * 3]; + Face[] sides_f = new Face[steps + steps - 1]; + + int sv = 0, st = 0; + + for (int i = 0; i < steps; i++) + { + float y0 = (Mathf.Max(i, 1) / (float)steps) * size.y; + float y1 = ((i + 1) / (float)steps) * size.y; + + float z0 = (i / (float)steps) * size.z; + float z1 = ((i + 1) / (float)steps) * size.z; + + sides_v[sv + 0] = new Vector3(x, 0f, z0); + sides_v[sv + 1] = new Vector3(x, 0f, z1); + sides_v[sv + 2] = new Vector3(x, y0, z0); + sides_v[sv + 3] = new Vector3(x, y1, z1); + + sides_f[st++] = new Face(side % 2 == 0 ? + new int[] { v + 0, v + 1, v + 2, v + 1, v + 3, v + 2 } : + new int[] { v + 2, v + 1, v + 0, v + 2, v + 3, v + 1 }); + + sides_f[st - 1].textureGroup = side + 1; + + v += 4; + sv += 4; + + // that connecting triangle + if (i > 0) + { + sides_v[sv + 0] = new Vector3(x, y0, z0); + sides_v[sv + 1] = new Vector3(x, y1, z0); + sides_v[sv + 2] = new Vector3(x, y1, z1); + + sides_f[st++] = new Face(side % 2 == 0 ? + new int[] { v + 2, v + 1, v + 0 } : + new int[] { v + 0, v + 1, v + 2 }); + + sides_f[st - 1].textureGroup = side + 1; + + v += 3; + sv += 3; + } + } + + vertices = vertices.Concat(sides_v); + faces = faces.Concat(sides_f); + + x += size.x; + } + + // add that last back face + vertices = vertices.Concat(new Vector3[] { + new Vector3(0f, 0f, size.z), + new Vector3(size.x, 0f, size.z), + new Vector3(0f, size.y, size.z), + new Vector3(size.x, size.y, size.z) + }); + + faces = faces.Add(new Face(new int[] {v + 0, v + 1, v + 2, v + 1, v + 3, v + 2})); + } + + ProBuilderMesh pb = ProBuilderMesh.Create(vertices, faces); + pb.gameObject.name = "Stairs"; + pb.SetPivot(pivotType); + + return pb; + } + + /// <summary> + /// Create a set of curved stairs. + /// </summary> + /// <param name="pivotType">Where the shape's pivot will be.</param> + /// <param name="stairWidth">The width of the stair set.</param> + /// <param name="height">The height of the stair set.</param> + /// <param name="innerRadius">The radius from center to inner stair bounds.</param> + /// <param name="circumference">The amount of curvature in degrees.</param> + /// <param name="steps">How many steps this stair set contains.</param> + /// <param name="buildSides">If true, build the side and back walls. If false, only the stair top and connecting planes will be built.</param> + /// <returns>A new GameObject with a reference to the ProBuilderMesh component.</returns> + public static ProBuilderMesh GenerateCurvedStair(PivotLocation pivotType, float stairWidth, float height, float innerRadius, float circumference, int steps, bool buildSides) + { + bool noInnerSide = innerRadius < Mathf.Epsilon; + + // 4 vertices per quad, vertical step first, then floor step can be 3 or 4 verts depending on + // if the inner radius is 0 or not. + Vector3[] positions = new Vector3[(4 * steps) + ((noInnerSide ? 3 : 4) * steps)]; + Face[] faces = new Face[steps * 2]; + + // vertex index, face index + int v = 0, t = 0; + + float cir = Mathf.Abs(circumference) * Mathf.Deg2Rad; + float outerRadius = innerRadius + stairWidth; + + for (int i = 0; i < steps; i++) + { + float inc0 = (i / (float)steps) * cir; + float inc1 = ((i + 1) / (float)steps) * cir; + + float h0 = ((i / (float)steps) * height); + float h1 = (((i + 1) / (float)steps) * height); + + Vector3 v0 = new Vector3(-Mathf.Cos(inc0), 0f, Mathf.Sin(inc0)); + Vector3 v1 = new Vector3(-Mathf.Cos(inc1), 0f, Mathf.Sin(inc1)); + + /** + * + * /6-----/7 + * / / + * /5_____/4 + * |3 |2 + * | | + * |1_____|0 + * + */ + + positions[v + 0] = v0 * innerRadius; + positions[v + 1] = v0 * outerRadius; + positions[v + 2] = v0 * innerRadius; + positions[v + 3] = v0 * outerRadius; + + positions[v + 0].y = h0; + positions[v + 1].y = h0; + positions[v + 2].y = h1; + positions[v + 3].y = h1; + + positions[v + 4] = positions[v + 2]; + positions[v + 5] = positions[v + 3]; + + positions[v + 6] = v1 * outerRadius; + positions[v + 6].y = h1; + + if (!noInnerSide) + { + positions[v + 7] = v1 * innerRadius; + positions[v + 7].y = h1; + } + + faces[t + 0] = new Face(new int[] { + v + 0, + v + 1, + v + 2, + v + 1, + v + 3, + v + 2 + }); + + if (noInnerSide) + { + faces[t + 1] = new Face(new int[] { + v + 4, + v + 5, + v + 6 + }); + } + else + { + faces[t + 1] = new Face(new int[] { + v + 4, + v + 5, + v + 6, + v + 4, + v + 6, + v + 7 + }); + } + + float uvRotation = ((inc1 + inc0) * -.5f) * Mathf.Rad2Deg; + uvRotation %= 360f; + if (uvRotation < 0f) + uvRotation = 360f + uvRotation; + + var uv = faces[t + 1].uv; + uv.rotation = uvRotation; + faces[t + 1].uv = uv; + + v += noInnerSide ? 7 : 8; + t += 2; + } + + // sides + if (buildSides) + { + // first step is special case - only needs a quad, but all other steps need + // a quad and tri. + float x = noInnerSide ? innerRadius + stairWidth : innerRadius; + + for (int side = (noInnerSide ? 1 : 0); side < 2; side++) + { + Vector3[] sides_v = new Vector3[steps * 4 + (steps - 1) * 3]; + Face[] sides_f = new Face[steps + steps - 1]; + + int sv = 0, st = 0; + + for (int i = 0; i < steps; i++) + { + float inc0 = (i / (float)steps) * cir; + float inc1 = ((i + 1) / (float)steps) * cir; + + float h0 = ((Mathf.Max(i, 1) / (float)steps) * height); + float h1 = (((i + 1) / (float)steps) * height); + + Vector3 v0 = new Vector3(-Mathf.Cos(inc0), 0f, Mathf.Sin(inc0)) * x; + Vector3 v1 = new Vector3(-Mathf.Cos(inc1), 0f, Mathf.Sin(inc1)) * x; + + sides_v[sv + 0] = v0; + sides_v[sv + 1] = v1; + sides_v[sv + 2] = v0; + sides_v[sv + 3] = v1; + + sides_v[sv + 0].y = 0f; + sides_v[sv + 1].y = 0f; + sides_v[sv + 2].y = h0; + sides_v[sv + 3].y = h1; + + sides_f[st++] = new Face(side % 2 == 0 ? + new int[] { v + 2, v + 1, v + 0, v + 2, v + 3, v + 1 } : + new int[] { v + 0, v + 1, v + 2, v + 1, v + 3, v + 2 }); + sides_f[st - 1].smoothingGroup = side + 1; + + v += 4; + sv += 4; + + // that connecting triangle + if (i > 0) + { + sides_f[st - 1].textureGroup = (side * steps) + i; + + sides_v[sv + 0] = v0; + sides_v[sv + 1] = v1; + sides_v[sv + 2] = v0; + sides_v[sv + 0].y = h0; + sides_v[sv + 1].y = h1; + sides_v[sv + 2].y = h1; + + sides_f[st++] = new Face(side % 2 == 0 ? + new int[] { v + 2, v + 1, v + 0 } : + new int[] { v + 0, v + 1, v + 2 }); + + sides_f[st - 1].textureGroup = (side * steps) + i; + sides_f[st - 1].smoothingGroup = side + 1; + + v += 3; + sv += 3; + } + } + + positions = positions.Concat(sides_v); + faces = faces.Concat(sides_f); + + x += stairWidth; + } + + // // add that last back face + float cos = -Mathf.Cos(cir), sin = Mathf.Sin(cir); + + positions = positions.Concat(new Vector3[] + { + new Vector3(cos, 0f, sin) * innerRadius, + new Vector3(cos, 0f, sin) * outerRadius, + new Vector3(cos * innerRadius, height, sin * innerRadius), + new Vector3(cos * outerRadius, height, sin * outerRadius) + }); + + faces = faces.Add(new Face(new int[] {v + 2, v + 1, v + 0, v + 2, v + 3, v + 1})); + } + + if (circumference < 0f) + { + Vector3 flip = new Vector3(-1f, 1f, 1f); + + for (int i = 0; i < positions.Length; i++) + positions[i].Scale(flip); + + foreach (Face f in faces) + f.Reverse(); + } + + ProBuilderMesh pb = ProBuilderMesh.Create(positions, faces); + + pb.gameObject.name = "Stairs"; + pb.SetPivot(pivotType); + + return pb; + } + + /// <summary> + /// Creates a stair set with the given parameters. + /// </summary> + /// <param name="pivotType">Where the shape's pivot will be.</param> + /// <param name="steps">How many steps should this stairwell have?</param> + /// <param name="width">How wide (in meters) should this stairset be?</param> + /// <param name="height">How tall (in meters) should this stairset be?</param> + /// <param name="depth">How deep (in meters) should this stairset be?</param> + /// <param name="sidesGoToFloor">If true, stair step sides will extend to the floor. If false, sides will only extend as low as the stair is high.</param> + /// <param name="generateBack">If true, a back face to the stairwell will be appended.</param> + /// <param name="platformsOnly">If true, only the front face and tops of the stairwell will be built. Nice for when a staircase is embedded between geometry.</param> + /// <returns>A new GameObject with a reference to the ProBuilderMesh component.</returns> + internal static ProBuilderMesh GenerateStair(PivotLocation pivotType, int steps, float width, float height, float depth, bool sidesGoToFloor, bool generateBack, bool platformsOnly) + { + int i = 0; + + List<Vector3> verts = new List<Vector3>(); + Vector3[] v = (platformsOnly) ? new Vector3[8] : new Vector3[16]; + + float stepWidth = width; + float stepHeight = height / steps; + float stepDepth = depth / steps; + float yMax = stepHeight; // used when stair sides extend to floor + + // platforms + for (i = 0; i < steps; i++) + { + float x = stepWidth / 2f, y = i * stepHeight, z = i * stepDepth; + + if (sidesGoToFloor) + y = 0; + + yMax = i * stepHeight + stepHeight; + + // Front + v[0] = new Vector3(x, i * stepHeight, z); + v[1] = new Vector3(-x, i * stepHeight, z); + v[2] = new Vector3(x, yMax, z); + v[3] = new Vector3(-x, yMax, z); + + // Platform + v[4] = new Vector3(x, yMax, z); + v[5] = new Vector3(-x, yMax, z); + v[6] = new Vector3(x, yMax, z + stepDepth); + v[7] = new Vector3(-x, yMax, z + stepDepth); + + if (!platformsOnly) + { + // Left side + v[8] = new Vector3(x, y, z + stepDepth); + v[9] = new Vector3(x, y, z); + v[10] = new Vector3(x, yMax, z + stepDepth); + v[11] = new Vector3(x, yMax, z); + + // Right side + v[12] = new Vector3(-x, y, z); + v[13] = new Vector3(-x, y, z + stepDepth); + v[14] = new Vector3(-x, yMax, z); + v[15] = new Vector3(-x, yMax, z + stepDepth); + } + + verts.AddRange(v); + } + + if (generateBack) + { + verts.Add(new Vector3(-stepWidth / 2f, 0f, depth)); + verts.Add(new Vector3(stepWidth / 2f, 0f, depth)); + verts.Add(new Vector3(-stepWidth / 2f, height, depth)); + verts.Add(new Vector3(stepWidth / 2f, height, depth)); + } + + ProBuilderMesh pb = ProBuilderMesh.CreateInstanceWithPoints(verts.ToArray()); + pb.gameObject.name = "Stairs"; + pb.SetPivot(pivotType); + + return pb; + } + + /// <summary> + /// Create a new cube with the specified size. Size is baked (ie, not applied as a scale value in the transform). + /// </summary> + /// <param name="pivotType">Where the shape's pivot will be.</param> + /// <param name="size">The bounds of the new cube.</param> + /// <returns>A new GameObject with a reference to the ProBuilderMesh component.</returns> + public static ProBuilderMesh GenerateCube(PivotLocation pivotType, Vector3 size) + { + Vector3[] points = new Vector3[k_CubeTriangles.Length]; + + for (int i = 0; i < k_CubeTriangles.Length; i++) + points[i] = Vector3.Scale(k_CubeVertices[k_CubeTriangles[i]], size); + + ProBuilderMesh pb = ProBuilderMesh.CreateInstanceWithPoints(points); + pb.gameObject.name = "Cube"; + pb.SetPivot(pivotType); + + return pb; + } + + /// <summary> + /// Creates a cylinder pb_Object with the supplied parameters. + /// </summary> + /// <param name="pivotType">Where the shape's pivot will be.</param> + /// <param name="axisDivisions">How many divisions to create on the vertical axis. Larger values = smoother surface.</param> + /// <param name="radius">The radius in world units.</param> + /// <param name="height">The height of this object in world units.</param> + /// <param name="heightCuts">The amount of divisions to create on the horizontal axis.</param> + /// <param name="smoothing"></param> + /// <returns>A new GameObject with a reference to the ProBuilderMesh component.</returns> + public static ProBuilderMesh GenerateCylinder(PivotLocation pivotType, int axisDivisions, float radius, float height, int heightCuts, int smoothing = -1) + { + if (axisDivisions % 2 != 0) + axisDivisions++; + + if (axisDivisions > 64) + axisDivisions = 64; + + float stepAngle = 360f / axisDivisions; + float heightStep = height / (heightCuts + 1); + + Vector3[] circle = new Vector3[axisDivisions]; + + // get a circle + for (int i = 0; i < axisDivisions; i++) + { + float angle0 = stepAngle * i * Mathf.Deg2Rad; + + float x = Mathf.Cos(angle0) * radius; + float z = Mathf.Sin(angle0) * radius; + + circle[i] = new Vector3(x, 0f, z); + } + + // add two because end caps + Vector3[] verts = new Vector3[(axisDivisions * (heightCuts + 1) * 4) + (axisDivisions * 6)]; + Face[] faces = new Face[axisDivisions * (heightCuts + 1) + (axisDivisions * 2)]; + + // build vertex array + int it = 0; + // +1 to account for 0 height cuts + for (int i = 0; i < heightCuts + 1; i++) + { + float Y = i * heightStep; + float Y2 = (i + 1) * heightStep; + + for (int n = 0; n < axisDivisions; n++) + { + verts[it + 0] = new Vector3(circle[n + 0].x, Y, circle[n + 0].z); + verts[it + 1] = new Vector3(circle[n + 0].x, Y2, circle[n + 0].z); + + if (n != axisDivisions - 1) + { + verts[it + 2] = new Vector3(circle[n + 1].x, Y, circle[n + 1].z); + verts[it + 3] = new Vector3(circle[n + 1].x, Y2, circle[n + 1].z); + } + else + { + verts[it + 2] = new Vector3(circle[0].x, Y, circle[0].z); + verts[it + 3] = new Vector3(circle[0].x, Y2, circle[0].z); + } + + it += 4; + } + } + + // wind side faces + int f = 0; + for (int i = 0; i < heightCuts + 1; i++) + { + for (int n = 0; n < axisDivisions * 4; n += 4) + { + int index = (i * (axisDivisions * 4)) + n; + int zero = index; + int one = index + 1; + int two = index + 2; + int three = index + 3; + + faces[f++] = new Face( + new int[6] { zero, one, two, one, three, two }, + 0, + AutoUnwrapSettings.tile, + smoothing, + -1, + -1, + false); + } + } + + // construct caps seperately, cause they aren't wound the same way + int ind = (axisDivisions * (heightCuts + 1) * 4); + int f_ind = axisDivisions * (heightCuts + 1); + + for (int n = 0; n < axisDivisions; n++) + { + // bottom faces + verts[ind + 0] = new Vector3(circle[n].x, 0f, circle[n].z); + + verts[ind + 1] = Vector3.zero; + + if (n != axisDivisions - 1) + verts[ind + 2] = new Vector3(circle[n + 1].x, 0f, circle[n + 1].z); + else + verts[ind + 2] = new Vector3(circle[000].x, 0f, circle[000].z); + + faces[f_ind + n] = new Face(new int[3] {ind + 2, ind + 1, ind + 0}); + + ind += 3; + + // top faces + verts[ind + 0] = new Vector3(circle[n].x, height, circle[n].z); + verts[ind + 1] = new Vector3(0f, height, 0f); + if (n != axisDivisions - 1) + verts[ind + 2] = new Vector3(circle[n + 1].x, height, circle[n + 1].z); + else + verts[ind + 2] = new Vector3(circle[000].x, height, circle[000].z); + + faces[f_ind + (n + axisDivisions)] = new Face(new int[3] {ind + 0, ind + 1, ind + 2}); + + ind += 3; + } + + ProBuilderMesh pb = ProBuilderMesh.Create(verts, faces); + pb.gameObject.name = "Cylinder"; + pb.SetPivot(pivotType); + + return pb; + } + + /// <summary> + /// Create a new prism primitive. + /// </summary> + /// <param name="pivotType">Where the shape's pivot will be.</param> + /// <param name="size">Scale to apply to the shape.</param> + /// <returns>A new GameObject with a reference to the ProBuilderMesh component.</returns> + public static ProBuilderMesh GeneratePrism(PivotLocation pivotType, Vector3 size) + { + size.y *= 2f; + + Vector3[] template = new Vector3[6] + { + Vector3.Scale(new Vector3(-.5f, 0f, -.5f), size), + Vector3.Scale(new Vector3(.5f, 0f, -.5f), size), + Vector3.Scale(new Vector3(0f, .5f, -.5f), size), + Vector3.Scale(new Vector3(-.5f, 0f, .5f), size), + Vector3.Scale(new Vector3(0.5f, 0f, .5f), size), + Vector3.Scale(new Vector3(0f, .5f, .5f), size) + }; + + Vector3[] v = new Vector3[18] + { + template[0], // 0 front + template[1], // 1 + template[2], // 2 + + template[1], // 3 right side + template[4], // 4 + template[2], // 5 + template[5], // 6 + + template[4], // 7 back side + template[3], // 8 + template[5], // 9 + + template[3], // 10 left side + template[0], // 11 + template[5], // 12 + template[2], // 13 + + template[0], // 14 // bottom + template[1], // 15 + template[3], // 16 + template[4] // 17 + }; + + Face[] f = new Face[5] + { + new Face(new int[3] {2, 1, 0}), // x + new Face(new int[6] {5, 4, 3, 5, 6, 4}), // x + new Face(new int[3] {9, 8, 7}), + new Face(new int[6] {12, 11, 10, 12, 13, 11}), + new Face(new int[6] {14, 15, 16, 15, 17, 16}) + }; + + ProBuilderMesh pb = ProBuilderMesh.Create(v, f); + pb.gameObject.name = "Prism"; + pb.SetPivot(pivotType); + + return pb; + } + + /// <summary> + /// Create a door shape suitable for placement in a wall structure. + /// </summary> + /// <param name="pivotType">Where the shape's pivot will be.</param> + /// <param name="totalWidth">The total width of the door</param> + /// <param name="totalHeight">The total height of the door</param> + /// <param name="ledgeHeight">The height between the top of the door frame and top of the object</param> + /// <param name="legWidth">The width of each leg on both sides of the door</param> + /// <param name="depth">The distance between the front and back faces of the door object</param> + /// <returns>A new GameObject with a reference to the ProBuilderMesh component.</returns> + public static ProBuilderMesh GenerateDoor(PivotLocation pivotType, float totalWidth, float totalHeight, float ledgeHeight, float legWidth, float depth) + { + float xLegCoord = totalWidth / 2f; + legWidth = xLegCoord - legWidth; + ledgeHeight = totalHeight - ledgeHeight; + + // 8---9---10--11 + // | | + // 4 5---6 7 + // | | | | + // 0 1 2 3 + Vector3[] template = new Vector3[12] + { + new Vector3(-xLegCoord, 0f, depth), // 0 + new Vector3(-legWidth, 0f, depth), // 1 + new Vector3(legWidth, 0f, depth), // 2 + new Vector3(xLegCoord, 0f, depth), // 3 + new Vector3(-xLegCoord, ledgeHeight, depth), // 4 + new Vector3(-legWidth, ledgeHeight, depth), // 5 + new Vector3(legWidth, ledgeHeight, depth), // 6 + new Vector3(xLegCoord, ledgeHeight, depth), // 7 + new Vector3(-xLegCoord, totalHeight, depth), // 8 + new Vector3(-legWidth, totalHeight, depth), // 9 + new Vector3(legWidth, totalHeight, depth), // 10 + new Vector3(xLegCoord, totalHeight, depth) // 11 + }; + + List<Vector3> points = new List<Vector3>(); + + points.Add(template[0]); + points.Add(template[1]); + points.Add(template[4]); + points.Add(template[5]); + + points.Add(template[2]); + points.Add(template[3]); + points.Add(template[6]); + points.Add(template[7]); + + points.Add(template[4]); + points.Add(template[5]); + points.Add(template[8]); + points.Add(template[9]); + + points.Add(template[6]); + points.Add(template[7]); + points.Add(template[10]); + points.Add(template[11]); + + points.Add(template[5]); + points.Add(template[6]); + points.Add(template[9]); + points.Add(template[10]); + + List<Vector3> reverse = new List<Vector3>(); + + for (int i = 0; i < points.Count; i += 4) + { + reverse.Add(points[i + 1] - Vector3.forward * depth); + reverse.Add(points[i + 0] - Vector3.forward * depth); + reverse.Add(points[i + 3] - Vector3.forward * depth); + reverse.Add(points[i + 2] - Vector3.forward * depth); + } + + points.AddRange(reverse); + + points.Add(template[6]); + points.Add(template[5]); + points.Add(template[6] - Vector3.forward * depth); + points.Add(template[5] - Vector3.forward * depth); + + points.Add(template[2] - Vector3.forward * depth); + points.Add(template[2]); + points.Add(template[6] - Vector3.forward * depth); + points.Add(template[6]); + + points.Add(template[1]); + points.Add(template[1] - Vector3.forward * depth); + points.Add(template[5]); + points.Add(template[5] - Vector3.forward * depth); + + ProBuilderMesh pb = ProBuilderMesh.CreateInstanceWithPoints(points.ToArray()); + pb.gameObject.name = "Door"; + pb.SetPivot(pivotType); + + return pb; + } + + /// <summary> + /// Create a new plane shape. + /// </summary> + /// <param name="pivotType">Where the shape's pivot will be.</param> + /// <param name="width">Plane width.</param> + /// <param name="height">Plane height.</param> + /// <param name="widthCuts">Divisions on the X axis.</param> + /// <param name="heightCuts">Divisions on the Y axis.</param> + /// <param name="axis">The axis to build the plane on. Ex: ProBuilder.Axis.Up is a plane with a normal of Vector3.up.</param> + /// <returns>A new GameObject with a reference to the ProBuilderMesh component.</returns> + public static ProBuilderMesh GeneratePlane(PivotLocation pivotType, float width, float height, int widthCuts, int heightCuts, Axis axis) + { + int w = widthCuts + 1; + int h = heightCuts + 1; + + Vector2[] p = new Vector2[(w * h) * 4]; + Vector3[] v = new Vector3[(w * h) * 4]; + Face[] f = new Face[w * h]; + + int i = 0, j = 0; + { + for (int y = 0; y < h; y++) + { + for (int x = 0; x < w; x++) + { + float x0 = x * (width / w) - (width / 2f); + float x1 = (x + 1) * (width / w) - (width / 2f); + + float y0 = y * (height / h) - (height / 2f); + float y1 = (y + 1) * (height / h) - (height / 2f); + + p[i + 0] = new Vector2(x0, y0); + p[i + 1] = new Vector2(x1, y0); + p[i + 2] = new Vector2(x0, y1); + p[i + 3] = new Vector2(x1, y1); + + f[j++] = new Face(new int[6] + { + i + 0, + i + 1, + i + 2, + i + 1, + i + 3, + i + 2 + }); + + i += 4; + } + } + } + + switch (axis) + { + case Axis.Right: + for (i = 0; i < v.Length; i++) + v[i] = new Vector3(0f, p[i].x, p[i].y); + break; + case Axis.Left: + for (i = 0; i < v.Length; i++) + v[i] = new Vector3(0f, p[i].y, p[i].x); + break; + case Axis.Up: + for (i = 0; i < v.Length; i++) + v[i] = new Vector3(p[i].y, 0f, p[i].x); + break; + case Axis.Down: + for (i = 0; i < v.Length; i++) + v[i] = new Vector3(p[i].x, 0f, p[i].y); + break; + case Axis.Forward: + for (i = 0; i < v.Length; i++) + v[i] = new Vector3(p[i].x, p[i].y, 0f); + break; + case Axis.Backward: + for (i = 0; i < v.Length; i++) + v[i] = new Vector3(p[i].y, p[i].x, 0f); + break; + } + + ProBuilderMesh pb = ProBuilderMesh.Create(v, f); + pb.gameObject.name = "Plane"; + pb.SetPivot(pivotType); + + return pb; + } + + /// <summary> + /// Create a new pipe shape. + /// </summary> + /// <param name="pivotType">Where the shape's pivot will be.</param> + /// <param name="radius">Radius of the generated pipe.</param> + /// <param name="height">Height of the generated pipe.</param> + /// <param name="thickness">How thick the walls will be.</param> + /// <param name="subdivAxis">How many subdivisions on the axis.</param> + /// <param name="subdivHeight">How many subdivisions on the Y axis.</param> + /// <returns>A new GameObject with a reference to the ProBuilderMesh component.</returns> + public static ProBuilderMesh GeneratePipe(PivotLocation pivotType, float radius, float height, float thickness, int subdivAxis, int subdivHeight) + { + // template is outer ring - radius refers to outer ring always + Vector2[] templateOut = new Vector2[subdivAxis]; + Vector2[] templateIn = new Vector2[subdivAxis]; + + for (int i = 0; i < subdivAxis; i++) + { + templateOut[i] = Math.PointInCircumference(radius, i * (360f / subdivAxis), Vector2.zero); + templateIn[i] = Math.PointInCircumference(radius - thickness, i * (360f / subdivAxis), Vector2.zero); + } + + List<Vector3> v = new List<Vector3>(); + + subdivHeight += 1; + + // build out sides + Vector2 tmp, tmp2, tmp3, tmp4; + for (int i = 0; i < subdivHeight; i++) + { + // height subdivisions + float y = i * (height / subdivHeight); + float y2 = (i + 1) * (height / subdivHeight); + + for (int n = 0; n < subdivAxis; n++) + { + tmp = templateOut[n]; + tmp2 = n < (subdivAxis - 1) ? templateOut[n + 1] : templateOut[0]; + + // outside quads + Vector3[] qvo = new Vector3[4] + { + new Vector3(tmp2.x, y, tmp2.y), + new Vector3(tmp.x, y, tmp.y), + new Vector3(tmp2.x, y2, tmp2.y), + new Vector3(tmp.x, y2, tmp.y) + }; + + // inside quad + tmp = templateIn[n]; + tmp2 = n < (subdivAxis - 1) ? templateIn[n + 1] : templateIn[0]; + Vector3[] qvi = new Vector3[4] + { + new Vector3(tmp.x, y, tmp.y), + new Vector3(tmp2.x, y, tmp2.y), + new Vector3(tmp.x, y2, tmp.y), + new Vector3(tmp2.x, y2, tmp2.y) + }; + + v.AddRange(qvo); + v.AddRange(qvi); + } + } + + // build top and bottom + for (int i = 0; i < subdivAxis; i++) + { + tmp = templateOut[i]; + tmp2 = (i < subdivAxis - 1) ? templateOut[i + 1] : templateOut[0]; + tmp3 = templateIn[i]; + tmp4 = (i < subdivAxis - 1) ? templateIn[i + 1] : templateIn[0]; + + // top + Vector3[] tpt = new Vector3[4] + { + new Vector3(tmp2.x, height, tmp2.y), + new Vector3(tmp.x, height, tmp.y), + new Vector3(tmp4.x, height, tmp4.y), + new Vector3(tmp3.x, height, tmp3.y) + }; + + // top + Vector3[] tpb = new Vector3[4] + { + new Vector3(tmp.x, 0f, tmp.y), + new Vector3(tmp2.x, 0f, tmp2.y), + new Vector3(tmp3.x, 0f, tmp3.y), + new Vector3(tmp4.x, 0f, tmp4.y), + }; + + v.AddRange(tpb); + v.AddRange(tpt); + } + + ProBuilderMesh pb = ProBuilderMesh.CreateInstanceWithPoints(v.ToArray()); + + pb.gameObject.name = "Pipe"; + pb.SetPivot(pivotType, 1); + + return pb; + } + + /// <summary> + /// Create a new cone shape. + /// </summary> + /// <param name="pivotType">Where the shape's pivot will be.</param> + /// <param name="radius">Radius of the generated cone.</param> + /// <param name="height">How tall the cone will be.</param> + /// <param name="subdivAxis">How many subdivisions on the axis.</param> + /// <returns>A new GameObject with a reference to the ProBuilderMesh component.</returns> + public static ProBuilderMesh GenerateCone(PivotLocation pivotType, float radius, float height, int subdivAxis) + { + // template is outer ring - radius refers to outer ring always + Vector3[] template = new Vector3[subdivAxis]; + + for (int i = 0; i < subdivAxis; i++) + { + Vector2 ct = Math.PointInCircumference(radius, i * (360f / subdivAxis), Vector2.zero); + template[i] = new Vector3(ct.x, 0f, ct.y); + } + + List<Vector3> v = new List<Vector3>(); + List<Face> f = new List<Face>(); + + // build sides + for (int i = 0; i < subdivAxis; i++) + { + // side face + v.Add(template[i]); + v.Add((i < subdivAxis - 1) ? template[i + 1] : template[0]); + v.Add(Vector3.up * height); + + // bottom face + v.Add(template[i]); + v.Add((i < subdivAxis - 1) ? template[i + 1] : template[0]); + v.Add(Vector3.zero); + } + + List<Face> sideFaces = new List<Face>(); + for (int i = 0; i < subdivAxis * 6; i += 6) + { + Face face = new Face(new int[3] { i + 2, i + 1, i + 0 }); + f.Add(face); + sideFaces.Add(face); + f.Add(new Face(new int[3] {i + 3, i + 4, i + 5})); + } + + ProBuilderMesh pb = ProBuilderMesh.Create(v.ToArray(), f.ToArray()); + pb.gameObject.name = "Cone"; + pb.SetPivot(pivotType); + pb.unwrapParameters = new UnwrapParameters() + { + packMargin = 30f + }; + + // Set the UVs manually for the side faces, so that they are uniform. + // Calculate the UVs for the first face, then set the others to the same. + var firstFace = sideFaces[0]; + var uv = firstFace.uv; + uv.anchor = AutoUnwrapSettings.Anchor.LowerLeft; + firstFace.uv = uv; + firstFace.manualUV = true; + // Always use up vector for projection of side faces. + // Otherwise the lines in the PB texture end up crooked. + UvUnwrapping.Unwrap(pb, firstFace, projection: Vector3.up); + for (int i = 1; i < sideFaces.Count; i++) + { + var sideFace = sideFaces[i]; + sideFace.manualUV = true; + UvUnwrapping.CopyUVs(pb, firstFace, sideFace); + } + pb.RefreshUV(sideFaces); + return pb; + } + + /// <summary> + /// Create a new arch shape. + /// </summary> + /// <param name="pivotType">Where the shape's pivot will be.</param> + /// <param name="angle">Amount of a circle the arch takes up.</param> + /// <param name="radius">Distance from origin to furthest extent of geometry.</param> + /// <param name="width">Distance from arch top to inner radius.</param> + /// <param name="depth">Depth of arch blocks.</param> + /// <param name="radialCuts">How many blocks compose the arch.</param> + /// <param name="insideFaces">Render inside faces toggle.</param> + /// <param name="outsideFaces">Render outside faces toggle.</param> + /// <param name="frontFaces">Render front faces toggle.</param> + /// <param name="backFaces">Render back faces toggle.</param> + /// <param name="endCaps">If true the faces capping the ends of this arch will be included. Does not apply if radius is 360 degrees.</param> + /// <returns>A new GameObject with a reference to the ProBuilderMesh component.</returns> + public static ProBuilderMesh GenerateArch(PivotLocation pivotType, float angle, float radius, float width, float depth, int radialCuts, bool insideFaces, bool outsideFaces, bool frontFaces, bool backFaces, bool endCaps) + { + Vector2[] templateOut = new Vector2[radialCuts]; + Vector2[] templateIn = new Vector2[radialCuts]; + + for (int i = 0; i < radialCuts; i++) + { + templateOut[i] = Math.PointInCircumference(radius, i * (angle / (radialCuts - 1)), Vector2.zero); + templateIn[i] = Math.PointInCircumference(radius - width, i * (angle / (radialCuts - 1)), Vector2.zero); + } + + List<Vector3> v = new List<Vector3>(); + + Vector2 tmp, tmp2, tmp3, tmp4; + + float y = 0; + + for (int n = 0; n < radialCuts - 1; n++) + { + // outside faces + tmp = templateOut[n]; + tmp2 = n < (radialCuts - 1) ? templateOut[n + 1] : templateOut[n]; + + Vector3[] qvo = new Vector3[4] + { + new Vector3(tmp.x, tmp.y, y), + new Vector3(tmp2.x, tmp2.y, y), + new Vector3(tmp.x, tmp.y, depth), + new Vector3(tmp2.x, tmp2.y, depth) + }; + + // inside faces + tmp = templateIn[n]; + tmp2 = n < (radialCuts - 1) ? templateIn[n + 1] : templateIn[n]; + + Vector3[] qvi = new Vector3[4] + { + new Vector3(tmp2.x, tmp2.y, y), + new Vector3(tmp.x, tmp.y, y), + new Vector3(tmp2.x, tmp2.y, depth), + new Vector3(tmp.x, tmp.y, depth) + }; + + if (outsideFaces) + v.AddRange(qvo); + + if (n != radialCuts - 1 && insideFaces) + v.AddRange(qvi); + + // left side bottom face + if (angle < 360f && endCaps) + { + if (n == 0) + { + v.AddRange( + new Vector3[4] + { + new Vector3(templateOut[n].x, templateOut[n].y, depth), + new Vector3(templateIn[n].x, templateIn[n].y, depth), + new Vector3(templateOut[n].x, templateOut[n].y, y), + new Vector3(templateIn[n].x, templateIn[n].y, y) + }); + } + + // ride side bottom face + if (n == radialCuts - 2) + { + v.AddRange( + new Vector3[4] + { + new Vector3(templateIn[n + 1].x, templateIn[n + 1].y, depth), + new Vector3(templateOut[n + 1].x, templateOut[n + 1].y, depth), + new Vector3(templateIn[n + 1].x, templateIn[n + 1].y, y), + new Vector3(templateOut[n + 1].x, templateOut[n + 1].y, y) + }); + } + } + } + + // build front and back faces + for (int i = 0; i < radialCuts - 1; i++) + { + tmp = templateOut[i]; + tmp2 = (i < radialCuts - 1) ? templateOut[i + 1] : templateOut[i]; + tmp3 = templateIn[i]; + tmp4 = (i < radialCuts - 1) ? templateIn[i + 1] : templateIn[i]; + + // front + Vector3[] tpb = new Vector3[4] + { + new Vector3(tmp.x, tmp.y, depth), + new Vector3(tmp2.x, tmp2.y, depth), + new Vector3(tmp3.x, tmp3.y, depth), + new Vector3(tmp4.x, tmp4.y, depth), + }; + + // back + Vector3[] tpt = new Vector3[4] + { + new Vector3(tmp2.x, tmp2.y, 0f), + new Vector3(tmp.x, tmp.y, 0f), + new Vector3(tmp4.x, tmp4.y, 0f), + new Vector3(tmp3.x, tmp3.y, 0f) + }; + + if (frontFaces) + v.AddRange(tpb); + if (backFaces) + v.AddRange(tpt); + } + + ProBuilderMesh pb = ProBuilderMesh.CreateInstanceWithPoints(v.ToArray()); + + pb.gameObject.name = "Arch"; + pb.SetPivot(pivotType); + + return pb; + } + + /// <summary> + /// Create a new icosphere shape. + /// </summary> + /// <remarks> + /// This method does not build UVs, so after generating BoxProject for UVs. + /// </remarks> + /// <param name="pivotType">Where the shape's pivot will be.</param> + /// <param name="radius">The radius of the sphere.</param> + /// <param name="subdivisions">How many subdivisions to perform.</param> + /// <param name="weldVertices">If false this function will not extract shared indexes. This is useful when showing a preview, where speed of generation is more important than making the shape editable.</param> + /// <param name="manualUvs">For performance reasons faces on icospheres are marked as manual UVs. Pass false to this parameter to force auto unwrapped UVs.</param> + /// <returns>A new GameObject with a reference to the ProBuilderMesh component.</returns> + public static ProBuilderMesh GenerateIcosahedron(PivotLocation pivotType, float radius, int subdivisions, bool weldVertices = true, bool manualUvs = true) + { + // http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html + + Vector3[] v = new Vector3[k_IcosphereTriangles.Length]; + + // Regular Icosahedron - 12 vertices, 20 faces. + for (int i = 0; i < k_IcosphereTriangles.Length; i += 3) + { + v[i + 0] = k_IcosphereVertices[k_IcosphereTriangles[i + 0]].normalized * radius; + v[i + 1] = k_IcosphereVertices[k_IcosphereTriangles[i + 1]].normalized * radius; + v[i + 2] = k_IcosphereVertices[k_IcosphereTriangles[i + 2]].normalized * radius; + } + + for (int i = 0; i < subdivisions; i++) + { + v = SubdivideIcosahedron(v, radius); + } + + Face[] f = new Face[v.Length / 3]; + + Vector3 bottomMostVertexPosition = Vector3.positiveInfinity; + int bottomMostVertexIndex = -1; + + for (int i = 0; i < v.Length; i += 3) + { + f[i / 3] = new Face(new int[3] { i, i + 1, i + 2 }); + f[i / 3].manualUV = manualUvs; + + // Get the bottom most vertex of the whole shape. We'll use it as a pivot point. + for (int j = 0; j < f[i / 3].indexes.Count; ++j) + { + int index = f[i / 3].indexes[j]; + + if (v[index].y < bottomMostVertexPosition.y) + { + bottomMostVertexPosition = v[index]; + bottomMostVertexIndex = index; + } + } + } + + if (!manualUvs) + { + for (int i = 0; i < f.Length; i++) + { + var nrm = Math.Normal(v[f[i].indexesInternal[0]], v[f[i].indexesInternal[1]], v[f[i].indexesInternal[2]]); + var axis = Projection.VectorToProjectionAxis(nrm); + + if (axis == ProjectionAxis.X) + f[i].textureGroup = 2; + else if (axis == ProjectionAxis.Y) + f[i].textureGroup = 3; + else if (axis == ProjectionAxis.Z) + f[i].textureGroup = 4; + else if (axis == ProjectionAxis.XNegative) + f[i].textureGroup = 5; + else if (axis == ProjectionAxis.YNegative) + f[i].textureGroup = 6; + else if (axis == ProjectionAxis.ZNegative) + f[i].textureGroup = 7; + } + } + + GameObject go = new GameObject(); + ProBuilderMesh pb = go.AddComponent<ProBuilderMesh>(); + pb.Clear(); + pb.positionsInternal = v; + pb.facesInternal = f; + + if (!weldVertices) + { + SharedVertex[] si = new SharedVertex[v.Length]; + for (int i = 0; i < si.Length; i++) + si[i] = new SharedVertex(new int[] {i}); + + pb.sharedVerticesInternal = si; + } + else + { + pb.sharedVerticesInternal = SharedVertex.GetSharedVerticesWithPositions(v); + } + + pb.ToMesh(); + pb.Refresh(); + pb.gameObject.name = "Icosphere"; + pb.SetPivot(pivotType, bottomMostVertexIndex); + + pb.unwrapParameters = new UnwrapParameters() + { + packMargin = 30f + }; + + return pb; + } + + // Subdivides a set of vertices (wound as individual triangles) on an icosphere. + // + // /\ /\ + // / \ -> /--\ + // /____\ /_\/_\ + // + static Vector3[] SubdivideIcosahedron(Vector3[] vertices, float radius) + { + Vector3[] v = new Vector3[vertices.Length * 4]; + + int index = 0; + + Vector3 p0 = Vector3.zero, // 5 + p1 = Vector3.zero, // 3 4 + p2 = Vector3.zero, // 0, 1, 2 + p3 = Vector3.zero, + p4 = Vector3.zero, + p5 = Vector3.zero; + + for (int i = 0; i < vertices.Length; i += 3) + { + p0 = vertices[i + 0]; + p2 = vertices[i + 1]; + p5 = vertices[i + 2]; + p1 = ((p0 + p2) * .5f).normalized * radius; + p3 = ((p0 + p5) * .5f).normalized * radius; + p4 = ((p2 + p5) * .5f).normalized * radius; + + v[index++] = p0; + v[index++] = p1; + v[index++] = p3; + + v[index++] = p1; + v[index++] = p2; + v[index++] = p4; + + v[index++] = p1; + v[index++] = p4; + v[index++] = p3; + + v[index++] = p3; + v[index++] = p4; + v[index++] = p5; + } + + return v; + } + + static Vector3[] GetCirclePoints(int segments, float radius, float circumference, Quaternion rotation, float offset) + { + float seg = (float)segments - 1; + + Vector3[] v = new Vector3[(segments - 1) * 2]; + v[0] = new Vector3(Mathf.Cos(((0f / seg) * circumference) * Mathf.Deg2Rad) * radius, Mathf.Sin(((0f / seg) * circumference) * Mathf.Deg2Rad) * radius, 0f); + v[1] = new Vector3(Mathf.Cos(((1f / seg) * circumference) * Mathf.Deg2Rad) * radius, Mathf.Sin(((1f / seg) * circumference) * Mathf.Deg2Rad) * radius, 0f); + + v[0] = rotation * ((v[0] + Vector3.right * offset)); + v[1] = rotation * ((v[1] + Vector3.right * offset)); + + int n = 2; + + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + for (int i = 2; i < segments; i++) + { + float rad = ((i / seg) * circumference) * Mathf.Deg2Rad; + sb.AppendLine(rad.ToString()); + + v[n + 0] = v[n - 1]; + v[n + 1] = rotation * (new Vector3(Mathf.Cos(rad) * radius, Mathf.Sin(rad) * radius, 0f) + Vector3.right * offset); + + n += 2; + } + + return v; + } + + /// <summary> + /// Create a torus mesh. + /// </summary> + /// <param name="pivotType">Where the shape's pivot will be.</param> + /// <param name="rows">The number of horizontal divisions.</param> + /// <param name="columns">The number of vertical divisions.</param> + /// <param name="innerRadius">The distance from center to the inner bound of geometry.</param> + /// <param name="outerRadius">The distance from center to the outer bound of geometry.</param> + /// <param name="smooth">True marks all faces as one smoothing group, false does not.</param> + /// <param name="horizontalCircumference">The circumference of the horizontal in degrees.</param> + /// <param name="verticalCircumference">The circumference of the vertical geometry in degrees.</param> + /// <param name="manualUvs">A torus shape does not unwrap textures well using automatic UVs. To disable this feature and instead use manual UVs, pass true.</param> + /// <returns>A new GameObject with a reference to the ProBuilderMesh component.</returns> + public static ProBuilderMesh GenerateTorus(PivotLocation pivotType, int rows, int columns, float innerRadius, float outerRadius, bool smooth, float horizontalCircumference, float verticalCircumference, bool manualUvs = false) + { + int clampedRows = (int)Mathf.Clamp(rows + 1, 4, 128); + int clampedColumns = (int)Mathf.Clamp(columns + 1, 4, 128); + float clampedRadius = Mathf.Clamp(innerRadius, .01f, 2048f); + float clampedTubeRadius = Mathf.Clamp(outerRadius, .01f, clampedRadius - .001f); + clampedRadius -= clampedTubeRadius; + float clampedHorizontalCircumference = Mathf.Clamp(horizontalCircumference, .01f, 360f); + float clampedVerticalCircumference = Mathf.Clamp(verticalCircumference, .01f, 360f); + + List<Vector3> vertices = new List<Vector3>(); + + int col = clampedColumns - 1; + + Vector3[] cir = GetCirclePoints(clampedRows, clampedTubeRadius, clampedVerticalCircumference, Quaternion.Euler(Vector3.up * 0f * clampedHorizontalCircumference), clampedRadius); + + for (int i = 1; i < clampedColumns; i++) + { + vertices.AddRange(cir); + Quaternion rotation = Quaternion.Euler(Vector3.up * ((i / (float)col) * clampedHorizontalCircumference)); + cir = GetCirclePoints(clampedRows, clampedTubeRadius, clampedVerticalCircumference, rotation, clampedRadius); + vertices.AddRange(cir); + } + + // List<int> ind = new List<int>(); + List<Face> faces = new List<Face>(); + int fc = 0; + + // faces + for (int i = 0; i < (clampedColumns - 1) * 2; i += 2) + { + for (int n = 0; n < clampedRows - 1; n++) + { + int a = (i + 0) * ((clampedRows - 1) * 2) + (n * 2); + int b = (i + 1) * ((clampedRows - 1) * 2) + (n * 2); + + int c = (i + 0) * ((clampedRows - 1) * 2) + (n * 2) + 1; + int d = (i + 1) * ((clampedRows - 1) * 2) + (n * 2) + 1; + + faces.Add(new Face(new int[] { a, b, c, b, d, c })); + faces[fc].smoothingGroup = smooth ? 1 : -1; + faces[fc].manualUV = manualUvs; + + fc++; + } + } + + ProBuilderMesh pb = ProBuilderMesh.Create(vertices.ToArray(), faces.ToArray()); + pb.gameObject.name = "Torus"; + pb.SetPivot(pivotType); + + return pb; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ShapeGenerator.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ShapeGenerator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f3976694dee6dce75b4d6dc8bc5da05289b0e7c6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/ShapeGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 29c44195d73b34ee98215150a8031c2c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SharedVertex.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SharedVertex.cs new file mode 100644 index 0000000000000000000000000000000000000000..c0957068f2725f4071ca35e677678a6598da4087 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SharedVertex.cs @@ -0,0 +1,282 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; +using System.Linq; +using System.Text; +using UnityEngine.Serialization; + +namespace UnityEngine.ProBuilder +{ + /// <inheritdoc /> + /// <summary> + /// Defines associations between vertex positions that are coincident. The indexes stored in this collection correspond to the ProBuilderMesh.positions array. + /// <br /> + /// Coincident vertices are vertices that despite sharing the same coordinate position, are separate entries in the vertex array. + /// </summary> + [Serializable] + public sealed class SharedVertex : ICollection<int> + { + /// <summary> + /// An array of vertex indexes that are coincident. + /// </summary> + [SerializeField] + [FormerlySerializedAs("array")] + [FormerlySerializedAs("m_Vertexes")] + int[] m_Vertices; + + internal int[] arrayInternal + { + get { return m_Vertices; } + } + + /// <summary> + /// Create a new SharedVertex from an int array. + /// </summary> + /// <param name="indexes">The array to copy.</param> + public SharedVertex(IEnumerable<int> indexes) + { + if (indexes == null) + throw new ArgumentNullException("indexes"); + m_Vertices = indexes.ToArray(); + } + + /// <summary> + /// Copy constructor. + /// </summary> + /// <param name="sharedVertex">The array to copy.</param> + public SharedVertex(SharedVertex sharedVertex) + { + if (sharedVertex == null) + throw new ArgumentNullException("sharedVertex"); + m_Vertices = new int[sharedVertex.Count]; + Array.Copy(sharedVertex.m_Vertices, m_Vertices, m_Vertices.Length); + } + + /// <summary> + /// Index accessor. + /// </summary> + /// <param name="i">The index to access.</param> + public int this[int i] + { + get { return m_Vertices[i]; } + set { m_Vertices[i] = value; } + } + + /// <inheritdoc /> + public IEnumerator<int> GetEnumerator() + { + return ((IEnumerable<int>)m_Vertices).GetEnumerator(); + } + + /// <inheritdoc /> + public override string ToString() + { + return m_Vertices.ToString(","); + } + + /// <inheritdoc /> + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// <inheritdoc /> + public void Add(int item) + { + m_Vertices = ArrayUtility.Add(m_Vertices, item); + } + + /// <inheritdoc /> + public void Clear() + { + m_Vertices = new int[0]; + } + + /// <inheritdoc /> + public bool Contains(int item) + { + return Array.IndexOf(m_Vertices, item) > -1; + } + + /// <inheritdoc /> + public void CopyTo(int[] array, int arrayIndex) + { + m_Vertices.CopyTo(array, arrayIndex); + } + + /// <inheritdoc /> + public bool Remove(int item) + { + int ind = Array.IndexOf(m_Vertices, item); + if (ind < 0) + return false; + m_Vertices = m_Vertices.RemoveAt(item); + return true; + } + + /// <inheritdoc /> + public int Count + { + get { return m_Vertices.Length; } + } + + /// <inheritdoc /> + public bool IsReadOnly + { + get { return m_Vertices.IsReadOnly; } + } + + /// <summary> + /// A <see cref="SharedVertex"/> is used to associate discrete vertices that share a common position. A lookup + /// Dictionary provides a fast way to find the index of a <see cref="SharedVertex"/> in the + /// <see cref="ProBuilderMesh.sharedVertices"/> array with a vertex index. + /// </summary> + /// <param name="sharedVertices"> + /// A collection of SharedVertex values. + /// </param> + /// <param name="lookup"> + /// A Dictionary where the Key represents an index in the Mesh positions array, and the + /// Value is the index of it's placement in the sharedVertices array. + /// </param> + public static void GetSharedVertexLookup(IList<SharedVertex> sharedVertices, Dictionary<int, int> lookup) + { + lookup.Clear(); + + for(int i = 0, c = sharedVertices.Count; i < c; i++) + { + foreach (var index in sharedVertices[i]) + { + if (!lookup.ContainsKey(index)) + lookup.Add(index, i); + } + } + } + + internal void ShiftIndexes(int offset) + { + for (int i = 0, c = Count; i < c; i++) + m_Vertices[i] += offset; + } + + /// <summary> + /// Convert a lookup dictionary (<see cref="SharedVertex.GetSharedVertexLookup"/>) back to <see cref="SharedVertex"/>[]. + /// </summary> + /// <param name="lookup">A Dictionary where Key corresponds to a vertex index, and Value to a common index.</param> + /// <returns>A new IntArray[] converted from the lookup dictionary.</returns> + internal static SharedVertex[] ToSharedVertices(IEnumerable<KeyValuePair<int, int>> lookup) + { + if (lookup == null) + return new SharedVertex[0]; + + Dictionary<int, int> map = new Dictionary<int, int>(); + List<List<int>> shared = new List<List<int>>(); + + foreach (var kvp in lookup) + { + if (kvp.Value < 0) + { + shared.Add(new List<int>() { kvp.Key }); + } + else + { + int index = -1; + + if (map.TryGetValue(kvp.Value, out index)) + { + shared[index].Add(kvp.Key); + } + else + { + map.Add(kvp.Value, shared.Count); + shared.Add(new List<int>() { kvp.Key }); + } + } + } + + return ToSharedVertices(shared); + } + + static SharedVertex[] ToSharedVertices(List<List<int>> list) + { + if (list == null) + throw new ArgumentNullException("list"); + SharedVertex[] arr = new SharedVertex[list.Count]; + for (int i = 0; i < arr.Length; i++) + arr[i] = new SharedVertex(list[i]); + return arr; + } + + /// <summary> + /// Create a new array of SharedVertex objects by comparing points in the passed positions collection. + /// </summary> + /// <example> + /// ``` + /// <![CDATA[var mesh = gameObject.AdComponent<ProBuilderMesh>();]]> + /// mesh.SetPositions(myNewPositions); + /// mesh.SetFaces(myNewFaces); + /// mesh.SetSharedIndexes(SharedVertex.GetSharedVerticesWithPositions(myNewPositions)); + /// ``` + /// </example> + /// <param name="positions">A collection of Vector3 positions to be tested for equality.</param> + /// <returns>A new SharedVertex[] where each SharedIndex is a list of indexes that are sharing the same position.</returns> + public static SharedVertex[] GetSharedVerticesWithPositions(IList<Vector3> positions) + { + if (positions == null) + throw new ArgumentNullException("positions"); + + Dictionary<IntVec3, List<int>> sorted = new Dictionary<IntVec3, List<int>>(); + + for (int i = 0; i < positions.Count; i++) + { + List<int> ind; + if (sorted.TryGetValue(positions[i], out ind)) + ind.Add(i); + else + sorted.Add(new IntVec3(positions[i]), new List<int>() { i }); + } + + SharedVertex[] share = new SharedVertex[sorted.Count]; + + int t = 0; + foreach (KeyValuePair<IntVec3, List<int>> kvp in sorted) + share[t++] = new SharedVertex(kvp.Value.ToArray()); + + return share; + } + + internal static SharedVertex[] RemoveAndShift(Dictionary<int, int> lookup, IEnumerable<int> remove) + { + var removedVertices = new List<int>(remove); + removedVertices.Sort(); + return SortedRemoveAndShift(lookup, removedVertices); + } + + internal static SharedVertex[] SortedRemoveAndShift(Dictionary<int, int> lookup, List<int> remove) + { + foreach (int i in remove) + lookup[i] = -1; + + var shared = ToSharedVertices(lookup.Where(x => x.Value > -1)); + + for (int i = 0, c = shared.Length; i < c; i++) + { + for (int n = 0, l = shared[i].Count; n < l; n++) + { + int index = ArrayUtility.NearestIndexPriorToValue(remove, shared[i][n]); + // add 1 because index is zero based + shared[i][n] -= index + 1; + } + } + + return shared; + } + + internal static void SetCoincident(ref Dictionary<int, int> lookup, IEnumerable<int> vertices) + { + int index = lookup.Count; + foreach (var v in vertices) + lookup[v] = index; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SharedVertex.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SharedVertex.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..feaec1d20eb6658f3966aefc4604cef769db2bf4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SharedVertex.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ac8731d7c634e5489628370b54f476c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Shortcut.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Shortcut.cs new file mode 100644 index 0000000000000000000000000000000000000000..a32d1b61aa31d061fdedd6c1a3d4e7a8a5bb5c94 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Shortcut.cs @@ -0,0 +1,142 @@ +#if UNITY_2019_1_OR_NEWER +#define SHORTCUT_MANAGER +#endif + +#if !SHORTCUT_MANAGER +using System; +using UnityEngine; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// ProBuilder shortcuts. + /// </summary> +#if SHORTCUT_MANAGER + [System.Obsolete] +#endif + [Serializable] + sealed class Shortcut + { + public Shortcut(string a, string d, KeyCode k, EventModifiers e) + { + action = a; + description = d; + key = k; + eventModifiers = e; + } + + public string action; + public string description; + public KeyCode key; + public EventModifiers eventModifiers; + + public Shortcut(string str) + { + try + { + string[] split = str.Split('-'); + + action = split[0]; + description = split[1]; + + int t; + + if (int.TryParse(split[2], out t)) + key = (KeyCode)t; + + if (int.TryParse(split[3], out t)) + eventModifiers = (EventModifiers)t; + } + catch + { + Debug.LogWarning("Failed parsing shortcut: " + str); + } + } + + public bool Matches(KeyCode key, EventModifiers modifiers) + { + return this.key == key && this.eventModifiers == modifiers; + } + + public static int IndexOf(Shortcut[] shortcuts, KeyCode k, EventModifiers e) + { + for (int i = 0; i < shortcuts.Length; i++) + { + if (shortcuts[i].key == k && shortcuts[i].eventModifiers == e) + return i; + } + return -1; + } + + /** + * \brief Returns a new Shortcut array containing the default values. + * \returns The default Shortcut array. + */ + public static IEnumerable<Shortcut> DefaultShortcuts() + { + List<Shortcut> shortcuts = new List<Shortcut>(); + + shortcuts.Add(new Shortcut("Escape", "Top Level", KeyCode.Escape, 0)); + shortcuts.Add(new Shortcut("Toggle Geometry Mode", "Geometry Level", KeyCode.G, 0)); + shortcuts.Add(new Shortcut("Toggle Selection Mode", "Toggle Selection Mode. If Toggle Mode Shortcuts is disabled, this shortcut does not apply.", KeyCode.H, 0)); + shortcuts.Add(new Shortcut("Set Trigger", "Sets all selected objects to entity type Trigger.", KeyCode.T, 0)); + shortcuts.Add(new Shortcut("Set Occluder", "Sets all selected objects to entity type Occluder.", KeyCode.O, 0)); + shortcuts.Add(new Shortcut("Set Collider", "Sets all selected objects to entity type Collider.", KeyCode.C, 0)); + shortcuts.Add(new Shortcut("Set Mover", "Sets all selected objects to entity type Mover.", KeyCode.M, 0)); + shortcuts.Add(new Shortcut("Set Detail", "Sets all selected objects to entity type Brush.", KeyCode.B, 0)); + shortcuts.Add(new Shortcut("Toggle Handle Orientation", "Toggles the orientation of the ProBuilder selection handle.", KeyCode.P, 0)); + shortcuts.Add(new Shortcut("Set Pivot", "Center pivot around current selection.", KeyCode.J, EventModifiers.Command)); + shortcuts.Add(new Shortcut("Delete Face", "Deletes all selected faces.", KeyCode.Backspace, EventModifiers.FunctionKey)); + shortcuts.Add(new Shortcut("Vertex Mode", "Enter Vertex editing mode. Automatically swaps to Element level editing.", KeyCode.H, (EventModifiers)0)); + shortcuts.Add(new Shortcut("Edge Mode", "Enter Edge editing mode. Automatically swaps to Element level editing.", KeyCode.J, (EventModifiers)0)); + shortcuts.Add(new Shortcut("Face Mode", "Enter Face editing mode. Automatically swaps to Element level editing.", KeyCode.K, (EventModifiers)0)); + + return shortcuts; + } + + public static IEnumerable<Shortcut> ParseShortcuts(string str) + { + // Initialize Defaults if no string argument passed, or string ain't right + if (str == null || str.Length < 3) + return DefaultShortcuts(); + + string[] split = str.Split('*'); + Shortcut[] shortcuts = new Shortcut[split.Length]; + + for (int i = 0; i < shortcuts.Length; i++) + shortcuts[i] = new Shortcut(split[i]); + + return shortcuts; + } + + public override string ToString() + { + return string.Format("{0}: {1}, {2} ({3})", action, key.ToString(), eventModifiers.ToString(), (int)eventModifiers); + } + + public string Serialize() + { + // lazy sanitize action and description action, description, and key + action = action.Replace("-", " ").Replace("*", ""); + description = description.Replace("-", " ").Replace("*", ""); + string val = action + "-" + description + "-" + (int)key + "-" + (int)eventModifiers; + return val; + } + + public static string ShortcutsToString(Shortcut[] shortcuts) + { + string val = ""; + + for (int i = 0; i < shortcuts.Length; i++) + { + val += shortcuts[i].Serialize(); + + if (i != shortcuts.Length - 1) + val += "*"; + } + return val; + } + } +} +#endif diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Shortcut.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Shortcut.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6eef89aa64caed972deddb4e0787b683b7c4fcc8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Shortcut.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f7416643c114b4cb0a56b828ccee4932 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SimpleTuple.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SimpleTuple.cs new file mode 100644 index 0000000000000000000000000000000000000000..083acdc72c4c0be3f7f1e135a21baa701e8d15ba --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SimpleTuple.cs @@ -0,0 +1,79 @@ +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// A bare-bones Tuple class. Holds 2 items, does not implement equality, comparison, or anything else. + /// </summary> + /// <typeparam name="T1">First element.</typeparam> + /// <typeparam name="T2">Second element.</typeparam> + public struct SimpleTuple<T1, T2> + { + T1 m_Item1; + T2 m_Item2; + + public T1 item1 + { + get { return m_Item1; } + set { m_Item1 = value; } + } + + public T2 item2 + { + get { return m_Item2; } + set { m_Item2 = value; } + } + + public SimpleTuple(T1 item1, T2 item2) + { + m_Item1 = item1; + m_Item2 = item2; + } + + public override string ToString() + { + return string.Format("{0}, {1}", item1.ToString(), item2.ToString()); + } + } + + /// <summary> + /// A bare-bones Tuple class. Holds 3 items, does not implement equality, comparison, or anything else. + /// </summary> + /// <typeparam name="T1"></typeparam> + /// <typeparam name="T2"></typeparam> + /// <typeparam name="T3"></typeparam> + struct SimpleTuple<T1, T2, T3> + { + T1 m_Item1; + T2 m_Item2; + T3 m_Item3; + + public T1 item1 + { + get { return m_Item1; } + set { m_Item1 = value; } + } + + public T2 item2 + { + get { return m_Item2; } + set { m_Item2 = value; } + } + + public T3 item3 + { + get { return m_Item3; } + set { m_Item3 = value; } + } + + public SimpleTuple(T1 item1, T2 item2, T3 item3) + { + m_Item1 = item1; + m_Item2 = item2; + m_Item3 = item3; + } + + public override string ToString() + { + return string.Format("{0}, {1}, {2}", item1.ToString(), item2.ToString(), item3.ToString()); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SimpleTuple.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SimpleTuple.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7a0a06b946d632c17c4b5d4d1e3360a0bc983b4d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/SimpleTuple.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af7cbb59029d2420c960fa64da335888 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Smoothing.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Smoothing.cs new file mode 100644 index 0000000000000000000000000000000000000000..9c2e545d575277500abadb93a3d6dd10465138a9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Smoothing.cs @@ -0,0 +1,187 @@ +using UnityEngine; +using System.Linq; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Utilities for working with smoothing groups. Smoothing groups are how ProBuilder defines hard and soft edges. + /// ProBuilder calculates vertex normals by first calculating the normal for every face, which in turn is applied to each + /// vertex that makes up the face. Afterwards, each vertex normal is averaged with coincident vertices belonging to the + /// same smoothing group. + /// </summary> + public static class Smoothing + { + /// <value> + /// Faces with smoothingGroup = 0 are hard edges. Historically negative values were sometimes also written as hard edges. + /// </value> + internal const int smoothingGroupNone = 0; + + /// <value> + /// Smoothing groups 1-24 are smooth. + /// </value> + internal const int smoothRangeMin = 1; + + /// <value> + /// Smoothing groups 1-24 are smooth. + /// </value> + internal const int smoothRangeMax = 24; + + /// <value> + /// Smoothing groups 25-42 are hard. Note that this is obsolete, and generally hard faces should be marked smoothingGroupNone. + /// </value> + internal const int hardRangeMin = 25; + + /// <value> + /// Smoothing groups 25-42 are hard. Note that this is soon to be obsolete, and generally hard faces should be marked smoothingGroupNone. + /// </value> + internal const int hardRangeMax = 42; + + /// <summary> + /// Get the first available unused smoothing group. + /// </summary> + /// <param name="mesh">The target mesh.</param> + /// <returns>An unused smoothing group.</returns> + public static int GetUnusedSmoothingGroup(ProBuilderMesh mesh) + { + if (mesh == null) + throw new System.ArgumentNullException("mesh"); + + return GetNextUnusedSmoothingGroup(smoothRangeMin, new HashSet<int>(mesh.facesInternal.Select(x => x.smoothingGroup))); + } + + /// <summary> + /// Get the first available smooth group after a specified index. + /// </summary> + /// <param name="start"></param> + /// <param name="used"></param> + /// <returns></returns> + static int GetNextUnusedSmoothingGroup(int start, HashSet<int> used) + { + while (used.Contains(start) && start < int.MaxValue - 1) + { + start++; + + if (start > smoothRangeMax && start < hardRangeMax) + start = hardRangeMax + 1; + } + + return start; + } + + /// <summary> + /// Is the smooth group value considered smooth? + /// </summary> + /// <param name="index">The smoothing group to test.</param> + /// <returns>True if the smoothing group value is smoothed, false if not.</returns> + public static bool IsSmooth(int index) + { + return (index > smoothingGroupNone && (index < hardRangeMin || index > hardRangeMax)); + } + + /// <summary> + /// Generate smoothing groups for a set of faces by comparing adjacent faces with normal differences less than angleThreshold (in degrees). + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="faces">Faces to be considered for smoothing.</param> + /// <param name="angleThreshold">The maximum angle difference in degrees between adjacent face normals for the shared edge to be considered smooth.</param> + public static void ApplySmoothingGroups(ProBuilderMesh mesh, IEnumerable<Face> faces, float angleThreshold) + { + ApplySmoothingGroups(mesh, faces, angleThreshold, null); + } + + internal static void ApplySmoothingGroups(ProBuilderMesh mesh, IEnumerable<Face> faces, float angleThreshold, Vector3[] normals) + { + if (mesh == null || faces == null) + throw new System.ArgumentNullException("mesh"); + + // Reset the selected faces to no smoothing group + bool anySmoothed = false; + + foreach (Face face in faces) + { + if (face.smoothingGroup != smoothingGroupNone) + anySmoothed = true; + + face.smoothingGroup = Smoothing.smoothingGroupNone; + } + + // if a set of normals was not supplied, get a new set of normals + // with no prior smoothing groups applied. + if (normals == null) + { + if (anySmoothed) + mesh.mesh.normals = null; + normals = mesh.GetNormals(); + } + + float threshold = Mathf.Abs(Mathf.Cos(Mathf.Clamp(angleThreshold, 0f, 89.999f) * Mathf.Deg2Rad)); + HashSet<int> used = new HashSet<int>(mesh.facesInternal.Select(x => x.smoothingGroup)); + int group = GetNextUnusedSmoothingGroup(1, used); + HashSet<Face> processed = new HashSet<Face>(); + List<WingedEdge> wings = WingedEdge.GetWingedEdges(mesh, faces, true); + + foreach (WingedEdge wing in wings) + { + // Already part of a group + if (!processed.Add(wing.face)) + continue; + + wing.face.smoothingGroup = group; + + if (FindSoftEdgesRecursive(normals, wing, threshold, processed)) + { + used.Add(group); + group = GetNextUnusedSmoothingGroup(group, used); + } + else + { + wing.face.smoothingGroup = Smoothing.smoothingGroupNone; + } + } + } + + // Walk the perimiter of a wing looking for compatibly smooth connections. Returns true if any match was found, false if not. + static bool FindSoftEdgesRecursive(Vector3[] normals, WingedEdge wing, float angleThreshold, HashSet<Face> processed) + { + bool foundSmoothEdge = false; + + using (var it = new WingedEdgeEnumerator(wing)) + { + while (it.MoveNext()) + { + var border = it.Current; + + if (border.opposite == null) + continue; + + if (border.opposite.face.smoothingGroup == Smoothing.smoothingGroupNone + && IsSoftEdge(normals, border.edge, border.opposite.edge, angleThreshold)) + { + if (processed.Add(border.opposite.face)) + { + foundSmoothEdge = true; + border.opposite.face.smoothingGroup = wing.face.smoothingGroup; + FindSoftEdgesRecursive(normals, border.opposite, angleThreshold, processed); + } + } + } + } + + return foundSmoothEdge; + } + + static bool IsSoftEdge(Vector3[] normals, EdgeLookup left, EdgeLookup right, float threshold) + { + Vector3 lx = normals[left.local.a]; + Vector3 ly = normals[left.local.b]; + Vector3 rx = normals[right.common.a == left.common.a ? right.local.a : right.local.b]; + Vector3 ry = normals[right.common.b == left.common.b ? right.local.b : right.local.a]; + lx.Normalize(); + ly.Normalize(); + rx.Normalize(); + ry.Normalize(); + return Mathf.Abs(Vector3.Dot(lx, rx)) > threshold && Mathf.Abs(Vector3.Dot(ly, ry)) > threshold; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Smoothing.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Smoothing.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..bad2a57ac59931b79a547d3c9472dadb4c64ef16 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Smoothing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 171420d62f80b4556a8833c039a00a3c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Spline.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Spline.cs new file mode 100644 index 0000000000000000000000000000000000000000..83dd354970ee0a84345df73773dbc018a3f8bc61 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Spline.cs @@ -0,0 +1,218 @@ +using UnityEngine; +using System.Collections.Generic; +using System.Linq; + +namespace UnityEngine.ProBuilder +{ + static class Spline + { + /// <summary> + /// Create a new pb_Object by extruding along a bezier spline. + /// </summary> + /// <param name="points">The points making up the bezier spline.</param> + /// <param name="radius">The radius of the extruded mesh tube.</param> + /// <param name="columns">How many columns per segment to create when extruding the mesh.</param> + /// <param name="rows">How many rows the extruded mesh will be composed of.</param> + /// <param name="closeLoop">Should the mesh join at the ends or remain unconnected.</param> + /// <param name="smooth">Are the mesh edges smoothed or hard.</param> + /// <returns>The resulting pb_Object.</returns> + internal static ProBuilderMesh Extrude(IList<BezierPoint> points, + float radius = .5f, + int columns = 32, + int rows = 16, + bool closeLoop = false, + bool smooth = true) + { + ProBuilderMesh pb = null; + Extrude(points, radius, columns, rows, closeLoop, smooth, ref pb); + return pb; + } + + // Update a pb_Object with new geometry from a bezier spline. + internal static void Extrude(IList<BezierPoint> bezierPoints, + float radius, + int columns, + int rows, + bool closeLoop, + bool smooth, + ref ProBuilderMesh target) + { + List<Quaternion> rotations = new List<Quaternion>(); + List<Vector3> positions = GetControlPoints(bezierPoints, columns, closeLoop, rotations); + Extrude(positions, radius, rows, closeLoop, smooth, ref target, rotations); + } + + // Extrapolate a bezier curve to it's control points and segments between. + internal static List<Vector3> GetControlPoints(IList<BezierPoint> bezierPoints, int subdivisionsPerSegment, bool closeLoop, List<Quaternion> rotations) + { + int cols = subdivisionsPerSegment; + int c = bezierPoints.Count; + List<Vector3> positions = new List<Vector3>(cols * c); + + if (rotations != null) + { + rotations.Clear(); + rotations.Capacity = cols * c; + } + + int keyframes = (closeLoop ? c : c - 1); + + for (int i = 0; i < keyframes; i++) + { + int segments_per_keyframe = ((!closeLoop && i >= c - 2) ? cols + 1 : cols); + + for (int n = 0; n < segments_per_keyframe; n++) + { + float s = cols; + + positions.Add(BezierPoint.CubicPosition(bezierPoints[i], bezierPoints[(i + 1) % c], n / s)); + + if (rotations != null) + rotations.Add(Quaternion.Slerp(bezierPoints[i].rotation, bezierPoints[(i + 1) % c].rotation, n / (float)(segments_per_keyframe - 1))); + } + } + + return positions; + } + + // Set mesh geometry by extruding along a set of points. + internal static void Extrude(IList<Vector3> points, + float radius, + int radiusRows, + bool closeLoop, + bool smooth, + ref ProBuilderMesh target, + IList<Quaternion> pointRotations = null) + { + if (points == null || points.Count < 2) + return; + + int cnt = points.Count; + int rows = System.Math.Max(3, radiusRows); + int rowsPlus1 = rows + 1; + int rowsPlus1Times2 = rows * 2; + int vertexCount = ((closeLoop ? cnt : cnt - 1) * 2) * rowsPlus1Times2; + bool vertexCountsMatch = false; // vertexCount == (target == null ? 0 : target.vertexCount); + bool hasPointRotations = pointRotations != null && pointRotations.Count == points.Count; + + Vector3[] positions = new Vector3[vertexCount]; + Face[] faces = vertexCountsMatch ? null : new Face[(closeLoop ? cnt : cnt - 1) * rows]; + + int triangleIndex = 0, faceIndex = 0, vertexIndex = 0; + int segmentCount = (closeLoop ? cnt : cnt - 1); + + for (int i = 0; i < segmentCount; i++) + { + float secant_a, secant_b; + + Quaternion rotation_a = GetRingRotation(points, i, closeLoop, out secant_a); + Quaternion rotation_b = GetRingRotation(points, (i + 1) % cnt, closeLoop, out secant_b); + + if (hasPointRotations) + { + rotation_a = rotation_a * pointRotations[i]; + rotation_b = rotation_b * pointRotations[(i + 1) % cnt]; + } + + Vector3[] ringA = VertexRing(rotation_a, points[i], radius, rowsPlus1); + Vector3[] ringB = VertexRing(rotation_b, points[(i + 1) % cnt], radius, rowsPlus1); + + System.Array.Copy(ringA, 0, positions, vertexIndex, rowsPlus1Times2); + vertexIndex += rowsPlus1Times2; + System.Array.Copy(ringB, 0, positions, vertexIndex, rowsPlus1Times2); + vertexIndex += rowsPlus1Times2; + + if (!vertexCountsMatch) + { + for (int n = 0; n < rowsPlus1Times2; n += 2) + { + faces[faceIndex] = new Face(new int[6] + { + triangleIndex, triangleIndex + 1, triangleIndex + rowsPlus1Times2, + triangleIndex + rowsPlus1Times2, triangleIndex + 1, triangleIndex + rowsPlus1Times2 + 1 + }); + + if (smooth) + faces[faceIndex].smoothingGroup = 2; + + faceIndex++; + triangleIndex += 2; + } + + triangleIndex += rowsPlus1Times2; + } + } + + if (target != null) + { + if (faces != null) + { + target.RebuildWithPositionsAndFaces(positions, faces); + } + else + { + target.positions = positions; + target.ToMesh(); + target.Refresh(RefreshMask.UV | RefreshMask.Colors | RefreshMask.Normals | RefreshMask.Tangents); + } + } + else + { + target = ProBuilderMesh.Create(positions, faces); + } + } + + static Quaternion GetRingRotation(IList<Vector3> points, int i, bool closeLoop, out float secant) + { + int cnt = points.Count; + Vector3 dir; + + if (closeLoop || (i > 0 && i < cnt - 1)) + { + int a = i < 1 ? cnt - 1 : i - 1; + int b = i; + int c = (i + 1) % cnt; + + Vector3 coming = (points[b] - points[a]).normalized; + Vector3 leaving = (points[c] - points[b]).normalized; + + dir = (coming + leaving) * .5f; + + secant = Math.Secant(Vector3.Angle(coming, dir) * Mathf.Deg2Rad); + } + else + { + if (i < 1) + dir = points[i + 1] - points[i]; + else + dir = points[i] - points[i - 1]; + + secant = 1f; + } + + dir.Normalize(); + + if (Math.Approx3(dir, Vector3.up) || Math.Approx3(dir, Vector3.zero)) + return Quaternion.identity; + + return Quaternion.LookRotation(dir); + } + + static Vector3[] VertexRing(Quaternion orientation, Vector3 offset, float radius, int segments) + { + Vector3[] v = new Vector3[segments * 2]; + + for (int i = 0; i < segments; i++) + { + float rad0 = (i / (float)(segments - 1)) * 360f * Mathf.Deg2Rad; + int n = (i + 1) % segments; + float rad1 = (n / (float)(segments - 1)) * 360f * Mathf.Deg2Rad; + + v[i * 2] = offset + (orientation * new Vector3(Mathf.Cos(rad0) * radius, Mathf.Sin(rad0) * radius, 0f)); + v[i * 2 + 1] = offset + (orientation * new Vector3(Mathf.Cos(rad1) * radius, Mathf.Sin(rad1) * radius, 0f)); + } + + return v; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Spline.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Spline.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..32a0157352bf9df0c32be2cb57614b4f9c643dad --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Spline.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eba60849bb2104e85af3d2e25b022196 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Submesh.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Submesh.cs new file mode 100644 index 0000000000000000000000000000000000000000..74f634628f2451cef3823a05379ce77af9ace652 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Submesh.cs @@ -0,0 +1,209 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using UnityEngine; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// A set of indexes and material. + /// </summary> + [Serializable] + public sealed class Submesh + { + [SerializeField] + internal int[] m_Indexes; + + [SerializeField] + internal MeshTopology m_Topology; + + [SerializeField] + internal int m_SubmeshIndex; + + /// <value> + /// Indexes making up this submesh. Can be triangles or quads, check with topology. + /// </value> + public IEnumerable<int> indexes + { + get { return new ReadOnlyCollection<int>(m_Indexes); } + set { m_Indexes = value.ToArray(); } + } + + /// <value> + /// What is the topology (triangles, quads) of this submesh? + /// </value> + public MeshTopology topology + { + get { return m_Topology; } + set { m_Topology = value; } + } + + /// <value> + /// The index in the sharedMaterials array that this submesh aligns with. + /// </value> + public int submeshIndex + { + get { return m_SubmeshIndex; } + set { m_SubmeshIndex = value; } + } + + /// <summary> + /// Create new Submesh. + /// </summary> + /// <param name="submeshIndex">The index of this submesh corresponding to the MeshRenderer.sharedMaterials property.</param> + /// <param name="topology">What topology is this submesh. ProBuilder only recognizes Triangles and Quads.</param> + /// <param name="indexes">The triangles or quads.</param> + public Submesh(int submeshIndex, MeshTopology topology, IEnumerable<int> indexes) + { + if (indexes == null) + throw new ArgumentNullException("indexes"); + + m_Indexes = indexes.ToArray(); + m_Topology = topology; + m_SubmeshIndex = submeshIndex; + } + + /// <summary> + /// Create new Submesh from a mesh, submesh index, and material. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="subMeshIndex">Which submesh to read from.</param> + public Submesh(Mesh mesh, int subMeshIndex) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + m_Indexes = mesh.GetIndices(subMeshIndex); + m_Topology = mesh.GetTopology(subMeshIndex); + m_SubmeshIndex = subMeshIndex; + } + + public override string ToString() + { + return string.Format("{0}, {1}, {2}", m_SubmeshIndex, m_Topology.ToString(), m_Indexes != null ? m_Indexes.Length.ToString() : "0"); + } + + internal static int GetSubmeshCount(ProBuilderMesh mesh) + { + int count = 0; + foreach (var face in mesh.facesInternal) + count = Math.Max(count, face.submeshIndex); + return count + 1; + } + + /// <summary> + /// Create submeshes from a set of faces. Currently only Quads and Triangles are supported. + /// </summary> + /// <param name="faces">The faces to be included in the resulting submeshes. This method handles groups submeshes by comparing the material property of each face.</param> + /// <param name="submeshCount">How many submeshes to create. Usually you will just want to pass the length of the MeshRenderer.sharedMaterials array.</param> + /// <param name="preferredTopology">Should the resulting submeshes be in quads or triangles. Note that quads are not guaranteed; ie, some faces may not be able to be represented in quad format and will fall back on triangles.</param> + /// <returns>An array of Submeshes.</returns> + /// <exception cref="NotImplementedException">Thrown in the event that a MeshTopology other than Quads or Triangles is passed.</exception> + public static Submesh[] GetSubmeshes(IEnumerable<Face> faces, int submeshCount, MeshTopology preferredTopology = MeshTopology.Triangles) + { + if (preferredTopology != MeshTopology.Triangles && preferredTopology != MeshTopology.Quads) + throw new System.NotImplementedException("Currently only Quads and Triangles are supported."); + + if (faces == null) + throw new ArgumentNullException("faces"); + + bool wantsQuads = preferredTopology == MeshTopology.Quads; + + List<int>[] quads = wantsQuads ? new List<int>[submeshCount] : null; + List<int>[] tris = new List<int>[submeshCount]; + int maxSubmeshIndex = submeshCount - 1; + + for (int i = 0; i < submeshCount; i++) + { + if (wantsQuads) + quads[i] = new List<int>(); + + tris[i] = new List<int>(); + } + + foreach (var face in faces) + { + if (face.indexesInternal == null || face.indexesInternal.Length < 1) + continue; + + int submeshIndex = Math.Clamp(face.submeshIndex, 0, maxSubmeshIndex); + + if (wantsQuads && face.IsQuad()) + quads[submeshIndex].AddRange(face.ToQuad()); + else + tris[submeshIndex].AddRange(face.indexesInternal); + } + + var submeshes = new Submesh[submeshCount]; + + switch (preferredTopology) + { + case MeshTopology.Triangles: + { + for (int submeshIndex = 0; submeshIndex < submeshCount; submeshIndex++) + submeshes[submeshIndex] = new Submesh(submeshIndex, MeshTopology.Triangles, tris[submeshIndex]); + break; + } + + case MeshTopology.Quads: + { + for (int submeshIndex = 0; submeshIndex < submeshCount; submeshIndex++) + { + // If a submesh is a mix of triangles and quads, fall back to triangles. + if (tris[submeshIndex].Count > 0) + { + var tri = tris[submeshIndex]; + var quad = quads[submeshIndex]; + + int triCount = tri.Count; + int quadCount = quad.Count; + + int[] triangles = new int[triCount + ((quadCount / 4) * 6)]; + + for (int i = 0; i < triCount; i++) + triangles[i] = tri[i]; + + for (int i = 0, n = triCount; i < quadCount; i += 4, n += 6) + { + triangles[n + 0] = quad[i + 0]; + triangles[n + 1] = quad[i + 1]; + triangles[n + 2] = quad[i + 2]; + + triangles[n + 3] = quad[i + 2]; + triangles[n + 4] = quad[i + 3]; + triangles[n + 5] = quad[i + 0]; + } + + submeshes[submeshIndex] = new Submesh(submeshIndex, MeshTopology.Triangles, triangles); + } + else + { + submeshes[submeshIndex] = new Submesh(submeshIndex, MeshTopology.Quads, quads[submeshIndex]); + } + } + break; + } + } + + return submeshes; + } + + internal static void MapFaceMaterialsToSubmeshIndex(ProBuilderMesh mesh) + { + var materials = mesh.renderer.sharedMaterials; + var submeshCount = materials.Length; + + foreach (var face in mesh.facesInternal) + { +#pragma warning disable 618 + if (face.material == null) + continue; + var index = Array.IndexOf(materials, face.material); + face.submeshIndex = Math.Clamp(index, 0, submeshCount - 1); + face.material = null; +#pragma warning restore 618 + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Submesh.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Submesh.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4c65205ccf3719254c80ac7c8395df5bdd7b901c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Submesh.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 088aa88f028654951ae27130f3556aae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Transform2D.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Transform2D.cs new file mode 100644 index 0000000000000000000000000000000000000000..4d22bb0a97fc53e18aaba165881ff9fa97d3a48d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Transform2D.cs @@ -0,0 +1,45 @@ +using UnityEngine; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// A Transform class limited to 2D + /// </summary> + sealed class Transform2D + { + /// <summary> + /// Position in 2D space. + /// </summary> + public Vector2 position; + + /// <summary> + /// Rotation in degrees. + /// </summary> + public float rotation; + + /// <summary> + /// Scale in 2D space. + /// </summary> + public Vector2 scale; + + public Transform2D(Vector2 position, float rotation, Vector2 scale) + { + this.position = position; + this.rotation = rotation; + this.scale = scale; + } + + public Vector2 TransformPoint(Vector2 p) + { + p += position; + p.RotateAroundPoint(p, rotation); + p.ScaleAroundPoint(p, scale); + return p; + } + + public override string ToString() + { + return "T: " + position + "\nR: " + rotation + PreferenceKeys.DEGREE_SYMBOL + "\nS: " + scale; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Transform2D.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Transform2D.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a09138d869296c0e774156ad3cd589db08cc3c31 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Transform2D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23bf380528bb14b24942fe9d5e5a3abc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/TransformUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/TransformUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..c24cd96b1119d688cf24028d61224583e59a5f74 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/TransformUtility.cs @@ -0,0 +1,122 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Helper functions for working with transforms. + /// </summary> + public static class TransformUtility + { + static Dictionary<Transform, Transform[]> s_ChildStack = new Dictionary<Transform, Transform[]>(); + + /// <summary> + /// Unparent all children from a transform, saving them for later re-parenting (see ReparentChildren). + /// </summary> + /// <param name="t"></param> + internal static void UnparentChildren(Transform t) + { + Transform[] children = new Transform[t.childCount]; + + for (int i = t.childCount - 1; i >= 0; --i) + { + Transform child = t.GetChild(i); + children[i] = child; + child.SetParent(null, true); + } + + s_ChildStack.Add(t, children); + } + + /// <summary> + /// Re-parent all children to a transform. Must have called UnparentChildren prior. + /// </summary> + /// <param name="t"></param> + internal static void ReparentChildren(Transform t) + { + Transform[] children; + + if (s_ChildStack.TryGetValue(t, out children)) + { + foreach (Transform c in children) + c.SetParent(t, true); + + s_ChildStack.Remove(t); + } + } + + /// <summary> + /// Transform a vertex into world space. + /// </summary> + /// <param name="transform">The transform to apply.</param> + /// <param name="vertex">A model space vertex.</param> + /// <returns>A new vertex in world coordinate space.</returns> + public static Vertex TransformVertex(this Transform transform, Vertex vertex) + { + var v = new Vertex(); + + if (vertex.HasArrays(MeshArrays.Position)) + v.position = transform.TransformPoint(vertex.position); + + if (vertex.HasArrays(MeshArrays.Color)) + v.color = vertex.color; + + if (vertex.HasArrays(MeshArrays.Normal)) + v.normal = transform.TransformDirection(vertex.normal); + + if (vertex.HasArrays(MeshArrays.Tangent)) + v.tangent = transform.rotation * vertex.tangent; + + if (vertex.HasArrays(MeshArrays.Texture0)) + v.uv0 = vertex.uv0; + + if (vertex.HasArrays(MeshArrays.Texture1)) + v.uv2 = vertex.uv2; + + if (vertex.HasArrays(MeshArrays.Texture2)) + v.uv3 = vertex.uv3; + + if (vertex.HasArrays(MeshArrays.Texture3)) + v.uv4 = vertex.uv4; + + return v; + } + + /// <summary> + /// Transform a vertex from world space to local space. + /// </summary> + /// <param name="transform">The transform to apply.</param> + /// <param name="vertex">A world space vertex.</param> + /// <returns>A new vertex in transform coordinate space.</returns> + public static Vertex InverseTransformVertex(this Transform transform, Vertex vertex) + { + var v = new Vertex(); + + if (vertex.HasArrays(MeshArrays.Position)) + v.position = transform.InverseTransformPoint(vertex.position); + + if (vertex.HasArrays(MeshArrays.Color)) + v.color = vertex.color; + + if (vertex.HasArrays(MeshArrays.Normal)) + v.normal = transform.InverseTransformDirection(vertex.normal); + + if (vertex.HasArrays(MeshArrays.Tangent)) + v.tangent = transform.InverseTransformDirection(vertex.tangent); + + if (vertex.HasArrays(MeshArrays.Texture0)) + v.uv0 = vertex.uv0; + + if (vertex.HasArrays(MeshArrays.Texture1)) + v.uv2 = vertex.uv2; + + if (vertex.HasArrays(MeshArrays.Texture2)) + v.uv3 = vertex.uv3; + + if (vertex.HasArrays(MeshArrays.Texture3)) + v.uv4 = vertex.uv4; + + return v; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/TransformUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/TransformUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1bb98a503bd87f1b7208b92b07c22febb2bc8a70 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/TransformUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b2fe48040b5714c059f9d4a7796cafd7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Triangle.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Triangle.cs new file mode 100644 index 0000000000000000000000000000000000000000..6bbafef017390d9c51d2b0f2d834e8e48d07872a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Triangle.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + [Serializable] + struct Triangle : IEquatable<Triangle> + { + [SerializeField] + int m_A; + + [SerializeField] + int m_B; + + [SerializeField] + int m_C; + + public int a + { + get { return m_A; } + } + + public int b + { + get { return m_B; } + } + + public int c + { + get { return m_C; } + } + + public IEnumerable<int> indices + { + get { return new[] { m_A, m_B, m_C }; } + } + + public Triangle(int a, int b, int c) + { + m_A = a; + m_B = b; + m_C = c; + } + + public bool Equals(Triangle other) + { + return m_A == other.a && m_B == other.b && m_C == other.c; + } + + public override bool Equals(object obj) + { + return obj is Triangle other && Equals(other); + } + + public override int GetHashCode() + { + unchecked + { + var hashCode = m_A; + hashCode = (hashCode * 397) ^ m_B; + hashCode = (hashCode * 397) ^ m_C; + return hashCode; + } + } + + public bool IsAdjacent(Triangle other) + { + return other.ContainsEdge(new Edge(a, b)) + || other.ContainsEdge(new Edge(b, c)) + || other.ContainsEdge(new Edge(c, a)); + } + + bool ContainsEdge(Edge edge) + { + if (new Edge(a, b) == edge) + return true; + if (new Edge(b, c) == edge) + return true; + return new Edge(c, a) == edge; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Triangle.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Triangle.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f2382adf37767feb1fdba3c5341aa39e99c808a2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Triangle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fcbb190e55f214989942c67a845676cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/TriggerBehaviour.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/TriggerBehaviour.cs new file mode 100644 index 0000000000000000000000000000000000000000..834ee8ce0ae0b8468b939609ac46fbc6190c2c38 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/TriggerBehaviour.cs @@ -0,0 +1,50 @@ +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// A MonoBehaviour that automatically enables and disables the parent GameObject on exiting and enterin playmode, respectively. + /// </summary> + [DisallowMultipleComponent] + sealed class TriggerBehaviour : EntityBehaviour + { + public override void Initialize() + { + var collision = gameObject.GetComponent<Collider>(); + + if (!collision) + collision = gameObject.AddComponent<MeshCollider>(); + + var meshCollider = collision as MeshCollider; + + if (meshCollider) + meshCollider.convex = true; + + collision.isTrigger = true; + + SetMaterial(BuiltinMaterials.triggerMaterial); + + var r = GetComponent<Renderer>(); + + if (r != null) + r.hideFlags = HideFlags.DontSaveInBuild; + } + + public override void OnEnterPlayMode() + { + var r = GetComponent<Renderer>(); + + if (r != null) + r.enabled = false; + } + + public override void OnSceneLoaded(Scene scene, LoadSceneMode mode) + { + var r = GetComponent<Renderer>(); + + if (r != null) + r.enabled = false; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/TriggerBehaviour.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/TriggerBehaviour.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..024c22bebfa50a0939e33da16e5ae01954ae6722 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/TriggerBehaviour.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4eb4b507ff52e40f58f68c2065e32636 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/UnwrapParameters.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/UnwrapParameters.cs new file mode 100644 index 0000000000000000000000000000000000000000..058915769b4c7ef7a81675d5a43cd10d4f4af487 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/UnwrapParameters.cs @@ -0,0 +1,102 @@ +using UnityEngine; +using UnityEngine.Serialization; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Store UV2 unwrapping parameters. + /// </summary> + [System.Serializable] + public sealed class UnwrapParameters + { + internal const float k_HardAngle = 88f; + internal const float k_PackMargin = 20f; + internal const float k_AngleError = 8f; + internal const float k_AreaError = 15f; + + [Tooltip("Angle between neighbor triangles that will generate seam.")] + [Range(1f, 180f)] + [SerializeField] + [FormerlySerializedAs("hardAngle")] + float m_HardAngle = k_HardAngle; + + [Tooltip("Measured in pixels, assuming mesh will cover an entire 1024x1024 lightmap.")] + [Range(1f, 64f)] + [SerializeField] + [FormerlySerializedAs("packMargin")] + float m_PackMargin = k_PackMargin; + + [Tooltip("Measured in percents. Angle error measures deviation of UV angles from geometry angles. Area error " + + "measures deviation of UV triangles area from geometry triangles if they were uniformly scaled.")] + [Range(1f, 75f)] + [SerializeField] + [FormerlySerializedAs("angleError")] + float m_AngleError = k_AngleError; + + [Range(1f, 75f)] + [SerializeField] + [FormerlySerializedAs("areaError")] + float m_AreaError = k_AreaError; + + /// <value> + /// Angle between neighbor triangles that will generate seam. + /// </value> + public float hardAngle { get { return m_HardAngle; } set { m_HardAngle = value; } } + + /// <value> + /// Measured in pixels, assuming mesh will cover an entire 1024x1024 lightmap. + /// </value> + public float packMargin { get { return m_PackMargin; } set { m_PackMargin = value; } } + + /// <value> + /// Measured in percents. Angle error measures deviation of UV angles from geometry angles. Area error measures + /// deviation of UV triangles area from geometry triangles if they were uniformly scaled. + /// </value> + public float angleError { get { return m_AngleError; } set { m_AngleError = value; } } + + /// <value> + /// Does... something. + /// </value> + public float areaError { get { return m_AreaError; } set { m_AreaError = value; } } + + public UnwrapParameters() + { + Reset(); + } + + /// <summary> + /// Copy constructor. + /// </summary> + /// <param name="other">The UnwrapParameters to copy properties from.</param> + public UnwrapParameters(UnwrapParameters other) + { + if (other == null) + throw new System.ArgumentNullException("other"); + + hardAngle = other.hardAngle; + packMargin = other.packMargin; + angleError = other.angleError; + areaError = other.areaError; + } + + /// <summary> + /// Reset the unwrap parameters to default values. + /// </summary> + public void Reset() + { + hardAngle = k_HardAngle; + packMargin = k_PackMargin; + angleError = k_AngleError; + areaError = k_AreaError; + } + + public override string ToString() + { + return string.Format("hardAngle: {0}\npackMargin: {1}\nangleError: {2}\nareaError: {3}", + hardAngle, + packMargin, + angleError, + areaError); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/UnwrapParameters.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/UnwrapParameters.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9e652bcb79447ecc143fb89b5bcf4cb13d53a373 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/UnwrapParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ea5ea1cec364039478a51772a04726e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VectorHash.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VectorHash.cs new file mode 100644 index 0000000000000000000000000000000000000000..03246d3602af744a4f8fd94189873183580a4f4d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VectorHash.cs @@ -0,0 +1,80 @@ +using System; +using UnityEngine; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Fuzzy hashing functions for vector types. Exists as a shortcut to create hashcodes for Vector3 in the style of + /// IntVector3 without the overhead of casting. + /// </summary> + static class VectorHash + { + public const float FltCompareResolution = 1000f; + + static int HashFloat(float f) + { + ulong u = (ulong)(f * FltCompareResolution); + return (int)(u % int.MaxValue); + } + + /// <summary> + /// Return the rounded hashcode for a vector2 + /// </summary> + /// <param name="v"></param> + /// <returns></returns> + public static int GetHashCode(Vector2 v) + { + // http://stackoverflow.com/questions/263400/what-is-the-best-algorithm-for-an-overridden-system-object-gethashcode/263416#263416 + int hash = 27; + + unchecked + { + hash = hash * 29 + HashFloat(v.x); + hash = hash * 29 + HashFloat(v.y); + } + + return hash; + } + + /// <summary> + /// Return the hashcode for a vector3 without first converting it to pb_IntVec3. + /// </summary> + /// <param name="v"></param> + /// <returns></returns> + public static int GetHashCode(Vector3 v) + { + // http://stackoverflow.com/questions/263400/what-is-the-best-algorithm-for-an-overridden-system-object-gethashcode/263416#263416 + int hash = 27; + + unchecked + { + hash = hash * 29 + HashFloat(v.x); + hash = hash * 29 + HashFloat(v.y); + hash = hash * 29 + HashFloat(v.z); + } + + return hash; + } + + /// <summary> + /// Return the hashcode for a vector3 without first converting it to pb_IntVec3. + /// </summary> + /// <param name="v"></param> + /// <returns></returns> + public static int GetHashCode(Vector4 v) + { + // http://stackoverflow.com/questions/263400/what-is-the-best-algorithm-for-an-overridden-system-object-gethashcode/263416#263416 + int hash = 27; + + unchecked + { + hash = hash * 29 + HashFloat(v.x); + hash = hash * 29 + HashFloat(v.y); + hash = hash * 29 + HashFloat(v.z); + hash = hash * 29 + HashFloat(v.w); + } + + return hash; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VectorHash.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VectorHash.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..58315fc6a95ba83956b6df95ca4ba678347ea344 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VectorHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4e5c2292defe6460881281240c415f3d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VectorMask.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VectorMask.cs new file mode 100644 index 0000000000000000000000000000000000000000..6b7d486ceae2858a04845af2c4c4577369e454ef --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VectorMask.cs @@ -0,0 +1,240 @@ +using System; + +namespace UnityEngine.ProBuilder +{ + struct Vector2Mask + { + const byte X = 1 << 0; + const byte Y = 1 << 1; + + public static readonly Vector2Mask XY = new Vector2Mask(X | Y); + + byte m_Mask; + + public float x + { + get { return (m_Mask & X) == X ? 1f : 0f; } + } + + public float y + { + get { return (m_Mask & Y) == Y ? 1f : 0f; } + } + + public Vector2Mask(Vector3 v, float epsilon = float.Epsilon) + { + m_Mask = 0x0; + + if (Mathf.Abs(v.x) > epsilon) + m_Mask |= X; + if (Mathf.Abs(v.y) > epsilon) + m_Mask |= Y; + } + + public Vector2Mask(byte mask) + { + m_Mask = mask; + } + + public static implicit operator Vector2(Vector2Mask mask) + { + return new Vector2(mask.x, mask.y); + } + + public static implicit operator Vector2Mask(Vector2 v) + { + return new Vector2Mask(v); + } + + public static Vector2Mask operator|(Vector2Mask left, Vector2Mask right) + { + return new Vector2Mask((byte)(left.m_Mask | right.m_Mask)); + } + + public static Vector2Mask operator&(Vector2Mask left, Vector2Mask right) + { + return new Vector2Mask((byte)(left.m_Mask & right.m_Mask)); + } + + public static Vector2Mask operator^(Vector2Mask left, Vector2Mask right) + { + return new Vector2Mask((byte)(left.m_Mask ^ right.m_Mask)); + } + + public static Vector2 operator*(Vector2Mask mask, float value) + { + return new Vector2(mask.x * value, mask.y * value); + } + } + + struct Vector3Mask : IEquatable<Vector3Mask> + { + const byte X = 1 << 0; + const byte Y = 1 << 1; + const byte Z = 1 << 2; + + public static readonly Vector3Mask XYZ = new Vector3Mask(X | Y | Z); + + byte m_Mask; + + public float x + { + get { return (m_Mask & X) == X ? 1f : 0f; } + } + + public float y + { + get { return (m_Mask & Y) == Y ? 1f : 0f; } + } + + public float z + { + get { return (m_Mask & Z) == Z ? 1f : 0f; } + } + + public Vector3Mask(Vector3 v, float epsilon = float.Epsilon) + { + m_Mask = 0x0; + + if (Mathf.Abs(v.x) > epsilon) + m_Mask |= X; + if (Mathf.Abs(v.y) > epsilon) + m_Mask |= Y; + if (Mathf.Abs(v.z) > epsilon) + m_Mask |= Z; + } + + public Vector3Mask(byte mask) + { + m_Mask = mask; + } + + public override string ToString() + { + return string.Format("{{{0}, {1}, {2}}}", x, y, z); + } + + /// <summary> + /// The number of toggled axes. + /// </summary> + public int active + { + get + { + int count = 0; + if ((m_Mask & X) > 0) + count++; + if ((m_Mask & Y) > 0) + count++; + if ((m_Mask & Z) > 0) + count++; + return count; + } + } + + public static implicit operator Vector3(Vector3Mask mask) + { + return new Vector3(mask.x, mask.y, mask.z); + } + + public static explicit operator Vector3Mask(Vector3 v) + { + return new Vector3Mask(v); + } + + public static Vector3Mask operator|(Vector3Mask left, Vector3Mask right) + { + return new Vector3Mask((byte)(left.m_Mask | right.m_Mask)); + } + + public static Vector3Mask operator&(Vector3Mask left, Vector3Mask right) + { + return new Vector3Mask((byte)(left.m_Mask & right.m_Mask)); + } + + public static Vector3Mask operator^(Vector3Mask left, Vector3Mask right) + { + return new Vector3Mask((byte)(left.m_Mask ^ right.m_Mask)); + } + + public static Vector3 operator*(Vector3Mask mask, float value) + { + return new Vector3(mask.x * value, mask.y * value, mask.z * value); + } + + public static Vector3 operator*(Vector3Mask mask, Vector3 value) + { + return new Vector3(mask.x * value.x, mask.y * value.y, mask.z * value.z); + } + + public static Vector3 operator*(Quaternion rotation, Vector3Mask mask) + { + var active = mask.active; + + if (active > 2) + return mask; + + var rotated = (rotation * (Vector3)mask).Abs(); + + if (active > 1) + { + return new Vector3( + rotated.x > rotated.y || rotated.x > rotated.z ? 1 : 0, + rotated.y > rotated.x || rotated.y > rotated.z ? 1 : 0, + rotated.z > rotated.x || rotated.z > rotated.y ? 1 : 0 + ); + } + + return new Vector3( + rotated.x > rotated.y && rotated.x > rotated.z ? 1 : 0, + rotated.y > rotated.z && rotated.y > rotated.x ? 1 : 0, + rotated.z > rotated.x && rotated.z > rotated.y ? 1 : 0); + } + + public static bool operator ==(Vector3Mask left, Vector3Mask right) + { + return left.m_Mask == right.m_Mask; + } + + public static bool operator !=(Vector3Mask left, Vector3Mask right) + { + return !(left == right); + } + + public float this[int i] + { + get + { + if(i < 0 || i > 2) + throw new IndexOutOfRangeException(); + + return (1 & (m_Mask >> i)) * 1f; + } + + set + { + if(i < 0 || i > 2) + throw new IndexOutOfRangeException(); + + m_Mask &= (byte) ~(1 << i); + m_Mask |= (byte) ((value > 0f ? 1 : 0) << i); + } + } + + public bool Equals(Vector3Mask other) + { + return m_Mask == other.m_Mask; + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + return obj is Vector3Mask && Equals((Vector3Mask) obj); + } + + public override int GetHashCode() + { + return m_Mask.GetHashCode(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VectorMask.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VectorMask.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c7860a22bcd7a7d1879f13e0aacb170095538482 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VectorMask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: efd5cca1cb8dabd418d215e770d3fb01 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Vertex.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Vertex.cs new file mode 100644 index 0000000000000000000000000000000000000000..c4b21a00aa1fb65827481c856cbc86a5792540ac --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Vertex.cs @@ -0,0 +1,923 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System; +using System.Collections.ObjectModel; +using System.Text; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// Holds information about a single vertex, and provides methods for averaging between many. + /// <remarks>All values are optional. Where not present a default value will be substituted if necessary.</remarks> + /// </summary> + /// <inheritdoc cref="IEquatable{T}"/> + [Serializable] + public sealed class Vertex : IEquatable<Vertex> + { + [SerializeField] + Vector3 m_Position; + + [SerializeField] + Color m_Color; + + [SerializeField] + Vector3 m_Normal; + + [SerializeField] + Vector4 m_Tangent; + + [SerializeField] + Vector2 m_UV0; + + [SerializeField] + Vector2 m_UV2; + + [SerializeField] + Vector4 m_UV3; + + [SerializeField] + Vector4 m_UV4; + + [SerializeField] + MeshArrays m_Attributes; + + /// <value> + /// The position in model space. + /// </value> + /// <seealso cref="ProBuilderMesh.positions"/> + public Vector3 position + { + get { return m_Position; } + set + { + hasPosition = true; + m_Position = value; + } + } + + /// <value> + /// Vertex color. + /// </value> + /// <seealso cref="ProBuilderMesh.colors"/> + public Color color + { + get { return m_Color; } + set + { + hasColor = true; + m_Color = value; + } + } + + /// <value> + /// Unit vector normal. + /// </value> + /// <seealso cref="ProBuilderMesh.GetNormals"/> + public Vector3 normal + { + get { return m_Normal; } + set + { + hasNormal = true; + m_Normal = value; + } + } + + /// <value> + /// Vertex tangent (sometimes called binormal). + /// </value> + /// <seealso cref="ProBuilderMesh.tangents"/> + public Vector4 tangent + { + get { return m_Tangent; } + set + { + hasTangent = true; + m_Tangent = value; + } + } + + /// <value> + /// UV 0 channel. Also called textures. + /// </value> + /// <seealso cref="ProBuilderMesh.textures"/> + /// <seealso cref="ProBuilderMesh.GetUVs"/> + public Vector2 uv0 + { + get { return m_UV0; } + set + { + hasUV0 = true; + m_UV0 = value; + } + } + + /// <value> + /// UV 2 channel. + /// </value> + /// <seealso cref="ProBuilderMesh.GetUVs"/> + public Vector2 uv2 + { + get { return m_UV2; } + set + { + hasUV2 = true; + m_UV2 = value; + } + } + + /// <value> + /// UV 3 channel. + /// </value> + /// <seealso cref="ProBuilderMesh.GetUVs"/> + public Vector4 uv3 + { + get { return m_UV3; } + set + { + hasUV3 = true; + m_UV3 = value; + } + } + + /// <value> + /// UV 4 channel. + /// </value> + /// <seealso cref="ProBuilderMesh.GetUVs"/> + public Vector4 uv4 + { + get { return m_UV4; } + set + { + hasUV4 = true; + m_UV4 = value; + } + } + + internal MeshArrays attributes + { + get { return m_Attributes; } + } + + /// <summary> + /// Find if a vertex attribute has been set. + /// </summary> + /// <param name="attribute">The attribute or attributes to test for.</param> + /// <returns>True if this vertex has the specified attributes set, false if they are default values.</returns> + public bool HasArrays(MeshArrays attribute) + { + return (m_Attributes & attribute) == attribute; + } + + bool hasPosition + { + get { return (m_Attributes & MeshArrays.Position) == MeshArrays.Position; } + set { m_Attributes = value ? (m_Attributes | MeshArrays.Position) : (m_Attributes & ~(MeshArrays.Position)); } + } + + bool hasColor + { + get { return (m_Attributes & MeshArrays.Color) == MeshArrays.Color; } + set { m_Attributes = value ? (m_Attributes | MeshArrays.Color) : (m_Attributes & ~(MeshArrays.Color)); } + } + + bool hasNormal + { + get { return (m_Attributes & MeshArrays.Normal) == MeshArrays.Normal; } + set { m_Attributes = value ? (m_Attributes | MeshArrays.Normal) : (m_Attributes & ~(MeshArrays.Normal)); } + } + + bool hasTangent + { + get { return (m_Attributes & MeshArrays.Tangent) == MeshArrays.Tangent; } + set { m_Attributes = value ? (m_Attributes | MeshArrays.Tangent) : (m_Attributes & ~(MeshArrays.Tangent)); } + } + + bool hasUV0 + { + get { return (m_Attributes & MeshArrays.Texture0) == MeshArrays.Texture0; } + set { m_Attributes = value ? (m_Attributes | MeshArrays.Texture0) : (m_Attributes & ~(MeshArrays.Texture0)); } + } + + bool hasUV2 + { + get { return (m_Attributes & MeshArrays.Texture1) == MeshArrays.Texture1; } + set { m_Attributes = value ? (m_Attributes | MeshArrays.Texture1) : (m_Attributes & ~(MeshArrays.Texture1)); } + } + + bool hasUV3 + { + get { return (m_Attributes & MeshArrays.Texture2) == MeshArrays.Texture2; } + set { m_Attributes = value ? (m_Attributes | MeshArrays.Texture2) : (m_Attributes & ~(MeshArrays.Texture2)); } + } + + bool hasUV4 + { + get { return (m_Attributes & MeshArrays.Texture3) == MeshArrays.Texture3; } + set { m_Attributes = value ? (m_Attributes | MeshArrays.Texture3) : (m_Attributes & ~(MeshArrays.Texture3)); } + } + + /// <summary> + /// Initialize a Vertex with no values. + /// </summary> + public Vertex() + { + } + + /// <summary> + /// Compare Vertex to an object. + /// </summary> + /// <param name="obj">The object to compare this vertex to.</param> + /// <returns>True if obj is a Vertex, and equal to this.</returns> + public override bool Equals(object obj) + { + return obj is Vertex && Equals((Vertex)obj); + } + + /// <summary> + /// Compare the equality of vertex values. Uses the @"UnityEngine.ProBuilder.Math" Approx functions to compare float values. + /// </summary> + /// <param name="other">The vertex to compare.</param> + /// <returns>True if all values are the same (within float.Epsilon).</returns> + public bool Equals(Vertex other) + { + if (ReferenceEquals(other, null)) + return false; + + return Math.Approx3(m_Position, other.m_Position) && + Math.ApproxC(m_Color, other.m_Color) && + Math.Approx3(m_Normal, other.m_Normal) && + Math.Approx4(m_Tangent, other.m_Tangent) && + Math.Approx2(m_UV0, other.m_UV0) && + Math.Approx2(m_UV2, other.m_UV2) && + Math.Approx4(m_UV3, other.m_UV3) && + Math.Approx4(m_UV4, other.m_UV4); + } + + public bool Equals(Vertex other, MeshArrays mask) + { + if (ReferenceEquals(other, null)) + return false; + + return ((mask & MeshArrays.Position) != MeshArrays.Position || Math.Approx3(m_Position, other.m_Position)) && + ((mask & MeshArrays.Color) != MeshArrays.Color || Math.ApproxC(m_Color, other.m_Color)) && + ((mask & MeshArrays.Normal) != MeshArrays.Normal || Math.Approx3(m_Normal, other.m_Normal)) && + ((mask & MeshArrays.Tangent) != MeshArrays.Tangent || Math.Approx4(m_Tangent, other.m_Tangent)) && + ((mask & MeshArrays.Texture0) != MeshArrays.Texture0 || Math.Approx2(m_UV0, other.m_UV0)) && + ((mask & MeshArrays.Texture1) != MeshArrays.Texture1 || Math.Approx2(m_UV2, other.m_UV2)) && + ((mask & MeshArrays.Texture2) != MeshArrays.Texture2 || Math.Approx4(m_UV3, other.m_UV3)) && + ((mask & MeshArrays.Texture3) != MeshArrays.Texture3 || Math.Approx4(m_UV4, other.m_UV4)); + } + + /// <summary> + /// Creates a new hashcode from position, uv0, and normal. + /// </summary> + /// <returns>A hashcode for this object.</returns> + public override int GetHashCode() + { + // 783 is 27 * 29 + unchecked + { + int hash = 783 + VectorHash.GetHashCode(position); + hash = hash * 29 + VectorHash.GetHashCode(uv0); + hash = hash * 31 + VectorHash.GetHashCode(normal); + return hash; + } + } + + /// <summary> + /// Copy constructor. + /// </summary> + /// <param name="vertex">The Vertex to copy field data from.</param> + public Vertex(Vertex vertex) + { + if (vertex == null) + throw new ArgumentNullException("vertex"); + + m_Position = vertex.m_Position; + hasPosition = vertex.hasPosition; + m_Color = vertex.m_Color; + hasColor = vertex.hasColor; + m_UV0 = vertex.m_UV0; + hasUV0 = vertex.hasUV0; + m_Normal = vertex.m_Normal; + hasNormal = vertex.hasNormal; + m_Tangent = vertex.m_Tangent; + hasTangent = vertex.hasTangent; + m_UV2 = vertex.m_UV2; + hasUV2 = vertex.hasUV2; + m_UV3 = vertex.m_UV3; + hasUV3 = vertex.hasUV3; + m_UV4 = vertex.m_UV4; + hasUV4 = vertex.hasUV4; + } + + /// <inheritdoc cref="Vertex.Equals(Vertex)"/> + public static bool operator==(Vertex a, Vertex b) + { + if (ReferenceEquals(a, b)) + return true; + + if (object.ReferenceEquals(a, null) || object.ReferenceEquals(b, null)) + return false; + + return a.Equals(b); + } + + /// <summary> + /// Test for inequality. + /// </summary> + /// <param name="a">Left parameter.</param> + /// <param name="b">Right parameter.</param> + /// <returns>True if a does not equal b.</returns> + public static bool operator!=(Vertex a, Vertex b) + { + return !(a == b); + } + + /// <summary> + /// Addition is performed component-wise for every property. + /// </summary> + /// <remarks> + /// Color, normal, and tangent values are not normalized within this function. If you are expecting unit vectors, make sure to normalize these properties. + /// </remarks> + /// <param name="a">Left side addition parameter.</param> + /// <param name="b">Right side addition parameter.</param> + /// <returns>A new Vertex with the sum of a + b.</returns> + public static Vertex operator+(Vertex a, Vertex b) + { + return Add(a, b); + } + + /// <summary> + /// Addition is performed component-wise for every property. + /// </summary> + /// <remarks> + /// Color, normal, and tangent values are not normalized within this function. If you are expecting unit vectors, make sure to normalize these properties. + /// </remarks> + /// <param name="a">Left side addition parameter.</param> + /// <param name="b">Right side addition parameter.</param> + /// <returns>A new Vertex with the sum of a + b.</returns> + public static Vertex Add(Vertex a, Vertex b) + { + Vertex v = new Vertex(a); + v.Add(b); + return v; + } + + /// <summary> + /// Addition is performed component-wise for every property. + /// </summary> + /// <remarks> + /// Color, normal, and tangent values are not normalized within this function. If you are expecting unit vectors, make sure to normalize these properties. + /// </remarks> + /// <param name="b">Right side addition parameter.</param> + public void Add(Vertex b) + { + if (b == null) + throw new ArgumentNullException("b"); + + m_Position += b.m_Position; + m_Color += b.m_Color; + m_Normal += b.m_Normal; + m_Tangent += b.m_Tangent; + m_UV0 += b.m_UV0; + m_UV2 += b.m_UV2; + m_UV3 += b.m_UV3; + m_UV4 += b.m_UV4; + } + + /// <summary> + /// Subtraction is performed component-wise for every property. + /// </summary> + /// <remarks> + /// Color, normal, and tangent values are not normalized within this function. If you are expecting unit vectors, make sure to normalize these properties. + /// </remarks> + /// <param name="a">Left side subtraction parameter.</param> + /// <param name="b">Right side subtraction parameter.</param> + /// <returns>A new Vertex with the sum of a - b.</returns> + public static Vertex operator-(Vertex a, Vertex b) + { + return Subtract(a, b); + } + + /// <summary> + /// Subtraction is performed component-wise for every property. + /// </summary> + /// <remarks> + /// Color, normal, and tangent values are not normalized within this function. If you are expecting unit vectors, make sure to normalize these properties. + /// </remarks> + /// <param name="a">Left side subtraction parameter.</param> + /// <param name="b">Right side subtraction parameter.</param> + /// <returns>A new Vertex with the sum of a - b.</returns> + public static Vertex Subtract(Vertex a, Vertex b) + { + var c = new Vertex(a); + c.Subtract(b); + return c; + } + + /// <summary> + /// Subtraction is performed component-wise for every property. + /// </summary> + /// <remarks> + /// Color, normal, and tangent values are not normalized within this function. If you are expecting unit vectors, make sure to normalize these properties. + /// </remarks> + /// <param name="b">Right side subtraction parameter.</param> + public void Subtract(Vertex b) + { + if (b == null) + throw new ArgumentNullException("b"); + + m_Position -= b.m_Position; + m_Color -= b.m_Color; + m_Normal -= b.m_Normal; + m_Tangent -= b.m_Tangent; + m_UV0 -= b.m_UV0; + m_UV2 -= b.m_UV2; + m_UV3 -= b.m_UV3; + m_UV4 -= b.m_UV4; + } + + /// <summary> + /// Multiplication is performed component-wise for every property. + /// </summary> + /// <remarks> + /// Color, normal, and tangent values are not normalized within this function. If you are expecting unit vectors, make sure to normalize these properties. + /// </remarks> + /// <param name="a">Left side multiplication parameter.</param> + /// <param name="value">Right side multiplication parameter.</param> + /// <returns>A new Vertex with the sum of a * b.</returns> + public static Vertex operator*(Vertex a, float value) + { + return Multiply(a, value); + } + + /// <summary> + /// Multiplication is performed component-wise for every property. + /// </summary> + /// <param name="a">Left side multiplication parameter.</param> + /// <param name="value">Right side multiplication parameter.</param> + /// <returns>A new Vertex with the sum of a * b.</returns> + public static Vertex Multiply(Vertex a, float value) + { + Vertex v = new Vertex(a); + v.Multiply(value); + return v; + } + + /// <summary> + /// Multiplication is performed component-wise for every property. + /// </summary> + /// <remarks> + /// Color, normal, and tangent values are not normalized within this function. If you are expecting unit vectors, make sure to normalize these properties. + /// </remarks> + /// <param name="value">Right side multiplication parameter.</param> + public void Multiply(float value) + { + m_Position *= value; + m_Color *= value; + m_Normal *= value; + m_Tangent *= value; + m_UV0 *= value; + m_UV2 *= value; + m_UV3 *= value; + m_UV4 *= value; + } + + /// <summary> + /// Division is performed component-wise for every property. + /// </summary> + /// <remarks> + /// Color, normal, and tangent values are not normalized within this function. If you are expecting unit vectors, make sure to normalize these properties. + /// </remarks> + /// <param name="a">Left side division parameter.</param> + /// <param name="value">Right side division parameter.</param> + /// <returns>A new Vertex with the sum of a / b.</returns> + public static Vertex operator/(Vertex a, float value) + { + return Divide(a, value); + } + + /// <summary> + /// Division is performed component-wise for every property. + /// </summary> + /// <remarks> + /// Color, normal, and tangent values are not normalized within this function. If you are expecting unit vectors, make sure to normalize these properties. + /// </remarks> + /// <param name="a">Left side division parameter.</param> + /// <param name="value">Right side division parameter.</param> + /// <returns>A new Vertex with the sum of a / b.</returns> + public static Vertex Divide(Vertex a, float value) + { + Vertex v = new Vertex(a); + v.Divide(value); + return v; + } + + /// <summary> + /// Division is performed component-wise for every property. + /// </summary> + /// <remarks> + /// Color, normal, and tangent values are not normalized within this function. If you are expecting unit vectors, make sure to normalize these properties. + /// </remarks> + /// <param name="value">Right side Division parameter.</param> + public void Divide(float value) + { + m_Position /= value; + m_Color /= value; + m_Normal /= value; + m_Tangent /= value; + m_UV0 /= value; + m_UV2 /= value; + m_UV3 /= value; + m_UV4 /= value; + } + + /// <summary> + /// Normalize all vector values in place. + /// </summary> + public void Normalize() + { + m_Position.Normalize(); + Vector4 color4 = m_Color; + color4.Normalize(); + m_Color = color4; + m_Normal.Normalize(); + m_Tangent.Normalize(); + m_UV0.Normalize(); + m_UV2.Normalize(); + m_UV3.Normalize(); + m_UV4.Normalize(); + } + + /// <summary> + /// ToString override that prints every available property. + /// </summary> + /// <param name="args">An optional string argument that is provided to the component ToString calls.</param> + /// <returns>A string with the values of all set properties.</returns> + public string ToString(string args = null) + { + StringBuilder sb = new StringBuilder(); + if (hasPosition) sb.AppendLine("position: " + m_Position.ToString(args)); + if (hasColor) sb.AppendLine("color: " + m_Color.ToString(args)); + if (hasNormal) sb.AppendLine("normal: " + m_Normal.ToString(args)); + if (hasTangent) sb.AppendLine("tangent: " + m_Tangent.ToString(args)); + if (hasUV0) sb.AppendLine("uv0: " + m_UV0.ToString(args)); + if (hasUV2) sb.AppendLine("uv2: " + m_UV2.ToString(args)); + if (hasUV3) sb.AppendLine("uv3: " + m_UV3.ToString(args)); + if (hasUV4) sb.AppendLine("uv4: " + m_UV4.ToString(args)); + return sb.ToString(); + } + + /// <summary> + /// Allocate and fill all attribute arrays. This method will fill all arrays, regardless of whether or not real data populates the values (check what attributes a Vertex contains with HasAttribute()). + /// </summary> + /// <remarks> + /// If you are using this function to rebuild a mesh, use SetMesh instead. SetMesh handles setting null arrays where appropriate for you. + /// </remarks> + /// <seealso cref="SetMesh"/> + /// <param name="vertices">The source vertices.</param> + /// <param name="position">A new array of the vertex position values.</param> + /// <param name="color">A new array of the vertex color values.</param> + /// <param name="uv0">A new array of the vertex uv0 values.</param> + /// <param name="normal">A new array of the vertex normal values.</param> + /// <param name="tangent">A new array of the vertex tangent values.</param> + /// <param name="uv2">A new array of the vertex uv2 values.</param> + /// <param name="uv3">A new array of the vertex uv3 values.</param> + /// <param name="uv4">A new array of the vertex uv4 values.</param> + public static void GetArrays( + IList<Vertex> vertices, + out Vector3[] position, + out Color[] color, + out Vector2[] uv0, + out Vector3[] normal, + out Vector4[] tangent, + out Vector2[] uv2, + out List<Vector4> uv3, + out List<Vector4> uv4) + { + GetArrays(vertices, out position, out color, out uv0, out normal, out tangent, out uv2, out uv3, out uv4, MeshArrays.All); + } + + /// <summary> + /// Allocate and fill the requested attribute arrays. + /// </summary> + /// <remarks> + /// If you are using this function to rebuild a mesh, use SetMesh instead. SetMesh handles setting null arrays where appropriate for you. + /// </remarks> + /// <seealso cref="SetMesh"/> + /// <param name="vertices">The source vertices.</param> + /// <param name="position">A new array of the vertex position values if requested by the attributes parameter, or null.</param> + /// <param name="color">A new array of the vertex color values if requested by the attributes parameter, or null.</param> + /// <param name="uv0">A new array of the vertex uv0 values if requested by the attributes parameter, or null.</param> + /// <param name="normal">A new array of the vertex normal values if requested by the attributes parameter, or null.</param> + /// <param name="tangent">A new array of the vertex tangent values if requested by the attributes parameter, or null.</param> + /// <param name="uv2">A new array of the vertex uv2 values if requested by the attributes parameter, or null.</param> + /// <param name="uv3">A new array of the vertex uv3 values if requested by the attributes parameter, or null.</param> + /// <param name="uv4">A new array of the vertex uv4 values if requested by the attributes parameter, or null.</param> + /// <param name="attributes">A flag with the MeshAttributes requested.</param> + /// <seealso cref="HasArrays"/> + public static void GetArrays( + IList<Vertex> vertices, + out Vector3[] position, + out Color[] color, + out Vector2[] uv0, + out Vector3[] normal, + out Vector4[] tangent, + out Vector2[] uv2, + out List<Vector4> uv3, + out List<Vector4> uv4, + MeshArrays attributes) + { + if (vertices == null) + throw new ArgumentNullException("vertices"); + + int vc = vertices.Count; + var first = vc < 1 ? new Vertex() : vertices[0]; + + bool hasPosition = ((attributes & MeshArrays.Position) == MeshArrays.Position) && first.hasPosition; + bool hasColor = ((attributes & MeshArrays.Color) == MeshArrays.Color) && first.hasColor; + bool hasUv0 = ((attributes & MeshArrays.Texture0) == MeshArrays.Texture0) && first.hasUV0; + bool hasNormal = ((attributes & MeshArrays.Normal) == MeshArrays.Normal) && first.hasNormal; + bool hasTangent = ((attributes & MeshArrays.Tangent) == MeshArrays.Tangent) && first.hasTangent; + bool hasUv2 = ((attributes & MeshArrays.Texture1) == MeshArrays.Texture1) && first.hasUV2; + bool hasUv3 = ((attributes & MeshArrays.Texture2) == MeshArrays.Texture2) && first.hasUV3; + bool hasUv4 = ((attributes & MeshArrays.Texture3) == MeshArrays.Texture3) && first.hasUV4; + + position = hasPosition ? new Vector3[vc] : null; + color = hasColor ? new Color[vc] : null; + uv0 = hasUv0 ? new Vector2[vc] : null; + normal = hasNormal ? new Vector3[vc] : null; + tangent = hasTangent ? new Vector4[vc] : null; + uv2 = hasUv2 ? new Vector2[vc] : null; + uv3 = hasUv3 ? new List<Vector4>(vc) : null; + uv4 = hasUv4 ? new List<Vector4>(vc) : null; + + for (int i = 0; i < vc; i++) + { + if (hasPosition) position[i] = vertices[i].m_Position; + if (hasColor) color[i] = vertices[i].m_Color; + if (hasUv0) uv0[i] = vertices[i].m_UV0; + if (hasNormal) normal[i] = vertices[i].m_Normal; + if (hasTangent) tangent[i] = vertices[i].m_Tangent; + if (hasUv2) uv2[i] = vertices[i].m_UV2; + if (hasUv3) uv3.Add(vertices[i].m_UV3); + if (hasUv4) uv4.Add(vertices[i].m_UV4); + } + } + + /// <summary> + /// Replace mesh values with vertex array. Mesh is cleared during this function, so be sure to set the triangles after calling. + /// </summary> + /// <param name="mesh">The target mesh.</param> + /// <param name="vertices">The vertices to replace the mesh attributes with.</param> + public static void SetMesh(Mesh mesh, IList<Vertex> vertices) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (vertices == null) + throw new ArgumentNullException("vertices"); + + Vector3[] positions = null; + Color[] colors = null; + Vector2[] uv0s = null; + Vector3[] normals = null; + Vector4[] tangents = null; + Vector2[] uv2s = null; + List<Vector4> uv3s = null; + List<Vector4> uv4s = null; + + GetArrays(vertices, out positions, + out colors, + out uv0s, + out normals, + out tangents, + out uv2s, + out uv3s, + out uv4s); + + mesh.Clear(); + + Vertex first = vertices[0]; + + if (first.hasPosition) mesh.vertices = positions; + if (first.hasColor) mesh.colors = colors; + if (first.hasUV0) mesh.uv = uv0s; + if (first.hasNormal) mesh.normals = normals; + if (first.hasTangent) mesh.tangents = tangents; + if (first.hasUV2) mesh.uv2 = uv2s; +#if !UNITY_4_7 && !UNITY_5_0 + if (first.hasUV3) + if (uv3s != null) + mesh.SetUVs(2, uv3s); + if (first.hasUV4) + if (uv4s != null) + mesh.SetUVs(3, uv4s); +#endif + } + + /// <summary> + /// Average all vertices to a single vertex. + /// </summary> + /// <param name="vertices">A list of vertices.</param> + /// <param name="indexes">If indexes is null, all vertices will be averaged. If indexes is provided, only the vertices referenced by the indexes array are averaged.</param> + /// <returns>An averaged vertex value.</returns> + public static Vertex Average(IList<Vertex> vertices, IList<int> indexes = null) + { + if (vertices == null) + throw new ArgumentNullException("vertices"); + + Vertex v = new Vertex(); + + int vertexCount = indexes != null ? indexes.Count : vertices.Count; + + int positionCount = 0, + colorCount = 0, + uv0Count = 0, + normalCount = 0, + tangentCount = 0, + uv2Count = 0, + uv3Count = 0, + uv4Count = 0; + + for (int i = 0; i < vertexCount; i++) + { + int index = indexes == null ? i : indexes[i]; + + + if (vertices[index].hasPosition) + { + positionCount++; + v.m_Position += vertices[index].m_Position; + } + + if (vertices[index].hasColor) + { + colorCount++; + v.m_Color += vertices[index].m_Color; + } + + if (vertices[index].hasUV0) + { + uv0Count++; + v.m_UV0 += vertices[index].m_UV0; + } + + if (vertices[index].hasNormal) + { + normalCount++; + v.m_Normal += vertices[index].m_Normal; + } + + if (vertices[index].hasTangent) + { + tangentCount++; + v.m_Tangent += vertices[index].m_Tangent; + } + + if (vertices[index].hasUV2) + { + uv2Count++; + v.m_UV2 += vertices[index].m_UV2; + } + + if (vertices[index].hasUV3) + { + uv3Count++; + v.m_UV3 += vertices[index].m_UV3; + } + + if (vertices[index].hasUV4) + { + uv4Count++; + v.m_UV4 += vertices[index].m_UV4; + } + } + + if (positionCount > 0) + { + v.hasPosition = true; + v.m_Position *= (1f / positionCount); + } + + if (colorCount > 0) + { + v.hasColor = true; + v.m_Color *= (1f / colorCount); + } + + if (uv0Count > 0) + { + v.hasUV0 = true; + v.m_UV0 *= (1f / uv0Count); + } + + + if (normalCount > 0) + { + v.hasNormal = true; + v.m_Normal *= (1f / normalCount); + } + + if (tangentCount > 0) + { + v.hasTangent = true; + v.m_Tangent *= (1f / tangentCount); + } + + if (uv2Count > 0) + { + v.hasUV2 = true; + v.m_UV2 *= (1f / uv2Count); + } + + if (uv3Count > 0) + { + v.hasUV3 = true; + v.m_UV3 *= (1f / uv3Count); + } + + if (uv4Count > 0) + { + v.hasUV4 = true; + v.m_UV4 *= (1f / uv4Count); + } + + return v; + } + + /// <summary> + /// Linearly interpolate between two vertices. + /// </summary> + /// <param name="x">Left parameter.</param> + /// <param name="y">Right parameter.</param> + /// <param name="weight">The weight of the interpolation. 0 is fully x, 1 is fully y.</param> + /// <returns>A new vertex interpolated by weight between x and y.</returns> + public static Vertex Mix(Vertex x, Vertex y, float weight) + { + if (x == null || y == null) + throw new ArgumentNullException("x", "Mix does accept null vertices."); + + float i = 1f - weight; + + Vertex v = new Vertex(); + + v.m_Position = x.m_Position * i + y.m_Position * weight; + + if (x.hasColor && y.hasColor) + v.m_Color = x.m_Color * i + y.m_Color * weight; + else if (x.hasColor) + v.m_Color = x.m_Color; + else if (y.hasColor) + v.m_Color = y.m_Color; + + if (x.hasNormal && y.hasNormal) + v.m_Normal = x.m_Normal * i + y.m_Normal * weight; + else if (x.hasNormal) + v.m_Normal = x.m_Normal; + else if (y.hasNormal) + v.m_Normal = y.m_Normal; + + if (x.hasTangent && y.hasTangent) + v.m_Tangent = x.m_Tangent * i + y.m_Tangent * weight; + else if (x.hasTangent) + v.m_Tangent = x.m_Tangent; + else if (y.hasTangent) + v.m_Tangent = y.m_Tangent; + + if (x.hasUV0 && y.hasUV0) + v.m_UV0 = x.m_UV0 * i + y.m_UV0 * weight; + else if (x.hasUV0) + v.m_UV0 = x.m_UV0; + else if (y.hasUV0) + v.m_UV0 = y.m_UV0; + + if (x.hasUV2 && y.hasUV2) + v.m_UV2 = x.m_UV2 * i + y.m_UV2 * weight; + else if (x.hasUV2) + v.m_UV2 = x.m_UV2; + else if (y.hasUV2) + v.m_UV2 = y.m_UV2; + + if (x.hasUV3 && y.hasUV3) + v.m_UV3 = x.m_UV3 * i + y.m_UV3 * weight; + else if (x.hasUV3) + v.m_UV3 = x.m_UV3; + else if (y.hasUV3) + v.m_UV3 = y.m_UV3; + + if (x.hasUV4 && y.hasUV4) + v.m_UV4 = x.m_UV4 * i + y.m_UV4 * weight; + else if (x.hasUV4) + v.m_UV4 = x.m_UV4; + else if (y.hasUV4) + v.m_UV4 = y.m_UV4; + + return v; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Vertex.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Vertex.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c811b2232798d672b026179de7bc495db9387d5b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/Vertex.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c5b58425874c468e91bd42508d26f0b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VertexPositioning.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VertexPositioning.cs new file mode 100644 index 0000000000000000000000000000000000000000..c379fe332e7857a4d1b3480842b5d43229b19638 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VertexPositioning.cs @@ -0,0 +1,204 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// A set of commonly used functions for modifying mesh positions. + /// </summary> + public static class VertexPositioning + { + static List<int> s_CoincidentVertices = new List<int>(); + + /// <summary> + /// Get a copy of a mesh positions array transformed into world coordinates. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <returns>An array containing all vertex positions in world space.</returns> + public static Vector3[] VerticesInWorldSpace(this ProBuilderMesh mesh) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + int len = mesh.vertexCount; + Vector3[] worldPoints = new Vector3[len]; + Vector3[] localPoints = mesh.positionsInternal; + + for (int i = 0; i < len; i++) + worldPoints[i] = mesh.transform.TransformPoint(localPoints[i]); + + return worldPoints; + } + + /// <summary> + /// Translate a set of vertices with a world space offset. + /// <br /> + /// Unlike most other mesh operations, this function applies the mesh positions to both ProBuilderMesh and the UnityEngine.Mesh. + /// </summary> + /// <param name="mesh">The mesh to be affected.</param> + /// <param name="indexes">A set of triangles pointing to the vertex positions that are to be affected.</param> + /// <param name="offset">The offset to apply in world coordinates.</param> + public static void TranslateVerticesInWorldSpace(this ProBuilderMesh mesh, int[] indexes, Vector3 offset) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + mesh.TranslateVerticesInWorldSpace(indexes, offset, 0f, false); + } + + /// <summary> + /// Translate a set of vertices with a world space offset. + /// <br /> + /// Unlike most other mesh operations, this function applies the mesh positions to both ProBuilderMesh and the UnityEngine.Mesh. + /// </summary> + /// <param name="mesh"></param> + /// <param name="indexes">A distinct list of vertex indexes.</param> + /// <param name="offset">The direction and magnitude to translate selectedTriangles, in world space.</param> + /// <param name="snapValue">If > 0 snap each vertex to the nearest on-grid point in world space.</param> + /// <param name="snapAxisOnly">If true vertices will only be snapped along the active axis.</param> + internal static void TranslateVerticesInWorldSpace(this ProBuilderMesh mesh, + int[] indexes, + Vector3 offset, + float snapValue, + bool snapAxisOnly) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + int i = 0; + + mesh.GetCoincidentVertices(indexes, s_CoincidentVertices); + + Matrix4x4 w2l = mesh.transform.worldToLocalMatrix; + + Vector3 localOffset = w2l * offset; + + Vector3[] verts = mesh.positionsInternal; + + // Snaps to world grid + if (Mathf.Abs(snapValue) > Mathf.Epsilon) + { + Matrix4x4 l2w = mesh.transform.localToWorldMatrix; + var mask = snapAxisOnly ? new Vector3Mask(offset, Math.handleEpsilon) : Vector3Mask.XYZ; + + for (i = 0; i < s_CoincidentVertices.Count; i++) + { + var v = l2w.MultiplyPoint3x4(verts[s_CoincidentVertices[i]] + localOffset); + verts[s_CoincidentVertices[i]] = w2l.MultiplyPoint3x4(ProBuilderSnapping.SnapValue(v, ((Vector3)mask) * snapValue)); + } + } + else + { + for (i = 0; i < s_CoincidentVertices.Count; i++) + verts[s_CoincidentVertices[i]] += localOffset; + } + + // don't bother calling a full ToMesh() here because we know for certain that the vertices and msh.vertices arrays are equal in length + mesh.positionsInternal = verts; + mesh.mesh.vertices = verts; + } + + /// <summary> + /// Translate a set of vertices with an offset provided in local (model) coordinates. + /// <br /> + /// Unlike most other mesh operations, this function applies the mesh positions to both ProBuilderMesh and the UnityEngine.Mesh. + /// </summary> + /// <param name="mesh">The mesh to be affected.</param> + /// <param name="indexes">A set of triangles pointing to the vertex positions that are to be affected.</param> + /// <param name="offset"></param> + public static void TranslateVertices(this ProBuilderMesh mesh, IEnumerable<int> indexes, Vector3 offset) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + mesh.GetCoincidentVertices(indexes, s_CoincidentVertices); + TranslateVerticesInternal(mesh, s_CoincidentVertices, offset); + } + + /// <summary> + /// Translate a set of vertices with an offset provided in local (model) coordinates. + /// <br /> + /// Unlike most other mesh operations, this function applies the mesh positions to both ProBuilderMesh and the UnityEngine.Mesh. + /// </summary> + /// <param name="mesh">The mesh to be affected.</param> + /// <param name="edges">A set of edges that are to be affected.</param> + /// <param name="offset"></param> + public static void TranslateVertices(this ProBuilderMesh mesh, IEnumerable<Edge> edges, Vector3 offset) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + mesh.GetCoincidentVertices(edges, s_CoincidentVertices); + TranslateVerticesInternal(mesh, s_CoincidentVertices, offset); + } + + /// <summary> + /// Translate a set of vertices with an offset provided in local (model) coordinates. + /// <br /> + /// Unlike most other mesh operations, this function applies the mesh positions to both ProBuilderMesh and the UnityEngine.Mesh. + /// </summary> + /// <param name="mesh">The mesh to be affected.</param> + /// <param name="faces">A set of faces that are to be affected.</param> + /// <param name="offset"></param> + public static void TranslateVertices(this ProBuilderMesh mesh, IEnumerable<Face> faces, Vector3 offset) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + mesh.GetCoincidentVertices(faces, s_CoincidentVertices); + TranslateVerticesInternal(mesh, s_CoincidentVertices, offset); + } + + static void TranslateVerticesInternal(ProBuilderMesh mesh, IEnumerable<int> indices, Vector3 offset) + { + Vector3[] verts = mesh.positionsInternal; + + for (int i = 0, c = s_CoincidentVertices.Count; i < c; i++) + verts[s_CoincidentVertices[i]] += offset; + + // don't bother calling a full ToMesh() here because we know for certain that the vertices and msh.vertices arrays are equal in length + mesh.mesh.vertices = verts; + } + + /// <summary> + /// Given a shared vertex index (index of the triangle in the sharedIndexes array), move all vertices to new position. + /// Position is in model space coordinates. + /// <br /><br /> + /// Use @"UnityEngine.ProBuilder.ProBuilderMesh.sharedIndexes" and IntArrayUtility.IndexOf to get a shared (or common) index. + /// </summary> + /// <param name="mesh">The target mesh.</param> + /// <param name="sharedVertexHandle">The shared (or common) index to set the vertex position of.</param> + /// <param name="position">The new position in model coordinates.</param> + public static void SetSharedVertexPosition(this ProBuilderMesh mesh, int sharedVertexHandle, Vector3 position) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + Vector3[] v = mesh.positionsInternal; + + foreach (var index in mesh.sharedVerticesInternal[sharedVertexHandle]) + v[index] = position; + + mesh.positionsInternal = v; + mesh.mesh.vertices = v; + } + + /// <summary> + /// Set a collection of mesh attributes with a Vertex. + /// <br /><br /> + /// Use @"UnityEngine.ProBuilder.ProBuilderMesh.sharedIndexes" and IntArrayUtility.IndexOf to get a shared (or common) index. + /// </summary> + /// <param name="mesh"></param> + /// <param name="sharedVertexHandle"></param> + /// <param name="vertex"></param> + internal static void SetSharedVertexValues(this ProBuilderMesh mesh, int sharedVertexHandle, Vertex vertex) + { + Vertex[] vertices = mesh.GetVertices(); + + foreach (var index in mesh.sharedVerticesInternal[sharedVertexHandle]) + vertices[index] = vertex; + + mesh.SetVertices(vertices); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VertexPositioning.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VertexPositioning.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d6d6be31d474053a35ea8ec736df624f7dd01b8f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/VertexPositioning.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 943eceaffe7b13b43bc1b1c129082f62 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/WingedEdge.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/WingedEdge.cs new file mode 100644 index 0000000000000000000000000000000000000000..579db79652a0c39d22b5f9edea5a5fa38cd97194 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/WingedEdge.cs @@ -0,0 +1,393 @@ +using UnityEngine; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace UnityEngine.ProBuilder +{ + /// <summary> + /// A winged-edge data structure holds references to an edge, the previous and next edge in it's triangle, it's connected face, and the opposite edge (common). + /// </summary> + /// <example> + /// ``` + /// . / (face) / + /// . prev / / next + /// . / edge / + /// . /_ _ _ _ _ _ _/ + /// . |- - - - - - -| + /// . | opposite | + /// . | | + /// . | | + /// . | | + /// ``` + /// </example> + /// <inheritdoc cref="IEquatable{T}" /> + /// <inheritdoc cref="IEnumerable{T}" /> + public sealed class WingedEdge : IEquatable<WingedEdge> + { + static readonly Dictionary<Edge, WingedEdge> k_OppositeEdgeDictionary = new Dictionary<Edge, WingedEdge>(); + + /// <value> + /// The local and shared edge that this edge belongs to. + /// </value> + public EdgeLookup edge { get; private set; } + + /// <value> + /// The connected face that this wing belongs to. + /// </value> + public Face face { get; private set; } + + /// <value> + /// The WingedEdge that is connected to the edge.y vertex. + /// </value> + public WingedEdge next { get; private set; } + + /// <value> + /// The WingedEdge that is connected to the edge.x vertex. + /// </value> + public WingedEdge previous { get; private set; } + + /// <value> + /// The WingedEdge that is on the opposite side of this edge. + /// </value> + public WingedEdge opposite { get; private set; } + + WingedEdge() {} + + /// <summary> + /// Equality comparision tests for local edge equality, disregarding other values. + /// </summary> + /// <param name="other">The WingedEdge to compare against.</param> + /// <returns>True if the local edges are equal, false if not.</returns> + public bool Equals(WingedEdge other) + { + return !ReferenceEquals(other, null) && edge.local.Equals(other.edge.local); + } + + /// <summary> + /// Equality comparision tests for local edge equality, disregarding other values. + /// </summary> + /// <param name="obj">The WingedEdge to compare against.</param> + /// <returns>True if the local edges are equal, false if not.</returns> + public override bool Equals(object obj) + { + WingedEdge be = obj as WingedEdge; + + if (be != null && this.Equals(be)) + return true; + + if (obj is Edge && this.edge.local.Equals((Edge)obj)) + return true; + + return false; + } + + /// <summary> + /// Get a hash code for this edge. + /// </summary> + /// <returns>WingedEdge comparison only considers the local edge. As such, this returns the local edge hashcode.</returns> + public override int GetHashCode() + { + return edge.local.GetHashCode(); + } + + /// <summary> + /// How many edges are in this sequence. + /// </summary> + /// <returns>The number of WingedEdges that are connected by walking the @"UnityEngine.ProBuilder.WingedEdge.next" property.</returns> + public int Count() + { + WingedEdge current = this; + int count = 0; + + do + { + count++; + current = current.next; + } + while (current != null && !ReferenceEquals(current, this)); + + return count; + } + + /// <returns>A string representation of the properties contained within this object.</returns> + public override string ToString() + { + return string.Format("Common: {0}\nLocal: {1}\nOpposite: {2}\nFace: {3}", + edge.common.ToString(), + edge.local.ToString(), + opposite == null ? "null" : opposite.edge.ToString(), + face.ToString()); + } + + /// <summary> + /// Given two adjacent triangle wings, attempt to create a single quad. + /// </summary> + /// <param name="left"></param> + /// <param name="right"></param> + /// <returns></returns> + internal static int[] MakeQuad(WingedEdge left, WingedEdge right) + { + // Both faces must be triangles in order to be considered a quad when combined + if (left.Count() != 3 || right.Count() != 3) + return null; + + EdgeLookup[] all = new EdgeLookup[6] + { + left.edge, + left.next.edge, + left.next.next.edge, + right.edge, + right.next.edge, + right.next.next.edge + }; + + int[] dup = new int[6]; + int matches = 0; + + for (int i = 0; i < 3; i++) + { + for (int n = 3; n < 6; n++) + { + if (all[i].Equals(all[n])) + { + matches++; + dup[i] = 1; + dup[n] = 1; + break; + } + } + } + + // Edges are either not adjacent, or share more than one edge + if (matches != 1) + return null; + + int qi = 0; + + EdgeLookup[] edges = new EdgeLookup[4]; + + for (int i = 0; i < 6; i++) + if (dup[i] < 1) + edges[qi++] = all[i]; + + int[] quad = new int[4] { edges[0].local.a, edges[0].local.b, -1, -1 }; + + int c1 = edges[0].common.b, c2 = -1; + + if (edges[1].common.a == c1) + { + quad[2] = edges[1].local.b; + c2 = edges[1].common.b; + } + else if (edges[2].common.a == c1) + { + quad[2] = edges[2].local.b; + c2 = edges[2].common.b; + } + else if (edges[3].common.a == c1) + { + quad[2] = edges[3].local.b; + c2 = edges[3].common.b; + } + + if (edges[1].common.a == c2) + quad[3] = edges[1].local.b; + else if (edges[2].common.a == c2) + quad[3] = edges[2].local.b; + else if (edges[3].common.a == c2) + quad[3] = edges[3].local.b; + + if (quad[2] == -1 || quad[3] == -1) + return null; + + return quad; + } + + /// <summary> + /// Return the @"UnityEngine.ProBuilder.WingedEdge.previous" or @"UnityEngine.ProBuilder.WingedEdge.next" WingedEdge if it contains the passed common (shared) index. + /// </summary> + /// <param name="common">The common index to search next and previous for.</param> + /// <returns>The next or previous WingedEdge that contains common, or null if not found.</returns> + public WingedEdge GetAdjacentEdgeWithCommonIndex(int common) + { + if (next.edge.common.Contains(common)) + return next; + else if (previous.edge.common.Contains(common)) + return previous; + + return null; + } + + /// <summary> + /// Order a face's edges in sequence. + /// The first edge is used as a starting point. + /// </summary> + /// <param name="face">The source face.</param> + /// <returns>A new set of edges where each edge y value matches the next edge x.</returns> + public static List<Edge> SortEdgesByAdjacency(Face face) + { + if (face == null || face.edgesInternal == null) + throw new ArgumentNullException("face"); + List<Edge> edges = new List<Edge>(face.edgesInternal); + SortEdgesByAdjacency(edges); + return edges; + } + + /// <summary> + /// Sort edges list by adjacency, such that each edge's common y value matches the next edge's common x. + /// </summary> + /// <param name="edges">The edges to sort in-place.</param> + public static void SortEdgesByAdjacency(List<Edge> edges) + { + if (edges == null) + throw new ArgumentNullException("edges"); + + for (int i = 1; i < edges.Count; i++) + { + int want = edges[i - 1].b; + + for (int n = i + 1; n < edges.Count; n++) + { + if (edges[n].a == want || edges[n].b == want) + { + Edge swap = edges[n]; + edges[n] = edges[i]; + edges[i] = swap; + } + } + } + } + + /// <summary> + /// Get a dictionary of common indexes and all WingedEdge values touching the index. + /// </summary> + /// <param name="wings">The wings to search for spokes.</param> + /// <returns>A dictionary where each key is a common index with a list of each winged edge touching it.</returns> + public static Dictionary<int, List<WingedEdge>> GetSpokes(List<WingedEdge> wings) + { + if (wings == null) + throw new ArgumentNullException("wings"); + + Dictionary<int, List<WingedEdge>> spokes = new Dictionary<int, List<WingedEdge>>(); + List<WingedEdge> l = null; + + for (int i = 0; i < wings.Count; i++) + { + if (spokes.TryGetValue(wings[i].edge.common.a, out l)) + l.Add(wings[i]); + else + spokes.Add(wings[i].edge.common.a, new List<WingedEdge>() { wings[i] }); + + if (spokes.TryGetValue(wings[i].edge.common.b, out l)) + l.Add(wings[i]); + else + spokes.Add(wings[i].edge.common.b, new List<WingedEdge>() { wings[i] }); + } + + return spokes; + } + + /// <summary> + /// Given a set of winged edges and list of common indexes, attempt to create a complete path of indexes where each is connected by edge. + /// <br /> + /// May be clockwise or counter-clockwise ordered, or null if no path is found. + /// </summary> + /// <param name="wings">The wings to be sorted.</param> + /// <param name="common">The common indexes to be sorted.</param> + /// <returns></returns> + internal static List<int> SortCommonIndexesByAdjacency(List<WingedEdge> wings, HashSet<int> common) + { + List<Edge> matches = wings.Where(x => common.Contains(x.edge.common.a) && common.Contains(x.edge.common.b)).Select(y => y.edge.common).ToList(); + + // if edge count != index count there isn't a full perimeter + if (matches.Count != common.Count) + return null; + + SortEdgesByAdjacency(matches); + return matches.Select(x => x.a).ToList(); + } + + /// <summary> + /// Create a new list of WingedEdge values for a ProBuilder mesh. + /// </summary> + /// <param name="mesh">The mesh from which faces will read.</param> + /// <param name="oneWingPerFace">Optionally restrict the list to only include one WingedEdge per-face.</param> + /// <returns>A new list of WingedEdge values gathered from @"UnityEngine.ProBuilder.ProBuilderMesh.faces".</returns> + public static List<WingedEdge> GetWingedEdges(ProBuilderMesh mesh, bool oneWingPerFace = false) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + return GetWingedEdges(mesh, mesh.facesInternal, oneWingPerFace); + } + + /// <summary> + /// Create a new list of WingedEdge values for a ProBuilder mesh. + /// </summary> + /// <param name="mesh">Target ProBuilderMesh.</param> + /// <param name="faces">Which faces to include in the WingedEdge list.</param> + /// <param name="oneWingPerFace">If `oneWingPerFace` is true the returned list will contain a single winged edge per-face (but still point to all edges).</param> + /// <returns>A new list of WingedEdge values gathered from faces.</returns> + public static List<WingedEdge> GetWingedEdges(ProBuilderMesh mesh, IEnumerable<Face> faces, bool oneWingPerFace = false) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + var lookup = mesh.sharedVertexLookup; + + List<WingedEdge> winged = new List<WingedEdge>(); + k_OppositeEdgeDictionary.Clear(); + + foreach (Face f in faces) + { + List<Edge> edges = SortEdgesByAdjacency(f); + int edgeLength = edges.Count; + WingedEdge first = null, prev = null; + + for (int n = 0; n < edgeLength; n++) + { + Edge e = edges[n]; + + WingedEdge w = new WingedEdge(); + w.edge = new EdgeLookup(lookup[e.a], lookup[e.b], e.a, e.b); + w.face = f; + if (n < 1) + first = w; + + if (n > 0) + { + w.previous = prev; + prev.next = w; + } + + if (n == edgeLength - 1) + { + w.next = first; + first.previous = w; + } + + prev = w; + + WingedEdge opp; + + if (k_OppositeEdgeDictionary.TryGetValue(w.edge.common, out opp)) + { + opp.opposite = w; + w.opposite = opp; + } + else + { + w.opposite = null; + k_OppositeEdgeDictionary.Add(w.edge.common, w); + } + + if (!oneWingPerFace || n < 1) + winged.Add(w); + } + } + + return winged; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/WingedEdge.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/WingedEdge.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3b94c1d1dae943d604066c746cc92fcf8c454060 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/WingedEdge.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19a5e9b3c4e58415bbdc5ea80c5ba88f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/WingedEdgeEnumerator.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/WingedEdgeEnumerator.cs new file mode 100644 index 0000000000000000000000000000000000000000..ae6c142f7fb5f8398991d3a0fc5f0bec8938d73d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/WingedEdgeEnumerator.cs @@ -0,0 +1,74 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + /// <inheritdoc /> + /// <summary> + /// Enumerator for WingedEdge. + /// Enumerates by walking the WingedEdge.next property. + /// </summary> + public sealed class WingedEdgeEnumerator : IEnumerator<WingedEdge> + { + WingedEdge m_Start = null; + WingedEdge m_Current = null; + + /// <inheritdoc /> + public WingedEdgeEnumerator(WingedEdge start) + { + m_Start = start; + m_Current = null; + } + + /// <summary> + /// Move the current value to the next WingedEdge. + /// </summary> + /// <returns>True if next is valid, false if not.</returns> + /// <inheritdoc /> + public bool MoveNext() + { + if (ReferenceEquals(m_Current, null)) + { + m_Current = m_Start; + return !ReferenceEquals(m_Current, null); + } + + m_Current = m_Current.next; + + return !ReferenceEquals(m_Current, null) && !ReferenceEquals(m_Current, m_Start); + } + + /// <inheritdoc /> + public void Reset() + { + m_Current = null; + } + + /// <inheritdoc /> + public WingedEdge Current + { + get + { + try + { + return m_Current; + } + catch (IndexOutOfRangeException) + { + throw new InvalidOperationException(); + } + } + } + + /// <inheritdoc /> + object IEnumerator.Current + { + get { return Current; } + } + + /// <inheritdoc /> + public void Dispose() {} + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/WingedEdgeEnumerator.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/WingedEdgeEnumerator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d39912e268c0a900da89123b5e7837379c3c2552 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Core/WingedEdgeEnumerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c42a9b51604094d6bbfebd218854a539 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations.meta new file mode 100644 index 0000000000000000000000000000000000000000..f60cf146975d8d059c66a41b9271e93880712a9a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 39a7a706431e4ac8bdf5c0b125380f39 diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/AppendElements.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/AppendElements.cs new file mode 100644 index 0000000000000000000000000000000000000000..6288e2f0a37a5482c0b347c3d32cbd3fb2e20eaf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/AppendElements.cs @@ -0,0 +1,948 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; +using System; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + /// <summary> + /// Functions for appending elements to meshes. + /// </summary> + public static class AppendElements + { + /// <summary> + /// Append a new face to the ProBuilderMesh. + /// </summary> + /// <param name="mesh">The mesh target.</param> + /// <param name="positions">The new vertex positions to add.</param> + /// <param name="colors">The new colors to add (must match positions length).</param> + /// <param name="uvs">The new uvs to add (must match positions length).</param> + /// <param name="face">A face with the new triangle indexes. The indexes should be 0 indexed.</param> + /// <param name="common"></param> + /// <returns>The new face as referenced on the mesh.</returns> + internal static Face AppendFace(this ProBuilderMesh mesh, Vector3[] positions, Color[] colors, Vector2[] uvs, Face face, int[] common) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (positions == null) + throw new ArgumentNullException("positions"); + + if (face == null) + throw new ArgumentNullException("face"); + + int faceVertexCount = positions.Length; + + if (common == null) + { + common = new int[faceVertexCount]; + for (int i = 0; i < faceVertexCount; i++) + common[i] = -1; + } + + int vertexCount = mesh.vertexCount; + + var mc = mesh.HasArrays(MeshArrays.Color); + var fc = colors != null; + var mt = mesh.HasArrays(MeshArrays.Texture0); + var ft = uvs != null; + + Vector3[] newPositions = new Vector3[vertexCount + faceVertexCount]; + Color[] newColors = (mc || fc) ? new Color[vertexCount + faceVertexCount] : null; + Vector2[] newTextures = (mt || ft) ? new Vector2[vertexCount + faceVertexCount] : null; + + List<Face> faces = new List<Face>(mesh.facesInternal); + Array.Copy(mesh.positionsInternal, 0, newPositions, 0, vertexCount); + Array.Copy(positions, 0, newPositions, vertexCount, faceVertexCount); + + if (mc || fc) + { + Array.Copy(mc ? mesh.colorsInternal : ArrayUtility.Fill(Color.white, vertexCount), 0, newColors, 0, vertexCount); + Array.Copy(fc ? colors : ArrayUtility.Fill(Color.white, faceVertexCount), 0, newColors, vertexCount, colors.Length); + } + + if (mt || ft) + { + Array.Copy(mt ? mesh.texturesInternal : ArrayUtility.Fill(Vector2.zero, vertexCount), 0, newTextures, 0, vertexCount); + Array.Copy(ft ? uvs : ArrayUtility.Fill(Vector2.zero, faceVertexCount), 0, newTextures, mesh.texturesInternal.Length, faceVertexCount); + } + + face.ShiftIndexesToZero(); + face.ShiftIndexes(vertexCount); + + faces.Add(face); + + for (int i = 0; i < common.Length; i++) + { + if (common[i] < 0) + mesh.AddSharedVertex(new SharedVertex(new int[] { i + vertexCount })); + else + mesh.AddToSharedVertex(common[i], i + vertexCount); + } + + mesh.positions = newPositions; + mesh.colors = newColors; + mesh.textures = newTextures; + mesh.faces = faces; + + return face; + } + + /// <summary> + /// Append a group of new faces to the mesh. Significantly faster than calling AppendFace multiple times. + /// </summary> + /// <param name="mesh">The source mesh to append new faces to.</param> + /// <param name="positions">An array of position arrays, where indexes correspond to the appendedFaces parameter.</param> + /// <param name="colors">An array of colors arrays, where indexes correspond to the appendedFaces parameter.</param> + /// <param name="uvs">An array of uvs arrays, where indexes correspond to the appendedFaces parameter.</param> + /// <param name="faces">An array of faces arrays, which contain the triangle winding information for each new face. Face index values are 0 indexed.</param> + /// <param name="shared">An optional mapping of each new vertex's common index. Common index refers to a triangle's index in the @"UnityEngine.ProBuilder.ProBuilderMesh.sharedIndexes" array. If this value is provided, it must contain entries for each vertex position. Ex, if there are 4 vertices in this face, there must be shared index entries for { 0, 1, 2, 3 }.</param> + /// <returns>An array of the new faces that where successfully appended to the mesh.</returns> + public static Face[] AppendFaces( + this ProBuilderMesh mesh, + Vector3[][] positions, + Color[][] colors, + Vector2[][] uvs, + Face[] faces, + int[][] shared) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (positions == null) + throw new ArgumentNullException("positions"); + + if (colors == null) + throw new ArgumentNullException("colors"); + + if (uvs == null) + throw new ArgumentNullException("uvs"); + + if (faces == null) + throw new ArgumentNullException("faces"); + + var newPositions = new List<Vector3>(mesh.positionsInternal); + var newColors = new List<Color>(mesh.colorsInternal); + var newTextures = new List<Vector2>(mesh.texturesInternal); + var newFaces = new List<Face>(mesh.facesInternal); + var lookup = mesh.sharedVertexLookup; + + int vc = mesh.vertexCount; + + for (int i = 0; i < faces.Length; i++) + { + newPositions.AddRange(positions[i]); + newColors.AddRange(colors[i]); + newTextures.AddRange(uvs[i]); + + faces[i].ShiftIndexesToZero(); + faces[i].ShiftIndexes(vc); + newFaces.Add(faces[i]); + + if (shared != null && positions[i].Length != shared[i].Length) + { + Debug.LogError("Append Face failed because shared array does not match new vertex array."); + return null; + } + + var hasCommon = shared != null; + + for (int j = 0; j < shared[i].Length; j++) + lookup.Add(j + vc, hasCommon ? shared[i][j] : -1); + + vc = newPositions.Count; + } + + mesh.positions = newPositions; + mesh.colors = newColors; + mesh.textures = newTextures; + mesh.faces = newFaces; + mesh.SetSharedVertices(lookup); + + return faces; + } + + /// <summary> + /// Create a new face connecting existing vertices. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="indexes">The indexes of the vertices to join with the new polygon.</param> + /// <param name="unordered">Are the indexes in an ordered path (false), or not (true)? If indexes are not ordered this function will treat the polygon as a convex shape. Ordered paths will be triangulated allowing concave shapes.</param> + /// <returns>The new face created if the action was successfull, null if action failed.</returns> + public static Face CreatePolygon(this ProBuilderMesh mesh, IList<int> indexes, bool unordered) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + SharedVertex[] sharedIndexes = mesh.sharedVerticesInternal; + Dictionary<int, int> lookup = mesh.sharedVertexLookup; + HashSet<int> common = mesh.GetSharedVertexHandles(indexes); + List<Vertex> vertices = new List<Vertex>(mesh.GetVertices()); + List<Vertex> appendVertices = new List<Vertex>(); + + foreach (int i in common) + { + int index = sharedIndexes[i][0]; + appendVertices.Add(new Vertex(vertices[index])); + } + + FaceRebuildData data = FaceWithVertices(appendVertices, unordered); + + if (data != null) + { + data.sharedIndexes = common.ToList(); + List<Face> faces = new List<Face>(mesh.facesInternal); + FaceRebuildData.Apply(new FaceRebuildData[] { data }, vertices, faces, lookup, null); + mesh.SetVertices(vertices); + mesh.faces = faces; + mesh.SetSharedVertices(lookup); + + return data.face; + } + + const string insufficientPoints = "Too Few Unique Points Selected"; + const string badWinding = "Points not ordered correctly"; + + Log.Info(unordered ? insufficientPoints : badWinding); + + return null; + } + + /// <summary> + /// Create a poly shape from a set of points on a plane. The points must be ordered. + /// </summary> + /// <param name="poly">The <see cref="PolyShape"/> component to rebuild.</param> + /// <returns>An action result indicating the status of the operation.</returns> + public static ActionResult CreateShapeFromPolygon(this PolyShape poly) + { + return poly.mesh.CreateShapeFromPolygon(poly.m_Points, poly.extrude, poly.flipNormals); + } + + /// <summary> + /// Clear and refresh mesh in case of failure to create a shape. + /// </summary> + /// <param name="mesh"></param> + internal static void ClearAndRefreshMesh(this ProBuilderMesh mesh) + { + mesh.Clear(); + mesh.ToMesh(); + mesh.Refresh(); + } + + /// <summary> + /// Rebuild a mesh from an ordered set of points. + /// </summary> + /// <param name="mesh">The target mesh. The mesh values will be cleared and repopulated with the shape extruded from points.</param> + /// <param name="points">A path of points to triangulate and extrude.</param> + /// <param name="extrude">The distance to extrude.</param> + /// <param name="flipNormals">If true the faces will be inverted at creation.</param> + /// <returns>An ActionResult with the status of the operation.</returns> + public static ActionResult CreateShapeFromPolygon(this ProBuilderMesh mesh, IList<Vector3> points, float extrude, bool flipNormals) + { + return CreateShapeFromPolygon(mesh, points, extrude, flipNormals, null); + } + + /// <summary> + /// Rebuild a mesh from an ordered set of points. + /// </summary> + /// <param name="mesh">The target mesh. The mesh values will be cleared and repopulated with the shape extruded from points.</param> + /// <param name="points">A path of points to triangulate and extrude.</param> + /// <param name="extrude">The distance to extrude.</param> + /// <param name="flipNormals">If true the faces will be inverted at creation.</param> + /// <param name="cameraLookAt">This argument is now ignored.</param> + /// <param name="holePoints">Holes in the polygon.</param> + /// <returns>An ActionResult with the status of the operation.</returns> + [Obsolete("Face.CreateShapeFromPolygon is deprecated as it no longer relies on camera look at.")] + public static ActionResult CreateShapeFromPolygon(this ProBuilderMesh mesh, IList<Vector3> points, float extrude, bool flipNormals, Vector3 cameraLookAt, IList<IList<Vector3>> holePoints = null) + { + return CreateShapeFromPolygon(mesh, points, extrude, flipNormals, null); + } + + /// <summary> + /// Rebuild a mesh from an ordered set of points. + /// </summary> + /// <param name="mesh">The target mesh. The mesh values will be cleared and repopulated with the shape extruded from points.</param> + /// <param name="points">A path of points to triangulate and extrude.</param> + /// <param name="extrude">The distance to extrude.</param> + /// <param name="flipNormals">If true the faces will be inverted at creation.</param> + /// <param name="holePoints">Holes in the polygon. If null this will be ignored.</param> + /// <returns>An ActionResult with the status of the operation.</returns> + public static ActionResult CreateShapeFromPolygon(this ProBuilderMesh mesh, IList<Vector3> points, float extrude, bool flipNormals, IList<IList<Vector3>> holePoints) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (points == null || points.Count < 3) + { + ClearAndRefreshMesh(mesh); + return new ActionResult(ActionResult.Status.NoChange, "Too Few Points"); + } + + Vector3[] vertices = points.ToArray(); + + Vector3[][] holeVertices = null; + if (holePoints != null && holePoints.Count > 0) + { + holeVertices = new Vector3[holePoints.Count][]; + for (int i = 0; i < holePoints.Count; i++) + { + if(holePoints[i] == null || holePoints[i].Count < 3) + { + ClearAndRefreshMesh(mesh); + return new ActionResult(ActionResult.Status.NoChange, "Too Few Points in hole " + i); + } + holeVertices[i] = holePoints[i].ToArray(); + } + } + + List<int> triangles; + + Log.PushLogLevel(LogLevel.Error); + + if (Triangulation.TriangulateVertices(vertices, out triangles, holeVertices)) + { + Vector3[] combinedVertices = null; + if (holeVertices != null) + { + combinedVertices = new Vector3[vertices.Length + holeVertices.Sum(arr => arr.Length)]; + Array.Copy(vertices, combinedVertices, vertices.Length); + int destinationIndex = vertices.Length; + foreach (var hole in holeVertices) + { + Array.ConstrainedCopy(hole, 0, combinedVertices, destinationIndex, hole.Length); + destinationIndex += hole.Length; + } + } + else + { + combinedVertices = vertices; + } + int[] indexes = triangles.ToArray(); + + if (Math.PolygonArea(combinedVertices, indexes) < Mathf.Epsilon) + { + ClearAndRefreshMesh(mesh); + Log.PopLogLevel(); + return new ActionResult(ActionResult.Status.Failure, "Polygon Area < Epsilon"); + } + + mesh.Clear(); + + mesh.positionsInternal = combinedVertices; + var newFace = new Face(indexes); + mesh.facesInternal = new[] { newFace }; + mesh.sharedVerticesInternal = SharedVertex.GetSharedVerticesWithPositions(combinedVertices); + mesh.InvalidateCaches(); + + // check that all points are represented in the triangulation + if (newFace.distinctIndexesInternal.Length != combinedVertices.Length) + { + ClearAndRefreshMesh(mesh); + Log.PopLogLevel(); + return new ActionResult(ActionResult.Status.Failure, "Triangulation missing points"); + } + + Vector3 nrm = Math.Normal(mesh, mesh.facesInternal[0]); + nrm = mesh.gameObject.transform.TransformDirection(nrm); + if ((flipNormals ? Vector3.Dot(mesh.gameObject.transform.up, nrm) > 0f : Vector3.Dot(mesh.gameObject.transform.up, nrm) < 0f)) + { + mesh.facesInternal[0].Reverse(); + } + + if (extrude != 0.0f) + { + mesh.DuplicateAndFlip(mesh.facesInternal); + + mesh.Extrude(new Face[] { (flipNormals ? mesh.facesInternal[1] : mesh.facesInternal[0]) }, ExtrudeMethod.IndividualFaces, extrude); + + if ((extrude < 0f && !flipNormals) || (extrude > 0f && flipNormals)) + { + foreach (var face in mesh.facesInternal) + face.Reverse(); + } + } + + mesh.ToMesh(); + mesh.Refresh(); + } + else + { + // clear mesh instead of showing an invalid one + ClearAndRefreshMesh(mesh); + Log.PopLogLevel(); + return new ActionResult(ActionResult.Status.Failure, "Failed Triangulating Points"); + } + + Log.PopLogLevel(); + + return new ActionResult(ActionResult.Status.Success, "Create Polygon Shape"); + } + + /// <summary> + /// Create a new face given a set of unordered vertices (or ordered, if unordered param is set to false). + /// </summary> + /// <param name="vertices"></param> + /// <param name="unordered"></param> + /// <returns></returns> + internal static FaceRebuildData FaceWithVertices(List<Vertex> vertices, bool unordered = true) + { + List<int> triangles; + + if (Triangulation.TriangulateVertices(vertices, out triangles, unordered)) + { + FaceRebuildData data = new FaceRebuildData(); + data.vertices = vertices; + data.face = new Face(triangles); + return data; + } + + return null; + } + + /// <summary> + /// Given a path of vertices, inserts a new vertex in the center inserts triangles along the path. + /// </summary> + /// <param name="path"></param> + /// <returns></returns> + internal static List<FaceRebuildData> TentCapWithVertices(List<Vertex> path) + { + int count = path.Count; + Vertex center = Vertex.Average(path); + List<FaceRebuildData> faces = new List<FaceRebuildData>(); + + for (int i = 0; i < count; i++) + { + List<Vertex> vertices = new List<Vertex>() + { + path[i], + center, + path[(i + 1) % count] + }; + + FaceRebuildData data = new FaceRebuildData(); + data.vertices = vertices; + data.face = new Face(new int[] {0 , 1, 2}); + + faces.Add(data); + } + + return faces; + } + + /// <summary> + /// Duplicate and reverse the winding direction for each face. + /// </summary> + /// <param name="mesh">The target mesh.</param> + /// <param name="faces">The faces to duplicate, reverse triangle winding order, and append to mesh.</param> + public static void DuplicateAndFlip(this ProBuilderMesh mesh, Face[] faces) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (faces == null) + throw new ArgumentNullException("faces"); + + List<FaceRebuildData> rebuild = new List<FaceRebuildData>(); + List<Vertex> vertices = new List<Vertex>(mesh.GetVertices()); + Dictionary<int, int> lookup = mesh.sharedVertexLookup; + + foreach (Face face in faces) + { + FaceRebuildData data = new FaceRebuildData(); + + data.vertices = new List<Vertex>(); + data.face = new Face(face); + data.sharedIndexes = new List<int>(); + + Dictionary<int, int> map = new Dictionary<int, int>(); + int len = data.face.indexesInternal.Length; + + for (int i = 0; i < len; i++) + { + if (map.ContainsKey(face.indexesInternal[i])) + continue; + + map.Add(face.indexesInternal[i], map.Count); + data.vertices.Add(vertices[face.indexesInternal[i]]); + data.sharedIndexes.Add(lookup[face.indexesInternal[i]]); + } + + int[] tris = new int[len]; + + for (var i = 0; i < len; i++) + tris[len - (i + 1)] = map[data.face[i]]; + + data.face.SetIndexes(tris); + + rebuild.Add(data); + } + + FaceRebuildData.Apply(rebuild, mesh, vertices); + } + + /// <summary> + /// Insert a face between two edges. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="a">First edge.</param> + /// <param name="b">Second edge</param> + /// <param name="allowNonManifoldGeometry">If true, this function will allow edges to be bridged that create overlapping (non-manifold) faces.</param> + /// <returns>The new face, or null of the action failed.</returns> + public static Face Bridge(this ProBuilderMesh mesh, Edge a, Edge b, bool allowNonManifoldGeometry = false) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + SharedVertex[] sharedVertices = mesh.sharedVerticesInternal; + Dictionary<int, int> lookup = mesh.sharedVertexLookup; + + // Check to see if a face already exists + if (!allowNonManifoldGeometry) + { + if (ElementSelection.GetNeighborFaces(mesh, a).Count > 1 || ElementSelection.GetNeighborFaces(mesh, b).Count > 1) + { + return null; + } + } + + foreach (Face face in mesh.facesInternal) + { + if (mesh.IndexOf(face.edgesInternal, a) >= 0 && mesh.IndexOf(face.edgesInternal, b) >= 0) + { + Log.Warning("Face already exists between these two edges!"); + return null; + } + } + + Vector3[] positions = mesh.positionsInternal; + bool hasColors = mesh.HasArrays(MeshArrays.Color); + Color[] colors = hasColors ? mesh.colorsInternal : null; + + Vector3[] v; + Color[] c; + int[] s; + AutoUnwrapSettings uvs = AutoUnwrapSettings.tile; + int submeshIndex = 0; + + // Get material and UV stuff from the first edge face + SimpleTuple<Face, Edge> faceAndEdge; + + if (EdgeUtility.ValidateEdge(mesh, a, out faceAndEdge) || EdgeUtility.ValidateEdge(mesh, b, out faceAndEdge)) + { + uvs = new AutoUnwrapSettings(faceAndEdge.item1.uv); + submeshIndex = faceAndEdge.item1.submeshIndex; + } + + // Bridge will form a triangle + if (a.Contains(b.a, lookup) || a.Contains(b.b, lookup)) + { + v = new Vector3[3]; + c = new Color[3]; + s = new int[3]; + + bool axbx = Array.IndexOf(sharedVertices[mesh.GetSharedVertexHandle(a.a)].arrayInternal, b.a) > -1; + bool axby = Array.IndexOf(sharedVertices[mesh.GetSharedVertexHandle(a.a)].arrayInternal, b.b) > -1; + + bool aybx = Array.IndexOf(sharedVertices[mesh.GetSharedVertexHandle(a.b)].arrayInternal, b.a) > -1; + bool ayby = Array.IndexOf(sharedVertices[mesh.GetSharedVertexHandle(a.b)].arrayInternal, b.b) > -1; + + if (axbx) + { + v[0] = positions[a.a]; + if (hasColors) c[0] = colors[a.a]; + s[0] = mesh.GetSharedVertexHandle(a.a); + v[1] = positions[a.b]; + if (hasColors) c[1] = colors[a.b]; + s[1] = mesh.GetSharedVertexHandle(a.b); + v[2] = positions[b.b]; + if (hasColors) c[2] = colors[b.b]; + s[2] = mesh.GetSharedVertexHandle(b.b); + } + else if (axby) + { + v[0] = positions[a.a]; + if (hasColors) c[0] = colors[a.a]; + s[0] = mesh.GetSharedVertexHandle(a.a); + v[1] = positions[a.b]; + if (hasColors) c[1] = colors[a.b]; + s[1] = mesh.GetSharedVertexHandle(a.b); + v[2] = positions[b.a]; + if (hasColors) c[2] = colors[b.a]; + s[2] = mesh.GetSharedVertexHandle(b.a); + } + else if (aybx) + { + v[0] = positions[a.b]; + if (hasColors) c[0] = colors[a.b]; + s[0] = mesh.GetSharedVertexHandle(a.b); + v[1] = positions[a.a]; + if (hasColors) c[1] = colors[a.a]; + s[1] = mesh.GetSharedVertexHandle(a.a); + v[2] = positions[b.b]; + if (hasColors) c[2] = colors[b.b]; + s[2] = mesh.GetSharedVertexHandle(b.b); + } + else if (ayby) + { + v[0] = positions[a.b]; + if (hasColors) c[0] = colors[a.b]; + s[0] = mesh.GetSharedVertexHandle(a.b); + v[1] = positions[a.a]; + if (hasColors) c[1] = colors[a.a]; + s[1] = mesh.GetSharedVertexHandle(a.a); + v[2] = positions[b.a]; + if (hasColors) c[2] = colors[b.a]; + s[2] = mesh.GetSharedVertexHandle(b.a); + } + + return mesh.AppendFace( + v, + hasColors ? c : null, + new Vector2[v.Length], + new Face(axbx || axby ? new int[3] {2, 1, 0} : new int[3] {0, 1, 2}, submeshIndex, uvs, 0, -1, -1, false), + s); + } + + // Else, bridge will form a quad + + v = new Vector3[4]; + c = new Color[4]; + s = new int[4]; // shared indexes index to add to + + v[0] = positions[a.a]; + if (hasColors) + c[0] = mesh.colorsInternal[a.a]; + s[0] = mesh.GetSharedVertexHandle(a.a); + v[1] = positions[a.b]; + if (hasColors) + c[1] = mesh.colorsInternal[a.b]; + s[1] = mesh.GetSharedVertexHandle(a.b); + + Vector3 nrm = Vector3.Cross(positions[b.a] - positions[a.a], positions[a.b] - positions[a.a]).normalized; + Vector2[] planed = Projection.PlanarProject(new Vector3[4] { positions[a.a], positions[a.b], positions[b.a], positions[b.b] }, null, nrm); + + Vector2 ipoint = Vector2.zero; + bool intersects = Math.GetLineSegmentIntersect(planed[0], planed[2], planed[1], planed[3], ref ipoint); + + if (!intersects) + { + v[2] = positions[b.a]; + if (hasColors) + c[2] = mesh.colorsInternal[b.a]; + s[2] = mesh.GetSharedVertexHandle(b.a); + v[3] = positions[b.b]; + if (hasColors) + c[3] = mesh.colorsInternal[b.b]; + s[3] = mesh.GetSharedVertexHandle(b.b); + } + else + { + v[2] = positions[b.b]; + if (hasColors) + c[2] = mesh.colorsInternal[b.b]; + s[2] = mesh.GetSharedVertexHandle(b.b); + v[3] = positions[b.a]; + if (hasColors) + c[3] = mesh.colorsInternal[b.a]; + s[3] = mesh.GetSharedVertexHandle(b.a); + } + + return mesh.AppendFace( + v, + hasColors ? c : null, + new Vector2[v.Length], + new Face(new int[6] {2, 1, 0, 2, 3, 1 }, submeshIndex, uvs, 0, -1, -1, false), + s); + } + + /// <summary> + /// Add a set of points to a face and retriangulate. Points are added to the nearest edge. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="face">The face to append points to.</param> + /// <param name="points">Points to added to the face.</param> + /// <returns>The face created by appending the points.</returns> + public static Face AppendVerticesToFace(this ProBuilderMesh mesh, Face face, Vector3[] points) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (face == null) + throw new ArgumentNullException("face"); + + if (points == null) + throw new ArgumentNullException("points"); + + List<Vertex> vertices = mesh.GetVertices().ToList(); + List<Face> faces = new List<Face>(mesh.facesInternal); + Dictionary<int, int> lookup = mesh.sharedVertexLookup; + Dictionary<int, int> lookupUV = null; + + if (mesh.sharedTextures != null) + { + lookupUV = new Dictionary<int, int>(); + SharedVertex.GetSharedVertexLookup(mesh.sharedTextures, lookupUV); + } + + List<Edge> wound = WingedEdge.SortEdgesByAdjacency(face); + + List<Vertex> n_vertices = new List<Vertex>(); + List<int> n_shared = new List<int>(); + List<int> n_sharedUV = lookupUV != null ? new List<int>() : null; + + for (int i = 0; i < wound.Count; i++) + { + n_vertices.Add(vertices[wound[i].a]); + n_shared.Add(lookup[wound[i].a]); + + if (lookupUV != null) + { + int uv; + + if (lookupUV.TryGetValue(wound[i].a, out uv)) + n_sharedUV.Add(uv); + else + n_sharedUV.Add(-1); + } + } + + // now insert the new points on the nearest edge + for (int i = 0; i < points.Length; i++) + { + int index = -1; + float best = Mathf.Infinity; + Vector3 p = points[i]; + int vc = n_vertices.Count; + + for (int n = 0; n < vc; n++) + { + Vector3 v = n_vertices[n].position; + Vector3 w = n_vertices[(n + 1) % vc].position; + + float dist = Math.DistancePointLineSegment(p, v, w); + + if (dist < best) + { + best = dist; + index = n; + } + } + + Vertex left = n_vertices[index], right = n_vertices[(index + 1) % vc]; + + float x = (p - left.position).sqrMagnitude; + float y = (p - right.position).sqrMagnitude; + + Vertex insert = Vertex.Mix(left, right, x / (x + y)); + + n_vertices.Insert((index + 1) % vc, insert); + n_shared.Insert((index + 1) % vc, -1); + if (n_sharedUV != null) n_sharedUV.Insert((index + 1) % vc, -1); + } + + List<int> triangles; + + try + { + Triangulation.TriangulateVertices(n_vertices, out triangles, false); + } + catch + { + Debug.Log("Failed triangulating face after appending vertices."); + return null; + } + + FaceRebuildData data = new FaceRebuildData(); + + data.face = new Face(triangles.ToArray(), face.submeshIndex, new AutoUnwrapSettings(face.uv), face.smoothingGroup, face.textureGroup, -1, face.manualUV); + data.vertices = n_vertices; + data.sharedIndexes = n_shared; + data.sharedIndexesUV = n_sharedUV; + + FaceRebuildData.Apply(new List<FaceRebuildData>() { data }, + vertices, + faces, + lookup, + lookupUV); + + var newFace = data.face; + + mesh.SetVertices(vertices); + mesh.faces = faces; + mesh.SetSharedVertices(lookup); + mesh.SetSharedTextures(lookupUV); + + // check old normal and make sure this new face is pointing the same direction + Vector3 oldNrm = Math.Normal(mesh, face); + Vector3 newNrm = Math.Normal(mesh, newFace); + + if (Vector3.Dot(oldNrm, newNrm) < 0) + newFace.Reverse(); + + mesh.DeleteFace(face); + + return newFace; + } + + /// <summary> + /// Insert a number of new points to an edge. Points are evenly spaced out along the edge. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="edge">The edge to split with points.</param> + /// <param name="count">The number of new points to insert. Must be greater than 0.</param> + /// <returns>The new edges created by inserting points.</returns> + public static List<Edge> AppendVerticesToEdge(this ProBuilderMesh mesh, Edge edge, int count) + { + return AppendVerticesToEdge(mesh, new Edge[] { edge }, count); + } + + /// <summary> + /// Insert a number of new points to each edge. Points are evenly spaced out along the edge. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="edges">The edges to split with points.</param> + /// <param name="count">The number of new points to insert. Must be greater than 0.</param> + /// <returns>The new edges created by inserting points.</returns> + public static List<Edge> AppendVerticesToEdge(this ProBuilderMesh mesh, IList<Edge> edges, int count) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (edges == null) + throw new ArgumentNullException("edges"); + + if (count < 1 || count > 512) + { + Log.Error("New edge vertex count is less than 1 or greater than 512."); + return null; + } + + List<Vertex> vertices = new List<Vertex>(mesh.GetVertices()); + Dictionary<int, int> lookup = mesh.sharedVertexLookup; + Dictionary<int, int> lookupUV = mesh.sharedTextureLookup; + List<int> indexesToDelete = new List<int>(); + IEnumerable<Edge> commonEdges = EdgeUtility.GetSharedVertexHandleEdges(mesh, edges); + List<Edge> distinctEdges = commonEdges.Distinct().ToList(); + + Dictionary<Face, FaceRebuildData> modifiedFaces = new Dictionary<Face, FaceRebuildData>(); + + int originalSharedIndexesCount = lookup.Count(); + int sharedIndexesCount = originalSharedIndexesCount; + + foreach (Edge edge in distinctEdges) + { + Edge localEdge = EdgeUtility.GetEdgeWithSharedVertexHandles(mesh, edge); + + // Generate the new vertices that will be inserted on this edge + List<Vertex> verticesToAppend = new List<Vertex>(count); + + for (int i = 0; i < count; i++) + verticesToAppend.Add(Vertex.Mix(vertices[localEdge.a], vertices[localEdge.b], (i + 1) / ((float)count + 1))); + + List<SimpleTuple<Face, Edge>> adjacentFaces = ElementSelection.GetNeighborFaces(mesh, localEdge); + + // foreach face attached to common edge, append vertices + foreach (SimpleTuple<Face, Edge> tup in adjacentFaces) + { + Face face = tup.item1; + + FaceRebuildData data; + + if (!modifiedFaces.TryGetValue(face, out data)) + { + data = new FaceRebuildData(); + data.face = new Face(new int[0], face.submeshIndex, new AutoUnwrapSettings(face.uv), face.smoothingGroup, face.textureGroup, -1, face.manualUV); + data.vertices = new List<Vertex>(ArrayUtility.ValuesWithIndexes(vertices, face.distinctIndexesInternal)); + data.sharedIndexes = new List<int>(); + data.sharedIndexesUV = new List<int>(); + + foreach (int i in face.distinctIndexesInternal) + { + int shared; + + if (lookup.TryGetValue(i, out shared)) + data.sharedIndexes.Add(shared); + + if (lookupUV.TryGetValue(i, out shared)) + data.sharedIndexesUV.Add(shared); + } + + indexesToDelete.AddRange(face.distinctIndexesInternal); + + modifiedFaces.Add(face, data); + } + + data.vertices.AddRange(verticesToAppend); + + for (int i = 0; i < count; i++) + { + data.sharedIndexes.Add(sharedIndexesCount + i); + data.sharedIndexesUV.Add(-1); + } + } + + sharedIndexesCount += count; + } + + // now apply the changes + List<Face> dic_face = modifiedFaces.Keys.ToList(); + List<FaceRebuildData> dic_data = modifiedFaces.Values.ToList(); + List<EdgeLookup> appendedEdges = new List<EdgeLookup>(); + + for (int i = 0; i < dic_face.Count; i++) + { + Face face = dic_face[i]; + FaceRebuildData data = dic_data[i]; + + Vector3 nrm = Math.Normal(mesh, face); + Vector2[] projection = Projection.PlanarProject(data.vertices.Select(x => x.position).ToArray(), null, nrm); + + int vertexCount = vertices.Count; + + // triangulate and set new face indexes to end of current vertex list + List<int> indexes; + + if (Triangulation.SortAndTriangulate(projection, out indexes)) + data.face.indexesInternal = indexes.ToArray(); + else + continue; + + data.face.ShiftIndexes(vertexCount); + face.CopyFrom(data.face); + + for (int n = 0; n < data.vertices.Count; n++) + lookup.Add(vertexCount + n, data.sharedIndexes[n]); + + if (data.sharedIndexesUV.Count == data.vertices.Count) + { + for (int n = 0; n < data.vertices.Count; n++) + lookupUV.Add(vertexCount + n, data.sharedIndexesUV[n]); + } + + vertices.AddRange(data.vertices); + + foreach (Edge e in face.edgesInternal) + { + EdgeLookup el = new EdgeLookup(new Edge(lookup[e.a], lookup[e.b]), e); + + if (el.common.a >= originalSharedIndexesCount || el.common.b >= originalSharedIndexesCount) + appendedEdges.Add(el); + } + } + + indexesToDelete = indexesToDelete.Distinct().ToList(); + int delCount = indexesToDelete.Count; + + var newEdges = appendedEdges.Distinct().Select(x => x.local - delCount).ToList(); + + mesh.SetVertices(vertices); + mesh.SetSharedVertices(lookup); + mesh.SetSharedTextures(lookupUV); + mesh.DeleteVertices(indexesToDelete); + + return newEdges; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/AppendElements.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/AppendElements.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7054cdee6a56a63b4cb3243c4f30ae8a17538795 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/AppendElements.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d247d7d3f9b23a468d61e433994dd7b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/AssemblyInfo.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..2e4f2d8385bb4b2d0f61af92394a0576a016f805 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/AssemblyInfo.cs @@ -0,0 +1,3 @@ +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Unity.ProBuilder.Editor")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Unity.ProBuilder.Tests")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Unity.ProBuilder.Editor.Tests")] diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/AssemblyInfo.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/AssemblyInfo.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..1c62f2ee44f915921b602aab715d731ddefd916d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/AssemblyInfo.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ab8e2d6a92a04e42baab6202f8650fb3 +timeCreated: 1510169863 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Bevel.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Bevel.cs new file mode 100644 index 0000000000000000000000000000000000000000..8ef27e293f0b89ae0039bd91534c535801d83f9e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Bevel.cs @@ -0,0 +1,343 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; +using System; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + /// <summary> + /// Functions for beveling edges. + /// </summary> + public static class Bevel + { + /// <summary> + /// Apply a bevel to a set of edges. + /// </summary> + /// <param name="mesh">Target mesh.</param> + /// <param name="edges">A set of edges to apply bevelling to.</param> + /// <param name="amount">A value from 0 (bevel not at all) to 1 (bevel entire face).</param> + /// <returns>The new faces created to form the bevel.</returns> + public static List<Face> BevelEdges(ProBuilderMesh mesh, IList<Edge> edges, float amount) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + Dictionary<int, int> lookup = mesh.sharedVertexLookup; + List<Vertex> vertices = new List<Vertex>(mesh.GetVertices()); + List<EdgeLookup> m_edges = EdgeLookup.GetEdgeLookup(edges, lookup).Distinct().ToList(); + List<WingedEdge> wings = WingedEdge.GetWingedEdges(mesh); + List<FaceRebuildData> appendFaces = new List<FaceRebuildData>(); + + Dictionary<Face, List<int>> ignore = new Dictionary<Face, List<int>>(); + HashSet<int> slide = new HashSet<int>(); + int beveled = 0; + + Dictionary<int, List<SimpleTuple<FaceRebuildData, List<int>>>> holes = new Dictionary<int, List<SimpleTuple<FaceRebuildData, List<int>>>>(); + + // test every edge that will be moved along to make sure the bevel distance is appropriate. if it's not, adjust the max bevel amount + // to suit. + Dictionary<int, List<WingedEdge>> spokes = WingedEdge.GetSpokes(wings); + HashSet<int> tested_common = new HashSet<int>(); + + foreach (EdgeLookup e in m_edges) + { + if (tested_common.Add(e.common.a)) + { + foreach (WingedEdge w in spokes[e.common.a]) + { + Edge le = w.edge.local; + amount = Mathf.Min(Vector3.Distance(vertices[le.a].position, vertices[le.b].position) - .001f, amount); + } + } + + if (tested_common.Add(e.common.b)) + { + foreach (WingedEdge w in spokes[e.common.b]) + { + Edge le = w.edge.local; + amount = Mathf.Min(Vector3.Distance(vertices[le.a].position, vertices[le.b].position) - .001f, amount); + } + } + } + + if (amount < .001f) + { + Log.Info("Bevel Distance > Available Surface"); + return null; + } + + // iterate selected edges and move each leading edge back along it's direction + // storing information about adjacent faces in the process + foreach (EdgeLookup lup in m_edges) + { + WingedEdge we = wings.FirstOrDefault(x => x.edge.Equals(lup)); + + if (we == null || we.opposite == null) + continue; + + beveled++; + + ignore.AddOrAppend(we.face, we.edge.common.a); + ignore.AddOrAppend(we.face, we.edge.common.b); + ignore.AddOrAppend(we.opposite.face, we.edge.common.a); + ignore.AddOrAppend(we.opposite.face, we.edge.common.b); + + // after initial slides go back and split indirect triangles at the intersecting index into two vertices + slide.Add(we.edge.common.a); + slide.Add(we.edge.common.b); + + SlideEdge(vertices, we, amount); + SlideEdge(vertices, we.opposite, amount); + + appendFaces.AddRange(GetBridgeFaces(vertices, we, we.opposite, holes)); + } + + if (beveled < 1) + { + Log.Info("Cannot Bevel Open Edges"); + return null; + } + + // grab the "createdFaces" array now so that the selection returned is just the bridged faces + // then add holes later + var createdFaces = new List<Face>(appendFaces.Select(x => x.face)); + + Dictionary<Face, List<SimpleTuple<WingedEdge, int>>> sorted = new Dictionary<Face, List<SimpleTuple<WingedEdge, int>>>(); + + // sort the adjacent but affected faces into winged edge groups where each group contains a set of + // unique winged edges pointing to the same face + foreach (int c in slide) + { + IEnumerable<WingedEdge> matches = wings.Where(x => x.edge.common.Contains(c) && !(ignore.ContainsKey(x.face) && ignore[x.face].Contains(c))); + + HashSet<Face> used = new HashSet<Face>(); + + foreach (WingedEdge match in matches) + { + if (!used.Add(match.face)) + continue; + + sorted.AddOrAppend(match.face, new SimpleTuple<WingedEdge, int>(match, c)); + } + } + + // now go through those sorted faces and apply the vertex exploding, keeping track of any holes created + foreach (KeyValuePair<Face, List<SimpleTuple<WingedEdge, int>>> kvp in sorted) + { + // common index & list of vertices it was split into + Dictionary<int, List<int>> appended; + + FaceRebuildData f = VertexEditing.ExplodeVertex(vertices, kvp.Value, amount, out appended); + + if (f == null) + continue; + + appendFaces.Add(f); + + foreach (var apv in appended) + { + // organize holes by new face so that later we can compare the winding of the new face to the hole face + // holes are sorted by key: common index value: face, vertex list + holes.AddOrAppend(apv.Key, new SimpleTuple<FaceRebuildData, List<int>>(f, apv.Value)); + } + } + + FaceRebuildData.Apply(appendFaces, mesh, vertices); + int removed = mesh.DeleteFaces(sorted.Keys).Length; + mesh.sharedTextures = new SharedVertex[0]; + mesh.sharedVertices = SharedVertex.GetSharedVerticesWithPositions(mesh.positionsInternal); + + // @todo don't rebuild indexes, keep 'em cached + SharedVertex[] sharedIndexes = mesh.sharedVerticesInternal; + lookup = mesh.sharedVertexLookup; + List<HashSet<int>> holesCommonIndexes = new List<HashSet<int>>(); + + // offset the indexes of holes and cull any potential holes that are less than 3 indexes (not a hole :) + foreach (KeyValuePair<int, List<SimpleTuple<FaceRebuildData, List<int>>>> hole in holes) + { + // less than 3 indexes in hole path; ain't a hole + if (hole.Value.Sum(x => x.item2.Count) < 3) + continue; + + HashSet<int> holeCommon = new HashSet<int>(); + + foreach (SimpleTuple<FaceRebuildData, List<int>> path in hole.Value) + { + int offset = path.item1.Offset() - removed; + + for (int i = 0; i < path.item2.Count; i++) + holeCommon.Add(lookup[path.item2[i] + offset]); + } + + holesCommonIndexes.Add(holeCommon); + } + + List<WingedEdge> modified = WingedEdge.GetWingedEdges(mesh, appendFaces.Select(x => x.face)); + + // now go through the holes and create faces for them + vertices = new List<Vertex>(mesh.GetVertices()); + + List<FaceRebuildData> holeFaces = new List<FaceRebuildData>(); + + foreach (HashSet<int> h in holesCommonIndexes) + { + // even if a set of hole indexes made it past the initial culling, the distinct part + // may have reduced the index count + if (h.Count < 3) + { + continue; + } + // skip sorting the path if it's just a triangle + if (h.Count < 4) + { + List<Vertex> v = new List<Vertex>(mesh.GetVertices(h.Select(x => sharedIndexes[x][0]).ToList())); + holeFaces.Add(AppendElements.FaceWithVertices(v)); + } + // if this hole has > 3 indexes, it needs a tent pole triangulation, which requires sorting into the perimeter order + else + { + List<int> holePath = WingedEdge.SortCommonIndexesByAdjacency(modified, h); + if (holePath != null) + { + List<Vertex> v = + new List<Vertex>(mesh.GetVertices(holePath.Select(x => sharedIndexes[x][0]).ToList())); + holeFaces.AddRange(AppendElements.TentCapWithVertices(v)); + } + } + } + + FaceRebuildData.Apply(holeFaces, mesh, vertices); + mesh.sharedVertices = SharedVertex.GetSharedVerticesWithPositions(mesh.positionsInternal); + + // go through new faces and conform hole normals + // get a hash of just the adjacent and bridge faces + // HashSet<pb_Face> adjacent = new HashSet<pb_Face>(appendFaces.Select(x => x.face)); + // and also just the filled holes + HashSet<Face> newFaces = new HashSet<Face>(holeFaces.Select(x => x.face)); + newFaces.UnionWith(createdFaces); + // now append filled holes to the full list of added faces + appendFaces.AddRange(holeFaces); + + List<WingedEdge> allNewFaceEdges = WingedEdge.GetWingedEdges(mesh, appendFaces.Select(x => x.face)); + + for (int i = 0; i < allNewFaceEdges.Count && newFaces.Count > 0; i++) + { + WingedEdge wing = allNewFaceEdges[i]; + + if (newFaces.Contains(wing.face)) + { + newFaces.Remove(wing.face); + + // find first edge whose opposite face isn't a filled hole* then + // conform normal by that. + // *or is a filled hole but has already been conformed + using (var it = new WingedEdgeEnumerator(wing)) + { + while (it.MoveNext()) + { + var w = it.Current; + + if (w.opposite != null && !newFaces.Contains(w.opposite.face)) + { + w.face.submeshIndex = w.opposite.face.submeshIndex; + w.face.uv = new AutoUnwrapSettings(w.opposite.face.uv); + SurfaceTopology.ConformOppositeNormal(w.opposite); + break; + } + } + } + } + } + + mesh.ToMesh(); + + return createdFaces; + } + + static readonly int[] k_BridgeIndexesTri = new int[] { 2, 1, 0 }; + + static List<FaceRebuildData> GetBridgeFaces( + IList<Vertex> vertices, + WingedEdge left, + WingedEdge right, + Dictionary<int, List<SimpleTuple<FaceRebuildData, List<int>>>> holes) + { + List<FaceRebuildData> faces = new List<FaceRebuildData>(); + + FaceRebuildData rf = new FaceRebuildData(); + + EdgeLookup a = left.edge; + EdgeLookup b = right.edge; + + rf.vertices = new List<Vertex>() + { + vertices[a.local.a], + vertices[a.local.b], + vertices[a.common.a == b.common.a ? b.local.a : b.local.b], + vertices[a.common.a == b.common.a ? b.local.b : b.local.a] + }; + + Vector3 an = Math.Normal(vertices, left.face.indexesInternal); + Vector3 bn = Math.Normal(rf.vertices, k_BridgeIndexesTri); + + int[] triangles = new int[] { 2, 1, 0, 2, 3, 1 }; + + if (Vector3.Dot(an, bn) < 0f) + System.Array.Reverse(triangles); + + rf.face = new Face( + triangles, + left.face.submeshIndex, + AutoUnwrapSettings.tile, + -1, + -1, + -1, + false); + + faces.Add(rf); + + holes.AddOrAppend(a.common.a, new SimpleTuple<FaceRebuildData, List<int>>(rf, new List<int>() { 0, 2 })); + holes.AddOrAppend(a.common.b, new SimpleTuple<FaceRebuildData, List<int>>(rf, new List<int>() { 1, 3 })); + + return faces; + } + + static void SlideEdge(IList<Vertex> vertices, WingedEdge we, float amount) + { + we.face.manualUV = true; + we.face.textureGroup = -1; + + Edge slide_x = GetLeadingEdge(we, we.edge.common.a); + Edge slide_y = GetLeadingEdge(we, we.edge.common.b); + + if (!slide_x.IsValid() || !slide_y.IsValid()) + return; + + Vertex x = (vertices[slide_x.a] - vertices[slide_x.b]); + x.Normalize(); + + Vertex y = (vertices[slide_y.a] - vertices[slide_y.b]); + y.Normalize(); + + // need the pb_Vertex value to be modified, not reassigned in this array (which += does) + vertices[we.edge.local.a].Add(x * amount); + vertices[we.edge.local.b].Add(y * amount); + } + + static Edge GetLeadingEdge(WingedEdge wing, int common) + { + if (wing.previous.edge.common.a == common) + return new Edge(wing.previous.edge.local.b, wing.previous.edge.local.a); + else if (wing.previous.edge.common.b == common) + return new Edge(wing.previous.edge.local.a, wing.previous.edge.local.b); + else if (wing.next.edge.common.a == common) + return new Edge(wing.next.edge.local.b, wing.next.edge.local.a); + else if (wing.next.edge.common.b == common) + return new Edge(wing.next.edge.local.a, wing.next.edge.local.b); + + return Edge.Empty; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Bevel.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Bevel.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..05310d2473caa472705d989bee06c237bc4fdc1c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Bevel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 158fff462a95744008bbad18ab5e029e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/CombineMeshes.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/CombineMeshes.cs new file mode 100644 index 0000000000000000000000000000000000000000..1b69765bf4e9d2f51dce5771f012417ae7e82ed2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/CombineMeshes.cs @@ -0,0 +1,336 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + /// <summary> + /// Methods for merging multiple <see cref="ProBuilderMesh"/> objects to a single mesh. + /// </summary> + public static class CombineMeshes + { + /// <summary> + /// Merge a collection of <see cref="ProBuilderMesh"/> objects to as few meshes as possible. This may result in + /// more than one mesh due to a max vertex count limit of 65535. + /// </summary> + /// <param name="meshes">A collection of meshes to be merged.</param> + /// <returns> + /// A list of merged meshes. In most cases this will be a single mesh. However it can be multiple in cases + /// where the resulting vertex count exceeds the maximum allowable value. + /// </returns> + [Obsolete("Combine(IEnumerable<ProBuilderMesh> meshes) is deprecated. Plase use Combine(IEnumerable<ProBuilderMesh> meshes, ProBuilderMesh meshTarget).")] + public static List<ProBuilderMesh> Combine(IEnumerable<ProBuilderMesh> meshes) + { + return CombineToNewMeshes(meshes); + } + + /// <summary> + /// Merge a collection of <see cref="ProBuilderMesh"/> objects to as few meshes as possible. It will re-use the meshTarget object as the first + /// destination for the first <see cref="ProBuilderMesh.maxVertexCount"/> -1 vertices. If the sum of vertices is above <see cref="ProBuilderMesh.maxVertexCount"/> - 1 + /// it will generate new meshes unless there is a single mesh left in which case it will append it to the return list. + /// </summary> + /// <param name="meshes">A collection of meshes to be merged. Note: it is expected that meshes includes meshTarget.</param> + /// <param name="meshTarget">A mesh which will be used as the starting point for merging and which will be kept as reference/target.</param> + /// <returns> + /// A list of merged meshes. In most cases this will be a single mesh corresponding to meshTarget. However it can be multiple in cases + /// where the resulting vertex count exceeds the maximum allowable value. + /// </returns> + public static List<ProBuilderMesh> Combine(IEnumerable<ProBuilderMesh> meshes, ProBuilderMesh meshTarget) + { + if (meshes == null) + throw new ArgumentNullException("meshes"); + + if (meshTarget == null) + throw new ArgumentNullException("meshTarget"); + + if (!meshes.Any() || meshes.Count() < 2 ) + return null; + + if (!meshes.Contains(meshTarget)) + return null; + + var vertices = new List<Vertex>(meshTarget.GetVertices()); + var faces = new List<Face>(meshTarget.facesInternal); + var sharedVertices = new List<SharedVertex>(meshTarget.sharedVertices); + var sharedTextures = new List<SharedVertex>(meshTarget.sharedTextures); + int offset = meshTarget.vertexCount; + var materialMap = new List<Material>(meshTarget.renderer.sharedMaterials); + var targetTransform = meshTarget.transform; + + var firstMeshContributors = new List<ProBuilderMesh>(); + var remainderMeshContributors = new List<ProBuilderMesh>(); + + var currentMeshVertexCount = offset; + foreach (var mesh in meshes) + { + if (mesh != meshTarget) + { + if (currentMeshVertexCount + mesh.vertexCount < ProBuilderMesh.maxVertexCount) + { + currentMeshVertexCount += mesh.vertexCount; + firstMeshContributors.Add(mesh); + } + else + { + remainderMeshContributors.Add(mesh); + } + } + } + + var autoUvFaces = new List<Face>(); + AccumulateMeshesInfo( + firstMeshContributors, + offset, + ref vertices, + ref faces, + ref autoUvFaces, + ref sharedVertices, + ref sharedTextures, + ref materialMap, + targetTransform + ); + + meshTarget.SetVertices(vertices); + meshTarget.faces = faces; + meshTarget.sharedVertices = sharedVertices; + meshTarget.sharedTextures = sharedTextures != null ? sharedTextures.ToArray() : null; + meshTarget.renderer.sharedMaterials = materialMap.ToArray(); + meshTarget.ToMesh(); + meshTarget.Refresh(); + UVEditing.SetAutoAndAlignUnwrapParamsToUVs(meshTarget, autoUvFaces); + + MeshValidation.EnsureMeshIsValid(meshTarget, out int removedVertices); + + var returnedMesh = new List<ProBuilderMesh>() { meshTarget }; + if (remainderMeshContributors.Count > 1) + { + var newMeshes = CombineToNewMeshes(remainderMeshContributors); + foreach (var mesh in newMeshes) + { + MeshValidation.EnsureMeshIsValid(mesh, out removedVertices); + returnedMesh.Add(mesh); + } + } + else if (remainderMeshContributors.Count == 1) + { + returnedMesh.Add(remainderMeshContributors[0]); + } + + return returnedMesh; + } + + static List<ProBuilderMesh> CombineToNewMeshes(IEnumerable<ProBuilderMesh> meshes) + { + if (meshes == null) + throw new ArgumentNullException("meshes"); + + if (!meshes.Any() || meshes.Count() < 2) + return null; + + var vertices = new List<Vertex>(); + var faces = new List<Face>(); + var autoUvFaces = new List<Face>(); + var sharedVertices = new List<SharedVertex>(); + var sharedTextures = new List<SharedVertex>(); + int offset = 0; + var materialMap = new List<Material>(); + + AccumulateMeshesInfo( + meshes, + offset, + ref vertices, + ref faces, + ref autoUvFaces, + ref sharedVertices, + ref sharedTextures, + ref materialMap + ); + + var res = SplitByMaxVertexCount(vertices, faces, sharedVertices, sharedTextures); + var pivot = meshes.LastOrDefault().transform.position; + + foreach (var m in res) + { + m.renderer.sharedMaterials = materialMap.ToArray(); + InternalMeshUtility.FilterUnusedSubmeshIndexes(m); + m.SetPivot(pivot); + UVEditing.SetAutoAndAlignUnwrapParamsToUVs(m, autoUvFaces); + + } + + return res; + } + + static void AccumulateMeshesInfo( + IEnumerable<ProBuilderMesh> meshes, + int offset, + ref List<Vertex> vertices, + ref List<Face> faces, + ref List<Face> autoUvFaces, + ref List<SharedVertex> sharedVertices, + ref List<SharedVertex> sharedTextures, + ref List<Material> materialMap, + Transform targetTransform = null + ) + { + foreach (var mesh in meshes) + { + var meshVertexCount = mesh.vertexCount; + var transform = mesh.transform; + var meshVertices = mesh.GetVertices(); + var meshFaces = mesh.facesInternal; + var meshSharedVertices = mesh.sharedVertices; + var meshSharedTextures = mesh.sharedTextures; + var materials = mesh.renderer.sharedMaterials; + var materialCount = materials.Length; + + for (int i = 0; i < meshVertexCount; i++) + { + var worldVertex = transform.TransformVertex(meshVertices[i]); + if (targetTransform != null) + vertices.Add(targetTransform.InverseTransformVertex(worldVertex)); + else + vertices.Add(worldVertex); + } + + foreach (var face in meshFaces) + { + var newFace = new Face(face); + newFace.ShiftIndexes(offset); + + // prevents uvs from shifting when being converted from local coords to world space + if (!newFace.manualUV && !newFace.uv.useWorldSpace) + { + newFace.manualUV = true; + autoUvFaces.Add(newFace); + } + var material = materials[Math.Clamp(face.submeshIndex, 0, materialCount - 1)]; + var submeshIndex = materialMap.IndexOf(material); + + if (submeshIndex > -1) + { + newFace.submeshIndex = submeshIndex; + } + else + { + if (material == null) + { + newFace.submeshIndex = 0; + } + else + { + newFace.submeshIndex = materialMap.Count; + materialMap.Add(material); + } + } + + faces.Add(newFace); + } + + foreach (var sv in meshSharedVertices) + { + var nsv = new SharedVertex(sv); + nsv.ShiftIndexes(offset); + sharedVertices.Add(nsv); + } + + foreach (var st in meshSharedTextures) + { + var nst = new SharedVertex(st); + nst.ShiftIndexes(offset); + sharedTextures.Add(nst); + } + + offset += meshVertexCount; + } + } + + static ProBuilderMesh CreateMeshFromSplit(List<Vertex> vertices, + List<Face> faces, + Dictionary<int, int> sharedVertexLookup, + Dictionary<int, int> sharedTextureLookup, + Dictionary<int, int> remap, + Material[] materials) + { + // finalize mesh + var sv = new Dictionary<int, int>(); + var st = new Dictionary<int, int>(); + + foreach (var f in faces) + { + for (int i = 0, c = f.indexesInternal.Length; i < c; i++) + f.indexesInternal[i] = remap[f.indexesInternal[i]]; + + f.InvalidateCache(); + } + + foreach (var kvp in remap) + { + int v; + + if (sharedVertexLookup.TryGetValue(kvp.Key, out v)) + sv.Add(kvp.Value, v); + + if (sharedTextureLookup.TryGetValue(kvp.Key, out v)) + st.Add(kvp.Value, v); + } + + return ProBuilderMesh.Create( + vertices, + faces, + SharedVertex.ToSharedVertices(sv), + st.Any() ? SharedVertex.ToSharedVertices(st) : null, + materials); + } + + /// <summary> + /// Break a ProBuilder mesh into multiple meshes if it's vertex count is greater than maxVertexCount. + /// </summary> + /// <returns></returns> + internal static List<ProBuilderMesh> SplitByMaxVertexCount(IList<Vertex> vertices, IList<Face> faces, IList<SharedVertex> sharedVertices, IList<SharedVertex> sharedTextures, uint maxVertexCount = ProBuilderMesh.maxVertexCount) + { + uint vertexCount = (uint)vertices.Count; + uint meshCount = System.Math.Max(1u, vertexCount / maxVertexCount); + var submeshCount = faces.Max(x => x.submeshIndex) + 1; + + if (meshCount < 2) + return new List<ProBuilderMesh>() { ProBuilderMesh.Create(vertices, faces, sharedVertices, sharedTextures, new Material[submeshCount]) }; + + var sharedVertexLookup = new Dictionary<int, int>(); + SharedVertex.GetSharedVertexLookup(sharedVertices, sharedVertexLookup); + + var sharedTextureLookup = new Dictionary<int, int>(); + SharedVertex.GetSharedVertexLookup(sharedTextures, sharedTextureLookup); + + var meshes = new List<ProBuilderMesh>(); + var mv = new List<Vertex>(); + var mf = new List<Face>(); + var remap = new Dictionary<int, int>(); + + foreach (var face in faces) + { + if (mv.Count + face.distinctIndexes.Count > maxVertexCount) + { + // finalize mesh + meshes.Add(CreateMeshFromSplit(mv, mf, sharedVertexLookup, sharedTextureLookup, remap, new Material[submeshCount])); + mv.Clear(); + mf.Clear(); + remap.Clear(); + } + + foreach (int i in face.distinctIndexes) + { + mv.Add(vertices[i]); + remap.Add(i, mv.Count - 1); + } + + mf.Add(face); + } + + if (mv.Any()) + meshes.Add(CreateMeshFromSplit(mv, mf, sharedVertexLookup, sharedTextureLookup, remap, new Material[submeshCount])); + + return meshes; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/CombineMeshes.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/CombineMeshes.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..adb225ca3439be6fdbb377bb3220292c344f9601 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/CombineMeshes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb36fee1f817e4860a9937f064b1a192 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ConnectElements.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ConnectElements.cs new file mode 100644 index 0000000000000000000000000000000000000000..85c83184737c34ef965ec9ae1ce1a3bca0334af4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ConnectElements.cs @@ -0,0 +1,620 @@ +using UnityEngine; +using System.Collections.Generic; +using System.Linq; +using System; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + /// <summary> + /// Store face rebuild data with indexes to mark which vertices are new. + /// </summary> + sealed class ConnectFaceRebuildData + { + public FaceRebuildData faceRebuildData; + public List<int> newVertexIndexes; + + public ConnectFaceRebuildData(FaceRebuildData faceRebuildData, List<int> newVertexIndexes) + { + this.faceRebuildData = faceRebuildData; + this.newVertexIndexes = newVertexIndexes; + } + } + + /// <summary> + /// Utility class for connecting edges, faces, and vertices. + /// </summary> + public static class ConnectElements + { + /// <summary> + /// Insert new edges from the center of each edge on a face to a new vertex in the center of the face. + /// </summary> + /// <param name="mesh">Target mesh.</param> + /// <param name="faces">The faces to poke.</param> + /// <returns>The faces created as a result of inserting new edges.</returns> + public static Face[] Connect(this ProBuilderMesh mesh, IEnumerable<Face> faces) + { + var split = MeshValidation.EnsureFacesAreComposedOfContiguousTriangles(mesh, faces); + HashSet<Face> mask = new HashSet<Face>(faces); + if (split.Count > 0) + { + foreach (var face in split) + mask.Add(face); + } + IEnumerable<Edge> edges = mask.SelectMany(x => x.edgesInternal); + Edge[] empty; + Face[] res; + Connect(mesh, edges, out res, out empty, true, false, mask); + return res; + } + + /// <summary> + /// Insert new edges connecting a set of edges. If a face contains more than 2 edges to be connected, a new vertex is inserted at the center of the face and each edge is connected to the center point. + /// </summary> + /// <param name="mesh">The target mesh.</param> + /// <param name="edges">A list of edges to connect.</param> + /// <returns>The faces and edges created as a result of inserting new edges.</returns> + public static SimpleTuple<Face[], Edge[]> Connect(this ProBuilderMesh mesh, IEnumerable<Edge> edges) + { + Edge[] empty; + Face[] faces; + Connect(mesh, edges, out faces, out empty, true, true); + return new SimpleTuple<Face[], Edge[]>(faces, empty); + } + + /// <summary> + /// Inserts edges connecting a list of indexes. + /// </summary> + /// <param name="mesh">The target mesh.</param> + /// <param name="indexes">A list of indexes (corresponding to the @"UnityEngine.ProBuilder.ProBuilderMesh.positions" array) to connect with new edges.</param> + /// <returns>Because this function may modify the ordering of the positions array, a new array containing the equivalent values of the passed connected indexes is returned.</returns> + public static int[] Connect(this ProBuilderMesh mesh, IList<int> indexes) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (indexes == null) + throw new ArgumentNullException("indexes"); + + int sharedIndexOffset = mesh.sharedVerticesInternal.Length; + Dictionary<int, int> lookup = mesh.sharedVertexLookup; + + HashSet<int> distinct = new HashSet<int>(indexes.Select(x => lookup[x])); + HashSet<int> affected = new HashSet<int>(); + + foreach (int i in distinct) + affected.UnionWith(mesh.sharedVerticesInternal[i].arrayInternal); + + Dictionary<Face, List<int>> splits = new Dictionary<Face, List<int>>(); + List<Vertex> vertices = new List<Vertex>(mesh.GetVertices()); + + foreach (Face face in mesh.facesInternal) + { + int[] f = face.distinctIndexesInternal; + + for (int i = 0; i < f.Length; i++) + { + if (affected.Contains(f[i])) + splits.AddOrAppend(face, f[i]); + } + } + + List<ConnectFaceRebuildData> appendFaces = new List<ConnectFaceRebuildData>(); + List<Face> successfulSplits = new List<Face>(); + HashSet<int> usedTextureGroups = new HashSet<int>(mesh.facesInternal.Select(x => x.textureGroup)); + int newTextureGroupIndex = 1; + + foreach (KeyValuePair<Face, List<int>> split in splits) + { + Face face = split.Key; + + List<ConnectFaceRebuildData> res = split.Value.Count == 2 ? + ConnectIndexesPerFace(face, split.Value[0], split.Value[1], vertices, lookup) : + ConnectIndexesPerFace(face, split.Value, vertices, lookup, sharedIndexOffset++); + + if (res == null) + continue; + + if (face.textureGroup < 0) + { + while (usedTextureGroups.Contains(newTextureGroupIndex)) + newTextureGroupIndex++; + + usedTextureGroups.Add(newTextureGroupIndex); + } + + foreach (ConnectFaceRebuildData c in res) + { + c.faceRebuildData.face.textureGroup = face.textureGroup < 0 ? newTextureGroupIndex : face.textureGroup; + c.faceRebuildData.face.uv = new AutoUnwrapSettings(face.uv); + c.faceRebuildData.face.smoothingGroup = face.smoothingGroup; + c.faceRebuildData.face.manualUV = face.manualUV; + c.faceRebuildData.face.submeshIndex = face.submeshIndex; + } + + successfulSplits.Add(face); + appendFaces.AddRange(res); + } + + FaceRebuildData.Apply(appendFaces.Select(x => x.faceRebuildData), mesh, vertices, null); + int removedVertexCount = mesh.DeleteFaces(successfulSplits).Length; + lookup = mesh.sharedVertexLookup; + + HashSet<int> newVertexIndexes = new HashSet<int>(); + + for (int i = 0; i < appendFaces.Count; i++) + for (int n = 0; n < appendFaces[i].newVertexIndexes.Count; n++) + newVertexIndexes.Add(lookup[appendFaces[i].newVertexIndexes[n] + (appendFaces[i].faceRebuildData.Offset() - removedVertexCount)]); + + mesh.ToMesh(); + + return newVertexIndexes.Select(x => mesh.sharedVerticesInternal[x][0]).ToArray(); + } + + /// <summary> + /// Inserts new edges connecting the passed edges, optionally restricting new edge insertion to faces in faceMask. + /// </summary> + /// <param name="mesh"></param> + /// <param name="edges"></param> + /// <param name="addedFaces"></param> + /// <param name="connections"></param> + /// <param name="returnFaces"></param> + /// <param name="returnEdges"></param> + /// <param name="faceMask"></param> + /// <returns></returns> + internal static ActionResult Connect( + this ProBuilderMesh mesh, + IEnumerable<Edge> edges, + out Face[] addedFaces, + out Edge[] connections, + bool returnFaces = false, + bool returnEdges = false, + HashSet<Face> faceMask = null) + { + Dictionary<int, int> lookup = mesh.sharedVertexLookup; + Dictionary<int, int> lookupUV = mesh.sharedTextureLookup; + HashSet<EdgeLookup> distinctEdges = new HashSet<EdgeLookup>(EdgeLookup.GetEdgeLookup(edges, lookup)); + List<WingedEdge> wings = WingedEdge.GetWingedEdges(mesh); + + // map each edge to a face so that we have a list of all touched faces with their to-be-subdivided edges + Dictionary<Face, List<WingedEdge>> touched = new Dictionary<Face, List<WingedEdge>>(); + + foreach (WingedEdge wing in wings) + { + if (distinctEdges.Contains(wing.edge)) + { + List<WingedEdge> faceEdges; + if (touched.TryGetValue(wing.face, out faceEdges)) + faceEdges.Add(wing); + else + touched.Add(wing.face, new List<WingedEdge>() { wing }); + } + } + + Dictionary<Face, List<WingedEdge>> affected = new Dictionary<Face, List<WingedEdge>>(); + + // weed out edges that won't actually connect to other edges (if you don't play ya' can't stay) + foreach (KeyValuePair<Face, List<WingedEdge>> kvp in touched) + { + if (kvp.Value.Count <= 1) + { + WingedEdge opp = kvp.Value[0].opposite; + + if (opp == null) + continue; + + List<WingedEdge> opp_list; + + if (!touched.TryGetValue(opp.face, out opp_list)) + continue; + + if (opp_list.Count <= 1) + continue; + } + + affected.Add(kvp.Key, kvp.Value); + } + + List<Vertex> vertices = new List<Vertex>(mesh.GetVertices()); + List<ConnectFaceRebuildData> results = new List<ConnectFaceRebuildData>(); + // just the faces that where connected with > 1 edge + List<Face> connectedFaces = new List<Face>(); + + HashSet<int> usedTextureGroups = new HashSet<int>(mesh.facesInternal.Select(x => x.textureGroup)); + int newTextureGroupIndex = 1; + + // do the splits + foreach (KeyValuePair<Face, List<WingedEdge>> split in affected) + { + Face face = split.Key; + List<WingedEdge> targetEdges = split.Value; + int inserts = targetEdges.Count; + Vector3 nrm = Math.Normal(vertices, face.indexesInternal); + + if (inserts == 1 || (faceMask != null && !faceMask.Contains(face))) + { + ConnectFaceRebuildData c; + + if (InsertVertices(face, targetEdges, vertices, out c)) + { + Vector3 fn = Math.Normal(c.faceRebuildData.vertices, c.faceRebuildData.face.indexesInternal); + + if (Vector3.Dot(nrm, fn) < 0) + c.faceRebuildData.face.Reverse(); + + results.Add(c); + } + } + else if (inserts > 1) + { + List<ConnectFaceRebuildData> res = inserts == 2 ? + ConnectEdgesInFace(face, targetEdges[0], targetEdges[1], vertices) : + ConnectEdgesInFace(face, targetEdges, vertices); + + if (face.textureGroup < 0) + { + while (usedTextureGroups.Contains(newTextureGroupIndex)) + newTextureGroupIndex++; + + usedTextureGroups.Add(newTextureGroupIndex); + } + + + if (res == null) + { + connections = null; + addedFaces = null; + return new ActionResult(ActionResult.Status.Failure, "Unable to connect faces"); + } + else + { + foreach (ConnectFaceRebuildData c in res) + { + connectedFaces.Add(c.faceRebuildData.face); + + Vector3 fn = Math.Normal(c.faceRebuildData.vertices, + c.faceRebuildData.face.indexesInternal); + + if (Vector3.Dot(nrm, fn) < 0) + c.faceRebuildData.face.Reverse(); + + c.faceRebuildData.face.textureGroup = + face.textureGroup < 0 ? newTextureGroupIndex : face.textureGroup; + c.faceRebuildData.face.uv = new AutoUnwrapSettings(face.uv); + c.faceRebuildData.face.submeshIndex = face.submeshIndex; + c.faceRebuildData.face.smoothingGroup = face.smoothingGroup; + c.faceRebuildData.face.manualUV = face.manualUV; + } + + results.AddRange(res); + } + } + } + + FaceRebuildData.Apply(results.Select(x => x.faceRebuildData), mesh, vertices, null); + + mesh.sharedTextures = new SharedVertex[0]; + int removedVertexCount = mesh.DeleteFaces(affected.Keys).Length; + mesh.sharedVertices = SharedVertex.GetSharedVerticesWithPositions(mesh.positionsInternal); + mesh.ToMesh(); + + // figure out where the new edges where inserted + if (returnEdges) + { + // offset the newVertexIndexes by whatever the FaceRebuildData did so we can search for the new edges by index + var appended = new HashSet<int>(); + + for (int n = 0; n < results.Count; n++) + for (int i = 0; i < results[n].newVertexIndexes.Count; i++) + appended.Add((results[n].newVertexIndexes[i] + results[n].faceRebuildData.Offset()) - removedVertexCount); + + Dictionary<int, int> lup = mesh.sharedVertexLookup; + IEnumerable<Edge> newEdges = results.SelectMany(x => x.faceRebuildData.face.edgesInternal).Where(x => appended.Contains(x.a) && appended.Contains(x.b)); + IEnumerable<EdgeLookup> distNewEdges = EdgeLookup.GetEdgeLookup(newEdges, lup); + + connections = distNewEdges.Distinct().Select(x => x.local).ToArray(); + } + else + { + connections = null; + } + + if (returnFaces) + addedFaces = connectedFaces.ToArray(); + else + addedFaces = null; + + return new ActionResult(ActionResult.Status.Success, string.Format("Connected {0} Edges", results.Count / 2)); + } + + /// <summary> + /// Accepts a face and set of edges to split on. + /// </summary> + /// <param name="face"></param> + /// <param name="a"></param> + /// <param name="b"></param> + /// <param name="vertices"></param> + /// <returns></returns> + static List<ConnectFaceRebuildData> ConnectEdgesInFace( + Face face, + WingedEdge a, + WingedEdge b, + List<Vertex> vertices) + { + List<Edge> perimeter = WingedEdge.SortEdgesByAdjacency(face); + + List<Vertex>[] n_vertices = new List<Vertex>[2] + { + new List<Vertex>(), + new List<Vertex>() + }; + + List<int>[] n_indexes = new List<int>[2] + { + new List<int>(), + new List<int>() + }; + + int index = 0; + + // creates two new polygon perimeter lines by stepping the current face perimeter and inserting new vertices where edges match + for (int i = 0; i < perimeter.Count; i++) + { + n_vertices[index % 2].Add(vertices[perimeter[i].a]); + + if (perimeter[i].Equals(a.edge.local) || perimeter[i].Equals(b.edge.local)) + { + Vertex mix = Vertex.Mix(vertices[perimeter[i].a], vertices[perimeter[i].b], .5f); + + n_indexes[index % 2].Add(n_vertices[index % 2].Count); + n_vertices[index % 2].Add(mix); + index++; + n_indexes[index % 2].Add(n_vertices[index % 2].Count); + n_vertices[index % 2].Add(mix); + } + } + + List<ConnectFaceRebuildData> faces = new List<ConnectFaceRebuildData>(); + + for (int i = 0; i < n_vertices.Length; i++) + { + FaceRebuildData f = AppendElements.FaceWithVertices(n_vertices[i], false); + faces.Add(new ConnectFaceRebuildData(f, n_indexes[i])); + } + + return faces; + } + + /// <summary> + /// Insert a new vertex at the center of a face and connect the center of all edges to it. + /// </summary> + /// <param name="face"></param> + /// <param name="edges"></param> + /// <param name="vertices"></param> + /// <returns></returns> + static List<ConnectFaceRebuildData> ConnectEdgesInFace( + Face face, + List<WingedEdge> edges, + List<Vertex> vertices) + { + List<Edge> perimeter = WingedEdge.SortEdgesByAdjacency(face); + int splitCount = edges.Count; + + Vertex centroid = Vertex.Average(vertices, face.distinctIndexesInternal); + + List<List<Vertex>> n_vertices = ArrayUtility.Fill<List<Vertex>>(x => { return new List<Vertex>(); }, splitCount); + List<List<int>> n_indexes = ArrayUtility.Fill<List<int>>(x => { return new List<int>(); }, splitCount); + + HashSet<Edge> edgesToSplit = new HashSet<Edge>(edges.Select(x => x.edge.local)); + + int index = 0; + + // creates two new polygon perimeter lines by stepping the current face perimeter and inserting new vertices where edges match + for (int i = 0; i < perimeter.Count; i++) + { + n_vertices[index % splitCount].Add(vertices[perimeter[i].a]); + + if (edgesToSplit.Contains(perimeter[i])) + { + Vertex mix = Vertex.Mix(vertices[perimeter[i].a], vertices[perimeter[i].b], .5f); + + // split current poly line + n_indexes[index].Add(n_vertices[index].Count); + n_vertices[index].Add(mix); + + // add the centroid vertex + n_indexes[index].Add(n_vertices[index].Count); + n_vertices[index].Add(centroid); + + // advance the poly line index + index = (index + 1) % splitCount; + + // then add the edge center vertex and move on + n_vertices[index].Add(mix); + } + } + + List<ConnectFaceRebuildData> faces = new List<ConnectFaceRebuildData>(); + + for (int i = 0; i < n_vertices.Count; i++) + { + FaceRebuildData f = AppendElements.FaceWithVertices(n_vertices[i], false); + if (f == null) + { + faces.Clear(); + return null; + } + faces.Add(new ConnectFaceRebuildData(f, n_indexes[i])); + } + + return faces; + } + + static bool InsertVertices(Face face, List<WingedEdge> edges, List<Vertex> vertices, out ConnectFaceRebuildData data) + { + List<Edge> perimeter = WingedEdge.SortEdgesByAdjacency(face); + List<Vertex> n_vertices = new List<Vertex>(); + List<int> newVertexIndexes = new List<int>(); + HashSet<Edge> affected = new HashSet<Edge>(edges.Select(x => x.edge.local)); + + for (int i = 0; i < perimeter.Count; i++) + { + n_vertices.Add(vertices[perimeter[i].a]); + + if (affected.Contains(perimeter[i])) + { + newVertexIndexes.Add(n_vertices.Count); + n_vertices.Add(Vertex.Mix(vertices[perimeter[i].a], vertices[perimeter[i].b], .5f)); + } + } + + FaceRebuildData res = AppendElements.FaceWithVertices(n_vertices, false); + + if (res != null) + { + res.face.textureGroup = face.textureGroup; + res.face.uv = new AutoUnwrapSettings(face.uv); + res.face.smoothingGroup = face.smoothingGroup; + res.face.manualUV = face.manualUV; + res.face.submeshIndex = face.submeshIndex; + + data = new ConnectFaceRebuildData(res, newVertexIndexes); + return true; + } + + data = null; + + return false; + } + + static List<ConnectFaceRebuildData> ConnectIndexesPerFace( + Face face, + int a, + int b, + List<Vertex> vertices, + Dictionary<int, int> lookup) + { + List<Edge> perimeter = WingedEdge.SortEdgesByAdjacency(face); + + List<Vertex>[] n_vertices = new List<Vertex>[] { + new List<Vertex>(), + new List<Vertex>() + }; + + List<int>[] n_sharedIndexes = new List<int>[] { + new List<int>(), + new List<int>() + }; + + List<int>[] n_indexes = new List<int>[] { + new List<int>(), + new List<int>() + }; + + int index = 0; + + for (int i = 0; i < perimeter.Count; i++) + { + // trying to connect two vertices that are already connected + if (perimeter[i].Contains(a) && perimeter[i].Contains(b)) + return null; + + int cur = perimeter[i].a; + + n_vertices[index].Add(vertices[cur]); + n_sharedIndexes[index].Add(lookup[cur]); + + if (cur == a || cur == b) + { + index = (index + 1) % 2; + + n_indexes[index].Add(n_vertices[index].Count); + n_vertices[index].Add(vertices[cur]); + n_sharedIndexes[index].Add(lookup[cur]); + } + } + + List<ConnectFaceRebuildData> faces = new List<ConnectFaceRebuildData>(); + Vector3 nrm = Math.Normal(vertices, face.indexesInternal); + + for (int i = 0; i < n_vertices.Length; i++) + { + FaceRebuildData f = AppendElements.FaceWithVertices(n_vertices[i], false); + f.sharedIndexes = n_sharedIndexes[i]; + + Vector3 fn = Math.Normal(n_vertices[i], f.face.indexesInternal); + + if (Vector3.Dot(nrm, fn) < 0) + f.face.Reverse(); + + faces.Add(new ConnectFaceRebuildData(f, n_indexes[i])); + } + + return faces; + } + + static List<ConnectFaceRebuildData> ConnectIndexesPerFace( + Face face, + List<int> indexes, + List<Vertex> vertices, + Dictionary<int, int> lookup, + int sharedIndexOffset) + { + if (indexes.Count < 3) + return null; + + List<Edge> perimeter = WingedEdge.SortEdgesByAdjacency(face); + + int splitCount = indexes.Count; + + List<List<Vertex>> n_vertices = ArrayUtility.Fill<List<Vertex>>(x => { return new List<Vertex>(); }, splitCount); + List<List<int>> n_sharedIndexes = ArrayUtility.Fill<List<int>>(x => { return new List<int>(); }, splitCount); + List<List<int>> n_indexes = ArrayUtility.Fill<List<int>>(x => { return new List<int>(); }, splitCount); + + Vertex center = Vertex.Average(vertices, indexes); + Vector3 nrm = Math.Normal(vertices, face.indexesInternal); + + int index = 0; + + for (int i = 0; i < perimeter.Count; i++) + { + int cur = perimeter[i].a; + + n_vertices[index].Add(vertices[cur]); + n_sharedIndexes[index].Add(lookup[cur]); + + if (indexes.Contains(cur)) + { + n_indexes[index].Add(n_vertices[index].Count); + n_vertices[index].Add(center); + n_sharedIndexes[index].Add(sharedIndexOffset); + + index = (index + 1) % splitCount; + + n_indexes[index].Add(n_vertices[index].Count); + n_vertices[index].Add(vertices[cur]); + n_sharedIndexes[index].Add(lookup[cur]); + } + } + + List<ConnectFaceRebuildData> faces = new List<ConnectFaceRebuildData>(); + + for (int i = 0; i < n_vertices.Count; i++) + { + if (n_vertices[i].Count < 3) + continue; + + FaceRebuildData f = AppendElements.FaceWithVertices(n_vertices[i], false); + f.sharedIndexes = n_sharedIndexes[i]; + + Vector3 fn = Math.Normal(n_vertices[i], f.face.indexesInternal); + + if (Vector3.Dot(nrm, fn) < 0) + f.face.Reverse(); + + faces.Add(new ConnectFaceRebuildData(f, n_indexes[i])); + } + + return faces; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ConnectElements.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ConnectElements.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a51a8f506e6ada6d6140e27900f91e779afac5ca --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ConnectElements.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 081df46fba1da4194b5f8c7fa73446e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/DeleteElements.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/DeleteElements.cs new file mode 100644 index 0000000000000000000000000000000000000000..71e4ee2ba453e46cdadbb66cfd3b27797252c201 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/DeleteElements.cs @@ -0,0 +1,154 @@ +using UnityEngine; +using System.Collections.Generic; +using System; +using System.ComponentModel; +using System.Linq; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + /// <summary> + /// Functions for removing vertices and triangles from a mesh. + /// </summary> + public static class DeleteElements + { + /// <summary> + /// Deletes the vertices from the passed index array, and handles rebuilding the sharedIndexes array. + /// </summary> + /// <remarks>This function does not retriangulate the mesh. Ie, you are responsible for ensuring that indexes + /// deleted by this function are not referenced by any triangles.</remarks> + /// <param name="mesh">The source mesh.</param> + /// <param name="distinctIndexes">A list of vertices to delete. Note that this must not contain duplicates.</param> + public static void DeleteVertices(this ProBuilderMesh mesh, IEnumerable<int> distinctIndexes) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (distinctIndexes == null || !distinctIndexes.Any()) + return; + + Vertex[] vertices = mesh.GetVertices(); + int originalVertexCount = vertices.Length; + int[] offset = new int[originalVertexCount]; + + List<int> sorted = new List<int>(distinctIndexes); + + sorted.Sort(); + + vertices = vertices.SortedRemoveAt(sorted); + + // Add 1 because NearestIndexPriorToValue is 0 indexed. + for (int i = 0; i < originalVertexCount; i++) + offset[i] = ArrayUtility.NearestIndexPriorToValue(sorted, i) + 1; + + foreach (Face face in mesh.facesInternal) + { + int[] indexes = face.indexesInternal; + + for (int i = 0; i < indexes.Length; i++) + indexes[i] -= offset[indexes[i]]; + + face.InvalidateCache(); + } + + // remove from sharedIndexes & shift to account for deletions + var common = mesh.sharedVertexLookup.Where(x => sorted.BinarySearch(x.Key) < 0).Select(y => new KeyValuePair<int, int>(y.Key - offset[y.Key], y.Value)); + var commonUV = mesh.sharedTextureLookup.Where(x => sorted.BinarySearch(x.Key) < 0).Select(y => new KeyValuePair<int, int>(y.Key - offset[y.Key], y.Value)); + + mesh.SetVertices(vertices); + mesh.SetSharedVertices(common); + mesh.SetSharedTextures(commonUV); + } + + /// <summary> + /// Removes a face from a mesh. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="face">The face to remove.</param> + /// <returns>An array of vertex indexes that were deleted as a result of face deletion.</returns> + public static int[] DeleteFace(this ProBuilderMesh mesh, Face face) + { + return DeleteFaces(mesh, new Face[] { face }); + } + + /// <summary> + /// Delete a collection of faces from a mesh. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="faces">The faces to remove.</param> + /// <returns>An array of vertex indexes that were deleted as a result of deletion.</returns> + public static int[] DeleteFaces(this ProBuilderMesh mesh, IEnumerable<Face> faces) + { + return DeleteFaces(mesh, faces.Select(x => System.Array.IndexOf(mesh.facesInternal, x)).ToList()); + } + + /// <summary> + /// Delete a collection of faces from a mesh. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="faceIndexes">The indexes of faces to remove (corresponding to the @"UnityEngine.ProBuilder.ProBuilderMesh.faces" collection.</param> + /// <returns>An array of vertex indexes that were deleted as a result of deletion.</returns> + public static int[] DeleteFaces(this ProBuilderMesh mesh, IList<int> faceIndexes) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (faceIndexes == null) + throw new ArgumentNullException("faceIndexes"); + + Face[] faces = new Face[faceIndexes.Count]; + + for (int i = 0; i < faces.Length; i++) + faces[i] = mesh.facesInternal[faceIndexes[i]]; + + List<int> indexesToRemove = faces.SelectMany(x => x.distinctIndexesInternal).Distinct().ToList(); + indexesToRemove.Sort(); + + int vertexCount = mesh.positionsInternal.Length; + + Face[] nFaces = mesh.facesInternal.RemoveAt(faceIndexes); + var vertices = mesh.GetVertices().SortedRemoveAt(indexesToRemove); + + Dictionary<int, int> shiftmap = new Dictionary<int, int>(); + + for (var i = 0; i < vertexCount; i++) + shiftmap.Add(i, ArrayUtility.NearestIndexPriorToValue<int>(indexesToRemove, i) + 1); + + // shift all other face indexes down to account for moved vertex positions + for (var i = 0; i < nFaces.Length; i++) + { + int[] tris = nFaces[i].indexesInternal; + + for (var n = 0; n < tris.Length; n++) + tris[n] -= shiftmap[tris[n]]; + + nFaces[i].indexesInternal = tris; + } + + mesh.SetVertices(vertices); + mesh.sharedVerticesInternal = SharedVertex.SortedRemoveAndShift(mesh.sharedVertexLookup, indexesToRemove); + mesh.sharedTextures = SharedVertex.SortedRemoveAndShift(mesh.sharedTextureLookup, indexesToRemove); + mesh.facesInternal = nFaces; + int[] array = indexesToRemove.ToArray(); + + return array; + } + + [Obsolete("Use MeshValidation.RemoveDegenerateTriangles")] + [EditorBrowsable(EditorBrowsableState.Never)] + public static int[] RemoveDegenerateTriangles(this ProBuilderMesh mesh) + { + List<int> removed = new List<int>(); + MeshValidation.RemoveDegenerateTriangles(mesh, removed); + return removed.ToArray(); + } + + [Obsolete("Use MeshValidation.RemoveUnusedVertices")] + [EditorBrowsable(EditorBrowsableState.Never)] + public static int[] RemoveUnusedVertices(this ProBuilderMesh mesh) + { + List<int> removed = new List<int>(); + MeshValidation.RemoveUnusedVertices(mesh, removed); + return removed.ToArray(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/DeleteElements.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/DeleteElements.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d11e2cf616f17ad810a87426b00d524bc9920347 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/DeleteElements.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b300db76e48084b5680ab36214d3bea3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ElementSelection.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ElementSelection.cs new file mode 100644 index 0000000000000000000000000000000000000000..e7d5b9e04054279539c7185713aa711cf2352616 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ElementSelection.cs @@ -0,0 +1,910 @@ +using System.Linq; +using System; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + public static class ElementSelection + { + const int k_MaxHoleIterations = 2048; + + /// <summary> + /// Returns a list of <![CDATA[SimpleTuple<Face, Edge>]]> where each face is connected to the passed edge. + /// </summary> + /// <param name="mesh"></param> + /// <param name="edge"></param> + /// <returns></returns> + internal static List<SimpleTuple<Face, Edge>> GetNeighborFaces(ProBuilderMesh mesh, Edge edge) + { + List<SimpleTuple<Face, Edge>> faces = new List<SimpleTuple<Face, Edge>>(); + var lookup = mesh.sharedVertexLookup; + + Edge uni = new Edge(lookup[edge.a], lookup[edge.b]); + Edge e = new Edge(0, 0); + + for (int i = 0; i < mesh.facesInternal.Length; i++) + { + Edge[] edges = mesh.facesInternal[i].edgesInternal; + for (int n = 0; n < edges.Length; n++) + { + e.a = edges[n].a; + e.b = edges[n].b; + + if ((uni.a == lookup[e.a] && uni.b == lookup[e.b]) || + (uni.a == lookup[e.b] && uni.b == lookup[e.a])) + { + faces.Add(new SimpleTuple<Face, Edge>(mesh.facesInternal[i], edges[n])); + break; + } + } + } + return faces; + } + + /// <summary> + /// Gets all faces connected to each index taking into account shared vertices. + /// </summary> + /// <param name="mesh"></param> + /// <param name="indexes"></param> + /// <returns></returns> + internal static List<Face> GetNeighborFaces(ProBuilderMesh mesh, int[] indexes) + { + var lookup = mesh.sharedVertexLookup; + List<Face> neighboring = new List<Face>(); + HashSet<int> shared = new HashSet<int>(); + + foreach (int tri in indexes) + shared.Add(lookup[tri]); + + for (int i = 0; i < mesh.facesInternal.Length; i++) + { + int[] dist = mesh.facesInternal[i].distinctIndexesInternal; + + for (int n = 0; n < dist.Length; n++) + { + if (shared.Contains(lookup[dist[n]])) + { + neighboring.Add(mesh.facesInternal[i]); + break; + } + } + } + + return neighboring; + } + + /// <summary> + /// Returns a unique array of Edges connected to the passed vertex indexes. + /// </summary> + /// <param name="mesh"></param> + /// <param name="indexes"></param> + /// <returns></returns> + internal static Edge[] GetConnectedEdges(ProBuilderMesh mesh, int[] indexes) + { + var lookup = mesh.sharedVertexLookup; + + List<Edge> connectedEdges = new List<Edge>(); + + HashSet<int> shared = new HashSet<int>(); + + for (int i = 0; i < indexes.Length; i++) + shared.Add(lookup[indexes[i]]); + + HashSet<Edge> used = new HashSet<Edge>(); + + Edge uni = new Edge(0, 0); + + foreach (var face in mesh.facesInternal) + { + foreach (var edge in face.edges) + { + Edge key = new Edge(lookup[edge.a], lookup[edge.b]); + + if (shared.Contains(key.a) || shared.Contains(key.b) && !used.Contains(uni)) + { + connectedEdges.Add(edge); + used.Add(key); + } + } + } + + return connectedEdges.ToArray(); + } + + /// <summary> + /// Get all edges that are on the perimeter of this face group selection. + /// </summary> + /// <param name="mesh"></param> + /// <param name="faces">The faces to search for perimeter edge path.</param> + /// <returns>A list of the edges on the perimeter of each group of adjacent faces.</returns> + public static IEnumerable<Edge> GetPerimeterEdges(this ProBuilderMesh mesh, IEnumerable<Face> faces) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (faces == null) + throw new ArgumentNullException("faces"); + + List<Edge> faceEdges = faces.SelectMany(x => x.edgesInternal).ToList(); // actual edges + var sharedIndexesDictionary = mesh.sharedVertexLookup; + int edgeCount = faceEdges.Count; + + // translate all face edges to universal edges + Dictionary<Edge, List<Edge>> dup = new Dictionary<Edge, List<Edge>>(); + List<Edge> list; + + for (int i = 0; i < edgeCount; i++) + { + Edge uni = new Edge(sharedIndexesDictionary[faceEdges[i].a], sharedIndexesDictionary[faceEdges[i].b]); + + if (dup.TryGetValue(uni, out list)) + list.Add(faceEdges[i]); + else + dup.Add(uni, new List<Edge>() { faceEdges[i] }); + } + + return dup.Where(x => x.Value.Count < 2).Select(x => x.Value[0]); + } + + /// <summary> + /// Returns the indexes of perimeter edges in a given element group. + /// </summary> + /// <param name="mesh"></param> + /// <param name="edges"></param> + /// <returns></returns> + internal static int[] GetPerimeterEdges(ProBuilderMesh mesh, IList<Edge> edges) + { + int edgeCount = edges != null ? edges.Count : 0; + + // Figure out how many connections each edge has to other edges in the selection + var universal = mesh.GetSharedVertexHandleEdges(edges).ToArray(); + + int[] connections = new int[universal.Length]; + + for (int i = 0; i < universal.Length - 1; i++) + { + for (int n = i + 1; n < universal.Length; n++) + { + if (universal[i].a == universal[n].a || universal[i].a == universal[n].b || + universal[i].b == universal[n].a || universal[i].b == universal[n].b) + { + connections[i]++; + connections[n]++; + } + } + } + + int min = Math.Min(connections); + List<int> perimeter = new List<int>(); + + for (int i = 0; i < connections.Length; i++) + { + if (connections[i] <= min) + perimeter.Add(i); + } + + return perimeter.Count != edgeCount ? perimeter.ToArray() : new int[] {}; + } + + /// <summary> + /// Returns an array of faces where each face has at least one non-shared edge. + /// </summary> + /// <param name="mesh"></param> + /// <param name="faces"></param> + /// <returns></returns> + internal static IEnumerable<Face> GetPerimeterFaces(ProBuilderMesh mesh, IEnumerable<Face> faces) + { + var lookup = mesh.sharedVertexLookup; + Dictionary<Edge, List<Face>> sharedEdges = new Dictionary<Edge, List<Face>>(); + + /** + * To be considered a perimeter face, at least one edge must not share + * any boundary with another face. + */ + + foreach (Face face in faces) + { + foreach (Edge e in face.edgesInternal) + { + Edge edge = new Edge(lookup[e.a], lookup[e.b]); + + if (sharedEdges.ContainsKey(edge)) + sharedEdges[edge].Add(face); + else + sharedEdges.Add(edge, new List<Face>() { face }); + } + } + + return sharedEdges.Where(x => x.Value.Count < 2).Select(x => x.Value[0]).Distinct(); + } + + internal static int[] GetPerimeterVertices(ProBuilderMesh mesh, int[] indexes, Edge[] universal_edges_all) + { + int len = indexes.Length; + SharedVertex[] sharedIndexes = mesh.sharedVerticesInternal; + int[] universal = new int[len]; + + for (int i = 0; i < len; i++) + universal[i] = mesh.GetSharedVertexHandle(indexes[i]); + + int[] connections = new int[indexes.Length]; + + for (int i = 0; i < indexes.Length - 1; i++) + { + for (int n = i + 1; n < indexes.Length; n++) + { + if (universal_edges_all.Contains(universal[i], universal[n])) + { + connections[i]++; + connections[n]++; + } + } + } + + int min = Math.Min(connections); + List<int> perimeter = new List<int>(); + for (int i = 0; i < len; i++) + { + if (connections[i] <= min) + perimeter.Add(i); + } + + return perimeter.Count < len ? perimeter.ToArray() : new int[] {}; + } + + static WingedEdge EdgeRingNext(WingedEdge edge) + { + if (edge == null) + return null; + + WingedEdge next = edge.next, prev = edge.previous; + int i = 0; + + while (next != prev && next != edge) + { + next = next.next; + + if (next == prev) + return null; + + prev = prev.previous; + + i++; + } + + if (i % 2 == 0 || next == edge) + next = null; + + return next; + } + + /// <summary> + /// Iterates through face edges and builds a list using the opposite edge. + /// </summary> + /// <param name="pb"></param> + /// <param name="edges"></param> + /// <returns></returns> + internal static IEnumerable<Edge> GetEdgeRing(ProBuilderMesh pb, IEnumerable<Edge> edges) + { + List<WingedEdge> wings = WingedEdge.GetWingedEdges(pb); + List<EdgeLookup> edgeLookup = EdgeLookup.GetEdgeLookup(edges, pb.sharedVertexLookup).ToList(); + edgeLookup = edgeLookup.Distinct().ToList(); + + Dictionary<Edge, WingedEdge> wings_dic = new Dictionary<Edge, WingedEdge>(); + + for (int i = 0; i < wings.Count; i++) + if (!wings_dic.ContainsKey(wings[i].edge.common)) + wings_dic.Add(wings[i].edge.common, wings[i]); + + HashSet<EdgeLookup> used = new HashSet<EdgeLookup>(); + + for (int i = 0, c = edgeLookup.Count; i < c; i++) + { + WingedEdge we; + + if (!wings_dic.TryGetValue(edgeLookup[i].common, out we) || used.Contains(we.edge)) + continue; + + WingedEdge cur = we; + + while (cur != null) + { + if (!used.Add(cur.edge)) break; + cur = EdgeRingNext(cur); + if (cur != null && cur.opposite != null) cur = cur.opposite; + } + + cur = EdgeRingNext(we.opposite); + if (cur != null && cur.opposite != null) cur = cur.opposite; + + // run in both directions + while (cur != null) + { + if (!used.Add(cur.edge)) break; + cur = EdgeRingNext(cur); + if (cur != null && cur.opposite != null) cur = cur.opposite; + } + } + + return used.Select(x => x.local); + } + + /// <summary> + /// Iterates through face edges and builds a list using the opposite edge, iteratively. + /// </summary> + /// <param name="pb">The probuilder mesh</param> + /// <param name="edges">The edges already selected</param> + /// <returns>The new selected edges</returns> + internal static IEnumerable<Edge> GetEdgeRingIterative(ProBuilderMesh pb, IEnumerable<Edge> edges) + { + List<WingedEdge> wings = WingedEdge.GetWingedEdges(pb); + List<EdgeLookup> edgeLookup = EdgeLookup.GetEdgeLookup(edges, pb.sharedVertexLookup).ToList(); + edgeLookup = edgeLookup.Distinct().ToList(); + + Dictionary<Edge, WingedEdge> wings_dic = new Dictionary<Edge, WingedEdge>(); + + for (int i = 0; i < wings.Count; i++) + if (!wings_dic.ContainsKey(wings[i].edge.common)) + wings_dic.Add(wings[i].edge.common, wings[i]); + + HashSet<EdgeLookup> used = new HashSet<EdgeLookup>(); + + for (int i = 0, c = edgeLookup.Count; i < c; i++) + { + WingedEdge we; + + if (!wings_dic.TryGetValue(edgeLookup[i].common, out we)) + continue; + + WingedEdge cur = we; + + if (!used.Contains(cur.edge)) + used.Add(cur.edge); + var next = EdgeRingNext(cur); + if (next != null && next.opposite != null && !used.Contains(next.edge)) + used.Add(next.edge); + var prev = EdgeRingNext(cur.opposite); + if (prev != null && prev.opposite != null && !used.Contains(prev.edge)) + used.Add(prev.edge); + } + + return used.Select(x => x.local); + } + + /// <summary> + /// Attempts to find edges along an Edge loop. + /// + /// http://wiki.blender.org/index.php/Doc:2.4/Manual/Modeling/Meshes/Selecting/Edges says: + /// First check to see if the selected element connects to only 3 other edges. + /// If the edge in question has already been added to the list, the selection ends. + /// Of the 3 edges that connect to the current edge, the ones that share a face with the current edge are eliminated + /// and the remaining edge is added to the list and is made the current edge. + /// </summary> + /// <param name="mesh"></param> + /// <param name="edges"></param> + /// <param name="loop"></param> + /// <returns></returns> + internal static bool GetEdgeLoop(ProBuilderMesh mesh, IEnumerable<Edge> edges, out Edge[] loop) + { + List<WingedEdge> wings = WingedEdge.GetWingedEdges(mesh); + IEnumerable<EdgeLookup> m_edgeLookup = EdgeLookup.GetEdgeLookup(edges, mesh.sharedVertexLookup); + HashSet<EdgeLookup> sources = new HashSet<EdgeLookup>(m_edgeLookup); + HashSet<EdgeLookup> used = new HashSet<EdgeLookup>(); + + for (int i = 0; i < wings.Count; i++) + { + if (used.Contains(wings[i].edge) || !sources.Contains(wings[i].edge)) + continue; + + bool completeLoop = GetEdgeLoopInternal(wings[i], wings[i].edge.common.b, used); + + // loop didn't close + if (!completeLoop) + GetEdgeLoopInternal(wings[i], wings[i].edge.common.a, used); + } + + loop = used.Select(x => x.local).ToArray(); + + return true; + } + + /// <summary> + /// Attempts to find edges along an Edge loop in an iterative way + /// + /// Adds two edges to the selection, one at each extremity + /// </summary> + /// <param name="mesh"></param> + /// <param name="lastEdgesAdded"></param> + /// <param name="loop"></param> + /// <returns></returns> + internal static bool GetEdgeLoopIterative(ProBuilderMesh mesh, IEnumerable<Edge> edges, out Edge[] loop) + { + List<WingedEdge> wings = WingedEdge.GetWingedEdges(mesh); + IEnumerable<EdgeLookup> m_edgeLookup = EdgeLookup.GetEdgeLookup(edges, mesh.sharedVertexLookup); + HashSet<EdgeLookup> sources = new HashSet<EdgeLookup>(m_edgeLookup); + HashSet<EdgeLookup> used = new HashSet<EdgeLookup>(); + + for (int i = 0; i < wings.Count; i++) + { + if (!sources.Contains(wings[i].edge)) + continue; + + GetEdgeLoopInternalIterative(wings[i], wings[i].edge.common, used); + } + + loop = used.Select(x => x.local).ToArray(); + + return true; + } + + static bool GetEdgeLoopInternal(WingedEdge start, int startIndex, HashSet<EdgeLookup> used) + { + int ind = startIndex; + WingedEdge cur = start; + + do + { + used.Add(cur.edge); + + List<WingedEdge> spokes = GetSpokes(cur, ind, true).DistinctBy(x => x.edge.common).ToList(); + + cur = null; + + if (spokes.Count == 4) + { + cur = spokes[2]; + ind = cur.edge.common.a == ind ? cur.edge.common.b : cur.edge.common.a; + } + } + while (cur != null && !used.Contains(cur.edge)); + + return cur != null; + } + + static void GetEdgeLoopInternalIterative(WingedEdge start, Edge edge, HashSet<EdgeLookup> used) + { + int indA = edge.a; + int indB = edge.b; + WingedEdge cur = start; + + if (!used.Contains(cur.edge)) + used.Add(cur.edge); + + List<WingedEdge> spokesA = GetSpokes(cur, indA, true).DistinctBy(x => x.edge.common).ToList(); + List<WingedEdge> spokesB = GetSpokes(cur, indB, true).DistinctBy(x => x.edge.common).ToList(); + + if (spokesA.Count == 4) + { + cur = spokesA[2]; + + if (!used.Contains(cur.edge)) + used.Add(cur.edge); + } + if (spokesB.Count == 4) + { + cur = spokesB[2]; + + if (!used.Contains(cur.edge)) + used.Add(cur.edge); + } + } + + static WingedEdge NextSpoke(WingedEdge wing, int pivot, bool opp) + { + if (opp) + return wing.opposite; + if (wing.next.edge.common.Contains(pivot)) + return wing.next; + if (wing.previous.edge.common.Contains(pivot)) + return wing.previous; + return null; + } + + /// <summary> + /// Return all edges connected to @wing with @sharedIndex as the pivot point. The first entry in the list is always the queried wing. + /// </summary> + /// <param name="wing"></param> + /// <param name="sharedIndex"></param> + /// <param name="allowHoles"></param> + /// <returns></returns> + internal static List<WingedEdge> GetSpokes(WingedEdge wing, int sharedIndex, bool allowHoles = false) + { + List<WingedEdge> spokes = new List<WingedEdge>(); + WingedEdge cur = wing; + bool opp = false; + + do + { + // https://fogbugz.unity3d.com/f/cases/1241105/ + if (spokes.Contains(cur)) + return spokes; + + spokes.Add(cur); + cur = NextSpoke(cur, sharedIndex, opp); + opp = !opp; + + // we've looped around as far as it's gon' go + if (cur != null && cur.edge.common.Equals(wing.edge.common)) + return spokes; + } + while (cur != null); + + if (!allowHoles) + return null; + + // if the first loop didn't come back, that means there was a hole in the geo + // do the loop again using the opposite wing + cur = wing.opposite; + opp = false; + List<WingedEdge> fragment = new List<WingedEdge>(); + + // if mesh is non-manifold this situation could arise + while (cur != null && !cur.edge.common.Equals(wing.edge.common)) + { + fragment.Add(cur); + cur = NextSpoke(cur, sharedIndex, opp); + opp = !opp; + } + + fragment.Reverse(); + spokes.AddRange(fragment); + + return spokes; + } + + /// <summary> + /// Grow faces to include any face touching the perimeter edges. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="faces">The faces to grow out from.</param> + /// <param name="maxAngleDiff">If provided, adjacent faces must have a normal that is within maxAngleDiff (in degrees) difference of the perimeter face.</param> + /// <returns>The original faces selection, plus any new faces added as a result the grow operation.</returns> + public static HashSet<Face> GrowSelection(ProBuilderMesh mesh, IEnumerable<Face> faces, float maxAngleDiff = -1f) + { + List<WingedEdge> wings = WingedEdge.GetWingedEdges(mesh, true); + HashSet<Face> source = new HashSet<Face>(faces); + HashSet<Face> neighboring = new HashSet<Face>(); + + Vector3 srcNormal = Vector3.zero; + bool checkAngle = maxAngleDiff > 0f; + + for (int i = 0; i < wings.Count; i++) + { + if (!source.Contains(wings[i].face)) + continue; + + if (checkAngle) + srcNormal = Math.Normal(mesh, wings[i].face); + + using (var it = new WingedEdgeEnumerator(wings[i])) + { + while (it.MoveNext()) + { + var w = it.Current; + + if (w.opposite != null && !source.Contains(w.opposite.face)) + { + if (checkAngle) + { + Vector3 oppNormal = Math.Normal(mesh, w.opposite.face); + + if (Vector3.Angle(srcNormal, oppNormal) < maxAngleDiff) + neighboring.Add(w.opposite.face); + } + else + { + neighboring.Add(w.opposite.face); + } + } + } + } + } + + return neighboring; + } + + static readonly Vector3 Vector3_Zero = new Vector3(0f, 0f, 0f); + + internal static void Flood(WingedEdge wing, HashSet<Face> selection) + { + Flood(null, wing, Vector3_Zero, -1f, selection); + } + + internal static void Flood(ProBuilderMesh pb, WingedEdge wing, Vector3 wingNrm, float maxAngle, HashSet<Face> selection) + { + WingedEdge next = wing; + + do + { + WingedEdge opp = next.opposite; + + if (opp != null && !selection.Contains(opp.face)) + { + if (maxAngle > 0f) + { + Vector3 oppNormal = Math.Normal(pb, opp.face); + + if (Vector3.Angle(wingNrm, oppNormal) < maxAngle) + { + if (selection.Add(opp.face)) + Flood(pb, opp, oppNormal, maxAngle, selection); + } + } + else + { + if (selection.Add(opp.face)) + Flood(pb, opp, wingNrm, maxAngle, selection); + } + } + + next = next.next; + } + while (next != wing); + } + + /// <summary> + /// Recursively add all faces touching any of the selected faces. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="faces">The starting faces.</param> + /// <param name="maxAngleDiff">Faces must have a normal that is within maxAngleDiff (in degrees) difference of the perimeter face to be added to the collection.</param> + /// <returns>A collection of faces that are connected by shared edges to the original faces.</returns> + public static HashSet<Face> FloodSelection(ProBuilderMesh mesh, IList<Face> faces, float maxAngleDiff) + { + List<WingedEdge> wings = WingedEdge.GetWingedEdges(mesh, true); + HashSet<Face> source = new HashSet<Face>(faces); + HashSet<Face> flood = new HashSet<Face>(); + + for (int i = 0; i < wings.Count; i++) + { + if (!flood.Contains(wings[i].face) && source.Contains(wings[i].face)) + { + flood.Add(wings[i].face); + Flood(mesh, wings[i], maxAngleDiff > 0f ? Math.Normal(mesh, wings[i].face) : Vector3_Zero, maxAngleDiff, flood); + } + } + return flood; + } + + /// <summary> + /// Fetch a face loop. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="faces">The faces to scan for loops.</param> + /// <param name="ring">Toggles between loop and ring. Ring and loop are arbritary with faces, so this parameter just toggles between which gets scanned first.</param> + /// <returns>A collection of faces gathered by extending a ring or loop,</returns> + public static HashSet<Face> GetFaceLoop(ProBuilderMesh mesh, Face[] faces, bool ring = false) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (faces == null) + throw new ArgumentNullException("faces"); + + HashSet<Face> loops = new HashSet<Face>(); + List<WingedEdge> wings = WingedEdge.GetWingedEdges(mesh); + + foreach (Face face in faces) + loops.UnionWith(GetFaceLoop(wings, face, ring)); + + return loops; + } + + /// <summary> + /// Get both a face ring and loop from the selected faces. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="faces">The faces to scan for ring and loops.</param> + /// <returns>A collection of faces gathered by extending in a ring and loop,</returns> + public static HashSet<Face> GetFaceRingAndLoop(ProBuilderMesh mesh, Face[] faces) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (faces == null) + throw new ArgumentNullException("faces"); + + HashSet<Face> loops = new HashSet<Face>(); + List<WingedEdge> wings = WingedEdge.GetWingedEdges(mesh); + + foreach (Face face in faces) + { + loops.UnionWith(GetFaceLoop(wings, face, true)); + loops.UnionWith(GetFaceLoop(wings, face, false)); + } + + return loops; + } + + /// <summary> + /// Get a face loop or ring from a set of winged edges. + /// </summary> + /// <param name="wings"></param> + /// <param name="face"></param> + /// <param name="ring"></param> + /// <returns></returns> + static HashSet<Face> GetFaceLoop(List<WingedEdge> wings, Face face, bool ring) + { + HashSet<Face> loop = new HashSet<Face>(); + + if (face == null) + return loop; + + WingedEdge start = wings.FirstOrDefault(x => x.face == face); + + if (start == null) + return loop; + + if (ring) + start = start.next ?? start.previous; + + for (int i = 0; i < 2; i++) + { + WingedEdge cur = start; + + if (i == 1) + { + if (start.opposite != null && start.opposite.face != null) + cur = start.opposite; + else + break; + } + + do + { + if (!loop.Add(cur.face)) + break; + + if (cur.Count() != 4) + break; + + // count == 4 assures us next.next is valid, but opposite can still be null + cur = cur.next.next.opposite; + } + while (cur != null && cur.face != null); + } + + return loop; + } + + /// <summary> + /// Find any holes touching one of the passed vertex indexes. + /// </summary> + /// <param name="mesh"></param> + /// <param name="indexes"></param> + /// <returns></returns> + internal static List<List<Edge>> FindHoles(ProBuilderMesh mesh, IEnumerable<int> indexes) + { + HashSet<int> common = mesh.GetSharedVertexHandles(indexes); + List<List<Edge>> holes = new List<List<Edge>>(); + List<WingedEdge> wings = WingedEdge.GetWingedEdges(mesh); + + foreach (List<WingedEdge> hole in FindHoles(wings, common)) + holes.Add(hole.Select(x => x.edge.local).ToList()); + + return holes; + } + + /// <summary> + /// Find any holes touching one of the passed common indexes. + /// </summary> + /// <param name="wings"></param> + /// <param name="common"></param> + /// <returns></returns> + internal static List<List<WingedEdge>> FindHoles(List<WingedEdge> wings, HashSet<int> common) + { + HashSet<WingedEdge> used = new HashSet<WingedEdge>(); + List<List<WingedEdge>> holes = new List<List<WingedEdge>>(); + + for (int i = 0; i < wings.Count; i++) + { + WingedEdge c = wings[i]; + + // if this edge has been added to a hole already, or the edge isn't in the approved list of indexes, + // or if there's an opposite face, this edge doesn't belong to a hole. move along. + if (c.opposite != null || used.Contains(c) || !(common.Contains(c.edge.common.a) || common.Contains(c.edge.common.b))) + continue; + + List<WingedEdge> hole = new List<WingedEdge>(); + WingedEdge it = c; + int ind = it.edge.common.a; + + int counter = 0; + + while (it != null && counter++ < k_MaxHoleIterations) + { + used.Add(it); + hole.Add(it); + + ind = it.edge.common.a == ind ? it.edge.common.b : it.edge.common.a; + it = FindNextEdgeInHole(it, ind); + + if (it == c) + break; + } + + List<SimpleTuple<int, int>> splits = new List<SimpleTuple<int, int>>(); + + // check previous wings for y == x (closed loop). + for (int n = 0; n < hole.Count; n++) + { + WingedEdge wing = hole[n]; + + for (int p = n - 1; p > -1; p--) + { + if (wing.edge.common.b == hole[p].edge.common.a) + { + splits.Add(new SimpleTuple<int, int>(p, n)); + break; + } + } + } + + // create new lists from each segment + // holes paths are nested, with holes + // possibly split between multiple nested + // holes + // + // [2, 0] [5, 3] + // [0, 9] [3, 11] + // [9, 10] [11, 10] + // [10, 7] [10, 2] + // [7, 6] or with split [2, 0] + // [6, 1] nesting -> [0, 9] + // [1, 4] [9, 10] + // [4, 7] <- (y == x) [10, 7] + // [7, 8] [7, 6] + // [8, 5] [6, 1] + // [5, 3] [1, 4] + // [3, 11] [4, 7] + // [11, 10] <- (y == x) [7, 8] + // [10, 2] <- (y == x) [8, 5] + // + // paths may also contain multiple segments non-tiered + + int splitCount = splits.Count; + + splits.Sort((x, y) => x.item1.CompareTo(y.item1)); + + int[] shift = new int[splitCount]; + + // Debug.Log(hole.ToString("\n") + "\n" + splits.ToString("\n")); + + for (int n = splitCount - 1; n > -1; n--) + { + int x = splits[n].item1, y = splits[n].item2 - shift[n]; + int range = (y - x) + 1; + + List<WingedEdge> section = hole.GetRange(x, range); + + hole.RemoveRange(x, range); + + for (int m = n - 1; m > -1; m--) + if (splits[m].item2 > splits[n].item2) + shift[m] += range; + + // verify that this path has at least one index that was asked for + if (splitCount < 2 || section.Any(w => common.Contains(w.edge.common.a)) || section.Any(w => common.Contains(w.edge.common.b))) + holes.Add(section); + } + } + + return holes; + } + + static WingedEdge FindNextEdgeInHole(WingedEdge wing, int common) + { + WingedEdge next = wing.GetAdjacentEdgeWithCommonIndex(common); + int counter = 0; + while (next != null && next != wing && counter++ < k_MaxHoleIterations) + { + if (next.opposite == null) + return next; + + next = next.opposite.GetAdjacentEdgeWithCommonIndex(common); + } + + return null; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ElementSelection.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ElementSelection.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4e70fcf6f2414bb8ef3e7e0ed69d6fc8751fa258 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ElementSelection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9be31b6177ca0453e928692a20b33b2c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ExtrudeElements.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ExtrudeElements.cs new file mode 100644 index 0000000000000000000000000000000000000000..3c20691d5115a8a9b864d9c07e4654a93b85d317 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ExtrudeElements.cs @@ -0,0 +1,589 @@ +using System; +using UnityEngine; +using System.Linq; +using System.Collections.Generic; +using UnityEngine.ProBuilder; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + /// <summary> + /// Face and edge extrusion. + /// </summary> + public static class ExtrudeElements + { + /// <summary> + /// Extrude a collection of faces. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="faces">The faces to extrude.</param> + /// <param name="method">Describes how faces are extruded.</param> + /// <param name="distance">The distance to extrude faces.</param> + /// <returns>An array of the faces created as a result of the extrusion. Null if the faces paramater is null or empty.</returns> + public static Face[] Extrude(this ProBuilderMesh mesh, IEnumerable<Face> faces, ExtrudeMethod method, float distance) + { + switch (method) + { + case ExtrudeMethod.IndividualFaces: + return ExtrudePerFace(mesh, faces, distance); + + default: + return ExtrudeAsGroups(mesh, faces, method == ExtrudeMethod.FaceNormal, distance); + } + } + + /// <summary> + /// Extrude a collection of edges. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="edges">The edges to extrude.</param> + /// <param name="distance">The distance to extrude.</param> + /// <param name="extrudeAsGroup">If true adjacent edges will be extruded retaining a shared vertex, if false the shared vertex will be split.</param> + /// <param name="enableManifoldExtrude">Pass true to allow this function to extrude manifold edges, false to disallow.</param> + /// <returns>The extruded edges, or null if the action failed due to manifold check or an empty edges parameter.</returns> + public static Edge[] Extrude(this ProBuilderMesh mesh, IEnumerable<Edge> edges, float distance, bool extrudeAsGroup, bool enableManifoldExtrude) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (edges == null) + throw new ArgumentNullException("edges"); + + SharedVertex[] sharedIndexes = mesh.sharedVerticesInternal; + + List<Edge> validEdges = new List<Edge>(); + List<Face> edgeFaces = new List<Face>(); + + foreach (Edge e in edges) + { + int faceCount = 0; + Face fa = null; + + foreach (Face face in mesh.facesInternal) + { + if (mesh.IndexOf(face.edgesInternal, e) > -1) + { + fa = face; + + if (++faceCount > 1) + break; + } + } + + if (enableManifoldExtrude || faceCount < 2) + { + validEdges.Add(e); + edgeFaces.Add(fa); + } + } + + if (validEdges.Count < 1) + return null; + + Vector3[] localVerts = mesh.positionsInternal; + if (!mesh.HasArrays(MeshArrays.Normal)) + mesh.Refresh(RefreshMask.Normals); + IList<Vector3> oNormals = mesh.normals; + + int[] allEdgeIndexes = new int[validEdges.Count * 2]; + int c = 0; + for (int i = 0; i < validEdges.Count; i++) + { + allEdgeIndexes[c++] = validEdges[i].a; + allEdgeIndexes[c++] = validEdges[i].b; + } + + List<Edge> extrudedIndexes = new List<Edge>(); + // used to set the editor selection to the newly created edges + List<Edge> newEdges = new List<Edge>(); + bool hasColors = mesh.HasArrays(MeshArrays.Color); + + // build out new faces around validEdges + for (int i = 0; i < validEdges.Count; i++) + { + Edge edge = validEdges[i]; + Face face = edgeFaces[i]; + + // Averages the normals using only vertices that are on the edge + Vector3 xnorm = extrudeAsGroup + ? InternalMeshUtility.AverageNormalWithIndexes(sharedIndexes[mesh.GetSharedVertexHandle(edge.a)], allEdgeIndexes, oNormals) + : Math.Normal(mesh, face); + + Vector3 ynorm = extrudeAsGroup + ? InternalMeshUtility.AverageNormalWithIndexes(sharedIndexes[mesh.GetSharedVertexHandle(edge.b)], allEdgeIndexes, oNormals) + : Math.Normal(mesh, face); + + int x_sharedIndex = mesh.GetSharedVertexHandle(edge.a); + int y_sharedIndex = mesh.GetSharedVertexHandle(edge.b); + + var positions = new Vector3[4] + { + localVerts[edge.a], + localVerts[edge.b], + localVerts[edge.a] + xnorm.normalized * distance, + localVerts[edge.b] + ynorm.normalized * distance + }; + + var colors = hasColors + ? new Color[4] + { + mesh.colorsInternal[edge.a], + mesh.colorsInternal[edge.b], + mesh.colorsInternal[edge.a], + mesh.colorsInternal[edge.b] + } + : null; + + Face newFace = mesh.AppendFace( + positions, + colors, + new Vector2[4], + new Face(new int[6] { 2, 1, 0, 2, 3, 1 }, face.submeshIndex, AutoUnwrapSettings.tile, 0, -1, -1, false), + new int[4] { x_sharedIndex, y_sharedIndex, -1, -1 }); + + newEdges.Add(new Edge(newFace.indexesInternal[3], newFace.indexesInternal[4])); + + extrudedIndexes.Add(new Edge(x_sharedIndex, newFace.indexesInternal[3])); + extrudedIndexes.Add(new Edge(y_sharedIndex, newFace.indexesInternal[4])); + } + + // merge extruded vertex indexes with each other + if (extrudeAsGroup) + { + for (int i = 0; i < extrudedIndexes.Count; i++) + { + int val = extrudedIndexes[i].a; + + for (int n = 0; n < extrudedIndexes.Count; n++) + { + if (n == i) + continue; + + if (extrudedIndexes[n].a == val) + { + mesh.SetVerticesCoincident(new int[] { extrudedIndexes[n].b, extrudedIndexes[i].b }); + break; + } + } + } + } + + // todo Should only need to invalidate caches on affected faces + foreach (Face f in mesh.facesInternal) + f.InvalidateCache(); + + return newEdges.ToArray(); + } + + /// <summary> + /// Split any shared vertices so that this face may be moved independently of the main object. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="faces">The faces to split from the mesh.</param> + /// <returns>The faces created forming the detached face group.</returns> + public static List<Face> DetachFaces(this ProBuilderMesh mesh, IEnumerable<Face> faces) + { + return DetachFaces(mesh, faces, true); + } + + /// <summary> + /// Split any shared vertices so that this face may be moved independently of the main object. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="faces">The faces to split from the mesh.</param> + /// <param name="deleteSourceFaces">Whether or not to delete the faces on the source geometry which were detached.</param> + /// <returns>The faces created forming the detached face group.</returns> + public static List<Face> DetachFaces(this ProBuilderMesh mesh, IEnumerable<Face> faces, bool deleteSourceFaces) + { + if (mesh == null) + throw new System.ArgumentNullException("mesh"); + + if (faces == null) + throw new System.ArgumentNullException("faces"); + + List<Vertex> vertices = new List<Vertex>(mesh.GetVertices()); + int sharedIndexOffset = mesh.sharedVerticesInternal.Length; + var lookup = mesh.sharedVertexLookup; + + List<FaceRebuildData> detached = new List<FaceRebuildData>(); + + foreach (Face face in faces) + { + FaceRebuildData data = new FaceRebuildData(); + data.vertices = new List<Vertex>(); + data.sharedIndexes = new List<int>(); + data.face = new Face(face); + + Dictionary<int, int> match = new Dictionary<int, int>(); + int[] indexes = new int[face.indexesInternal.Length]; + + for (int i = 0; i < face.indexesInternal.Length; i++) + { + int local; + + if (match.TryGetValue(face.indexesInternal[i], out local)) + { + indexes[i] = local; + } + else + { + local = data.vertices.Count; + indexes[i] = local; + match.Add(face.indexesInternal[i], local); + data.vertices.Add(vertices[face.indexesInternal[i]]); + data.sharedIndexes.Add(lookup[face.indexesInternal[i]] + sharedIndexOffset); + } + } + + data.face.indexesInternal = indexes.ToArray(); + detached.Add(data); + } + + FaceRebuildData.Apply(detached, mesh, vertices); + if (deleteSourceFaces) + { + mesh.DeleteFaces(faces); + } + + mesh.ToMesh(); + + return detached.Select(x => x.face).ToList(); + } + + + /// <summary> + /// Extrude each face in faces individually along it's normal by distance. + /// </summary> + /// <param name="pb"></param> + /// <param name="faces"></param> + /// <param name="distance"></param> + /// <returns></returns> + static Face[] ExtrudePerFace(ProBuilderMesh pb, IEnumerable<Face> faces, float distance) + { + Face[] faceArray = faces as Face[] ?? faces.ToArray(); + + if (!faceArray.Any()) + return null; + + List<Vertex> vertices = new List<Vertex>(pb.GetVertices()); + int sharedIndexMax = pb.sharedVerticesInternal.Length; + int sharedIndexOffset = 0; + int faceIndex = 0; + Dictionary<int, int> lookup = pb.sharedVertexLookup; + Dictionary<int, int> lookupUV = pb.sharedTextureLookup; + Dictionary<int, int> used = new Dictionary<int, int>(); + Face[] newFaces = new Face[faceArray.Sum(x => x.edges.Count)]; + + foreach (Face face in faceArray) + { + face.smoothingGroup = Smoothing.smoothingGroupNone; + face.textureGroup = -1; + + Vector3 delta = Math.Normal(pb, face) * distance; + Edge[] edges = face.edgesInternal; + + used.Clear(); + + for (int i = 0; i < edges.Length; i++) + { + int vc = vertices.Count; + int x = edges[i].a, y = edges[i].b; + + if (!used.ContainsKey(x)) + { + used.Add(x, lookup[x]); + lookup[x] = sharedIndexMax + (sharedIndexOffset++); + } + + if (!used.ContainsKey(y)) + { + used.Add(y, lookup[y]); + lookup[y] = sharedIndexMax + (sharedIndexOffset++); + } + + lookup.Add(vc + 0, used[x]); + lookup.Add(vc + 1, used[y]); + lookup.Add(vc + 2, lookup[x]); + lookup.Add(vc + 3, lookup[y]); + + Vertex xx = new Vertex(vertices[x]), yy = new Vertex(vertices[y]); + xx.position += delta; + yy.position += delta; + + vertices.Add(new Vertex(vertices[x])); + vertices.Add(new Vertex(vertices[y])); + + vertices.Add(xx); + vertices.Add(yy); + + Face bridge = new Face( + new int[6] { vc + 0, vc + 1, vc + 2, vc + 1, vc + 3, vc + 2 }, + face.submeshIndex, + new AutoUnwrapSettings(face.uv), + face.smoothingGroup, + -1, + -1, + false + ); + + newFaces[faceIndex++] = bridge; + } + + for (int i = 0; i < face.distinctIndexesInternal.Length; i++) + { + vertices[face.distinctIndexesInternal[i]].position += delta; + + // Break any UV shared connections + if (lookupUV != null && lookupUV.ContainsKey(face.distinctIndexesInternal[i])) + lookupUV.Remove(face.distinctIndexesInternal[i]); + } + } + + pb.SetVertices(vertices); + + var fc = pb.faceCount; + var nc = newFaces.Length; + var appended = new Face[fc + nc]; + Array.Copy(pb.facesInternal, 0, appended, 0, fc); + Array.Copy(newFaces, 0, appended, fc, nc); + pb.faces = appended; + pb.SetSharedVertices(lookup); + pb.SetSharedTextures(lookupUV); + + return newFaces; + } + + /// <summary> + /// Extrude faces as groups. + /// </summary> + /// <param name="mesh"></param> + /// <param name="faces"></param> + /// <param name="compensateAngleVertexDistance"></param> + /// <param name="distance"></param> + /// <returns></returns> + static Face[] ExtrudeAsGroups(ProBuilderMesh mesh, IEnumerable<Face> faces, bool compensateAngleVertexDistance, float distance) + { + if (faces == null || !faces.Any()) + return null; + + List<Vertex> vertices = new List<Vertex>(mesh.GetVertices()); + int sharedIndexMax = mesh.sharedVerticesInternal.Length; + int sharedIndexOffset = 0; + Dictionary<int, int> lookup = mesh.sharedVertexLookup; + Dictionary<int, int> lookupUV = mesh.sharedTextureLookup; + + List<Face> newFaces = new List<Face>(); + // old triangle index -> old shared index + Dictionary<int, int> oldSharedMap = new Dictionary<int, int>(); + // old shared index -> new shared index + Dictionary<int, int> newSharedMap = new Dictionary<int, int>(); + // bridge face extruded edges, maps vertex index to new extruded vertex position + Dictionary<int, int> delayPosition = new Dictionary<int, int>(); + // used to average the direction of vertices shared by perimeter edges + // key[shared index], value[normal count, normal sum] + Dictionary<int, SimpleTuple<Vector3, Vector3, List<int>>> extrudeMap = new Dictionary<int, SimpleTuple<Vector3, Vector3, List<int>>>(); + + List<WingedEdge> wings = WingedEdge.GetWingedEdges(mesh, faces, true); + List<HashSet<Face>> groups = GetFaceGroups(wings); + + foreach (HashSet<Face> group in groups) + { + Dictionary<EdgeLookup, Face> perimeter = GetPerimeterEdges(group, lookup); + + newSharedMap.Clear(); + oldSharedMap.Clear(); + + foreach (var edgeAndFace in perimeter) + { + EdgeLookup edge = edgeAndFace.Key; + Face face = edgeAndFace.Value; + + int vc = vertices.Count; + int x = edge.local.a, y = edge.local.b; + + if (!oldSharedMap.ContainsKey(x)) + { + oldSharedMap.Add(x, lookup[x]); + int newSharedIndex = -1; + + if (newSharedMap.TryGetValue(lookup[x], out newSharedIndex)) + { + lookup[x] = newSharedIndex; + } + else + { + newSharedIndex = sharedIndexMax + (sharedIndexOffset++); + newSharedMap.Add(lookup[x], newSharedIndex); + lookup[x] = newSharedIndex; + } + } + + if (!oldSharedMap.ContainsKey(y)) + { + oldSharedMap.Add(y, lookup[y]); + int newSharedIndex = -1; + + if (newSharedMap.TryGetValue(lookup[y], out newSharedIndex)) + { + lookup[y] = newSharedIndex; + } + else + { + newSharedIndex = sharedIndexMax + (sharedIndexOffset++); + newSharedMap.Add(lookup[y], newSharedIndex); + lookup[y] = newSharedIndex; + } + } + + lookup.Add(vc + 0, oldSharedMap[x]); + lookup.Add(vc + 1, oldSharedMap[y]); + lookup.Add(vc + 2, lookup[x]); + lookup.Add(vc + 3, lookup[y]); + + delayPosition.Add(vc + 2, x); + delayPosition.Add(vc + 3, y); + + vertices.Add(new Vertex(vertices[x])); + vertices.Add(new Vertex(vertices[y])); + + // extruded edge will be positioned later + vertices.Add(null); + vertices.Add(null); + + Face bridge = new Face( + new int[6] { vc + 0, vc + 1, vc + 2, vc + 1, vc + 3, vc + 2 }, + face.submeshIndex, + new AutoUnwrapSettings(face.uv), + Smoothing.smoothingGroupNone, + -1, + -1, + false + ); + + newFaces.Add(bridge); + } + + foreach (Face face in group) + { + // @todo keep together if possible + face.textureGroup = -1; + + Vector3 normal = Math.Normal(mesh, face); + + for (int i = 0; i < face.distinctIndexesInternal.Length; i++) + { + int idx = face.distinctIndexesInternal[i]; + + // If this vertex is on the perimeter but not part of a perimeter edge + // move the sharedIndex to match it's new value. + if (!oldSharedMap.ContainsKey(idx) && newSharedMap.ContainsKey(lookup[idx])) + lookup[idx] = newSharedMap[lookup[idx]]; + + int com = lookup[idx]; + + // Break any UV shared connections + if (lookupUV != null && lookupUV.ContainsKey(face.distinctIndexesInternal[i])) + lookupUV.Remove(face.distinctIndexesInternal[i]); + + // add the normal to the list of normals for this shared vertex + SimpleTuple<Vector3, Vector3, List<int>> dir; + + if (extrudeMap.TryGetValue(com, out dir)) + { + dir.item1 += normal; + dir.item3.Add(idx); + extrudeMap[com] = dir; + } + else + { + extrudeMap.Add(com, new SimpleTuple<Vector3, Vector3, List<int>>(normal, normal, new List<int>() { idx })); + } + } + } + } + + foreach (var kvp in extrudeMap) + { + Vector3 direction = (kvp.Value.item1 / kvp.Value.item3.Count); + direction.Normalize(); + + // If extruding by face normal extend vertices on seams by the hypotenuse + float modifier = compensateAngleVertexDistance ? Math.Secant(Vector3.Angle(direction, kvp.Value.item2) * Mathf.Deg2Rad) : 1f; + + direction.x *= distance * modifier; + direction.y *= distance * modifier; + direction.z *= distance * modifier; + + foreach (int i in kvp.Value.item3) + { + vertices[i].position += direction; + } + } + + foreach (var kvp in delayPosition) + vertices[kvp.Key] = new Vertex(vertices[kvp.Value]); + + mesh.SetVertices(vertices); + + var fc = mesh.faceCount; + var nc = newFaces.Count; + var appended = new Face[fc + nc]; + Array.Copy(mesh.facesInternal, 0, appended, 0, fc); + for (int i = fc, c = fc + nc; i < c; i++) + appended[i] = newFaces[i - fc]; + mesh.faces = appended; + mesh.SetSharedVertices(lookup); + mesh.SetSharedTextures(lookupUV); + + return newFaces.ToArray(); + } + + static List<HashSet<Face>> GetFaceGroups(List<WingedEdge> wings) + { + HashSet<Face> used = new HashSet<Face>(); + List<HashSet<Face>> groups = new List<HashSet<Face>>(); + + foreach (WingedEdge wing in wings) + { + if (used.Add(wing.face)) + { + HashSet<Face> group = new HashSet<Face>() { wing.face }; + + ElementSelection.Flood(wing, group); + + foreach (Face f in group) + used.Add(f); + + groups.Add(group); + } + } + + return groups; + } + + static Dictionary<EdgeLookup, Face> GetPerimeterEdges(HashSet<Face> faces, Dictionary<int, int> lookup) + { + Dictionary<EdgeLookup, Face> perimeter = new Dictionary<EdgeLookup, Face>(); + HashSet<EdgeLookup> used = new HashSet<EdgeLookup>(); + + foreach (Face face in faces) + { + foreach (Edge edge in face.edgesInternal) + { + EdgeLookup e = new EdgeLookup(lookup[edge.a], lookup[edge.b], edge.a, edge.b); + + if (!used.Add(e)) + { + if (perimeter.ContainsKey(e)) + perimeter.Remove(e); + } + else + { + perimeter.Add(e, face); + } + } + } + + return perimeter; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ExtrudeElements.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ExtrudeElements.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..51ebbffcebc77586819c17ab9ecf5e168e91c19c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/ExtrudeElements.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: caa73878d8fb64ec1b9ba323a2158672 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/InternalMeshUtility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/InternalMeshUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..c032daf2ae555b914ade7886838f9ed3e2d30dce --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/InternalMeshUtility.cs @@ -0,0 +1,288 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using ArrUtil = UnityEngine.ProBuilder.ArrayUtility; +using UnityEditor; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + static class InternalMeshUtility + { + /// <summary> + /// Averages shared normals with the mask of all (indexes contained in perimeter edge) + /// </summary> + internal static Vector3 AverageNormalWithIndexes(SharedVertex shared, int[] all, IList<Vector3> norm) + { + Vector3 n = Vector3.zero; + int count = 0; + for (int i = 0; i < all.Length; i++) + { + // this is a point in the perimeter, add it to the average + if (shared.Contains(all[i])) + { + n += norm[all[i]]; + count++; + } + } + return (n / (float)count); + } + + /// <summary> + /// "ProBuilder-ize" function + /// </summary> + /// <param name="t"></param> + /// <param name="preserveFaces"></param> + /// <returns></returns> + public static ProBuilderMesh CreateMeshWithTransform(Transform t, bool preserveFaces) + { + Mesh m = t.GetComponent<MeshFilter>().sharedMesh; + + Vector3[] m_vertices = MeshUtility.GetMeshChannel(t.gameObject, x => x.vertices); + Color[] m_colors = MeshUtility.GetMeshChannel(t.gameObject, x => x.colors); + Vector2[] m_uvs = MeshUtility.GetMeshChannel(t.gameObject, x => x.uv); + + List<Vector3> verts = preserveFaces ? new List<Vector3>(m.vertices) : new List<Vector3>(); + List<Color> cols = preserveFaces ? new List<Color>(m.colors) : new List<Color>(); + List<Vector2> uvs = preserveFaces ? new List<Vector2>(m.uv) : new List<Vector2>(); + List<Face> faces = new List<Face>(); + + for (int n = 0; n < m.subMeshCount; n++) + { + int[] tris = m.GetTriangles(n); + + for (int i = 0; i < tris.Length; i += 3) + { + int index = -1; + if (preserveFaces) + { + for (int j = 0; j < faces.Count; j++) + { + if (faces[j].distinctIndexesInternal.Contains(tris[i + 0]) || + faces[j].distinctIndexesInternal.Contains(tris[i + 1]) || + faces[j].distinctIndexesInternal.Contains(tris[i + 2])) + { + index = j; + break; + } + } + } + + if (index > -1 && preserveFaces) + { + int len = faces[index].indexesInternal.Length; + int[] arr = new int[len + 3]; + System.Array.Copy(faces[index].indexesInternal, 0, arr, 0, len); + arr[len + 0] = tris[i + 0]; + arr[len + 1] = tris[i + 1]; + arr[len + 2] = tris[i + 2]; + faces[index].indexesInternal = arr; + } + else + { + int[] faceTris; + + if (preserveFaces) + { + faceTris = new int[3] + { + tris[i + 0], + tris[i + 1], + tris[i + 2] + }; + } + else + { + verts.Add(m_vertices[tris[i + 0]]); + verts.Add(m_vertices[tris[i + 1]]); + verts.Add(m_vertices[tris[i + 2]]); + + cols.Add(m_colors != null ? m_colors[tris[i + 0]] : Color.white); + cols.Add(m_colors != null ? m_colors[tris[i + 1]] : Color.white); + cols.Add(m_colors != null ? m_colors[tris[i + 2]] : Color.white); + + uvs.Add(m_uvs[tris[i + 0]]); + uvs.Add(m_uvs[tris[i + 1]]); + uvs.Add(m_uvs[tris[i + 2]]); + + faceTris = new int[3] { i + 0, i + 1, i + 2 }; + } + + faces.Add( + new Face( + faceTris, + n, + AutoUnwrapSettings.tile, + 0, // smoothing group + -1, // texture group + -1, // element group + true // manualUV + )); + } + } + } + + GameObject go = (GameObject)Object.Instantiate(t.gameObject); + go.GetComponent<MeshFilter>().sharedMesh = null; + + ProBuilderMesh pb = go.AddComponent<ProBuilderMesh>(); + pb.RebuildWithPositionsAndFaces(verts.ToArray(), faces.ToArray()); + + pb.colorsInternal = cols.ToArray(); + pb.textures = uvs; + + pb.gameObject.name = t.name; + + go.transform.position = t.position; + go.transform.localRotation = t.localRotation; + go.transform.localScale = t.localScale; + + pb.CenterPivot(null); + + return pb; + } + + /// <summary> + /// ProBuilderize in-place function. You must call ToMesh() and Refresh() after + /// returning from this function, as this only creates the pb_Object and sets its + /// fields. This allows you to record the mesh and gameObject for Undo operations. + /// </summary> + /// <param name="pb"></param> + /// <param name="preserveFaces"></param> + /// <returns></returns> + public static bool ResetPbObjectWithMeshFilter(ProBuilderMesh pb, bool preserveFaces) + { + MeshFilter mf = pb.gameObject.GetComponent<MeshFilter>(); + + if (mf == null || mf.sharedMesh == null) + { + Log.Error(pb.name + " does not have a mesh or Mesh Filter component."); + return false; + } + + Mesh m = mf.sharedMesh; + + int vertexCount = m.vertexCount; + Vector3[] m_positions = MeshUtility.GetMeshChannel<Vector3[]>(pb.gameObject, x => x.vertices); + Color[] m_colors = MeshUtility.GetMeshChannel<Color[]>(pb.gameObject, x => x.colors); + Vector2[] m_uvs = MeshUtility.GetMeshChannel<Vector2[]>(pb.gameObject, x => x.uv); + + List<Vector3> verts = preserveFaces ? new List<Vector3>(m.vertices) : new List<Vector3>(); + List<Color> cols = preserveFaces ? new List<Color>(m.colors) : new List<Color>(); + List<Vector2> uvs = preserveFaces ? new List<Vector2>(m.uv) : new List<Vector2>(); + List<Face> faces = new List<Face>(); + + MeshRenderer mr = pb.gameObject.GetComponent<MeshRenderer>(); + if (mr == null) mr = pb.gameObject.AddComponent<MeshRenderer>(); + + Material[] sharedMaterials = mr.sharedMaterials; + int mat_length = sharedMaterials.Length; + + for (int n = 0; n < m.subMeshCount; n++) + { + int[] tris = m.GetTriangles(n); + for (int i = 0; i < tris.Length; i += 3) + { + int index = -1; + if (preserveFaces) + { + for (int j = 0; j < faces.Count; j++) + { + if (faces[j].distinctIndexesInternal.Contains(tris[i + 0]) || + faces[j].distinctIndexesInternal.Contains(tris[i + 1]) || + faces[j].distinctIndexesInternal.Contains(tris[i + 2])) + { + index = j; + break; + } + } + } + + if (index > -1 && preserveFaces) + { + int len = faces[index].indexesInternal.Length; + int[] arr = new int[len + 3]; + System.Array.Copy(faces[index].indexesInternal, 0, arr, 0, len); + arr[len + 0] = tris[i + 0]; + arr[len + 1] = tris[i + 1]; + arr[len + 2] = tris[i + 2]; + faces[index].indexesInternal = arr; + } + else + { + int[] faceTris; + + if (preserveFaces) + { + faceTris = new int[3] + { + tris[i + 0], + tris[i + 1], + tris[i + 2] + }; + } + else + { + verts.Add(m_positions[tris[i + 0]]); + verts.Add(m_positions[tris[i + 1]]); + verts.Add(m_positions[tris[i + 2]]); + + cols.Add(m_colors != null && m_colors.Length == vertexCount ? m_colors[tris[i + 0]] : Color.white); + cols.Add(m_colors != null && m_colors.Length == vertexCount ? m_colors[tris[i + 1]] : Color.white); + cols.Add(m_colors != null && m_colors.Length == vertexCount ? m_colors[tris[i + 2]] : Color.white); + + uvs.Add(m_uvs[tris[i + 0]]); + uvs.Add(m_uvs[tris[i + 1]]); + uvs.Add(m_uvs[tris[i + 2]]); + + faceTris = new int[3] { i + 0, i + 1, i + 2 }; + } + + faces.Add( + new Face( + faceTris, + Math.Clamp(n, 0, mat_length - 1), + AutoUnwrapSettings.tile, + 0, // smoothing group + -1, // texture group + -1, // element group + true // manualUV + )); + } + } + } + + pb.positionsInternal = verts.ToArray(); + pb.texturesInternal = uvs.ToArray(); + pb.facesInternal = faces.ToArray(); + pb.sharedVerticesInternal = SharedVertex.GetSharedVerticesWithPositions(verts.ToArray()); + pb.colorsInternal = cols.ToArray(); + + return true; + } + + internal static void FilterUnusedSubmeshIndexes(ProBuilderMesh mesh) + { + var materials = mesh.renderer.sharedMaterials; + var submeshCount = materials.Length; + var used = new bool[submeshCount]; + + foreach (var face in mesh.facesInternal) + used[Math.Clamp(face.submeshIndex, 0, submeshCount - 1)] = true; + + var unused = ArrUtil.AllIndexesOf(used, x => !x); + + if (unused.Any()) + { + foreach (var face in mesh.facesInternal) + { + var original = face.submeshIndex; + foreach (var index in unused) + if (original > index) + face.submeshIndex--; + } + + mesh.renderer.sharedMaterials = ArrUtil.RemoveAt(materials, unused); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/InternalMeshUtility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/InternalMeshUtility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3c07af36f19919f023a6249ea994ce84289c8057 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/InternalMeshUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a9ea06f47bdbe427294162ab3d8e4ef3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MergeElements.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MergeElements.cs new file mode 100644 index 0000000000000000000000000000000000000000..aa32d68cfffe023ba81844b03ea9c3c3d35f2c9e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MergeElements.cs @@ -0,0 +1,134 @@ +using UnityEngine; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + /// <summary> + /// Merging faces together. + /// </summary> + static class MergeElements + { + /// <summary> + /// Merge each pair of faces to a single face. Indexes are combined, but otherwise the properties of the first face in the pair take precedence. Returns a list of the new faces created. + /// </summary> + /// <param name="target"></param> + /// <param name="pairs"></param> + /// <param name="collapseCoincidentVertices"></param> + /// <returns></returns> + public static List<Face> MergePairs(ProBuilderMesh target, IEnumerable<SimpleTuple<Face, Face>> pairs, bool collapseCoincidentVertices = true) + { + HashSet<Face> remove = new HashSet<Face>(); + List<Face> add = new List<Face>(); + + foreach (SimpleTuple<Face, Face> pair in pairs) + { + Face left = pair.item1; + Face right = pair.item2; + int leftLength = left.indexesInternal.Length; + int rightLength = right.indexesInternal.Length; + int[] indexes = new int[leftLength + rightLength]; + System.Array.Copy(left.indexesInternal, 0, indexes, 0, leftLength); + System.Array.Copy(right.indexesInternal, 0, indexes, leftLength, rightLength); + add.Add(new Face(indexes, + left.submeshIndex, + left.uv, + left.smoothingGroup, + left.textureGroup, + left.elementGroup, + left.manualUV)); + remove.Add(left); + remove.Add(right); + } + + List<Face> faces = target.facesInternal.Where(x => !remove.Contains(x)).ToList(); + faces.AddRange(add); + target.faces = faces; + + if (collapseCoincidentVertices) + CollapseCoincidentVertices(target, add); + + return add; + } + + /// <summary> + /// Merge a collection of faces to a single face. This function does not + /// perform any sanity checks, it just merges faces. It's the caller's + /// responsibility to make sure that the input is valid. + /// In addition to merging faces this method also removes duplicate vertices + /// created as a result of merging previously common vertices. + /// </summary> + /// <param name="target"></param> + /// <param name="faces"></param> + /// <returns></returns> + public static Face Merge(ProBuilderMesh target, IEnumerable<Face> faces) + { + int mergedCount = faces != null ? faces.Count() : 0; + + if (mergedCount < 1) + return null; + + Face first = faces.First(); + + Face mergedFace = new Face(faces.SelectMany(x => x.indexesInternal).ToArray(), + first.submeshIndex, + first.uv, + first.smoothingGroup, + first.textureGroup, + first.elementGroup, + first.manualUV); + + Face[] rebuiltFaces = new Face[target.facesInternal.Length - mergedCount + 1]; + + int n = 0; + + HashSet<Face> skip = new HashSet<Face>(faces); + + foreach (Face f in target.facesInternal) + { + if (!skip.Contains(f)) + rebuiltFaces[n++] = f; + } + + rebuiltFaces[n] = mergedFace; + + target.faces = rebuiltFaces; + + CollapseCoincidentVertices(target, new Face[] { mergedFace }); + + return mergedFace; + } + + /// <summary> + /// Condense co-incident vertex positions per-face. vertices must already be marked as shared in the sharedIndexes + /// array to be considered. This method is really only useful after merging faces. + /// </summary> + /// <param name="mesh"></param> + /// <param name="faces"></param> + internal static void CollapseCoincidentVertices(ProBuilderMesh mesh, IEnumerable<Face> faces) + { + Dictionary<int, int> lookup = mesh.sharedVertexLookup; + Dictionary<int, int> matches = new Dictionary<int, int>(); + + foreach (Face face in faces) + { + matches.Clear(); + + for (int i = 0; i < face.indexesInternal.Length; i++) + { + int common = lookup[face.indexesInternal[i]]; + + if (matches.ContainsKey(common)) + face.indexesInternal[i] = matches[common]; + else + matches.Add(common, face.indexesInternal[i]); + } + + face.InvalidateCache(); + } + + MeshValidation.RemoveUnusedVertices(mesh); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MergeElements.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MergeElements.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..df42a273d6864d60330718ebc5b2fd6c12885997 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MergeElements.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d9e3db3de6fd8480bb4e763ca2dcbe03 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshImporter.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshImporter.cs new file mode 100644 index 0000000000000000000000000000000000000000..c0556a3630cb1cf1d0877657aab4c9fc37efe250 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshImporter.cs @@ -0,0 +1,373 @@ +using UnityEngine; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + /// <summary> + /// A collection of settings used when importing models to the ProBuilderMesh component. + /// </summary> + [Serializable] + public sealed class MeshImportSettings + { + [SerializeField] + bool m_Quads = true; + + [SerializeField] + bool m_Smoothing = true; + + [SerializeField] + float m_SmoothingThreshold = 1f; + + /// <value> + /// Try to quadrangilize triangle meshes. + /// </value> + public bool quads + { + get { return m_Quads; } + set { m_Quads = value; } + } + + // Allow ngons when importing meshes. @todo + // public bool ngons = false; + + /// <value> + /// Generate smoothing groups based on mesh normals. + /// </value> + public bool smoothing + { + get { return m_Smoothing; } + set { m_Smoothing = value; } + } + + /// <value> + /// Degree of difference between face normals to allow when determining smoothing groups. + /// </value> + public float smoothingAngle + { + get { return m_SmoothingThreshold; } + set { m_SmoothingThreshold = value; } + } + + public override string ToString() + { + return string.Format("quads: {0}\nsmoothing: {1}\nthreshold: {2}", + quads, + smoothing, + smoothingAngle); + } + } + + /// <summary> + /// Responsible for importing UnityEngine.Mesh data to a ProBuilderMesh component. + /// </summary> + public sealed class MeshImporter + { + static readonly MeshImportSettings k_DefaultImportSettings = new MeshImportSettings() + { + quads = true, + smoothing = true, + smoothingAngle = 1f + }; + + Mesh m_SourceMesh; + Material[] m_SourceMaterials; + ProBuilderMesh m_Destination; + Vertex[] m_Vertices; + + public MeshImporter(GameObject gameObject) + { + MeshFilter meshFilter = gameObject.GetComponent<MeshFilter>(); + m_SourceMesh = meshFilter.sharedMesh; + if(m_SourceMesh == null) + throw new ArgumentNullException("gameObject", "GameObject does not contain a valid MeshFilter.sharedMesh."); + m_Destination = gameObject.DemandComponent<ProBuilderMesh>(); + m_SourceMaterials = gameObject.GetComponent<MeshRenderer>()?.sharedMaterials; + } + + /// <summary> + /// Create a new ProBuilderMesh importer instance. + /// </summary> + /// <param name="sourceMesh">The Mesh asset to import vertex data from.</param> + /// <param name="sourceMaterials">The materials to assign to the ProBuilderMesh renderer.</param> + /// <param name="destination">The ProBuilderMesh asset to write vertex data to.</param> + public MeshImporter(Mesh sourceMesh, Material[] sourceMaterials, ProBuilderMesh destination) + { + if(sourceMesh == null) + throw new ArgumentNullException("sourceMesh"); + if(destination == null) + throw new ArgumentNullException("destination"); + m_SourceMesh = sourceMesh; + m_SourceMaterials = sourceMaterials; + m_Destination = destination; + } + + [Obsolete, EditorBrowsable(EditorBrowsableState.Never)] + public MeshImporter(ProBuilderMesh destination) + { + m_Destination = destination; + } + + [Obsolete, EditorBrowsable(EditorBrowsableState.Never)] + public bool Import(GameObject go, MeshImportSettings importSettings = null) + { + try + { + m_SourceMesh = go.GetComponent<MeshFilter>().sharedMesh; + m_SourceMaterials = go.GetComponent<MeshRenderer>()?.sharedMaterials; + Import(importSettings); + } + catch (Exception e) + { + Log.Error(e.ToString()); + return false; + } + + return true; + } + + /// <summary> + /// Import mesh data from a GameObject's MeshFilter.sharedMesh and MeshRenderer.sharedMaterials. + /// </summary> + /// <param name="originalMesh">The UnityEngine.Mesh to extract attributes from.</param> + /// <param name="materials">The materials array corresponding to the originalMesh submeshes.</param> + /// <param name="importSettings">Optional settings parameter defines import customization properties.</param> + /// <exception cref="NotSupportedException">Import only supports triangle and quad mesh topologies.</exception> + public void Import(MeshImportSettings importSettings = null) + { + if (importSettings == null) + importSettings = k_DefaultImportSettings; + + // When importing the mesh is always split into triangles with no vertices shared + // between faces. In a later step co-incident vertices are collapsed (eg, before + // leaving the Import function). + Vertex[] sourceVertices = m_SourceMesh.GetVertices(); + List<Vertex> splitVertices = new List<Vertex>(); + List<Face> faces = new List<Face>(); + + // Fill in Faces array with just the position indexes. In the next step we'll + // figure out smoothing groups & merging + int vertexIndex = 0; + int materialCount = m_SourceMaterials != null ? m_SourceMaterials.Length : 0; + + for (int submeshIndex = 0; submeshIndex < m_SourceMesh.subMeshCount; submeshIndex++) + { + switch (m_SourceMesh.GetTopology(submeshIndex)) + { + case MeshTopology.Triangles: + { + int[] indexes = m_SourceMesh.GetIndices(submeshIndex); + + for (int tri = 0; tri < indexes.Length; tri += 3) + { + faces.Add(new Face( + new int[] { vertexIndex, vertexIndex + 1, vertexIndex + 2 }, + Math.Clamp(submeshIndex, 0, materialCount - 1), + AutoUnwrapSettings.tile, + Smoothing.smoothingGroupNone, + -1, + -1, + true)); + + splitVertices.Add(sourceVertices[indexes[tri]]); + splitVertices.Add(sourceVertices[indexes[tri + 1]]); + splitVertices.Add(sourceVertices[indexes[tri + 2]]); + + vertexIndex += 3; + } + } + break; + + case MeshTopology.Quads: + { + int[] indexes = m_SourceMesh.GetIndices(submeshIndex); + + for (int quad = 0; quad < indexes.Length; quad += 4) + { + faces.Add(new Face(new int[] + { + vertexIndex, vertexIndex + 1, vertexIndex + 2, + vertexIndex + 2, vertexIndex + 3, vertexIndex + 0 + }, + Math.Clamp(submeshIndex, 0, materialCount - 1), + AutoUnwrapSettings.tile, + Smoothing.smoothingGroupNone, + -1, + -1, + true)); + + splitVertices.Add(sourceVertices[indexes[quad]]); + splitVertices.Add(sourceVertices[indexes[quad + 1]]); + splitVertices.Add(sourceVertices[indexes[quad + 2]]); + splitVertices.Add(sourceVertices[indexes[quad + 3]]); + + vertexIndex += 4; + } + } + break; + + default: + throw new NotSupportedException("ProBuilder only supports importing triangle and quad meshes."); + } + } + + m_Vertices = splitVertices.ToArray(); + + m_Destination.Clear(); + m_Destination.SetVertices(m_Vertices); + m_Destination.faces = faces; + m_Destination.sharedVertices = SharedVertex.GetSharedVerticesWithPositions(m_Destination.positionsInternal); + m_Destination.sharedTextures = new SharedVertex[0]; + + HashSet<Face> processed = new HashSet<Face>(); + + if (importSettings.quads) + { + List<WingedEdge> wings = WingedEdge.GetWingedEdges(m_Destination, m_Destination.facesInternal, true); + + // build a lookup of the strength of edge connections between triangle faces + Dictionary<EdgeLookup, float> connections = new Dictionary<EdgeLookup, float>(); + + for (int i = 0; i < wings.Count; i++) + { + using (var it = new WingedEdgeEnumerator(wings[i])) + { + while (it.MoveNext()) + { + var border = it.Current; + + if (border.opposite != null && !connections.ContainsKey(border.edge)) + { + float score = GetQuadScore(border, border.opposite); + connections.Add(border.edge, score); + } + } + } + } + + List<SimpleTuple<Face, Face>> quads = new List<SimpleTuple<Face, Face>>(); + + // move through each face and find it's best quad neighbor + foreach (WingedEdge face in wings) + { + if (!processed.Add(face.face)) + continue; + + float bestScore = 0f; + Face buddy = null; + + using (var it = new WingedEdgeEnumerator(face)) + { + while (it.MoveNext()) + { + var border = it.Current; + + if (border.opposite != null && processed.Contains(border.opposite.face)) + continue; + + float borderScore; + + // only add it if the opposite face's best score is also this face + if (connections.TryGetValue(border.edge, out borderScore) && + borderScore > bestScore && + face.face == GetBestQuadConnection(border.opposite, connections)) + { + bestScore = borderScore; + buddy = border.opposite.face; + } + } + } + + if (buddy != null) + { + processed.Add(buddy); + quads.Add(new SimpleTuple<Face, Face>(face.face, buddy)); + } + } + + // don't collapse coincident vertices if smoothing is enabled, we need the original normals intact + MergeElements.MergePairs(m_Destination, quads, !importSettings.smoothing); + } + + if (importSettings.smoothing) + { + Smoothing.ApplySmoothingGroups(m_Destination, m_Destination.facesInternal, importSettings.smoothingAngle, m_Vertices.Select(x => x.normal).ToArray()); + // After smoothing has been applied go back and weld coincident vertices created by MergePairs. + MergeElements.CollapseCoincidentVertices(m_Destination, m_Destination.facesInternal); + } + } + + static Face GetBestQuadConnection(WingedEdge wing, Dictionary<EdgeLookup, float> connections) + { + float score = 0f; + Face face = null; + + using (var it = new WingedEdgeEnumerator(wing)) + { + while (it.MoveNext()) + { + var border = it.Current; + + float s = 0f; + + if (connections.TryGetValue(border.edge, out s) && s > score) + { + score = connections[border.edge]; + face = border.opposite.face; + } + } + } + + return face; + } + + /** + * Get a weighted value for the quality of a quad composed of two triangles. 0 is terrible, 1 is perfect. + * normalThreshold will discard any quads where the dot product of their normals is less than the threshold. + * @todo Abstract the quad detection to a separate class so it can be applied to pb_Objects. + */ + float GetQuadScore(WingedEdge left, WingedEdge right, float normalThreshold = .9f) + { + int[] quad = WingedEdge.MakeQuad(left, right); + + if (quad == null) + return 0f; + + // first check normals + Vector3 leftNormal = Math.Normal(m_Vertices[quad[0]].position, m_Vertices[quad[1]].position, m_Vertices[quad[2]].position); + Vector3 rightNormal = Math.Normal(m_Vertices[quad[2]].position, m_Vertices[quad[3]].position, m_Vertices[quad[0]].position); + + float score = Vector3.Dot(leftNormal, rightNormal); + + if (score < normalThreshold) + return 0f; + + // next is right-angle-ness check + Vector3 a = (m_Vertices[quad[1]].position - m_Vertices[quad[0]].position); + Vector3 b = (m_Vertices[quad[2]].position - m_Vertices[quad[1]].position); + Vector3 c = (m_Vertices[quad[3]].position - m_Vertices[quad[2]].position); + Vector3 d = (m_Vertices[quad[0]].position - m_Vertices[quad[3]].position); + + a.Normalize(); + b.Normalize(); + c.Normalize(); + d.Normalize(); + + float da = Mathf.Abs(Vector3.Dot(a, b)); + float db = Mathf.Abs(Vector3.Dot(b, c)); + float dc = Mathf.Abs(Vector3.Dot(c, d)); + float dd = Mathf.Abs(Vector3.Dot(d, a)); + + score += 1f - ((da + db + dc + dd) * .25f); + + // and how close to parallel the opposite sides area + score += Mathf.Abs(Vector3.Dot(a, c)) * .5f; + score += Mathf.Abs(Vector3.Dot(b, d)) * .5f; + + // the three tests each contribute 1 + return score * .33f; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshImporter.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshImporter.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ef45d4cace5b83da223ef31ffcd00c7e6be87cb9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshImporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5963564d485624ab6ad4547f9451dbe6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshTransform.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshTransform.cs new file mode 100644 index 0000000000000000000000000000000000000000..4f0aa3e5284cec0dc4732d614ee6ca2878408151 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshTransform.cs @@ -0,0 +1,94 @@ +namespace UnityEngine.ProBuilder.MeshOperations +{ + /// <summary> + /// Functions for manipulating the transform of a mesh. + /// </summary> + public static class MeshTransform + { + internal static void SetPivot(this ProBuilderMesh mesh, PivotLocation pivotType, int firstVertexIndex = 0) + { + switch (pivotType) + { + case PivotLocation.Center: + mesh.CenterPivot(null); + break; + + case PivotLocation.FirstVertex: + mesh.CenterPivot(new int[1] { firstVertexIndex }); + break; + } + } + + /// <summary> + /// Center the mesh pivot at the average of a set of vertices. + /// </summary> + /// <param name="mesh">The target mesh.</param> + /// <param name="indexes">The indexes of the positions to average to find the new pivot.</param> + public static void CenterPivot(this ProBuilderMesh mesh, int[] indexes) + { + if (mesh == null) + throw new System.ArgumentNullException("mesh"); + + Vector3 center = Vector3.zero; + + if (indexes != null && indexes.Length > 0) + { + Vector3[] positions = mesh.positionsInternal; + + if (positions == null || positions.Length < 3) + return; + + foreach (int i in indexes) + center += positions[i]; + + center = mesh.transform.TransformPoint(center / (float)indexes.Length); + } + else + { + center = mesh.transform.TransformPoint(mesh.mesh.bounds.center); + } + + Vector3 dir = (mesh.transform.position - center); + + mesh.transform.position = center; + + mesh.ToMesh(); + mesh.TranslateVerticesInWorldSpace(mesh.mesh.triangles, dir); + mesh.Refresh(); + } + + /// <summary> + /// Set the pivot point of a mesh in world space. The Transform component position property is set to worldPosition, while the mesh geometry does not move. + /// </summary> + /// <param name="mesh">The target mesh.</param> + /// <param name="worldPosition">The new pivot position in world space.</param> + public static void SetPivot(this ProBuilderMesh mesh, Vector3 worldPosition) + { + if (mesh == null) + throw new System.ArgumentNullException("mesh"); + + Vector3 offset = mesh.transform.position - worldPosition; + mesh.transform.position = worldPosition; + mesh.ToMesh(); + mesh.TranslateVerticesInWorldSpace(mesh.mesh.triangles, offset); + mesh.Refresh(); + } + + /// <summary> + /// Scale vertices and set transform.localScale to Vector3.one. + /// </summary> + /// <param name="mesh">The target mesh.</param> + public static void FreezeScaleTransform(this ProBuilderMesh mesh) + { + if (mesh == null) + throw new System.ArgumentNullException("mesh"); + + Vector3[] v = mesh.positionsInternal; + + for (var i = 0; i < v.Length; i++) + v[i] = Vector3.Scale(v[i], mesh.transform.localScale); + + mesh.transform.localScale = new Vector3(1f, 1f, 1f); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshTransform.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshTransform.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..162431b39412320c4e9692195e2aea872d3a62c6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshTransform.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aac023407bdc9df4db32c6aa0c29ef25 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshValidation.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshValidation.cs new file mode 100644 index 0000000000000000000000000000000000000000..be4fe600ce3fded52c94c085daa014fe150d853f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshValidation.cs @@ -0,0 +1,402 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + /// <summary> + /// Methods for validating and fixing mesh topology. + /// </summary> + public static class MeshValidation + { + /// <summary> + /// Check if any face on a mesh contains degenerate triangles. A degenerate triangle does not have any area. + /// </summary> + /// <param name="mesh">The mesh to test for degenerate triangles.</param> + /// <returns>True if any face contains a degenerate triangle, false if no degenerate triangles are found.</returns> + /// <seealso cref="RemoveDegenerateTriangles"/> + public static bool ContainsDegenerateTriangles(this ProBuilderMesh mesh) + { + return ContainsDegenerateTriangles(mesh, mesh.facesInternal); + } + + /// <summary> + /// Check if any face contains degenerate triangles. A degenerate triangle does not have any area. + /// </summary> + /// <param name="mesh">The mesh to test for degenerate triangles.</param> + /// <param name="faces">The faces to test for degenerate triangles.</param> + /// <returns>True if any face contains a degenerate triangle, false if no degenerate triangles are found.</returns> + /// <seealso cref="RemoveDegenerateTriangles"/> + public static bool ContainsDegenerateTriangles(this ProBuilderMesh mesh, IList<Face> faces) + { + var positions = mesh.positionsInternal; + + foreach (var face in faces) + { + var indices = face.indexesInternal; + + for (int i = 0; i < indices.Length; i += 3) + { + float area = Math.TriangleArea( + positions[indices[i + 0]], + positions[indices[i + 1]], + positions[indices[i + 2]]); + + if (area <= Mathf.Epsilon) + return true; + } + } + + return false; + } + + /// <summary> + /// Check if any face contains degenerate triangles. A degenerate triangle does not have any area. + /// </summary> + /// <param name="mesh">The mesh to test for degenerate triangles.</param> + /// <param name="face">The face to test for degenerate triangles.</param> + /// <returns>True if any triangle within the face contains a degenerate triangle, false if no degenerate triangles are found.</returns> + /// <seealso cref="RemoveDegenerateTriangles"/> + public static bool ContainsDegenerateTriangles(this ProBuilderMesh mesh, Face face) + { + var positions = mesh.positionsInternal; + var indices = face.indexesInternal; + + for (int i = 0; i < indices.Length; i += 3) + { + float area = Math.TriangleArea( + positions[indices[i + 0]], + positions[indices[i + 1]], + positions[indices[i + 2]]); + + if (area <= Mathf.Epsilon) + return true; + } + + return false; + } + + /// <summary> + /// Tests that all triangles in a face are connected. + /// </summary> + /// <param name="mesh">The mesh that owns the face to be tested.</param> + /// <param name="face">The face to test.</param> + /// <returns>True if the face contains split triangles, false if the face is contiguous.</returns> + public static bool ContainsNonContiguousTriangles(this ProBuilderMesh mesh, Face face) + { + Edge current = face.edgesInternal[0], start = current; + int index = current.a; + int count = 1; + + while (face.TryGetNextEdge(current, current.b, ref current, ref index) + && current != start + && count < face.edgesInternal.Length) + { + count++; + } + + return count != face.edgesInternal.Length; + } + + /// <summary> + /// Ensure that each face in faces is composed of contiguous triangle sets. If a face contains non-contiguous + /// triangles, it will be split into as many faces as necessary to ensure that each group of adjacent triangles + /// compose a single face. + /// </summary> + /// <param name="mesh">The mesh that contains the faces to test.</param> + /// <param name="faces">The faces to test for non-contiguous triangles.</param> + /// <returns> + /// A list of any newly created faces as a result of splitting non-contiguous triangles. Returns an + /// empty list if no faces required fixing. + /// </returns> + public static List<Face> EnsureFacesAreComposedOfContiguousTriangles(this ProBuilderMesh mesh, IEnumerable<Face> faces) + { + var appended = new List<Face>(); + + foreach (var face in faces) + { + if (ContainsNonContiguousTriangles(mesh, face)) + { + var groups = CollectFaceGroups(mesh, face); + + if (groups.Count() < 2) + continue; + + face.SetIndexes(groups[0].SelectMany(x=>x.indices)); + + for (int i = 1; i < groups.Count; i++) + { + var duplicate = new Face(face); + duplicate.SetIndexes(groups[i].SelectMany(x => x.indices)); + appended.Add(duplicate); + } + } + } + + var rebuilt = new List<Face>(mesh.facesInternal); + + rebuilt.AddRange(appended); + + mesh.faces = rebuilt; + + return appended; + } + + internal static List<List<Triangle>> CollectFaceGroups(this ProBuilderMesh mesh, Face face) + { + var groups = new List<List<Triangle>>(); + var indices = face.indexesInternal; + + for (int i = 0; i < indices.Length; i += 3) + { + var triangle = new Triangle(indices[i], indices[i+1], indices[i+2]); + var matched = false; + + for(int n = 0; n < groups.Count; n++) + { + // this doesn't account for triangles that are adjacent through coincident vertices + if (groups[n].Any(x => x.IsAdjacent(triangle))) + { + groups[n].Add(triangle); + matched = true; + break; + } + } + + if (!matched) + groups.Add(new List<Triangle>() { triangle }); + } + + return groups; + } + + /// <summary> + /// Iterates through all faces in a mesh and removes triangles with an area less than float.Epsilon, or with + /// indexes that point to the same vertex. This function also enforces the rule that a face must contain no + /// coincident vertices. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="removed">An optional list to be populated with the removed indices. If no degenerate triangles are found, this list will contain no elements.</param> + /// <returns>True if degenerate triangles were found and removed, false if no degenerate triangles were found.</returns> + public static bool RemoveDegenerateTriangles(ProBuilderMesh mesh, List<int> removed = null) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + Dictionary<int, int> m_Lookup = mesh.sharedVertexLookup; + Dictionary<int, int> m_LookupUV = mesh.sharedTextureLookup; + Vector3[] m_Positions = mesh.positionsInternal; + Dictionary<int, int> m_RebuiltLookup = new Dictionary<int, int>(m_Lookup.Count); + Dictionary<int, int> m_RebuiltLookupUV = new Dictionary<int, int>(m_LookupUV.Count); + List<Face> m_RebuiltFaces = new List<Face>(mesh.faceCount); + Dictionary<int, int> m_DuplicateIndexFilter = new Dictionary<int, int>(8); + + foreach (Face face in mesh.facesInternal) + { + m_DuplicateIndexFilter.Clear(); + List<int> tris = new List<int>(); + int[] ind = face.indexesInternal; + + for (int i = 0; i < ind.Length; i += 3) + { + float area = Math.TriangleArea(m_Positions[ind[i + 0]], m_Positions[ind[i + 1]], m_Positions[ind[i + 2]]); + + if (area > Mathf.Epsilon) + { + // Index in the positions array + int triangleIndexA = ind[i], + triangleIndexB = ind[i+1], + triangleIndexC = ind[i+2]; + + // Common index (also called SharedIndexHandle) + int sharedIndexA = m_Lookup[triangleIndexA], + sharedIndexB = m_Lookup[triangleIndexB], + sharedIndexC = m_Lookup[triangleIndexC]; + + // test if there are any duplicates in the triangle + if (!(sharedIndexA == sharedIndexB || sharedIndexA == sharedIndexC || sharedIndexB == sharedIndexC)) + { + int index; + + // catch case where face has two distinct vertices that are in fact coincident. + if (!m_DuplicateIndexFilter.TryGetValue(sharedIndexA, out index)) + m_DuplicateIndexFilter.Add(sharedIndexA, triangleIndexA); + else + triangleIndexA = index; + + if (!m_DuplicateIndexFilter.TryGetValue(sharedIndexB, out index)) + m_DuplicateIndexFilter.Add(sharedIndexB, triangleIndexB); + else + triangleIndexB = index; + + if (!m_DuplicateIndexFilter.TryGetValue(sharedIndexC, out index)) + m_DuplicateIndexFilter.Add(sharedIndexC, triangleIndexC); + else + triangleIndexC = index; + + tris.Add(triangleIndexA); + tris.Add(triangleIndexB); + tris.Add(triangleIndexC); + + if (!m_RebuiltLookup.ContainsKey(triangleIndexA)) + m_RebuiltLookup.Add(triangleIndexA, sharedIndexA); + if (!m_RebuiltLookup.ContainsKey(triangleIndexB)) + m_RebuiltLookup.Add(triangleIndexB, sharedIndexB); + if (!m_RebuiltLookup.ContainsKey(triangleIndexC)) + m_RebuiltLookup.Add(triangleIndexC, sharedIndexC); + + if (m_LookupUV.ContainsKey(triangleIndexA) && !m_RebuiltLookupUV.ContainsKey(triangleIndexA)) + m_RebuiltLookupUV.Add(triangleIndexA, m_LookupUV[triangleIndexA]); + if (m_LookupUV.ContainsKey(triangleIndexB) && !m_RebuiltLookupUV.ContainsKey(triangleIndexB)) + m_RebuiltLookupUV.Add(triangleIndexB, m_LookupUV[triangleIndexB]); + if (m_LookupUV.ContainsKey(triangleIndexC) && !m_RebuiltLookupUV.ContainsKey(triangleIndexC)) + m_RebuiltLookupUV.Add(triangleIndexC, m_LookupUV[triangleIndexC]); + } + } + } + + if (tris.Count > 0) + { + face.indexesInternal = tris.ToArray(); + m_RebuiltFaces.Add(face); + } + } + + mesh.faces = m_RebuiltFaces; + mesh.SetSharedVertices(m_RebuiltLookup); + mesh.SetSharedTextures(m_RebuiltLookupUV); + + return RemoveUnusedVertices(mesh, removed); + } + + /// <summary> + /// Removes vertices that no face references. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="removed">An optional list to be populated with the removed indices. If no vertices are removed, this list will contain no elements.</param> + /// <returns>A list of deleted vertex indexes.</returns> + public static bool RemoveUnusedVertices(ProBuilderMesh mesh, List<int> removed = null) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + bool saveRemoved = removed != null; + + if(saveRemoved) + removed.Clear(); + + var del = saveRemoved ? removed : new List<int>(); + + var tris = new HashSet<int>(mesh.facesInternal.SelectMany(x => x.indexes)); + + for (int i = 0; i < mesh.positionsInternal.Length; i++) + if (!tris.Contains(i)) + del.Add(i); + + mesh.DeleteVertices(del); + + return del.Any(); + } + + /// <summary> + /// Rebuild a collection of indexes accounting for the removal of a collection of indices. + /// </summary> + /// <param name="indices">The indices to rebuild.</param> + /// <param name="removed">A sorted collection indices that were removed.</param> + /// <returns>A new list of indices pointing to the same vertex as they were prior to the removal of some entries.</returns> + internal static List<int> RebuildIndexes(IEnumerable<int> indices, List<int> removed) + { + var res = new List<int>(); + var rmc = removed.Count; + + foreach (var index in indices) + { + var nearestIndex = ArrayUtility.NearestIndexPriorToValue(removed, index) + 1; + + // don't add back into the indices collection if the index was removed + if (nearestIndex > -1 && nearestIndex < rmc && removed[nearestIndex] == index) + continue; + + res.Add(index - nearestIndex); + } + + return res; + } + + /// <summary> + /// Rebuild a collection of indexes accounting for the removal of a collection of indices. + /// </summary> + /// <param name="edges">The indices to rebuild.</param> + /// <param name="removed">A sorted collection indices that were removed.</param> + /// <returns>A new list of indices pointing to the same vertex as they were prior to the removal of some entries.</returns> + internal static List<Edge> RebuildEdges(IEnumerable<Edge> edges, List<int> removed) + { + var res = new List<Edge>(); + var rmc = removed.Count; + + foreach (var edge in edges) + { + var nearestIndexA = ArrayUtility.NearestIndexPriorToValue(removed, edge.a) + 1; + var nearestIndexB = ArrayUtility.NearestIndexPriorToValue(removed, edge.b) + 1; + + // don't add back into the indices collection if the index was removed + if ((nearestIndexA > -1 && nearestIndexA < rmc && removed[nearestIndexA] == edge.a) || + (nearestIndexB > -1 && nearestIndexB < rmc && removed[nearestIndexB] == edge.b)) + continue; + + res.Add(new Edge(edge.a - nearestIndexA, edge.b - nearestIndexB)); + } + + return res; + } + + internal static void RebuildSelectionIndexes(ProBuilderMesh mesh, ref Face[] faces, ref Edge[] edges, ref int[] indices, IEnumerable<int> removed) + { + var rm = removed.ToList(); + rm.Sort(); + + if (faces != null && faces.Length > 0) + faces = faces.Where(x => mesh.facesInternal.Contains(x)).ToArray(); + + if(edges != null && edges.Length > 0) + edges = RebuildEdges(edges, rm).ToArray(); + + if(indices != null && indices.Length > 0) + indices = RebuildIndexes(indices, rm).ToArray(); + } + + /// <summary> + /// Check a mesh for degenerate triangles or unused vertices, and remove them if necessary. + /// </summary> + /// <param name="mesh">The mesh to test.</param> + /// <param name="removedVertices">If fixes were made, this will be set to the number of vertices removed during that process.</param> + /// <returns>Returns true if no problems were found, false if topology issues were discovered and fixed.</returns> + internal static bool EnsureMeshIsValid(ProBuilderMesh mesh, out int removedVertices) + { + removedVertices = 0; + + if (ContainsDegenerateTriangles(mesh)) + { + var faces = mesh.selectedFacesInternal; + var edges = mesh.selectedEdgesInternal; + var indices = mesh.selectedIndexesInternal; + + List<int> removed = new List<int>(); + + if (RemoveDegenerateTriangles(mesh, removed)) + { + mesh.sharedVertices = SharedVertex.GetSharedVerticesWithPositions(mesh.positionsInternal); + + RebuildSelectionIndexes(mesh, ref faces, ref edges, ref indices, removed); + mesh.selectedFacesInternal = faces; + mesh.selectedEdgesInternal = edges; + mesh.selectedIndexesInternal = indices; + removedVertices = removed.Count; + return false; + } + } + + return true; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshValidation.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshValidation.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c538af42c1834511f17d7746fe2dd25ee7b8b485 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/MeshValidation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12d2df8ff0d1e417e97df69e20c4c81b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Subdivision.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Subdivision.cs new file mode 100644 index 0000000000000000000000000000000000000000..9eaa582ecd7fbcfa869d3dd1ae61436583199215 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Subdivision.cs @@ -0,0 +1,33 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + /// <summary> + /// Subdivide a ProBuilder mesh. + /// </summary> + static class Subdivision + { + /// <summary> + /// Subdivide all faces on the mesh. + /// </summary> + /// <remarks>More accurately, this inserts a vertex at the center of each face and connects each edge at it's center.</remarks> + /// <param name="pb"></param> + /// <returns></returns> + public static ActionResult Subdivide(this ProBuilderMesh pb) + { + return pb.Subdivide(pb.facesInternal) != null ? new ActionResult(ActionResult.Status.Success, "Subdivide") : new ActionResult(ActionResult.Status.Failure, "Subdivide Failed"); + } + + /// <summary> + /// Subdivide a mesh, optionally restricting to the specified faces. + /// </summary> + /// <param name="pb"></param> + /// <param name="faces">The faces to be affected by subdivision.</param> + /// <returns>The faces created as a result of the subdivision.</returns> + public static Face[] Subdivide(this ProBuilderMesh pb, IList<Face> faces) + { + return ConnectElements.Connect(pb, faces); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Subdivision.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Subdivision.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d0633c9367384557e94710c2d44846a200d02978 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Subdivision.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08c8ab0f8013d492eb6d0d78a261f745 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/SurfaceTopology.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/SurfaceTopology.cs new file mode 100644 index 0000000000000000000000000000000000000000..2e520bd4e448d51b36188c52b34878475d4454b7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/SurfaceTopology.cs @@ -0,0 +1,368 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + /// <summary> + /// Utilities for working with triangle and quad primitives. + /// </summary> + public static class SurfaceTopology + { + /// <summary> + /// Convert a selection of faces from n-gons to triangles. + /// <br /> + /// If a face is successfully converted to triangles, each new triangle is created as a separate face and the original face is deleted. + /// </summary> + /// <param name="mesh">The target mesh.</param> + /// <param name="faces">The faces to convert from quads to triangles.</param> + /// <returns>Any new triangle faces created by breaking faces into individual triangles.</returns> + public static Face[] ToTriangles(this ProBuilderMesh mesh, IList<Face> faces) + { + if (mesh == null) + throw new System.ArgumentNullException("mesh"); + + if (faces == null) + throw new System.ArgumentNullException("faces"); + + List<Vertex> vertices = new List<Vertex>(mesh.GetVertices()); + Dictionary<int, int> lookup = mesh.sharedVertexLookup; + + List<FaceRebuildData> rebuild = new List<FaceRebuildData>(); + + foreach (Face face in faces) + { + List<FaceRebuildData> res = BreakFaceIntoTris(face, vertices, lookup); + rebuild.AddRange(res); + } + + FaceRebuildData.Apply(rebuild, mesh, vertices, null); + mesh.DeleteFaces(faces); + mesh.ToMesh(); + + return rebuild.Select(x => x.face).ToArray(); + } + + static List<FaceRebuildData> BreakFaceIntoTris(Face face, List<Vertex> vertices, Dictionary<int, int> lookup) + { + int[] tris = face.indexesInternal; + int triCount = tris.Length; + List<FaceRebuildData> rebuild = new List<FaceRebuildData>(triCount / 3); + + for (int i = 0; i < triCount; i += 3) + { + FaceRebuildData r = new FaceRebuildData(); + + r.face = new Face(face); + r.face.indexesInternal = new int[] { 0, 1, 2}; + + r.vertices = new List<Vertex>() { + vertices[tris[i]], + vertices[tris[i + 1]], + vertices[tris[i + 2]] + }; + + r.sharedIndexes = new List<int>() { + lookup[tris[i]], + lookup[tris[i + 1]], + lookup[tris[i + 2]] + }; + + rebuild.Add(r); + } + + return rebuild; + } + + /// <summary> + /// Attempt to extract the winding order for a face. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="face">The face to test.</param> + /// <returns>The winding order if successfull, unknown if not.</returns> + public static WindingOrder GetWindingOrder(this ProBuilderMesh mesh, Face face) + { + Vector2[] p = Projection.PlanarProject(mesh.positionsInternal, face.distinctIndexesInternal); + return GetWindingOrder(p); + } + + static WindingOrder GetWindingOrder(IList<Vertex> vertices, IList<int> indexes) + { + if (vertices == null) + throw new ArgumentNullException("vertices"); + + if (indexes == null) + throw new ArgumentNullException("indexes"); + + Vector2[] p = Projection.PlanarProject(vertices.Select(x => x.position).ToArray(), indexes); + return GetWindingOrder(p); + } + + /// <summary> + /// Return the winding order of a set of ordered points. + /// </summary> + /// <remarks>http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-points-are-in-clockwise-order</remarks> + /// <param name="points">A path of points in 2d space.</param> + /// <returns>The winding order if found, WindingOrder.Unknown if not.</returns> + public static WindingOrder GetWindingOrder(IList<Vector2> points) + { + if (points == null) + throw new ArgumentNullException("points"); + + float sum = 0f; + + int len = points.Count; + + // http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-points-are-in-clockwise-order + for (int i = 0; i < len; i++) + { + Vector2 a = points[i]; + Vector2 b = i < len - 1 ? points[i + 1] : points[0]; + + sum += ((b.x - a.x) * (b.y + a.y)); + } + + return sum == 0f ? WindingOrder.Unknown : (sum > 0f ? WindingOrder.Clockwise : WindingOrder.CounterClockwise); + } + + /// <summary> + /// Reverses the orientation of the middle edge in a quad. + /// <![CDATA[ + /// ``` + /// . _____ _____ + /// . |\ | | /| + /// . | \ | => | / | + /// . |____\| |/____| + /// ``` + /// ]]> + /// </summary> + /// <param name="mesh">The mesh that face belongs to.</param> + /// <param name="face">The target face.</param> + /// <returns>True if successful, false if not. Operation will fail if face does not contain two triangles with exactly 2 shared vertices.</returns> + public static bool FlipEdge(this ProBuilderMesh mesh, Face face) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (face == null) + throw new ArgumentNullException("face"); + + int[] indexes = face.indexesInternal; + + if (indexes.Length != 6) + return false; + + int[] mode = ArrayUtility.Fill<int>(1, indexes.Length); + + for (int x = 0; x < indexes.Length - 1; x++) + { + for (int y = x + 1; y < indexes.Length; y++) + { + if (indexes[x] == indexes[y]) + { + mode[x]++; + mode[y]++; + } + } + } + + if (mode[0] + mode[1] + mode[2] != 5 || + mode[3] + mode[4] + mode[5] != 5) + return false; + + int i0 = indexes[mode[0] == 1 ? 0 : mode[1] == 1 ? 1 : 2]; + int i1 = indexes[mode[3] == 1 ? 3 : mode[4] == 1 ? 4 : 5]; + + int used = -1; + + if (mode[0] == 2) + { + used = indexes[0]; + indexes[0] = i1; + } + else if (mode[1] == 2) + { + used = indexes[1]; + indexes[1] = i1; + } + else if (mode[2] == 2) + { + used = indexes[2]; + indexes[2] = i1; + } + + if (mode[3] == 2 && indexes[3] != used) + indexes[3] = i0; + else if (mode[4] == 2 && indexes[4] != used) + indexes[4] = i0; + else if (mode[5] == 2 && indexes[5] != used) + indexes[5] = i0; + + face.InvalidateCache(); + + return true; + } + + /// <summary> + /// Ensure that all adjacent face normals are pointing in a uniform direction. This function supports multiple islands of connected faces, but it may not unify each island the same way. + /// </summary> + /// <param name="mesh">The mesh that the faces belong to.</param> + /// <param name="faces">The faces to make uniform.</param> + /// <returns>The state of the action.</returns> + public static ActionResult ConformNormals(this ProBuilderMesh mesh, IEnumerable<Face> faces) + { + List<WingedEdge> wings = WingedEdge.GetWingedEdges(mesh, faces); + HashSet<Face> used = new HashSet<Face>(); + int count = 0; + + // this loop adds support for multiple islands of grouped selections + for (int i = 0; i < wings.Count; i++) + { + if (used.Contains(wings[i].face)) + continue; + + Dictionary<Face, bool> flags = new Dictionary<Face, bool>(); + + GetWindingFlags(wings[i], true, flags); + + int flip = 0; + + foreach (var kvp in flags) + flip += kvp.Value ? 1 : -1; + + bool direction = flip > 0; + + foreach (var kvp in flags) + { + if (direction != kvp.Value) + { + count++; + kvp.Key.Reverse(); + } + } + + used.UnionWith(flags.Keys); + } + + if (count > 0) + return new ActionResult(ActionResult.Status.Success, count > 1 ? string.Format("Flipped {0} faces", count) : "Flipped 1 face"); + else + return new ActionResult(ActionResult.Status.NoChange, "Faces Uniform"); + } + + static void GetWindingFlags(WingedEdge edge, bool flag, Dictionary<Face, bool> flags) + { + flags.Add(edge.face, flag); + + WingedEdge next = edge; + + do + { + WingedEdge opp = next.opposite; + + if (opp != null && !flags.ContainsKey(opp.face)) + { + Edge cea = GetCommonEdgeInWindingOrder(next); + Edge ceb = GetCommonEdgeInWindingOrder(opp); + + GetWindingFlags(opp, cea.a == ceb.a ? !flag : flag, flags); + } + + next = next.next; + } + while (next != edge); + } + + /// <summary> + /// Ensure the opposite face to source matches the winding order. + /// </summary> + /// <param name="source"></param> + /// <returns></returns> + internal static ActionResult ConformOppositeNormal(WingedEdge source) + { + if (source == null || source.opposite == null) + return new ActionResult(ActionResult.Status.Failure, "Source edge does not share an edge with another face."); + + Edge cea = GetCommonEdgeInWindingOrder(source); + Edge ceb = GetCommonEdgeInWindingOrder(source.opposite); + + if (cea.a == ceb.a) + { + source.opposite.face.Reverse(); + + return new ActionResult(ActionResult.Status.Success, "Reversed target face winding order."); + } + + return new ActionResult(ActionResult.Status.NoChange, "Faces already unified."); + } + + /// <summary> + /// Iterate a face and return a new common edge where the edge indexes are true to the triangle winding order. + /// </summary> + /// <param name="wing"></param> + /// <returns></returns> + static Edge GetCommonEdgeInWindingOrder(WingedEdge wing) + { + int[] indexes = wing.face.indexesInternal; + int len = indexes.Length; + + for (int i = 0; i < len; i += 3) + { + Edge e = wing.edge.local; + int a = indexes[i], b = indexes[i + 1], c = indexes[i + 2]; + + if (e.a == a && e.b == b) + return wing.edge.common; + else if (e.a == b && e.b == a) + return new Edge(wing.edge.common.b, wing.edge.common.a); + else if (e.a == b && e.b == c) + return wing.edge.common; + else if (e.a == c && e.b == b) + return new Edge(wing.edge.common.b, wing.edge.common.a); + else if (e.a == c && e.b == a) + return wing.edge.common; + else if (e.a == a && e.b == c) + return new Edge(wing.edge.common.b, wing.edge.common.a); + } + + return Edge.Empty; + } + + /// <summary> + /// Match a target face to the source face. Faces must be adjacent. + /// </summary> + /// <param name="source"></param> + /// <param name="target"></param> + /// <param name="lookup"></param> + internal static void MatchNormal(Face source, Face target, Dictionary<int, int> lookup) + { + List<EdgeLookup> sourceEdges = EdgeLookup.GetEdgeLookup(source.edgesInternal, lookup).ToList(); + List<EdgeLookup> targetEdges = EdgeLookup.GetEdgeLookup(target.edgesInternal, lookup).ToList(); + + bool superBreak = false; + + Edge src, tar; + + for (int i = 0; !superBreak && i < sourceEdges.Count; i++) + { + src = sourceEdges[i].common; + + for (int n = 0; !superBreak && n < targetEdges.Count; n++) + { + tar = targetEdges[n].common; + + if (src.Equals(tar)) + { + if (src.a == tar.a) + target.Reverse(); + + superBreak = true; + } + } + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/SurfaceTopology.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/SurfaceTopology.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e1ada729762f21a2bfcb2be7edc0174fd8f35b2e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/SurfaceTopology.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 214db8084d63e06499f41c215a8547a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Triangulation.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Triangulation.cs new file mode 100644 index 0000000000000000000000000000000000000000..2cb62bb8d49ee616de1cc3f478fa8a54fb73c8cb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Triangulation.cs @@ -0,0 +1,256 @@ +using UnityEngine; +using System.Linq; +using System.Collections; +using System.Collections.Generic; +using UnityEngine.ProBuilder.Poly2Tri; +using UnityEngine.ProBuilder; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + /// <summary> + /// Wrapper around Triangle.NET triangulation methods. https://github.com/zon/triangle + /// </summary> + static class Triangulation + { + static TriangulationContext s_TriangulationContext; + + static TriangulationContext triangulationContext + { + get + { + if(s_TriangulationContext == null) + s_TriangulationContext = new DTSweepContext(); + return s_TriangulationContext; + } + } + + /// <summary> + /// Given a set of points this method will format the points into a boundary contour and triangulate, returning + /// a set of indexes that corresponds to the original ordering. + /// </summary> + /// <param name="points"></param> + /// <param name="indexes"></param> + /// <param name="convex"></param> + /// <returns></returns> + public static bool SortAndTriangulate(IList<Vector2> points, out List<int> indexes, bool convex = false) + { + IList<Vector2> sorted = Projection.Sort(points, SortMethod.CounterClockwise); + + Dictionary<int, int> map = new Dictionary<int, int>(); + + for (int i = 0; i < sorted.Count; i++) + map.Add(i, points.IndexOf(sorted[i])); + + if (!Triangulate(sorted, out indexes, convex)) + return false; + + for (int i = 0; i < indexes.Count; i++) + indexes[i] = map[indexes[i]]; + + return true; + } + + /// <summary> + /// Attempts to triangulate a set of vertices. If unordered is specified as false vertices will not be re-ordered before triangulation. + /// </summary> + /// <param name="vertices"></param> + /// <param name="triangles"></param> + /// <param name="unordered"></param> + /// <param name="convex"></param> + /// <returns></returns> + public static bool TriangulateVertices(IList<Vertex> vertices, out List<int> triangles, bool unordered = true, bool convex = false) + { + Vector3[] facePoints = new Vector3[vertices.Count]; + + for (int i = 0; i < vertices.Count; ++i) + facePoints[i] = vertices[i].position; + + return TriangulateVertices(facePoints, out triangles, unordered, convex); + } + + /// <summary> + /// Attempts to triangulate an ordered set of vertices. Optionally with a set of hole polygons. + /// </summary> + /// <param name="vertices">Ordered set of vertices</param> + /// <param name="triangles">Resulting set of indices. Indices outside the vertices array are hole vertices. + /// When creating a mesh, add all the hole vertices to the vertices array so that the indices are valid. + /// </param> + /// <param name="holes">Jagged array containing sets of vertices that make up holes in the polygon.</param> + /// <returns></returns> + public static bool TriangulateVertices(Vector3[] vertices, out List<int> triangles, Vector3[][] holes = null) + { + triangles = null; + int vertexCount = vertices == null ? 0 : vertices.Length; + + if (vertexCount < 3) + return false; + + var normal = Projection.FindBestPlane(vertices).normal; + Vector2[] points2d = Projection.PlanarProject(vertices, null, normal); + Vector2[][] holes2d = null; + if (holes != null) + { + holes2d = new Vector2[holes.Length][]; + for (int i = 0; i < holes.Length; i++) + { + if(holes[i].Length < 3) + return false; + + holes2d[i] = Projection.PlanarProject(holes[i], null, normal); + } + } + + return Triangulate(points2d, holes2d, out triangles); + } + + public static bool TriangulateVertices(Vector3[] vertices, out List<int> triangles, bool unordered = true, bool convex = false) + { + triangles = null; + int vertexCount = vertices == null ? 0 : vertices.Length; + + if (vertexCount < 3) + return false; + + if (vertexCount == 3) + { + triangles = new List<int>() { 0, 1, 2 }; + return true; + } + + Vector2[] points2d = Projection.PlanarProject(vertices); + + if (unordered) + return SortAndTriangulate(points2d, out triangles, convex); + + return Triangulate(points2d, out triangles, convex); + } + + /// <summary> + /// Given a set of points ordered counter-clockwise along a contour, return triangle indexes. + /// </summary> + /// <param name="points"></param> + /// <param name="indexes"></param> + /// <param name="convex">Triangulation may optionally be set to convex, which will result in some a convex shape.</param> + /// <returns></returns> + public static bool Triangulate(IList<Vector2> points, out List<int> indexes, bool convex = false) + { + indexes = new List<int>(); + + int index = 0; + + Triangulatable soup = convex + ? new PointSet(points.Select(x => new TriangulationPoint(x.x, x.y, index++)).ToList()) + : (Triangulatable) new Polygon(points.Select(x => new PolygonPoint(x.x, x.y, index++))); + + try + { + triangulationContext.Clear(); + triangulationContext.PrepareTriangulation(soup); + DTSweep.Triangulate((DTSweepContext)triangulationContext); + } + catch (System.Exception e) + { + Log.Info("Triangulation failed: " + e.ToString()); + return false; + } + + foreach (DelaunayTriangle d in soup.Triangles) + { + if (d.Points[0].Index < 0 || d.Points[1].Index < 0 || d.Points[2].Index < 0) + { + Log.Info("Triangulation failed: Additional vertices were inserted."); + return false; + } + + indexes.Add(d.Points[0].Index); + indexes.Add(d.Points[1].Index); + indexes.Add(d.Points[2].Index); + } + + WindingOrder originalWinding = SurfaceTopology.GetWindingOrder(points); + + // if the re-triangulated first tri doesn't match the winding order of the original + // vertices, flip 'em + + if (SurfaceTopology.GetWindingOrder(new Vector2[3] + { + points[indexes[0]], + points[indexes[1]], + points[indexes[2]], + + }) != originalWinding) + indexes.Reverse(); + + return true; + } + + /// <summary> + /// Given a set of points ordered counter-clockwise along a contour and a set of holes, return triangle indexes. + /// </summary> + /// <param name="points"></param> + /// <param name="holes"></param> + /// <param name="indexes">Indices outside of the points list index into holes when layed out linearly. + /// {vertices 0,1,2...vertices.length-1, holes 0 values, hole 1 values etc.} </param> + /// <returns></returns> + public static bool Triangulate(IList<Vector2> points, IList<IList<Vector2>> holes, out List<int> indexes) + { + indexes = new List<int>(); + + int index = 0; + + var allPoints = new List<Vector2>(points); + + Polygon polygon = new Polygon(points.Select(x => new PolygonPoint(x.x, x.y, index++))); + if (holes != null) + { + for (int i = 0; i < holes.Count; i++) + { + allPoints.AddRange(holes[i]); + var holePolgyon = new Polygon(holes[i].Select(x => new PolygonPoint(x.x, x.y, index++))); + polygon.AddHole(holePolgyon); + } + } + + try + { + triangulationContext.Clear(); + triangulationContext.PrepareTriangulation(polygon); + DTSweep.Triangulate((DTSweepContext)triangulationContext); + } + catch (System.Exception e) + { + Log.Info("Triangulation failed: " + e.ToString()); + return false; + } + + foreach (DelaunayTriangle d in polygon.Triangles) + { + if (d.Points[0].Index < 0 || d.Points[1].Index < 0 || d.Points[2].Index < 0) + { + Log.Info("Triangulation failed: Additional vertices were inserted."); + return false; + } + + indexes.Add(d.Points[0].Index); + indexes.Add(d.Points[1].Index); + indexes.Add(d.Points[2].Index); + } + + WindingOrder originalWinding = SurfaceTopology.GetWindingOrder(points); + + // if the re-triangulated first tri doesn't match the winding order of the original + // vertices, flip 'em + + if (SurfaceTopology.GetWindingOrder(new Vector2[3] + { + allPoints[indexes[0]], + allPoints[indexes[1]], + allPoints[indexes[2]], + + }) != originalWinding) + indexes.Reverse(); + + return true; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Triangulation.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Triangulation.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3a201024870cf0061b37afc5bdbcf1b8b7b22789 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/Triangulation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 146403a091a2c4d61976892730fa0c8d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV.meta new file mode 100644 index 0000000000000000000000000000000000000000..98c0198fde9d059227e89e5bc25ac944036cea8c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 59a80f89e25b748448bb804c542f7cdb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/AutoUvConversion.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/AutoUvConversion.cs new file mode 100644 index 0000000000000000000000000000000000000000..574f5288335a2fa0972d0634172157b890359468 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/AutoUvConversion.cs @@ -0,0 +1,182 @@ +using System; +using UnityEngine; +using System.Collections.Generic; +using System.Linq; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + /// <summary> + /// UV actions. + /// </summary> + static partial class UVEditing + { + /// <summary> + /// Sets the passed faces to use Auto or Manual UVs, and (if previously manual) splits any vertex connections. + /// </summary> + internal static void SetAutoUV(ProBuilderMesh mesh, Face[] faces, bool auto) + { + if (auto) + { + SetAutoAndAlignUnwrapParamsToUVs(mesh, faces.Where(x => x.manualUV)); + } + else + { + foreach (Face f in faces) + { + f.textureGroup = -1; + f.manualUV = true; + } + } + } + + /// <summary> + /// Reset the AutoUnwrapParameters of a set of faces to best match their current UV coordinates. + /// </summary> + /// <remarks> + /// Auto UVs do not support distortion, so this conversion process cannot be loss-less. However as long as there + /// is minimal skewing the results are usually very close. + /// </remarks> + internal static void SetAutoAndAlignUnwrapParamsToUVs(ProBuilderMesh mesh, IEnumerable<Face> facesToConvert) + { + var destinationTextures = mesh.textures.ToArray(); + var faces = facesToConvert as Face[] ?? facesToConvert.ToArray(); + + foreach (var face in faces) + { + face.uv = AutoUnwrapSettings.defaultAutoUnwrapSettings; + face.elementGroup = -1; + face.textureGroup = -1; + face.manualUV = false; + } + + mesh.RefreshUV(faces); + var unmodifiedProjection = mesh.texturesInternal; + + foreach (var face in faces) + { + var trs = CalculateDelta(unmodifiedProjection, face.indexesInternal, destinationTextures, face.indexesInternal); + var uv = face.uv; + + // offset is flipped for legacy reasons. people were confused that positive offsets moved the texture + // in negative directions in the scene-view, but positive in UV window. if changed we would need to + // write some way of upgrading the unwrap settings to account for this. + uv.offset = -trs.translation; + uv.rotation = trs.rotation; + uv.scale = trs.scale; + face.uv = uv; + } + + mesh.RefreshUV(faces); + } + + internal struct UVTransform + { + public Vector2 translation; + public float rotation; + public Vector2 scale; + + public override string ToString() + { + return translation.ToString("F2") + ", " + rotation + ", " + scale.ToString("F2"); + } + } + + static List<Vector2> s_UVTransformProjectionBuffer = new List<Vector2>(8); + + /// <summary> + /// Returns the auto unwrap settings for a face. In cases where the face is auto unwrapped + /// (manualUV = false), this returns the settings straight. If the face is + /// manually unwrapped, it returns the auto unwrap settings computed from GetUVTransform. + /// </summary> + /// <returns></returns> + internal static AutoUnwrapSettings GetAutoUnwrapSettings(ProBuilderMesh mesh, Face face) + { + if (!face.manualUV) + return new AutoUnwrapSettings(face.uv); + + var trs = GetUVTransform(mesh, face); + var uvSettings = AutoUnwrapSettings.defaultAutoUnwrapSettings; + uvSettings.offset = trs.translation; + uvSettings.rotation = 360 - trs.rotation; + uvSettings.scale = uvSettings.scale/trs.scale; + + return uvSettings; + } + + /// <summary> + /// Attempt to calculate the UV transform for a face. In cases where the face is auto unwrapped + /// (manualUV = false), this returns the offset, rotation, and scale from <see cref="Face.uv"/>. If the face is + /// manually unwrapped, a transform will be calculated by trying to match an unmodified planar projection to the + /// current UVs. The results + /// </summary> + /// <returns></returns> + internal static UVTransform GetUVTransform(ProBuilderMesh mesh, Face face) + { + Projection.PlanarProject(mesh.positionsInternal, face.indexesInternal, Math.Normal(mesh, face), s_UVTransformProjectionBuffer); + return CalculateDelta(mesh.texturesInternal, face.indexesInternal, s_UVTransformProjectionBuffer, null); + } + + // messy hack to support cases where you want to iterate a collection of values with an optional collection of + // indices. do not make public. + static int GetIndex(IList<int> collection, int index) + { + return collection == null ? index : collection[index]; + } + + // indices arrays are optional - if null is passed the index will be 0, 1, 2... up to values array length. + // this is done to avoid allocating a separate array just to pass linear indices + internal static UVTransform CalculateDelta(IList<Vector2> src, IList<int> srcIndices, IList<Vector2> dst, IList<int> dstIndices) + { + // rotate to match target points by comparing the angle between old UV and new auto projection + Vector2 dstAngle = dst[GetIndex(dstIndices, 1)] - dst[GetIndex(dstIndices, 0)]; + Vector2 srcAngle = src[GetIndex(srcIndices, 1)] - src[GetIndex(srcIndices, 0)]; + + float rotation = Vector2.Angle(dstAngle, srcAngle); + + if (Vector2.Dot(Vector2.Perpendicular(dstAngle), srcAngle) < 0) + rotation = 360f - rotation; + + Vector2 dstCenter = dstIndices == null ? Bounds2D.Center(dst) : Bounds2D.Center(dst, dstIndices); + + // inverse the rotation to get an axis-aligned scale + Vector2 dstSize = GetRotatedSize(dst, dstIndices, dstCenter, -rotation); + + var srcBounds = srcIndices == null ? new Bounds2D(src) : new Bounds2D(src, srcIndices); + + return new UVTransform() + { + translation = dstCenter - srcBounds.center, + rotation = rotation, + scale = dstSize.DivideBy(srcBounds.size) + }; + } + + static Vector2 GetRotatedSize(IList<Vector2> points, IList<int> indices, Vector2 center, float rotation) + { + int size = indices == null ? points.Count : indices.Count; + + Vector2 point = points[GetIndex(indices, 0)].RotateAroundPoint(center, rotation); + + float xMin = point.x; + float yMin = point.y; + float xMax = xMin; + float yMax = yMin; + + for (int i = 1; i < size; i++) + { + point = points[GetIndex(indices, i)].RotateAroundPoint(center, rotation); + + float x = point.x; + float y = point.y; + + if (x < xMin) xMin = x; + if (x > xMax) xMax = x; + + if (y < yMin) yMin = y; + if (y > yMax) yMax = y; + } + + return new Vector2(xMax - xMin, yMax - yMin); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/AutoUvConversion.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/AutoUvConversion.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..96d8eb9f5e0b9d86a52b4c7cfada1340f281951c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/AutoUvConversion.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2abd1512cbef74d89a4b0793e3ec970b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/TextureStitching.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/TextureStitching.cs new file mode 100644 index 0000000000000000000000000000000000000000..548e12156a1e9fd71ce7092faab8cd1ada3e310f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/TextureStitching.cs @@ -0,0 +1,147 @@ +using System.Linq; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + static partial class UVEditing + { + /// <summary> + /// Provided two faces, this method will attempt to project @f2 and align its size, rotation, and position to match + /// the shared edge on f1. Returns true on success, false otherwise. + /// </summary> + /// <param name="mesh"></param> + /// <param name="f1"></param> + /// <param name="f2"></param> + /// <param name="channel"></param> + /// <returns></returns> + public static bool AutoStitch(ProBuilderMesh mesh, Face f1, Face f2, int channel) + { + var wings = WingedEdge.GetWingedEdges(mesh, new [] { f1, f2 }); + + var sharedEdge = wings.FirstOrDefault(x => x.face == f1 && x.opposite != null && x.opposite.face == f2); + + if (sharedEdge == null) + return false; + + if (f1.manualUV) + f2.manualUV = true; + + f1.textureGroup = -1; + f2.textureGroup = -1; + + Projection.PlanarProject(mesh, f2); + + if (AlignEdges(mesh, f2, sharedEdge.edge.local, sharedEdge.opposite.edge.local, channel)) + { + if (!f2.manualUV) + { + SetAutoAndAlignUnwrapParamsToUVs(mesh, new [] { f2 }); + } + + return true; + } + + return false; + } + + /// <summary> + /// move the UVs to where the edges passed meet + /// </summary> + /// <param name="mesh"></param> + /// <param name="faceToMove"></param> + /// <param name="edgeToAlignTo"></param> + /// <param name="edgeToBeAligned"></param> + /// <param name="channel"></param> + /// <returns></returns> + static bool AlignEdges(ProBuilderMesh mesh, Face faceToMove, Edge edgeToAlignTo, Edge edgeToBeAligned, int channel) + { + Vector2[] uvs = GetUVs(mesh, channel); + SharedVertex[] sharedIndexes = mesh.sharedVerticesInternal; + + // Match each edge vertex to the other + int[] matchX = new int[2] { edgeToAlignTo.a, -1 }; + int[] matchY = new int[2] { edgeToAlignTo.b, -1 }; + + int siIndex = mesh.GetSharedVertexHandle(edgeToAlignTo.a); + + if (siIndex < 0) + return false; + + if (sharedIndexes[siIndex].Contains(edgeToBeAligned.a)) + { + matchX[1] = edgeToBeAligned.a; + matchY[1] = edgeToBeAligned.b; + } + else + { + matchX[1] = edgeToBeAligned.b; + matchY[1] = edgeToBeAligned.a; + } + + // scale face 2 to match the edge size of f1 + float dist_e1 = Vector2.Distance(uvs[edgeToAlignTo.a], uvs[edgeToAlignTo.b]); + float dist_e2 = Vector2.Distance(uvs[edgeToBeAligned.a], uvs[edgeToBeAligned.b]); + + float scale = dist_e1 / dist_e2; + + // doesn't matter what point we scale around because we'll move it in the next step anyways + foreach (int i in faceToMove.distinctIndexesInternal) + uvs[i] = uvs[i].ScaleAroundPoint(Vector2.zero, Vector2.one * scale); + + /** + * Figure out where the center of each edge is so that we can move the f2 edge to match f1's origin + */ + Vector2 f1_center = (uvs[edgeToAlignTo.a] + uvs[edgeToAlignTo.b]) / 2f; + Vector2 f2_center = (uvs[edgeToBeAligned.a] + uvs[edgeToBeAligned.b]) / 2f; + + Vector2 diff = f1_center - f2_center; + + /** + * Move f2 face to where it's matching edge center is on top of f1's center + */ + foreach (int i in faceToMove.distinctIndexesInternal) + uvs[i] += diff; + + /** + * Now that the edge's centers are matching, rotate f2 to match f1's angle + */ + Vector2 angle1 = uvs[matchY[0]] - uvs[matchX[0]]; + Vector2 angle2 = uvs[matchY[1]] - uvs[matchX[1]]; + + float angle = Vector2.Angle(angle1, angle2); + if (Vector3.Cross(angle1, angle2).z < 0) + angle = 360f - angle; + + foreach (int i in faceToMove.distinctIndexesInternal) + uvs[i] = Math.RotateAroundPoint(uvs[i], f1_center, angle); + + float error = Mathf.Abs(Vector2.Distance(uvs[matchX[0]], uvs[matchX[1]])) + Mathf.Abs(Vector2.Distance(uvs[matchY[0]], uvs[matchY[1]])); + + // now check that the matched UVs are on top of one another if the error allowance is greater than some small value + if (error > .02f) + { + // first try rotating 180 degrees + foreach (int i in faceToMove.distinctIndexesInternal) + uvs[i] = Math.RotateAroundPoint(uvs[i], f1_center, 180f); + + float e2 = Mathf.Abs(Vector2.Distance(uvs[matchX[0]], uvs[matchX[1]])) + Mathf.Abs(Vector2.Distance(uvs[matchY[0]], uvs[matchY[1]])); + if (e2 < error) + error = e2; + else + { + // flip 'em back around + foreach (int i in faceToMove.distinctIndexesInternal) + uvs[i] = Math.RotateAroundPoint(uvs[i], f1_center, 180f); + } + } + + // If successfully aligned, merge the sharedIndexesUV + SplitUVs(mesh, faceToMove.distinctIndexesInternal); + + mesh.SetTexturesCoincident(matchX); + mesh.SetTexturesCoincident(matchY); + ApplyUVs(mesh, uvs, channel); + + return true; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/TextureStitching.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/TextureStitching.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7b45c60c828d2d59eb327e234d9aee0d9addffff --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/TextureStitching.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f5f37a0a7c6f54d4995a8f0806351e89 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/UVEditing.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/UVEditing.cs new file mode 100644 index 0000000000000000000000000000000000000000..8da20cef9363335923c79316aa4fadfb83d11644 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/UVEditing.cs @@ -0,0 +1,418 @@ +using System; +using UnityEngine; +using System.Collections.Generic; +using System.Linq; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + /// <summary> + /// UV actions. + /// </summary> + static partial class UVEditing + { + /// <summary> + /// Get a reference to the mesh UV array at index. + /// </summary> + /// <param name="mesh"></param> + /// <param name="channel">The zero-indexed UV channel.</param> + /// <returns></returns> + internal static Vector2[] GetUVs(ProBuilderMesh mesh, int channel) + { + switch (channel) + { + case 1: + { + Mesh m = mesh.mesh; + if (m == null) + return null; + return mesh.mesh.uv2; + } + + case 2: + case 3: + { + if (channel == 2 ? mesh.HasArrays(MeshArrays.Texture2) : mesh.HasArrays(MeshArrays.Texture3)) + { + List<Vector4> uvs = new List<Vector4>(); + mesh.GetUVs(channel, uvs); + return uvs.Select(x => (Vector2)x).ToArray(); + } + + return null; + } + + default: + return mesh.texturesInternal; + } + } + + /// <summary> + /// Sets an array to the appropriate UV channel, but don't refresh the Mesh. + /// </summary> + internal static void ApplyUVs(ProBuilderMesh mesh, Vector2[] uvs, int channel, bool applyToMesh = true) + { + switch (channel) + { + case 0: + mesh.texturesInternal = uvs; + if (applyToMesh && mesh.mesh != null) + mesh.mesh.uv = uvs; + break; + + case 1: + if (applyToMesh && mesh.mesh != null) + mesh.mesh.uv2 = uvs; + break; + + case 2: + case 3: + int vc = mesh.vertexCount; + if (vc != uvs.Length) + throw new IndexOutOfRangeException("uvs"); + List<Vector4> list = new List<Vector4>(vc); + for (int i = 0; i < vc; i++) + list.Add(uvs[i]); + mesh.SetUVs(channel, list); + if (applyToMesh && mesh.mesh != null) + mesh.mesh.SetUVs(channel, list); + break; + } + } + + /// <summary> + /// Sews (welds) a UV seam using delta to determine which UVs are close enough to be merged. + /// </summary> + /// <param name="mesh"></param> + /// <param name="indexes"></param> + /// <param name="delta"></param> + /// <returns></returns> + public static void SewUVs(this ProBuilderMesh mesh, int[] indexes, float delta) + { + Vector2[] uvs = mesh.texturesInternal; + + if (uvs == null || uvs.Length != mesh.vertexCount) + uvs = new Vector2[mesh.vertexCount]; + + var lookup = mesh.sharedTextureLookup; + + for (int i = 0; i < indexes.Length - 1; i++) + { + for (int n = i + 1; n < indexes.Length; n++) + { + int a, b; + + if (!lookup.TryGetValue(indexes[i], out a)) + lookup.Add(indexes[i], a = lookup.Count()); + + if (!lookup.TryGetValue(indexes[n], out b)) + lookup.Add(indexes[n], b = lookup.Count()); + + if (a == b) + continue; + + if (Vector2.Distance(uvs[indexes[i]], uvs[indexes[n]]) < delta) + { + Vector3 cen = (uvs[indexes[i]] + uvs[indexes[n]]) / 2f; + + uvs[indexes[i]] = cen; + uvs[indexes[n]] = cen; + + // ToArray prevents delayed execution of linq actions, which cause trouble when modifying the + // dictionary values + var merge = lookup.Where(x => x.Value == b).Select(y => y.Key).ToArray(); + + foreach (var key in merge) + lookup[key] = a; + } + } + } + + mesh.SetSharedTextures(lookup); + } + + /// <summary> + /// Similar to Sew, except Collapse just flattens all UVs to the center point no matter the distance. + /// </summary> + /// <param name="mesh"></param> + /// <param name="indexes"></param> + public static void CollapseUVs(this ProBuilderMesh mesh, int[] indexes) + { + Vector2[] uvs = mesh.texturesInternal; + + // set the shared indexes cache to a unique non-used index + Vector2 cen = Math.Average(ArrayUtility.ValuesWithIndexes(uvs, indexes)); + + foreach (int i in indexes) + uvs[i] = cen; + + mesh.SetTexturesCoincident(indexes); + } + + /// <summary> + /// Creates separate entries in shared indexes cache for all passed indexes. If indexes are not present in pb_IntArray[], don't do anything with them. + /// </summary> + /// <param name="mesh"></param> + /// <param name="indexes"></param> + public static void SplitUVs(this ProBuilderMesh mesh, IEnumerable<int> indexes) + { + var lookup = mesh.sharedTextureLookup; + var index = lookup.Count; + + foreach (var vertex in indexes) + { + int a; + + if (lookup.TryGetValue(vertex, out a)) + lookup[vertex] = index++; + } + + mesh.SetSharedTextures(lookup); + } + + /// <summary> + /// Creates separate entries in shared indexes cache for all passed indexes. + /// </summary> + internal static void SplitUVs(ProBuilderMesh mesh, IEnumerable<Face> faces) + { + var lookup = mesh.sharedTextureLookup; + var index = lookup.Count; + + foreach(var face in faces) + { + foreach (var vertex in face.distinctIndexesInternal) + { + int a; + + if (lookup.TryGetValue(vertex, out a)) + lookup[vertex] = index++; + } + } + + mesh.SetSharedTextures(lookup); + } + + /// <summary> + /// Projects UVs on all passed faces, automatically updating the sharedIndexesUV table as required (only associates + /// vertices that share a seam). + /// </summary> + /// <param name="mesh"></param> + /// <param name="faces"></param> + /// <param name="channel"></param> + internal static void ProjectFacesAuto(ProBuilderMesh mesh, Face[] faces, int channel) + { + if (faces.Length < 1) + return; + + int[] ind = faces.SelectMany(x => x.distinctIndexesInternal).ToArray(); + + // Get a projection direction by averaging the normals of all selected faces + var projectionDirection = Vector3.zero; + + foreach (var face in faces) + { + var nrm = Math.Normal(mesh, face); + projectionDirection += nrm; + } + + projectionDirection /= (float) faces.Length; + + // project uv coordinates + Vector2[] uvs = Projection.PlanarProject(mesh.positionsInternal, ind, projectionDirection); + + // re-assign new projected coords back into full uv array + Vector2[] rebuiltUVs = GetUVs(mesh, channel); + + for (int i = 0; i < ind.Length; i++) + rebuiltUVs[ind[i]] = uvs[i]; + + // and set the msh uv array using the new coordintaes + ApplyUVs(mesh, rebuiltUVs, channel); + + // now go trhough and set all adjacent face groups to use matching element groups + foreach (Face f in faces) + { + f.elementGroup = -1; + SplitUVs(mesh, f.distinctIndexesInternal); + } + + mesh.SewUVs(faces.SelectMany(x => x.distinctIndexesInternal).ToArray(), .001f); + } + + /// <summary> + /// Projects UVs for each face using the closest normal on a box. + /// </summary> + /// <param name="mesh"></param> + /// <param name="faces"></param> + /// <param name="channel"></param> + public static void ProjectFacesBox(ProBuilderMesh mesh, Face[] faces, int channel = 0) + { + Vector2[] uv = GetUVs(mesh, channel); + + Dictionary<ProjectionAxis, List<Face>> sorted = new Dictionary<ProjectionAxis, List<Face>>(); + + for (int i = 0; i < faces.Length; i++) + { + Vector3 nrm = Math.Normal(mesh, faces[i]); + ProjectionAxis axis = Projection.VectorToProjectionAxis(nrm); + + if (sorted.ContainsKey(axis)) + sorted[axis].Add(faces[i]); + else + sorted.Add(axis, new List<Face>() { faces[i] }); + + // clean up UV stuff - no shared UV indexes and remove element group + faces[i].elementGroup = -1; + faces[i].manualUV = true; + } + + foreach (KeyValuePair<ProjectionAxis, List<Face>> kvp in sorted) + { + int[] distinct = kvp.Value.SelectMany(x => x.distinctIndexesInternal).ToArray(); + + Vector2[] uvs = Projection.PlanarProject(mesh.positionsInternal, distinct, Projection.ProjectionAxisToVector(kvp.Key)); + + for (int n = 0; n < distinct.Length; n++) + uv[distinct[n]] = uvs[n]; + + SplitUVs(mesh, distinct); + } + + /* and set the msh uv array using the new coordintaes */ + ApplyUVs(mesh, uv, channel); + } + + /// <summary> + /// Finds the minimal U and V coordinate of a set of an array of UVs + /// </summary> + internal static Vector2 FindMinimalUV(Vector2[] uvs, int[] indices = null, float xMin = 0f, float yMin = 0f) + { + int nbElements = (indices == null ? uvs.Length : indices.Length); + bool first = (xMin == 0f && yMin == 0f); + for (int i = 0; i < nbElements; ++i) + { + int currentIndex = (indices == null ? i : indices[i]); + if (first) + { + xMin = uvs[currentIndex].x; + yMin = uvs[currentIndex].y; + first = false; + } + else + { + + if (uvs[currentIndex].x < xMin) + { + xMin = uvs[currentIndex].x; + } + + if (uvs[currentIndex].y < yMin) + { + yMin = uvs[currentIndex].y; + } + } + } + + return new Vector2(xMin, yMin); + } + + /// <summary> + /// Projects UVs for each face using the closest normal on a box and then place the lower left coordinate at the anchor position. + /// </summary> + /// <param name="mesh"></param> + /// <param name="faces"></param> + /// <param name="lowerLeftAnchor"></param> + /// <param name="channel"></param> + public static void ProjectFacesBox(ProBuilderMesh mesh, Face[] faces, Vector2 lowerLeftAnchor, int channel = 0) + { + Vector2[] uv = GetUVs(mesh, channel); + + Dictionary<ProjectionAxis, List<Face>> sorted = new Dictionary<ProjectionAxis, List<Face>>(); + + for (int i = 0; i < faces.Length; i++) + { + Vector3 nrm = Math.Normal(mesh, faces[i]); + ProjectionAxis axis = Projection.VectorToProjectionAxis(nrm); + + if (sorted.ContainsKey(axis)) + sorted[axis].Add(faces[i]); + else + sorted.Add(axis, new List<Face>() { faces[i] }); + + // clean up UV stuff - no shared UV indexes and remove element group + faces[i].elementGroup = -1; + faces[i].manualUV = true; + } + + foreach (KeyValuePair<ProjectionAxis, List<Face>> kvp in sorted) + { + int[] distinct = kvp.Value.SelectMany(x => x.distinctIndexesInternal).ToArray(); + + Vector2[] uvs = Projection.PlanarProject(mesh.positionsInternal, distinct, Projection.ProjectionAxisToVector(kvp.Key)); + + + Vector2 minimalUV = FindMinimalUV(uvs); + + for (int n = 0; n < distinct.Length; n++) + uv[distinct[n]] = uvs[n] - minimalUV; + + SplitUVs(mesh, distinct); + } + + /* and set the msh uv array using the new coordintaes */ + ApplyUVs(mesh, uv, channel); + } + + /// <summary> + /// Projects UVs for each face using the closest normal on a sphere. + /// </summary> + /// <param name="pb"></param> + /// <param name="indexes"></param> + /// <param name="channel"></param> + public static void ProjectFacesSphere(ProBuilderMesh pb, int[] indexes, int channel = 0) + { + foreach (Face f in pb.facesInternal) + { + if (ArrayUtility.ContainsMatch<int>(f.distinctIndexesInternal, indexes)) + { + f.elementGroup = -1; + f.manualUV = true; + } + } + + SplitUVs(pb, indexes); + + Vector2[] projected = Projection.SphericalProject(pb.positionsInternal, indexes); + Vector2[] uv = GetUVs(pb, channel); + + for (int i = 0; i < indexes.Length; i++) + uv[indexes[i]] = projected[i]; + + /* and set the msh uv array using the new coordintaes */ + ApplyUVs(pb, uv, channel); + } + + /* + * Returns normalized UV values for a mesh uvs (0,0) - (1,1) + */ + public static Vector2[] FitUVs(Vector2[] uvs) + { + // shift UVs to zeroed coordinates + Vector2 smallestVector2 = Math.SmallestVector2(uvs); + + int i; + for (i = 0; i < uvs.Length; i++) + { + uvs[i] -= smallestVector2; + } + + float scale = Math.LargestValue(Math.LargestVector2(uvs)); + + for (i = 0; i < uvs.Length; i++) + { + uvs[i] /= scale; + } + + return uvs; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/UVEditing.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/UVEditing.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..b50439235f3694a9d2aec64aeed0acaac0c90649 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/UVEditing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0ed74e97865f42cfbce844278aa8b52 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/UvUnwrapping.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/UvUnwrapping.cs new file mode 100644 index 0000000000000000000000000000000000000000..b6906ce2ee67e726718fa3356968ad3c4b65ade6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/UvUnwrapping.cs @@ -0,0 +1,183 @@ +using System.Collections.Generic; + +namespace UnityEngine.ProBuilder +{ + static class UvUnwrapping + { + static Vector2 s_TempVector2 = Vector2.zero; + static readonly List<int> s_IndexBuffer = new List<int>(64); + + internal static void Unwrap(ProBuilderMesh mesh, Face face, Vector3 projection = default) + { + Projection.PlanarProject(mesh, face, projection != Vector3.zero? projection : Vector3.zero); + ApplyUVSettings(mesh.texturesInternal, face.distinctIndexesInternal, face.uv); + } + + /// <summary> + /// Copy UVs from source to dest for the given mesh. + /// </summary> + /// <param name="mesh">ProbuilderMesh</param> + /// <param name="source">face to copy UVs from</param> + /// <param name="dest">face to copy UVs to</param> + internal static void CopyUVs(ProBuilderMesh mesh, Face source, Face dest) + { + var uvs = mesh.texturesInternal; + var sourceIndexes = source.distinctIndexesInternal; + var destIndexes = dest.distinctIndexesInternal; + for (int i = 0; i < sourceIndexes.Length; i++) + { + uvs[destIndexes[i]].x = uvs[sourceIndexes[i]].x; + uvs[destIndexes[i]].y = uvs[sourceIndexes[i]].y; + } + } + + internal static void ProjectTextureGroup(ProBuilderMesh mesh, int group, AutoUnwrapSettings unwrapSettings) + { + Projection.PlanarProject(mesh, group, unwrapSettings); + + s_IndexBuffer.Clear(); + foreach (var face in mesh.facesInternal) + { + if (face.textureGroup == group) + { + s_IndexBuffer.AddRange(face.distinctIndexesInternal); + } + } + + ApplyUVSettings(mesh.texturesInternal, s_IndexBuffer, unwrapSettings); + } + + static void ApplyUVSettings(Vector2[] uvs, IList<int> indexes, AutoUnwrapSettings uvSettings) + { + int len = indexes.Count; + + switch (uvSettings.fill) + { + case AutoUnwrapSettings.Fill.Tile: + break; + case AutoUnwrapSettings.Fill.Fit: + FitUVs(uvs, indexes); + break; + case AutoUnwrapSettings.Fill.Stretch: + StretchUVs(uvs, indexes); + break; + } + + // Apply transform last, so that fill and justify don't override it. + if (uvSettings.scale.x != 1f || + uvSettings.scale.y != 1f || + uvSettings.rotation != 0f) + { + Vector2 center = Bounds2D.Center(uvs, indexes); + + for (int i = 0; i < len; i++) + { + uvs[indexes[i]] = uvs[indexes[i]].ScaleAroundPoint(center, uvSettings.scale); + uvs[indexes[i]] = uvs[indexes[i]].RotateAroundPoint(center, uvSettings.rotation); + } + } + + if (!uvSettings.useWorldSpace && uvSettings.anchor != AutoUnwrapSettings.Anchor.None) + ApplyUVAnchor(uvs, indexes, uvSettings.anchor); + + if (uvSettings.flipU || uvSettings.flipV || uvSettings.swapUV) + { + for (int i = 0; i < len; i++) + { + float u = uvs[indexes[i]].x, + v = uvs[indexes[i]].y; + + if (uvSettings.flipU) + u = -u; + + if (uvSettings.flipV) + v = -v; + + if (!uvSettings.swapUV) + { + uvs[indexes[i]].x = u; + uvs[indexes[i]].y = v; + } + else + { + uvs[indexes[i]].x = v; + uvs[indexes[i]].y = u; + } + } + } + + for (int i = 0; i < indexes.Count; i++) + { + uvs[indexes[i]].x -= uvSettings.offset.x; + uvs[indexes[i]].y -= uvSettings.offset.y; + } + } + + static void StretchUVs(Vector2[] uvs, IList<int> indexes) + { + var bounds = new Bounds2D(); + bounds.SetWithPoints(uvs, indexes); + var c = bounds.center; + var s = bounds.size; + + for (int i = 0; i < indexes.Count; i++) + { + var uv = uvs[indexes[i]]; + + uv.x = ((uv.x - c.x) / s.x) + c.x; + uv.y = ((uv.y - c.y) / s.y) + c.y; + + uvs[indexes[i]] = uv; + } + } + + static void FitUVs(Vector2[] uvs, IList<int> indexes) + { + var bounds = new Bounds2D(); + bounds.SetWithPoints(uvs, indexes); + var c = bounds.center; + var s = Mathf.Max(bounds.size.x, bounds.size.y); + + for (int i = 0; i < indexes.Count; i++) + { + var uv = uvs[indexes[i]]; + + uv.x = ((uv.x - c.x) / s) + c.x; + uv.y = ((uv.y - c.y) / s) + c.y; + + uvs[indexes[i]] = uv; + } + } + + static void ApplyUVAnchor(Vector2[] uvs, IList<int> indexes, AutoUnwrapSettings.Anchor anchor) + { + s_TempVector2.x = 0f; + s_TempVector2.y = 0f; + + Vector2 min = Math.SmallestVector2(uvs, indexes); + Vector2 max = Math.LargestVector2(uvs, indexes); + + if (anchor == AutoUnwrapSettings.Anchor.UpperLeft || anchor == AutoUnwrapSettings.Anchor.MiddleLeft || anchor == AutoUnwrapSettings.Anchor.LowerLeft) + s_TempVector2.x = min.x; + else if (anchor == AutoUnwrapSettings.Anchor.UpperRight || anchor == AutoUnwrapSettings.Anchor.MiddleRight || anchor == AutoUnwrapSettings.Anchor.LowerRight) + s_TempVector2.x = max.x - 1f; + else + s_TempVector2.x = (min.x + ((max.x - min.x) * .5f)) - .5f; + + if (anchor == AutoUnwrapSettings.Anchor.UpperLeft || anchor == AutoUnwrapSettings.Anchor.UpperCenter || anchor == AutoUnwrapSettings.Anchor.UpperRight) + s_TempVector2.y = max.y - 1f; + else if (anchor == AutoUnwrapSettings.Anchor.MiddleLeft || anchor == AutoUnwrapSettings.Anchor.MiddleCenter || anchor == AutoUnwrapSettings.Anchor.MiddleRight) + s_TempVector2.y = (min.y + ((max.y - min.y) * .5f)) - .5f; + else + s_TempVector2.y = min.y; + + int len = indexes.Count; + + for (int i = 0; i < len; i++) + { + uvs[indexes[i]].x -= s_TempVector2.x; + uvs[indexes[i]].y -= s_TempVector2.y; + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/UvUnwrapping.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/UvUnwrapping.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..32984a5fefeae78770ff0b33cf37d54269ec7017 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/UV/UvUnwrapping.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 287e3d97419a8431098a54977c657d14 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/VertexEditing.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/VertexEditing.cs new file mode 100644 index 0000000000000000000000000000000000000000..533b8794a846c2b8594ac074139b851ed6f48557 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/VertexEditing.cs @@ -0,0 +1,324 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.KdTree; +using UnityEngine.ProBuilder.KdTree.Math; + +namespace UnityEngine.ProBuilder.MeshOperations +{ + /// <summary> + /// Methods for merging and splitting common (or shared) vertices. + /// </summary> + public static class VertexEditing + { + /// <summary> + /// Collapses all passed indexes to a single shared index. + /// </summary> + /// <remarks> + /// Retains vertex normals. + /// </remarks> + /// <param name="mesh">Target mesh.</param> + /// <param name="indexes">The indexes to merge to a single shared vertex.</param> + /// <param name="collapseToFirst">If true, instead of merging all vertices to the average position, the vertices will be collapsed onto the first vertex position.</param> + /// <returns>The first available local index created as a result of the merge. -1 if action is unsuccessfull.</returns> + public static int MergeVertices(this ProBuilderMesh mesh, int[] indexes, bool collapseToFirst = false) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (indexes == null) + throw new ArgumentNullException("indexes"); + + Vertex[] vertices = mesh.GetVertices(); + Vertex cen = collapseToFirst ? vertices[indexes[0]] : Vertex.Average(vertices, indexes); + mesh.SetVerticesCoincident(indexes); + UVEditing.SplitUVs(mesh, indexes); + int sharedVertexHandle = mesh.GetSharedVertexHandle(indexes.First()); + mesh.SetSharedVertexValues(sharedVertexHandle, cen); + + SharedVertex merged = mesh.sharedVerticesInternal[sharedVertexHandle]; + List<int> removedIndexes = new List<int>(); + + MeshValidation.RemoveDegenerateTriangles(mesh, removedIndexes); + + // get a non-deleted index to work with + int ind = -1; + for (int i = 0; i < merged.Count; i++) + if (!removedIndexes.Contains(merged[i])) + ind = merged[i]; + + int res = ind; + + for (int i = 0; i < removedIndexes.Count; i++) + if (ind > removedIndexes[i]) + res--; + + return res; + } + + /// <summary> + /// Split the vertices referenced by edge from their shared indexes so that each vertex moves independently. + /// </summary> + /// <remarks> + /// This is equivalent to calling `SplitVertices(mesh, new int[] { edge.x, edge.y });`. + /// </remarks> + /// <param name="mesh">The source mesh.</param> + /// <param name="edge">The edge to query for vertex indexes.</param> + /// <seealso cref="SplitVertices(UnityEngine.ProBuilder.ProBuilderMesh,System.Collections.Generic.IEnumerable{int})"/> + public static void SplitVertices(this ProBuilderMesh mesh, Edge edge) + { + SplitVertices(mesh, new int[] { edge.a, edge.b }); + } + + /// <summary> + /// Split vertices from their shared indexes so that each vertex moves independently. + /// </summary> + /// <param name="mesh">The source mesh.</param> + /// <param name="vertices">A list of vertex indexes to split.</param> + /// <seealso cref="ProBuilderMesh.sharedVertices"/> + public static void SplitVertices(this ProBuilderMesh mesh, IEnumerable<int> vertices) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (vertices == null) + throw new ArgumentNullException("vertices"); + + // ToDictionary always sets the universal indexes in ascending order from 0+. + Dictionary<int, int> lookup = mesh.sharedVertexLookup; + int max = lookup.Count(); + foreach (int i in vertices) + lookup[i] = ++max; + mesh.SetSharedVertices(lookup); + } + + /// <summary> + /// Similar to Merge vertices, expect that this method only collapses vertices within a specified distance of one another (typically Mathf.Epsilon is used). + /// </summary> + /// <param name="mesh">Target pb_Object.</param> + /// <param name="indexes">The vertex indexes to be scanned for inclusion. To weld the entire object for example, pass pb.faces.SelectMany(x => x.indexes).</param> + /// <param name="neighborRadius">The minimum distance from another vertex to be considered within welding distance.</param> + /// <returns>The indexes of any new vertices created by a weld.</returns> + public static int[] WeldVertices(this ProBuilderMesh mesh, IEnumerable<int> indexes, float neighborRadius) + { + if (mesh == null) + throw new ArgumentNullException("mesh"); + + if (indexes == null) + throw new ArgumentNullException("indexes"); + + Vertex[] vertices = mesh.GetVertices(); + SharedVertex[] sharedIndexes = mesh.sharedVerticesInternal; + + HashSet<int> common = mesh.GetSharedVertexHandles(indexes); + int vertexCount = common.Count; + + // Make assumption that there will rarely be a time when a single weld encompasses more than 32 vertices. + // If a radial search returns neighbors matching the max count, the search is re-done and maxNearestNeighbors + // is set to the resulting length. This will be slow, but in most cases shouldn't happen ever, or if it does, + // should only happen once or twice. + int maxNearestNeighbors = System.Math.Min(32, common.Count()); + + // 3 dimensions, duplicate entries allowed + KdTree<float, int> tree = new KdTree<float, int>(3, new FloatMath(), AddDuplicateBehavior.Collect); + + foreach (int i in common) + { + Vector3 v = vertices[sharedIndexes[i][0]].position; + tree.Add(new float[] { v.x, v.y, v.z }, i); + } + + float[] point = new float[3] { 0, 0, 0 }; + Dictionary<int, int> remapped = new Dictionary<int, int>(); + Dictionary<int, Vector3> averages = new Dictionary<int, Vector3>(); + int index = sharedIndexes.Length; + + foreach (int commonIndex in common) + { + // already merged with another + if (remapped.ContainsKey(commonIndex)) + continue; + + Vector3 v = vertices[sharedIndexes[commonIndex][0]].position; + + point[0] = v.x; + point[1] = v.y; + point[2] = v.z; + + // Radial search at each point + KdTreeNode<float, int>[] neighbors = tree.RadialSearch(point, neighborRadius, maxNearestNeighbors); + + // if first radial search filled the entire allotment reset the max neighbor count to 1.5x. + // the result hopefully preventing double-searches in the next iterations. + if (maxNearestNeighbors < vertexCount && neighbors.Length >= maxNearestNeighbors) + { + neighbors = tree.RadialSearch(point, neighborRadius, vertexCount); + maxNearestNeighbors = System.Math.Min(vertexCount, neighbors.Length + neighbors.Length / 2); + } + + Vector3 avg = Vector3.zero; + float count = 0; + + for (int neighborIndex = 0; neighborIndex < neighbors.Length; neighborIndex++) + { + // common index of this neighbor + int c = neighbors[neighborIndex].Value; + + // if it's already been added to another, skip it + if (remapped.ContainsKey(c)) + continue; + + avg.x += neighbors[neighborIndex].Point[0]; + avg.y += neighbors[neighborIndex].Point[1]; + avg.z += neighbors[neighborIndex].Point[2]; + + remapped.Add(c, index); + + count++; + + if (neighbors[neighborIndex].Duplicates != null) + { + for (int duplicateIndex = 0; duplicateIndex < neighbors[neighborIndex].Duplicates.Count; duplicateIndex++) + remapped.Add(neighbors[neighborIndex].Duplicates[duplicateIndex], index); + } + } + + avg.x /= count; + avg.y /= count; + avg.z /= count; + + averages.Add(index, avg); + + index++; + } + + var welds = new int[remapped.Count]; + int n = 0; + var lookup = mesh.sharedVertexLookup; + + foreach (var kvp in remapped) + { + SharedVertex tris = sharedIndexes[kvp.Key]; + + welds[n++] = tris[0]; + + for (int i = 0; i < tris.Count; i++) + { + lookup[tris[i]] = kvp.Value; + vertices[tris[i]].position = averages[kvp.Value]; + } + } + + mesh.SetSharedVertices(lookup); + mesh.SetVertices(vertices); + return welds; + } + + /// <summary> + /// Split a common index on a face into two vertices and slide each vertex backwards along it's feeding edge by distance. + /// This method does not perform any input validation, so make sure edgeAndCommonIndex is distinct and all winged edges belong + /// to the same face. + ///<pre> + /// `appendedVertices` is common index and a list of the new face indexes it was split into. + /// + /// _ _ _ _ _ _ _ + /// | / + /// | -> | + /// | | + /// </pre> + /// </summary> + /// <param name="vertices"></param> + /// <param name="edgeAndCommonIndex"></param> + /// <param name="distance"></param> + /// <param name="appendedVertices"></param> + /// <returns></returns> + internal static FaceRebuildData ExplodeVertex( + IList<Vertex> vertices, + IList<SimpleTuple<WingedEdge, int>> edgeAndCommonIndex, + float distance, + out Dictionary<int, List<int>> appendedVertices) + { + Face face = edgeAndCommonIndex.FirstOrDefault().item1.face; + List<Edge> perimeter = WingedEdge.SortEdgesByAdjacency(face); + appendedVertices = new Dictionary<int, List<int>>(); + Vector3 oldNormal = Math.Normal(vertices, face.indexesInternal); + + // store local and common index of split points + Dictionary<int, int> toSplit = new Dictionary<int, int>(); + + foreach (SimpleTuple<WingedEdge, int> v in edgeAndCommonIndex) + { + if (v.item2 == v.item1.edge.common.a) + toSplit.Add(v.item1.edge.local.a, v.item2); + else + toSplit.Add(v.item1.edge.local.b, v.item2); + } + + int pc = perimeter.Count; + List<Vertex> n_vertices = new List<Vertex>(); + + for (int i = 0; i < pc; i++) + { + int index = perimeter[i].b; + + // split this index into two + if (toSplit.ContainsKey(index)) + { + // a --- b --- c + Vertex a = vertices[perimeter[i].a]; + Vertex b = vertices[perimeter[i].b]; + Vertex c = vertices[perimeter[(i + 1) % pc].b]; + + Vertex leading_dir = a - b; + Vertex following_dir = c - b; + leading_dir.Normalize(); + following_dir.Normalize(); + + Vertex leading_insert = vertices[index] + leading_dir * distance; + Vertex following_insert = vertices[index] + following_dir * distance; + + appendedVertices.AddOrAppend(toSplit[index], n_vertices.Count); + n_vertices.Add(leading_insert); + + appendedVertices.AddOrAppend(toSplit[index], n_vertices.Count); + n_vertices.Add(following_insert); + } + else + { + n_vertices.Add(vertices[index]); + } + } + + List<int> triangles; + + if (Triangulation.TriangulateVertices(n_vertices, out triangles, false)) + { + FaceRebuildData data = new FaceRebuildData(); + data.vertices = n_vertices; + data.face = new Face(face); + + Vector3 newNormal = Math.Normal(n_vertices, triangles); + + if (Vector3.Dot(oldNormal, newNormal) < 0f) + triangles.Reverse(); + + data.face.indexesInternal = triangles.ToArray(); + + return data; + } + + return null; + } + + static Edge AlignEdgeWithDirection(EdgeLookup edge, int commonIndex) + { + if (edge.common.a == commonIndex) + return new Edge(edge.local.a, edge.local.b); + else + return new Edge(edge.local.b, edge.local.a); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/VertexEditing.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/VertexEditing.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..07ad6f9bfbee0f473db10f89cffc51845d8edd1c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/MeshOperations/VertexEditing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59e0185ce9cbd4517a2762cb16e1f690 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Unity.ProBuilder.asmdef b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Unity.ProBuilder.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..ec1609c6e9d655fc90256347caa786b32ae26963 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Unity.ProBuilder.asmdef @@ -0,0 +1,23 @@ +{ + "name": "Unity.ProBuilder", + "references": [ + "Unity.ProBuilder.Poly2Tri", + "Unity.ProBuilder.KdTree", + "Unity.RenderPipelines.HighDefinition.Runtime" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.render-pipelines.high-definition", + "expression": "7.1.0", + "define": "HDRP_7_1_0_OR_NEWER" + } + ], + "noEngineReferences": false +} \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Unity.ProBuilder.asmdef.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Unity.ProBuilder.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..028b48d21761cc494720b21f4133be2fcb02edae --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Runtime/Unity.ProBuilder.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1826c0224c0d048b88112c79bbb0cd85 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/.sample.json b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/.sample.json new file mode 100644 index 0000000000000000000000000000000000000000..0bd36c0c6464df1e9aac14c756e1da02a69ca342 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/.sample.json @@ -0,0 +1,5 @@ +{ + "displayName":"Editor Examples", + "description": "Scripts demonstrating how to integrate new functionality into the ProBuilder editor window.", + "createSeparatePackage": true +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/ClearUnusedAttributes.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/ClearUnusedAttributes.cs new file mode 100644 index 0000000000000000000000000000000000000000..93dedf2f7c603f30caf8a3df43682b53bdedcaee --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/ClearUnusedAttributes.cs @@ -0,0 +1,40 @@ +// Uncomment this line to enable this script. +// #define PROBUILDER_API_EXAMPLE + +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder; +using UnityEngine.ProBuilder; + +namespace ProBuilder.EditorExamples +{ + /// <summary> + /// This script demonstrates one use case for the pb_EditorUtility.onMeshCompiled delegate. + /// Whenever ProBuilder compiles a mesh it removes the colors, tangents, and uv attributes. + /// </summary> + [InitializeOnLoad] + sealed class ClearUnusedAttributes : Editor + { + /// <summary> + /// Static constructor is called and subscribes to the OnMeshCompiled delegate. + /// </summary> + static ClearUnusedAttributes() + { + EditorMeshUtility.meshOptimized += OnMeshCompiled; + } + + /// <summary> + /// When a ProBuilder object is compiled to UnityEngine.Mesh this is called. + /// </summary> + /// <param name="probuilderMesh"></param> + /// <param name="mesh"></param> + static void OnMeshCompiled(ProBuilderMesh probuilderMesh, Mesh mesh) + { +#if PROBUILDER_API_EXAMPLE + mesh.uv = null; + mesh.colors32 = null; + mesh.tangents = null; +#endif + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/ClearUnusedAttributes.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/ClearUnusedAttributes.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ac5a79ae4ecec90d5355572693b8980ab7f9aa79 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/ClearUnusedAttributes.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6788c2a43ba342adb830ebab0b3559c4 +timeCreated: 1471362751 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/CreateShadowObject.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/CreateShadowObject.cs new file mode 100644 index 0000000000000000000000000000000000000000..c36e23f7533b1805ea8610f32a4ad809dac8ad4c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/CreateShadowObject.cs @@ -0,0 +1,191 @@ +// This script demonstrates how to create a new action that can be accessed from the ProBuilder toolbar. +// A new menu item is registered under "Geometry" actions called "Gen. Shadows". + +using System.Linq; +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; +using UnityEngine.Rendering; + +// When creating your own actions use your own namespace. +namespace ProBuilder.ExampleActions +{ + [ProBuilderMenuAction] + sealed class CreateShadowObject : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Object; } } + public override Texture2D icon { get { return null; } } + public override TooltipContent tooltip { get { return k_Tooltip; } } + + static readonly GUIContent k_VolumeSize = new GUIContent("Volume Size", "How far the shadow volume extends from " + + "the base mesh. To visualize, imagine the width of walls.\n\nYou can also select the child ShadowVolume " + + "object and turn the Shadow Casting Mode to \"One\" or \"Two\" sided to see the resulting mesh."); + + // What to show in the hover tooltip window. TooltipContent is similar to GUIContent, with the exception + // that it also includes an optional params[] char list in the constructor to define shortcut keys + // (ex, CMD_CONTROL, K). + static readonly TooltipContent k_Tooltip = new TooltipContent( + "Gen Shadow Obj", + "Creates a new ProBuilder mesh child with inverted normals that only exists to cast shadows. Use to " + + "create lit interior scenes with shadows from directional lights.\n\nNote that this exists largely as " + + "a workaround for real-time shadow light leaks. Baked shadows do not require this workaround.", + "" + ); + + static bool showPreview + { + get { return EditorPrefs.GetBool("pb_shadowVolumePreview", true); } + set { EditorPrefs.SetBool("pb_shadowVolumePreview", value); } + } + + // Determines if the action should be enabled or shown as disabled in the menu. + public override bool enabled + { + get { return MeshSelection.selectedObjectCount > 0; } + } + + /// <summary> + /// Determines if the action should be loaded in the menu (ex, face actions shouldn't be shown when in vertex editing mode). + /// </summary> + /// <returns></returns> + public override bool hidden + { + get { return false; } + } + + protected override void OnSettingsEnable() + { + if( showPreview ) + DoAction(); + } + + protected override void OnSettingsGUI() + { + GUILayout.Label("Create Shadow Volume Options", EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + + EditorGUI.BeginChangeCheck(); + float volumeSize = EditorPrefs.GetFloat("pb_CreateShadowObject_volumeSize", .07f); + volumeSize = EditorGUILayout.Slider(k_VolumeSize, volumeSize, 0.001f, 1f); + if( EditorGUI.EndChangeCheck() ) + EditorPrefs.SetFloat("pb_CreateShadowObject_volumeSize", volumeSize); + + #if !UNITY_4_6 && !UNITY_4_7 + EditorGUI.BeginChangeCheck(); + ShadowCastingMode shadowMode = (ShadowCastingMode) EditorPrefs.GetInt("pb_CreateShadowObject_shadowMode", (int) ShadowCastingMode.ShadowsOnly); + shadowMode = (ShadowCastingMode) EditorGUILayout.EnumPopup("Shadow Casting Mode", shadowMode); + if(EditorGUI.EndChangeCheck()) + EditorPrefs.SetInt("pb_CreateShadowObject_shadowMode", (int) shadowMode); + #endif + + EditorGUI.BeginChangeCheck(); + ExtrudeMethod extrudeMethod = (ExtrudeMethod) EditorPrefs.GetInt("pb_CreateShadowObject_extrudeMethod", (int) ExtrudeMethod.FaceNormal); + extrudeMethod = (ExtrudeMethod) EditorGUILayout.EnumPopup("Extrude Method", extrudeMethod); + if(EditorGUI.EndChangeCheck()) + EditorPrefs.SetInt("pb_CreateShadowObject_extrudeMethod", (int) extrudeMethod); + + if(EditorGUI.EndChangeCheck()) + DoAction(); + + GUILayout.FlexibleSpace(); + + if(GUILayout.Button("Create Shadow Volume")) + { + DoAction(); + SceneView.RepaintAll(); +// MenuOption.CloseAll(); + } + } + + /// <summary> + /// Perform the action. + /// </summary> + /// <returns>Return a pb_ActionResult indicating the success/failure of action.</returns> + public override ActionResult DoAction() + { + ShadowCastingMode shadowMode = (ShadowCastingMode) EditorPrefs.GetInt("pb_CreateShadowObject_shadowMode", (int) ShadowCastingMode.ShadowsOnly); + float extrudeDistance = EditorPrefs.GetFloat("pb_CreateShadowObject_volumeSize", .08f); + ExtrudeMethod extrudeMethod = (ExtrudeMethod) EditorPrefs.GetInt("pb_CreateShadowObject_extrudeMethod", (int) ExtrudeMethod.FaceNormal); + + foreach(ProBuilderMesh mesh in MeshSelection.top) + { + ProBuilderMesh shadow = GetShadowObject(mesh); + + if(shadow == null) + continue; + + foreach (Face f in shadow.faces) + { + f.SetIndexes(f.indexes.Reverse().ToArray()); + f.manualUV = true; + } + shadow.Extrude(shadow.faces, extrudeMethod, extrudeDistance); + shadow.ToMesh(); + shadow.Refresh(); + shadow.Optimize(); + + #if !UNITY_4_6 && !UNITY_4_7 + MeshRenderer mr = shadow.gameObject.GetComponent<MeshRenderer>(); + mr.shadowCastingMode = shadowMode; + if(shadowMode == ShadowCastingMode.ShadowsOnly) + mr.receiveShadows = false; + #endif + + Collider collider = shadow.GetComponent<Collider>(); + + while(collider != null) + { + Object.DestroyImmediate(collider); + collider = shadow.GetComponent<Collider>(); + } + } + + // Refresh the Editor wireframe and working caches. + ProBuilderEditor.Refresh(); + + return new ActionResult(ActionResult.Status.Success, "Create Shadow Object"); + } + + private ProBuilderMesh GetShadowObject(ProBuilderMesh mesh) + { + if(mesh == null || mesh.name.Contains("-ShadowVolume")) + return null; + + for(int i = 0; i < mesh.transform.childCount; i++) + { + Transform t = mesh.transform.GetChild(i); + + if(t.name.Equals(string.Format("{0}-ShadowVolume", mesh.name))) + { + ProBuilderMesh shadow = t.GetComponent<ProBuilderMesh>(); + + if(shadow != null) + { + Undo.RecordObject(shadow, "Update Shadow Object"); + + Face[] faces = new Face[mesh.faceCount]; + + for(int nn = 0; nn < mesh.faceCount; nn++) + faces[nn] = new Face(mesh.faces[nn]); + + shadow.RebuildWithPositionsAndFaces(mesh.positions, faces); + + return shadow; + } + } + } + + ProBuilderMesh newShadowMesh = ProBuilderMesh.Create(); + newShadowMesh.ToMesh(); + newShadowMesh.CopyFrom(mesh); + newShadowMesh.name = string.Format("{0}-ShadowVolume", mesh.name); + newShadowMesh.transform.SetParent(mesh.transform, false); + Undo.RegisterCreatedObjectUndo(newShadowMesh.gameObject, "Create Shadow Object"); + return newShadowMesh; + } + } +} + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/CreateShadowObject.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/CreateShadowObject.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ebd1e5a7d52c3d26886584076dc7f22d11935024 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/CreateShadowObject.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8f46951015504d67b363ed8172e41dc8 +timeCreated: 1486739109 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/CustomAction.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/CustomAction.cs new file mode 100644 index 0000000000000000000000000000000000000000..f5eb905c0d2f12f387a7f9bac7be323f3ad85d2a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/CustomAction.cs @@ -0,0 +1,75 @@ +// This script demonstrates how to create a new action that can be accessed from the ProBuilder toolbar. +// A new menu item is registered under "Geometry" actions called "Make Double-Sided". +// To enable, remove the #if PROBUILDER_API_EXAMPLE and #endif directives. + +using System.Linq; +using UnityEngine; +using UnityEditor; +using UnityEditor.ProBuilder; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace ProBuilder.ExampleActions +{ + /// <summary> + /// This is the actual action that will be executed. + /// </summary> + public class MakeFacesDoubleSided : MenuAction + { + public override ToolbarGroup group { get { return ToolbarGroup.Geometry; } } + public override Texture2D icon { get { return null; } } + public override TooltipContent tooltip { get { return k_Tooltip; } } + + /// <summary> + /// What to show in the hover tooltip window. + /// TooltipContent is similar to GUIContent, with the exception that it also includes an optional params[] + /// char list in the constructor to define shortcut keys (ex, CMD_CONTROL, K). + /// </summary> + static readonly TooltipContent k_Tooltip = new TooltipContent + ( + "Set Double-Sided", + "Adds another face to the back of the selected faces." + ); + + /// <summary> + /// Determines if the action should be enabled or grayed out. + /// </summary> + /// <returns></returns> + public override bool enabled + { + get { return MeshSelection.selectedFaceCount > 0; } + } + + /// <summary> + /// This action is applicable in Face selection modes. + /// </summary> + public override SelectMode validSelectModes + { + get { return SelectMode.Face | SelectMode.TextureFace; } + } + + /// <summary> + /// Return a pb_ActionResult indicating the success/failure of action. + /// </summary> + /// <returns></returns> + public override ActionResult DoAction() + { + var selection = MeshSelection.top.ToArray(); + Undo.RecordObjects(selection, "Make Double-Sided Faces"); + + foreach(var mesh in selection) + { + AppendElements.DuplicateAndFlip(mesh, mesh.GetSelectedFaces()); + + mesh.ToMesh(); + mesh.Refresh(); + mesh.Optimize(); + } + + // Rebuild the pb_Editor caches + ProBuilderEditor.Refresh(); + + return new ActionResult(ActionResult.Status.Success, "Make Faces Double-Sided"); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/CustomAction.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/CustomAction.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9a5f146f95748abfb6368778550166d663c6dfbf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/CustomAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 418af46bf5b74c89808aef1e0c5441f9 +timeCreated: 1470926631 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/EditorCallbackViewer.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/EditorCallbackViewer.cs new file mode 100644 index 0000000000000000000000000000000000000000..ef47d5239902462943d0217d04cb7ac2c6651970 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/EditorCallbackViewer.cs @@ -0,0 +1,137 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; +using System.Linq; +using UnityEditor.ProBuilder; +using UnityEngine.ProBuilder; +using EditorUtility = UnityEditor.ProBuilder.EditorUtility; + +namespace ProBuilder.EditorExamples +{ + sealed class EditorCallbackViewer : EditorWindow + { + List<string> m_Logs = new List<string>(); + Vector2 m_Scroll = Vector2.zero; + bool m_Collapse = true; + + [MenuItem("Tools/ProBuilder/API Examples/Log Callbacks Window")] + static void MenuInitEditorCallbackViewer() + { + GetWindow<EditorCallbackViewer>(true, "ProBuilder Callbacks", true).Show(); + } + + static Color logBackgroundColor + { + get { return EditorGUIUtility.isProSkin ? new Color(.15f, .15f, .15f, .5f) : new Color(.8f, .8f, .8f, 1f); } + } + + static Color disabledColor + { + get { return EditorGUIUtility.isProSkin ? new Color(.3f, .3f, .3f, .5f) : new Color(.8f, .8f, .8f, 1f); } + } + + void OnEnable() + { + ProBuilderEditor.selectModeChanged += SelectModeChanged; + EditorUtility.meshCreated += MeshCreated; + ProBuilderEditor.selectionUpdated += SelectionUpdated; + ProBuilderEditor.beforeMeshModification += BeforeMeshModification; + ProBuilderEditor.afterMeshModification += AfterMeshModification; + EditorMeshUtility.meshOptimized += MeshOptimized; + } + + void OnDisable() + { + ProBuilderEditor.selectModeChanged -= SelectModeChanged; + EditorUtility.meshCreated -= MeshCreated; + ProBuilderEditor.selectionUpdated -= SelectionUpdated; + ProBuilderEditor.beforeMeshModification -= BeforeMeshModification; + ProBuilderEditor.afterMeshModification -= AfterMeshModification; + EditorMeshUtility.meshOptimized -= MeshOptimized; + } + + void BeforeMeshModification(IEnumerable<ProBuilderMesh> selection) + { + AddLog("Began Moving Vertices"); + } + + void AfterMeshModification(IEnumerable<ProBuilderMesh> selection) + { + AddLog("Finished Moving Vertices"); + } + + void SelectModeChanged(SelectMode mode) + { + AddLog("Selection Mode Changed: " + mode); + } + + void MeshCreated(ProBuilderMesh mesh) + { + AddLog("Instantiated new ProBuilder Object: " + mesh.name); + } + + void SelectionUpdated(IEnumerable<ProBuilderMesh> selection) + { + AddLog("Selection Updated: " + string.Format("{0} objects selected.", selection != null ? selection.Count() : 0)); + } + + void MeshOptimized(ProBuilderMesh pmesh, Mesh umesh) + { + AddLog(string.Format("Mesh {0} rebuilt", pmesh.name)); + } + + void AddLog(string summary) + { + m_Logs.Add(summary); + Repaint(); + } + + void OnGUI() + { + GUILayout.BeginHorizontal(EditorStyles.toolbar); + + GUILayout.FlexibleSpace(); + + GUI.backgroundColor = m_Collapse ? disabledColor : Color.white; + if (GUILayout.Button("Collapse", EditorStyles.toolbarButton)) + m_Collapse = !m_Collapse; + GUI.backgroundColor = Color.white; + + if (GUILayout.Button("Clear", EditorStyles.toolbarButton)) + m_Logs.Clear(); + + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + GUILayout.Label("Callback Log", EditorStyles.boldLabel); + GUILayout.EndHorizontal(); + + Rect r = GUILayoutUtility.GetLastRect(); + r.x = 0; + r.y = r.y + r.height + 6; + r.width = this.position.width; + r.height = this.position.height; + + GUILayout.Space(4); + + m_Scroll = GUILayout.BeginScrollView(m_Scroll); + + int len = m_Logs.Count; + int min = System.Math.Max(0, len - 1024); + + for (int i = len - 1; i >= min; i--) + { + if (m_Collapse && + i > 0 && + i < len - 1 && + m_Logs[i].Equals(m_Logs[i - 1]) && + m_Logs[i].Equals(m_Logs[i + 1])) + continue; + + GUILayout.Label(string.Format("{0,3}: {1}", i, m_Logs[i])); + } + + GUILayout.EndScrollView(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/EditorCallbackViewer.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/EditorCallbackViewer.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..fb99f13e49373cafe3d5819e0d63993bbd8d229a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/EditorCallbackViewer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bc9063dd5c474cb78a1068e2805d5a58 +timeCreated: 1462295537 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/RenameNewObjects.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/RenameNewObjects.cs new file mode 100644 index 0000000000000000000000000000000000000000..e6098c59b0529f69a0f45b6913bbfbecf9190ed8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/RenameNewObjects.cs @@ -0,0 +1,42 @@ +/** + * This script demonstrates how one might use the OnproBuilderObjectCreated delegate. + */ + +// Uncomment this line to enable this script. +// #define PROBUILDER_API_EXAMPLE + +#if PROBUILDER_API_EXAMPLE + +using UnityEngine; +using UnityEditor; +using ProBuilder.Core; +using ProBuilder.EditorCore; + +namespace ProBuilder.EditorExamples +{ + [InitializeOnLoad] + public class RenameNewObjects : Editor + { + // Static constructor is called and subscribes to the OnProBuilderObjectCreated delegate. + static RenameNewObjects() + { + pb_EditorApi.AddOnObjectCreatedListener(OnProBuilderObjectCreated); + } + + ~RenameNewObjects() + { + pb_EditorApi.RemoveOnObjectCreatedListener(OnProBuilderObjectCreated); + } + + /// <summary> + /// When a new object is created this function is called with a reference to the pb_Object last built. + /// </summary> + /// <param name="pb"></param> + static void OnProBuilderObjectCreated(pb_Object pb) + { + pb.gameObject.name = string.Format("pb_{0}{1}", pb.gameObject.name, pb.GetInstanceID()); + } + } +} + +#endif diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/RenameNewObjects.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/RenameNewObjects.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9d4ef0dd03e2b6964f248bfb8dfe30e28fe72f3f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/RenameNewObjects.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b7271c06f5f9495aa00c8bdf5b3b0311 +timeCreated: 1471362751 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/SetCustomUnwrapParams.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/SetCustomUnwrapParams.cs new file mode 100644 index 0000000000000000000000000000000000000000..aa00d72fc4cb242b4bef6cdba921eaea7a9543a6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/SetCustomUnwrapParams.cs @@ -0,0 +1,46 @@ +// Set new ProBuilder objects to use special UV2 unwrap params. +// Uncomment this line to enable this script. +// #define PROBUILDER_API_EXAMPLE + +#if PROBUILDER_API_EXAMPLE + +using UnityEngine; +using UnityEditor; +using System.Collections; +using ProBuilder.Core; +using ProBuilder.EditorCore; + +namespace ProBuilder.EditorExamples +{ + [InitializeOnLoad] + public class SetUnwrapParams : Editor + { + /// <summary> + /// Static constructor is called and subscribes to the OnProBuilderObjectCreated delegate. + /// </summary> + static SetUnwrapParams() + { + pb_EditorApi.AddOnObjectCreatedListener(OnProBuilderObjectCreated); + } + + ~SetUnwrapParams() + { + pb_EditorApi.RemoveOnObjectCreatedListener(OnProBuilderObjectCreated); + } + + /// <summary> + /// When a new object is created this function is called with a reference to the pb_Object last built. + /// </summary> + /// <param name="pb"></param> + static void OnProBuilderObjectCreated(pb_Object pb) + { + pb_UnwrapParameters up = pb.unwrapParameters; + up.hardAngle = 88f; // range: 1f, 180f + up.packMargin = 15f; // range: 1f, 64f + up.angleError = 30f; // range: 1f, 75f + up.areaError = 15f; // range: 1f, 75f + } + } +} + +#endif diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/SetCustomUnwrapParams.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/SetCustomUnwrapParams.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..9221420d3342fefbef802235a8fc5760f2a7b4d2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/SetCustomUnwrapParams.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 91f0616c83774dd686735affddfd2ed7 +timeCreated: 1472485272 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/Unity.ProBuilder.Examples.Editor.asmdef b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/Unity.ProBuilder.Examples.Editor.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..ea282787450966962cb01fba4f8b4e5d169e6830 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/Unity.ProBuilder.Examples.Editor.asmdef @@ -0,0 +1,18 @@ +{ + "name": "Unity.ProBuilder.Examples.Editor", + "references": [ + "Unity.ProBuilder.Editor", + "Unity.ProBuilder" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [] +} \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/Unity.ProBuilder.Examples.Editor.asmdef.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/Unity.ProBuilder.Examples.Editor.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..06ecca216ff1865f4909e533723e2257707542ec --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Editor/Unity.ProBuilder.Examples.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ef1f5f55a4ed543fe93cc11633ee6d60 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/.sample.json b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/.sample.json new file mode 100644 index 0000000000000000000000000000000000000000..906fe2e072a69004238ac6797712626222603721 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/.sample.json @@ -0,0 +1,5 @@ +{ + "displayName":"HDRP Support", + "description": "Shaders and materials for the High Definition Render Pipeline.", + "createSeparatePackage": false +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Material.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Material.meta new file mode 100644 index 0000000000000000000000000000000000000000..090694e722fa7640846310420baef7b9a74f2db6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Material.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7219c41a22d4e4267889845465547fdc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Material/ProBuilder Default HDRP.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Material/ProBuilder Default HDRP.mat new file mode 100644 index 0000000000000000000000000000000000000000..f876dd9799d85bb62590b0b82410880e5701652a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Material/ProBuilder Default HDRP.mat @@ -0,0 +1,254 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ProBuilder Default HDRP + m_Shader: {fileID: -6465566751694194690, guid: 7f3bdc6fd92af4529b40bcf8d577c8fb, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + MotionVector: User + disabledShaderPasses: + - MOTIONVECTORS + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - Texture2D_AD0BEF7C: + m_Texture: {fileID: 2800000, guid: 6344bf96fbda94141a525046d088fb23, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BaseColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BentNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BentNormalMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _CoatMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DistortionVectorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissiveColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _HeightMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescenceMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescenceThicknessMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 6344bf96fbda94141a525046d088fb23, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecularColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SubsurfaceMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TangentMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TangentMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ThicknessMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TransmittanceColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AORemapMax: 1 + - _AORemapMin: 0 + - _ATDistance: 1 + - _AlbedoAffectEmissive: 0 + - _AlphaCutoff: 0.5 + - _AlphaCutoffEnable: 0 + - _AlphaCutoffPostpass: 0.5 + - _AlphaCutoffPrepass: 0.5 + - _AlphaCutoffShadow: 0.5 + - _AlphaDstBlend: 0 + - _AlphaSrcBlend: 1 + - _Anisotropy: 0 + - _BlendMode: 0 + - _CoatMask: 0 + - _CullMode: 2 + - _CullModeForward: 2 + - _Cutoff: 0.5 + - _DepthOffsetEnable: 0 + - _DetailAlbedoScale: 1 + - _DetailNormalScale: 1 + - _DetailSmoothnessScale: 1 + - _DiffusionProfile: 0 + - _DiffusionProfileHash: 0 + - _DisplacementLockObjectScale: 1 + - _DisplacementLockTilingScale: 1 + - _DisplacementMode: 0 + - _DistortionBlendMode: 0 + - _DistortionBlurBlendMode: 0 + - _DistortionBlurDstBlend: 0 + - _DistortionBlurRemapMax: 1 + - _DistortionBlurRemapMin: 0 + - _DistortionBlurScale: 1 + - _DistortionBlurSrcBlend: 0 + - _DistortionDepthTest: 1 + - _DistortionDstBlend: 0 + - _DistortionEnable: 0 + - _DistortionScale: 1 + - _DistortionSrcBlend: 0 + - _DistortionVectorBias: -1 + - _DistortionVectorScale: 2 + - _DoubleSidedEnable: 0 + - _DoubleSidedNormalMode: 1 + - _Drag: 1 + - _DstBlend: 0 + - _EmissiveColorMode: 1 + - _EmissiveExposureWeight: 1 + - _EmissiveIntensity: 1 + - _EmissiveIntensityUnit: 0 + - _EnableBlendModePreserveSpecularLighting: 1 + - _EnableFogOnTransparent: 1 + - _EnableGeometricSpecularAA: 0 + - _EnableMotionVectorForVertexAnimation: 0 + - _EnableSpecularOcclusion: 0 + - _EnableWind: 0 + - _EnergyConservingSpecularColor: 1 + - _HdrpVersion: 2 + - _HeightAmplitude: 0.02 + - _HeightCenter: 0.5 + - _HeightMapParametrization: 0 + - _HeightMax: 1 + - _HeightMin: -1 + - _HeightOffset: 0 + - _HeightPoMAmplitude: 2 + - _HeightTessAmplitude: 2 + - _HeightTessCenter: 0.5 + - _InitialBend: 1 + - _InvTilingScale: 1 + - _Ior: 1 + - _IridescenceMask: 1 + - _IridescenceThickness: 1 + - _LinkDetailsWithBase: 1 + - _MaterialID: 1 + - _Metallic: 0 + - _NormalMapSpace: 0 + - _NormalScale: 1 + - _PPDLodThreshold: 5 + - _PPDMaxSamples: 15 + - _PPDMinSamples: 5 + - _PPDPrimitiveLength: 1 + - _PPDPrimitiveWidth: 1 + - _ReceivesSSR: 1 + - _RefractionModel: 0 + - _SSRefractionProjectionModel: 0 + - _ShiverDirectionality: 0.5 + - _ShiverDrag: 0.2 + - _Smoothness: 0.5 + - _SmoothnessRemapMax: 1 + - _SmoothnessRemapMin: 0 + - _SpecularAAScreenSpaceVariance: 0.1 + - _SpecularAAThreshold: 0.2 + - _SrcBlend: 1 + - _StencilRef: 2 + - _StencilRefDepth: 0 + - _StencilRefDistortionVec: 64 + - _StencilRefGBuffer: 2 + - _StencilRefMV: 128 + - _StencilWriteMask: 3 + - _StencilWriteMaskDepth: 32 + - _StencilWriteMaskDistortionVec: 64 + - _StencilWriteMaskGBuffer: 3 + - _StencilWriteMaskMV: 128 + - _Stiffness: 1 + - _SubsurfaceMask: 1 + - _SupportDecals: 1 + - _SurfaceType: 0 + - _TexWorldScale: 1 + - _TexWorldScaleEmissive: 1 + - _Thickness: 1 + - _ThicknessMultiplier: 1 + - _TransmissionEnable: 1 + - _TransparentBackfaceEnable: 0 + - _TransparentDepthPostpassEnable: 0 + - _TransparentDepthPrepassEnable: 0 + - _TransparentSortPriority: 0 + - _TransparentWritingMotionVec: 0 + - _UVBase: 0 + - _UVDetail: 0 + - _UVEmissive: 0 + - _UseEmissiveIntensity: 0 + - _UseShadowThreshold: 0 + - _ZTestDepthEqualForOpaque: 4 + - _ZTestGBuffer: 4 + - _ZTestModeDistortion: 8 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0} + - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} + - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} + - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1} + - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0} + - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0} + - _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1} + - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0} + - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} + - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} + m_BuildTextureStacks: [] diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Material/ProBuilder Default HDRP.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Material/ProBuilder Default HDRP.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..9402651720b07b9c35d713d27b6b8b89de862586 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Material/ProBuilder Default HDRP.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 046d63d2ab45d4a268ad613744852fc9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..84ab2f8e8523cbe09cfc166fd79c7a0c2b8aa38e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Shader.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eac1e9e0a7533453f93415069dd43065 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Shader/Standard Vertex Color.shadergraph b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Shader/Standard Vertex Color.shadergraph new file mode 100644 index 0000000000000000000000000000000000000000..0d1eb3c04af963280371e97149654baf5a4f0122 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Shader/Standard Vertex Color.shadergraph @@ -0,0 +1,110 @@ +{ + "m_SerializedProperties": [ + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.Internal.Texture2DShaderProperty" + }, + "JSONnodeData": "{\n \"m_Guid\": {\n \"m_GuidSerialized\": \"6d25d4ee-e7ec-490f-a986-ea596d7cf387\"\n },\n \"m_Name\": \"Albedo\",\n \"m_DefaultReferenceName\": \"Texture2D_AD0BEF7C\",\n \"m_OverrideReferenceName\": \"_MainTex\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Precision\": 0,\n \"m_GPUInstanced\": false,\n \"m_Hidden\": false,\n \"m_Value\": {\n \"m_SerializedTexture\": \"{\\\"texture\\\":{\\\"fileID\\\":2800000,\\\"guid\\\":\\\"5cb8f08ad12bd42059c1a1dba12d7bca\\\",\\\"type\\\":3}}\",\n \"m_Guid\": \"\"\n },\n \"m_Modifiable\": true,\n \"m_DefaultType\": 0\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty" + }, + "JSONnodeData": "{\n \"m_Guid\": {\n \"m_GuidSerialized\": \"2d7fd570-92f2-41b4-865f-db81eae6e04f\"\n },\n \"m_Name\": \"Color\",\n \"m_DefaultReferenceName\": \"Color_4635C24\",\n \"m_OverrideReferenceName\": \"_Color\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Precision\": 0,\n \"m_GPUInstanced\": false,\n \"m_Hidden\": false,\n \"m_Value\": {\n \"r\": 1.0,\n \"g\": 1.0,\n \"b\": 1.0,\n \"a\": 0.0\n },\n \"m_ColorMode\": 0\n}" + } + ], + "m_SerializedKeywords": [], + "m_SerializableNodes": [ + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.PBRMasterNode" + }, + "JSONnodeData": "{\n \"m_GuidSerialized\": \"ed32a4e5-5738-4fa9-afb5-ac0c54244c29\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"PBR Master\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": 468.0000305175781,\n \"y\": -27.000009536743165,\n \"width\": 200.00001525878907,\n \"height\": 317.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.PositionMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 9,\\n \\\"m_DisplayName\\\": \\\"Vertex Position\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Vertex Position\\\",\\n \\\"m_StageCapability\\\": 1,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_Space\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.NormalMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 10,\\n \\\"m_DisplayName\\\": \\\"Vertex Normal\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Vertex Normal\\\",\\n \\\"m_StageCapability\\\": 1,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_Space\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.TangentMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 11,\\n \\\"m_DisplayName\\\": \\\"Vertex Tangent\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Vertex Tangent\\\",\\n \\\"m_StageCapability\\\": 1,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_Space\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.ColorRGBMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"Albedo\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Albedo\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.7353569269180298,\\n \\\"y\\\": 0.7353569269180298,\\n \\\"z\\\": 0.7353569269180298\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_ColorMode\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.NormalMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"Normal\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Normal\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_Space\\\": 3\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.ColorRGBMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 4,\\n \\\"m_DisplayName\\\": \\\"Emission\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Emission\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_ColorMode\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 2,\\n \\\"m_DisplayName\\\": \\\"Metallic\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Metallic\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.0,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 5,\\n \\\"m_DisplayName\\\": \\\"Smoothness\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Smoothness\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.5,\\n \\\"m_DefaultValue\\\": 0.5,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 6,\\n \\\"m_DisplayName\\\": \\\"Occlusion\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Occlusion\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 1.0,\\n \\\"m_DefaultValue\\\": 1.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 7,\\n \\\"m_DisplayName\\\": \\\"Alpha\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Alpha\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 1.0,\\n \\\"m_DefaultValue\\\": 1.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 8,\\n \\\"m_DisplayName\\\": \\\"AlphaClipThreshold\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"AlphaClipThreshold\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.5,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n },\n \"m_DOTSInstancing\": false,\n \"m_SerializableSubShaders\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.Rendering.HighDefinition.HDPBRSubShader\"\n },\n \"JSONnodeData\": \"{}\"\n }\n ],\n \"m_ShaderGUIOverride\": \"\",\n \"m_OverrideEnabled\": false,\n \"m_Model\": 1,\n \"m_SurfaceType\": 0,\n \"m_AlphaMode\": 0,\n \"m_TwoSided\": false,\n \"m_NormalDropOffSpace\": 0\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.PropertyNode" + }, + "JSONnodeData": "{\n \"m_GuidSerialized\": \"1ed4c1cf-efb7-4565-b29b-50eba4a7e0f6\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Property\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -861.0,\n \"y\": 27.0,\n \"width\": 115.0,\n \"height\": 34.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Texture2DMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"Albedo\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n },\n \"m_PropertyGuidSerialized\": \"6d25d4ee-e7ec-490f-a986-ea596d7cf387\"\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.SampleTexture2DNode" + }, + "JSONnodeData": "{\n \"m_GuidSerialized\": \"a72dd24d-b804-437e-8746-402909159f56\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Sample Texture 2D\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -566.0,\n \"y\": -133.0,\n \"width\": 208.0,\n \"height\": 433.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector4MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"RGBA\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"RGBA\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 4,\\n \\\"m_DisplayName\\\": \\\"R\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"R\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.0,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 5,\\n \\\"m_DisplayName\\\": \\\"G\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"G\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.0,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 6,\\n \\\"m_DisplayName\\\": \\\"B\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"B\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.0,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 7,\\n \\\"m_DisplayName\\\": \\\"A\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"A\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.0,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Texture2DInputMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"Texture\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Texture\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Texture\\\": {\\n \\\"m_SerializedTexture\\\": \\\"{\\\\\\\"texture\\\\\\\":{\\\\\\\"instanceID\\\\\\\":0}}\\\",\\n \\\"m_Guid\\\": \\\"\\\"\\n },\\n \\\"m_DefaultType\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.UVMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 2,\\n \\\"m_DisplayName\\\": \\\"UV\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"UV\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\"\\n ],\\n \\\"m_Channel\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.SamplerStateMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 3,\\n \\\"m_DisplayName\\\": \\\"Sampler\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Sampler\\\",\\n \\\"m_StageCapability\\\": 3\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n },\n \"m_TextureType\": 0,\n \"m_NormalMapSpace\": 0\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.MultiplyNode" + }, + "JSONnodeData": "{\n \"m_GuidSerialized\": \"f1ed3082-fc2a-4dac-b0b5-5da7ccaf8a1b\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Multiply\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -151.0,\n \"y\": 81.0,\n \"width\": 208.0,\n \"height\": 302.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicValueMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"A\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"A\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"e00\\\": 0.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 0.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 0.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"e00\\\": 1.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 1.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 1.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 1.0\\n }\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicValueMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"B\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"B\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"e00\\\": 2.0,\\n \\\"e01\\\": 2.0,\\n \\\"e02\\\": 2.0,\\n \\\"e03\\\": 2.0,\\n \\\"e10\\\": 2.0,\\n \\\"e11\\\": 2.0,\\n \\\"e12\\\": 2.0,\\n \\\"e13\\\": 2.0,\\n \\\"e20\\\": 2.0,\\n \\\"e21\\\": 2.0,\\n \\\"e22\\\": 2.0,\\n \\\"e23\\\": 2.0,\\n \\\"e30\\\": 2.0,\\n \\\"e31\\\": 2.0,\\n \\\"e32\\\": 2.0,\\n \\\"e33\\\": 2.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"e00\\\": 1.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 1.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 1.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 1.0\\n }\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicValueMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 2,\\n \\\"m_DisplayName\\\": \\\"Out\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"e00\\\": 0.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 0.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 0.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"e00\\\": 1.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 1.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 1.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 1.0\\n }\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n }\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.VertexColorNode" + }, + "JSONnodeData": "{\n \"m_GuidSerialized\": \"43f348b7-208d-4378-9f41-9ee0e00b85f4\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Vertex Color\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -573.0,\n \"y\": 323.0,\n \"width\": 208.0,\n \"height\": 278.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector4MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"Out\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 1.0,\\n \\\"y\\\": 1.0,\\n \\\"z\\\": 1.0,\\n \\\"w\\\": 1.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n }\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.MultiplyNode" + }, + "JSONnodeData": "{\n \"m_GuidSerialized\": \"bc52872a-f569-45f2-abde-d918965cfab2\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Multiply\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": 125.0000228881836,\n \"y\": 241.00001525878907,\n \"width\": 208.0,\n \"height\": 302.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicValueMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"A\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"A\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"e00\\\": 0.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 0.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 0.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"e00\\\": 1.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 1.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 1.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 1.0\\n }\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicValueMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"B\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"B\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"e00\\\": 2.0,\\n \\\"e01\\\": 2.0,\\n \\\"e02\\\": 2.0,\\n \\\"e03\\\": 2.0,\\n \\\"e10\\\": 2.0,\\n \\\"e11\\\": 2.0,\\n \\\"e12\\\": 2.0,\\n \\\"e13\\\": 2.0,\\n \\\"e20\\\": 2.0,\\n \\\"e21\\\": 2.0,\\n \\\"e22\\\": 2.0,\\n \\\"e23\\\": 2.0,\\n \\\"e30\\\": 2.0,\\n \\\"e31\\\": 2.0,\\n \\\"e32\\\": 2.0,\\n \\\"e33\\\": 2.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"e00\\\": 1.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 1.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 1.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 1.0\\n }\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicValueMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 2,\\n \\\"m_DisplayName\\\": \\\"Out\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"e00\\\": 0.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 0.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 0.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"e00\\\": 1.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 1.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 1.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 1.0\\n }\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n }\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.PropertyNode" + }, + "JSONnodeData": "{\n \"m_GuidSerialized\": \"bd8bda92-3a4a-46d4-93fe-77431c12f36e\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Property\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -40.00000762939453,\n \"y\": 418.00006103515627,\n \"width\": 106.00000762939453,\n \"height\": 34.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector4MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"Color\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n },\n \"m_PropertyGuidSerialized\": \"2d7fd570-92f2-41b4-865f-db81eae6e04f\"\n}" + } + ], + "m_Groups": [], + "m_StickyNotes": [], + "m_SerializableEdges": [ + { + "typeInfo": { + "fullName": "UnityEditor.Graphing.Edge" + }, + "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"1ed4c1cf-efb7-4565-b29b-50eba4a7e0f6\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 1,\n \"m_NodeGUIDSerialized\": \"a72dd24d-b804-437e-8746-402909159f56\"\n }\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.Graphing.Edge" + }, + "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"a72dd24d-b804-437e-8746-402909159f56\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"f1ed3082-fc2a-4dac-b0b5-5da7ccaf8a1b\"\n }\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.Graphing.Edge" + }, + "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"43f348b7-208d-4378-9f41-9ee0e00b85f4\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 1,\n \"m_NodeGUIDSerialized\": \"f1ed3082-fc2a-4dac-b0b5-5da7ccaf8a1b\"\n }\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.Graphing.Edge" + }, + "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"bd8bda92-3a4a-46d4-93fe-77431c12f36e\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 1,\n \"m_NodeGUIDSerialized\": \"bc52872a-f569-45f2-abde-d918965cfab2\"\n }\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.Graphing.Edge" + }, + "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 2,\n \"m_NodeGUIDSerialized\": \"f1ed3082-fc2a-4dac-b0b5-5da7ccaf8a1b\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"bc52872a-f569-45f2-abde-d918965cfab2\"\n }\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.Graphing.Edge" + }, + "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 2,\n \"m_NodeGUIDSerialized\": \"bc52872a-f569-45f2-abde-d918965cfab2\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"ed32a4e5-5738-4fa9-afb5-ac0c54244c29\"\n }\n}" + } + ], + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", + "m_Guid": "" + } + }, + "m_Path": "Shader Graphs", + "m_ConcretePrecision": 0, + "m_ActiveOutputNodeGuidSerialized": "ed32a4e5-5738-4fa9-afb5-ac0c54244c29" +} \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Shader/Standard Vertex Color.shadergraph.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Shader/Standard Vertex Color.shadergraph.meta new file mode 100644 index 0000000000000000000000000000000000000000..2ceac4d39efefb3ada0462727a5b44fa8d81aefc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/HDRP/Shader/Standard Vertex Color.shadergraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7f3bdc6fd92af4529b40bcf8d577c8fb +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/.sample.json b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/.sample.json new file mode 100644 index 0000000000000000000000000000000000000000..0edde8f06e7634cb989a4181820613a01117a922 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/.sample.json @@ -0,0 +1,5 @@ +{ + "displayName":"Runtime Examples", + "description": "Scripts showing how to create and modify meshes at runtime.", + "createSeparatePackage": true +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Convert Mesh to Editable.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Convert Mesh to Editable.meta new file mode 100644 index 0000000000000000000000000000000000000000..0f20541dc76ae84a165b0e363813954a1818c810 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Convert Mesh to Editable.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b903dc2159f904f41933bdb6cb34012d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Convert Mesh to Editable/MakePrimitiveEditable.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Convert Mesh to Editable/MakePrimitiveEditable.cs new file mode 100644 index 0000000000000000000000000000000000000000..ac8f64f2bc1dd5d1707724b2977876390ad812c9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Convert Mesh to Editable/MakePrimitiveEditable.cs @@ -0,0 +1,39 @@ +// Demonstrates how to convert a UnityEngine.Mesh object to an editable ProBuilderMesh. + +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace ProBuilder.Examples +{ + [RequireComponent(typeof(MeshFilter))] + public class MakePrimitiveEditable : MonoBehaviour + { + void Start() + { + // Import from a GameObject. In this case we're loading and assigning to the same GameObject, but you may + // load and apply to different Objects as well. + + // Create a new MeshImporter + var importer = new MeshImporter(gameObject); + importer.Import(); + + // Since we're loading and setting from the same object, it is necessary to create a new mesh to avoid + // overwriting the mesh that is being read from. + var filter = GetComponent<MeshFilter>(); + filter.sharedMesh = new Mesh(); + + //Retrieve the create PB Mesh + var mesh = gameObject.GetComponent<ProBuilderMesh>(); + + // Do something with the pb_Object. Here we're extruding every face on the object by .25. + mesh.Extrude(mesh.faces, ExtrudeMethod.IndividualFaces, .25f); + + // Apply the imported geometry to the pb_Object + mesh.ToMesh(); + + // Rebuild UVs, Collisions, Tangents, etc. + mesh.Refresh(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Convert Mesh to Editable/MakePrimitiveEditable.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Convert Mesh to Editable/MakePrimitiveEditable.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..50d735b5356a67cd0ffcd37cf8cc487ae185f1eb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Convert Mesh to Editable/MakePrimitiveEditable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35958f0cf3d04442db210de4b2ecc910 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Convert Mesh to Editable/ProBuilderize Scene.unity b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Convert Mesh to Editable/ProBuilderize Scene.unity new file mode 100644 index 0000000000000000000000000000000000000000..cc9b8c5ef70e187871f5fc898f2f72bf9c3471f4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Convert Mesh to Editable/ProBuilderize Scene.unity @@ -0,0 +1,343 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.4465934, g: 0.49642956, b: 0.5748249, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &260385667 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 260385669} + - component: {fileID: 260385668} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &260385668 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 260385667} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &260385669 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 260385667} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &466817655 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 466817659} + - component: {fileID: 466817658} + - component: {fileID: 466817657} + - component: {fileID: 466817656} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!135 &466817656 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 466817655} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &466817657 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 466817655} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &466817658 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 466817655} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &466817659 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 466817655} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1862656170 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1862656173} + - component: {fileID: 1862656172} + - component: {fileID: 1862656171} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1862656171 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1862656170} + m_Enabled: 1 +--- !u!20 &1862656172 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1862656170} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1862656173 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1862656170} + m_LocalRotation: {x: -0.06198395, y: -0.926703, z: 0.17611764, w: -0.32613218} + m_LocalPosition: {x: -1.6650667, y: 1.048407, z: 2.072654} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Convert Mesh to Editable/ProBuilderize Scene.unity.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Convert Mesh to Editable/ProBuilderize Scene.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..794aa95c3126bc1f189be2497afb1442a38b24a9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Convert Mesh to Editable/ProBuilderize Scene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1761c79ad29d9478ba3425188e3b970a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT.meta new file mode 100644 index 0000000000000000000000000000000000000000..6cfd9bd33c77374572502a98c3e3a83af3c1ea3c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ee59bd0c36d5473f826b29989a095d75 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Audio Visualizer.unity b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Audio Visualizer.unity new file mode 100644 index 0000000000000000000000000000000000000000..69bc5e5eefd9ba566dc8d837eea5c73499201282 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Audio Visualizer.unity @@ -0,0 +1,3293 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 2100000, guid: aa276ed2be5343ab89b6523279f9747e, type: 2} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 1 + m_BakeResolution: 1 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666666 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &560591328 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 560591332} + - component: {fileID: 560591331} + - component: {fileID: 560591330} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &560591330 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 560591328} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &560591331 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 560591328} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &560591332 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 560591328} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &765705952 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 765705953} + - component: {fileID: 765705955} + - component: {fileID: 765705954} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &765705953 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765705952} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1455475690} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -100.9} + m_SizeDelta: {x: 596.22, y: 111.79} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &765705954 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765705952} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.5801887, g: 0.9641947, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 36 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Please assign an AudioClip to the FFT Source AudioFilter +--- !u!222 &765705955 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765705952} + m_CullTransparentMesh: 0 +--- !u!1 &1089100179 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1089100181} + - component: {fileID: 1089100180} + m_Layer: 0 + m_Name: Point light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1089100180 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1089100179} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 2 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 2.2579021 + m_Range: 60 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: 3 + m_CustomResolution: -1 + m_Strength: 0.5 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1089100181 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1089100179} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 20, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1177013560 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1177013562} + - component: {fileID: 1177013561} + m_Layer: 0 + m_Name: Point light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1177013561 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1177013560} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 0 + m_Color: {r: 0, g: 0.29284993, b: 0.77205884, a: 1} + m_Intensity: 3.902809 + m_Range: 30 + m_SpotAngle: 57.3 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1177013562 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1177013560} + m_LocalRotation: {x: -0.20871817, y: 0.3379615, z: -0.07714522, w: -0.9144766} + m_LocalPosition: {x: 9.62, y: 8.17, z: -12.77} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1366942304} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1253112521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1253112524} + - component: {fileID: 1253112523} + - component: {fileID: 1253112522} + m_Layer: 0 + m_Name: FFT Source + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1253112522 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1253112521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fb8f43bff1e74ba9a71fbceaae84f50a, type: 3} + m_Name: + m_EditorClassIdentifier: + icoRadius: 4.5 + icoSubdivisions: 2 + startingExtrusion: 0.3 + extrusion: 30 + fftBounds: 96 + verticalBounce: 1 + frequencyCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + waveform: {fileID: 2078946968} + waveformHeight: 4 + waveformRadius: 12 + waveformSpeed: 0.05 + rotateWaveformRing: 1 + bounceWaveform: 0 + missingClipWarning: {fileID: 765705952} +--- !u!82 &1253112523 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1253112521} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 0} + m_PlayOnAwake: 1 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 2 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 7.742025e-22 + inSlope: 1.7261725e+25 + outSlope: 3.0338164e+32 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1 + value: 7.742025e-22 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2 + value: 7.742025e-22 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4 + value: 7.742025e-22 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8 + value: 7.742025e-22 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.6 + value: 7.742025e-22 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3.2 + value: 7.742025e-22 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 6.4 + value: 7.742025e-22 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 12.8 + value: 7.742025e-22 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 25.6 + value: 7.742025e-22 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 51.2 + value: 7.742025e-22 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 102.4 + value: 7.742025e-22 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 204.8 + value: 7.742025e-22 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 409.6 + value: 7.742025e-22 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 500 + value: 7.742025e-22 + inSlope: 1.7261725e+25 + outSlope: 3.0338164e+32 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!4 &1253112524 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1253112521} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1322508004 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1322508006} + - component: {fileID: 1322508005} + m_Layer: 0 + m_Name: Point light 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1322508005 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1322508004} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 0 + m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_Intensity: 3.0941186 + m_Range: 50 + m_SpotAngle: 57.3 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1322508006 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1322508004} + m_LocalRotation: {x: -0.03486549, y: -0.41837785, z: 0.016063284, w: -0.9074615} + m_LocalPosition: {x: -12.110081, y: -0.2557668, z: -9.879492} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1366942304} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1366942303 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1366942304} + m_Layer: 0 + m_Name: Three Point Lighting + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1366942304 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1366942303} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1618707012} + - {fileID: 1322508006} + - {fileID: 1177013562} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1455475686 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1455475690} + - component: {fileID: 1455475689} + - component: {fileID: 1455475688} + - component: {fileID: 1455475687} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1455475687 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1455475686} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1455475688 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1455475686} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1455475689 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1455475686} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1455475690 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1455475686} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 765705953} + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1618707010 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1618707012} + - component: {fileID: 1618707011} + m_Layer: 0 + m_Name: Point light 2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1618707011 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1618707010} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 0 + m_Color: {r: 0.5147059, g: 0.5147059, b: 0.5147059, a: 1} + m_Intensity: 3.902809 + m_Range: 50 + m_SpotAngle: 66.01518 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1618707012 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1618707010} + m_LocalRotation: {x: -0.0005354004, y: -0.99396837, z: 0.10956238, w: -0.0047687697} + m_LocalPosition: {x: 0.25, y: 3.42, z: 21.24} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1366942304} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1994557895 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1994557903} + - component: {fileID: 1994557897} + - component: {fileID: 1994557896} + - component: {fileID: 1994557901} + - component: {fileID: 1994557902} + - component: {fileID: 1994557899} + - component: {fileID: 1994557900} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1994557896 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994557895} + m_Enabled: 1 +--- !u!124 &1994557897 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994557895} + m_Enabled: 1 +--- !u!20 &1994557899 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994557895} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0.019607844} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &1994557900 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994557895} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &1994557901 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994557895} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 912bb9b70e8a4e3489626fe00e75bf04, type: 3} + m_Name: + m_EditorClassIdentifier: + orbitSpeed: 6 + zoomSpeed: 0.8 + idleRotation: 3 +--- !u!222 &1994557902 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994557895} + m_CullTransparentMesh: 0 +--- !u!224 &1994557903 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994557895} + m_LocalRotation: {x: 0.130526, y: 0, z: 0, w: 0.9914449} + m_LocalPosition: {x: 0, y: 0, z: -25} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 2} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &2078946967 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2078946969} + - component: {fileID: 2078946968} + m_Layer: 0 + m_Name: Waveform + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!120 &2078946968 +LineRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078946967} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 0 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a183dfc9611144fde89b8fe2a7d3a793, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 1} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 0.6509804} + key1: {r: 1, g: 1, b: 1, a: 0.6509804} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0 + generateLightingData: 0 + m_UseWorldSpace: 0 + m_Loop: 0 +--- !u!4 &2078946969 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078946967} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Audio Visualizer.unity.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Audio Visualizer.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..041591b98a0c7a505c647c0b91c820d062dde12a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Audio Visualizer.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 728c74ce1219442780ea2d3e2a24b05b +timeCreated: 1430409674 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Material.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Material.meta new file mode 100644 index 0000000000000000000000000000000000000000..35a817663ea4783faac2e255b888a6be93c859ac --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Material.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 09163ff9a7474f28aa3c0f8fd9fdc1ed +folderAsset: yes +timeCreated: 1430752296 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Material/ProBuilderIcon.tga b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Material/ProBuilderIcon.tga new file mode 100644 index 0000000000000000000000000000000000000000..8dfa0eb88651f6748b834b43e9eb777cf78ac6ea Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Material/ProBuilderIcon.tga differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Material/ProBuilderIcon.tga.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Material/ProBuilderIcon.tga.meta new file mode 100644 index 0000000000000000000000000000000000000000..65d8865c95116ec345f18112ec9c0d71f7507170 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Material/ProBuilderIcon.tga.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 5e65e46b4d9d4ed590fcc39d49f18f65 +timeCreated: 1431722871 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Material/Unlit Color.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Material/Unlit Color.mat new file mode 100644 index 0000000000000000000000000000000000000000..fd41ca9be8abecc8de7246e1a32fc7c40576a092 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Material/Unlit Color.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Unlit Color + m_Shader: {fileID: 4800000, guid: 24f9f312f97bd48dba1a728d58c89842, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Material/Unlit Color.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Material/Unlit Color.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..02b1e9b566afc489a3296f802da9b27464ff2283 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Material/Unlit Color.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a183dfc9611144fde89b8fe2a7d3a793 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/README.txt b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..94a9ef0b00cff06c6f0687b9e7bf7fb0ad511ebb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/README.txt @@ -0,0 +1,4 @@ +# Quick Start + +1. Provide an audio clip to the AudioSource component on the FFT Source gameobject for this to work. +2. Once an audio clip is put in the `Audio Clip` field, run the scene. \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/README.txt.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/README.txt.meta new file mode 100644 index 0000000000000000000000000000000000000000..eaad908915ce0e76e58a4c66472ea4493f9108c0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/README.txt.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 81fa8b7b12b74aa9b4a84425a8aea8f8 +TextScriptImporter: + userData: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Scripts.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..9233a9c941845d57dc777884afc07628f52b01f6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f3c9435958e64393be103d0307371ab8 +folderAsset: yes +timeCreated: 1430752196 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Scripts/CameraControls.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Scripts/CameraControls.cs new file mode 100644 index 0000000000000000000000000000000000000000..ac50e568c250b23059c9bd8fffb6539d28696691 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Scripts/CameraControls.cs @@ -0,0 +1,72 @@ +// A simple orbiting camera + +using UnityEngine; + +namespace ProBuilder.Examples +{ + public class CameraControls : MonoBehaviour + { + const string k_InputMouseScroll = "Mouse ScrollWheel"; + const string k_InputMouseHorizontal = "Mouse X"; + const string k_InputMouseVertical = "Mouse Y"; + const float k_MinCameraDistance = 10f; + const float k_MaxCameraDistance = 40f; + + [Tooltip("How fast the camera should rotate around the sphere.")] + [Range(2f, 15f)] + public float orbitSpeed = 6f; + + [Tooltip("The speed at which the camera zooms in and out.")] + [Range(.3f, 2f)] + public float zoomSpeed = .8f; + + [Tooltip("How fast the camera should rotate around the sphere when idle.")] + public float idleRotation = 1f; + + float m_Distance = 0f; + Vector2 m_LookDirection = new Vector2(.8f, .2f); + + void Start() + { + m_Distance = Vector3.Distance(transform.position, Vector3.zero); + } + + void LateUpdate() + { + Vector3 eulerRotation = transform.localRotation.eulerAngles; + eulerRotation.z = 0f; + + // orbits + if( Input.GetMouseButton(0) ) + { + float rot_x = Input.GetAxis(k_InputMouseHorizontal); + float rot_y = -Input.GetAxis(k_InputMouseVertical); + + eulerRotation.x += rot_y * orbitSpeed; + eulerRotation.y += rot_x * orbitSpeed; + + // idle direction is derived from last user input. + m_LookDirection.x = rot_x; + m_LookDirection.y = rot_y; + m_LookDirection.Normalize(); + } + else + { + eulerRotation.y += Time.deltaTime * idleRotation * m_LookDirection.x; + eulerRotation.x += Time.deltaTime * Mathf.PerlinNoise(Time.time, 0f) * idleRotation * m_LookDirection.y; + } + + transform.localRotation = Quaternion.Euler( eulerRotation ); + transform.position = transform.localRotation * (Vector3.forward * -m_Distance); + + if( Input.GetAxis(k_InputMouseScroll) != 0f ) + { + float delta = Input.GetAxis(k_InputMouseScroll); + + m_Distance -= delta * (m_Distance/k_MaxCameraDistance) * (zoomSpeed * 1000) * Time.deltaTime; + m_Distance = Mathf.Clamp(m_Distance, k_MinCameraDistance, k_MaxCameraDistance); + transform.position = transform.localRotation * (Vector3.forward * -m_Distance); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Scripts/CameraControls.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Scripts/CameraControls.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2ea6a516bbb6a53e9780acfb62a936bd6c21ba80 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Scripts/CameraControls.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 912bb9b70e8a4e3489626fe00e75bf04 +timeCreated: 1430420844 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Scripts/IcoBumpin.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Scripts/IcoBumpin.cs new file mode 100644 index 0000000000000000000000000000000000000000..871a065800ddfeaeeb941c9126eab2eb4f0ab6b1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Scripts/IcoBumpin.cs @@ -0,0 +1,270 @@ +// Create a sphere, extrude all of it's faces, then animate the extruded faces with an audio source. + +#if UNITY_EDITOR || UNITY_STANDALONE +using UnityEngine; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace ProBuilder.Examples +{ + [RequireComponent(typeof(AudioSource))] + public class IcoBumpin : MonoBehaviour + { + // A reference to the ProBuilderMesh component + ProBuilderMesh m_ProBuilderMesh; + // A reference to the MeshFilter.sharedMesh + Mesh m_UnityMesh; + Transform m_Transform; + AudioSource m_AudioSource; + Vector3 m_StartingPosition = Vector3.zero; + float m_FaceLength; + const float k_TwoPi = 6.283185f; + // How many samples make up the waveform ring. + const int k_WaveformSampleCount = 1024; + // How many samples are used in the FFT. More means higher resolution. + const int k_FftSamples = 4096; + + // Keep copy of the last frame's sample data to average with the current when calculating + // deformation amounts. Smooths the visual effect. + int m_FrameIndex; + + float[][] m_FourierSamples = new float[2][] + { + new float[k_FftSamples], + new float[k_FftSamples] + }; + + float[][] m_RawSamples = new float[2][] + { + new float[k_WaveformSampleCount], + new float[k_WaveformSampleCount] + }; + + // Root mean square of raw data (volume, but not in dB). + float[] m_Rms = new float[2]; + + /// <summary> + /// This is the container for each extruded column. We'll use it to apply offsets per-extruded face. + /// </summary> + struct ExtrudedSelection + { + /// <value> + /// The direction in which to move this selection when animating. + /// </value> + public Vector3 normal; + + /// <value> + /// All vertex indices (including common vertices). "Common" refers to vertices that share a position + /// but remain discrete. + /// </value> + public List<int> indices; + + public ExtrudedSelection(ProBuilderMesh mesh, Face face) + { + indices = mesh.GetCoincidentVertices(face.distinctIndexes); + normal = Math.Normal(mesh, face); + } + } + + // All faces that have been extruded + ExtrudedSelection[] m_AnimatedSelections; + + // Keep a copy of the original vertex array to calculate the distance from origin. + Vector3[] m_OriginalVertexPositions, m_DisplacedVertexPositions; + + // The radius of the sphere on instantiation. + [Range(1f, 10f)] + public float icoRadius = 2f; + + // The number of subdivisions to give the sphere. + [Range(0, 3)] + public int icoSubdivisions = 2; + + // How far along the normal should each face be extruded when at idle (no audio input). + [Range(0f, 1f)] + public float startingExtrusion = .1f; + + // The max distance a frequency range will extrude a face. + [Range(1f, 50f)] + public float extrusion = 30f; + + // An FFT returns a spectrum including frequencies that are out of human hearing range. + // This restricts the number of bins used from the spectrum to the lower bounds. + [Range(8, 128)] + public int fftBounds = 32; + + // How high the sphere transform will bounce (sample volume determines height). + [Range(0f, 10f)] + public float verticalBounce = 4f; + + // Optionally weights the frequency amplitude when calculating extrude distance. + public AnimationCurve frequencyCurve; + + // A reference to the line renderer that will be used to render the raw waveform. + public LineRenderer waveform; + + // The y size of the waveform. + public float waveformHeight = 2f; + + // How far from the sphere should the waveform be. + public float waveformRadius = 20f; + + // If rotateWaveformRing is true, this is the speed it will travel. + public float waveformSpeed = .1f; + + // If true, the waveform ring will randomly orbit the sphere. + public bool rotateWaveformRing = false; + + // If true, the waveform will bounce up and down with the sphere. + public bool bounceWaveform = false; + + public GameObject missingClipWarning; + + /// <summary> + /// Creates the sphere and loads all the cache information. + /// </summary> + void Start() + { + m_AudioSource = GetComponent<AudioSource>(); + + if (m_AudioSource.clip == null) + missingClipWarning.SetActive(true); + + // Create a new sphere. + m_ProBuilderMesh = ShapeGenerator.GenerateIcosahedron(PivotLocation.Center, icoRadius, icoSubdivisions); + + // Assign the default material + m_ProBuilderMesh.GetComponent<MeshRenderer>().sharedMaterial = BuiltinMaterials.defaultMaterial; + + // Shell is all the faces on the new sphere. + var shell = m_ProBuilderMesh.faces; + + // Extrude all faces on the sphere by a small amount. The third boolean parameter + // specifies that extrusion should treat each face as an individual, not try to group + // all faces together. + m_ProBuilderMesh.Extrude(shell, ExtrudeMethod.IndividualFaces, startingExtrusion); + + // ToMesh builds the mesh positions, submesh, and triangle arrays. Call after adding + // or deleting vertices, or changing face properties. + m_ProBuilderMesh.ToMesh(); + + // Refresh builds the normals, tangents, and UVs. + m_ProBuilderMesh.Refresh(); + + m_AnimatedSelections = new ExtrudedSelection[shell.Count]; + + // Populate the outsides[] cache. This is a reference to the tops of each extruded column, including + // copies of the sharedIndices. + for (int i = 0; i < shell.Count; ++i) + { + m_AnimatedSelections[i] = new ExtrudedSelection(m_ProBuilderMesh, shell[i]); + } + + // Store copy of positions array un-modified + m_OriginalVertexPositions = m_ProBuilderMesh.positions.ToArray(); + + // displaced_vertices should mirror sphere mesh vertices. + m_DisplacedVertexPositions = new Vector3[m_ProBuilderMesh.vertexCount]; + + m_UnityMesh = m_ProBuilderMesh.GetComponent<MeshFilter>().sharedMesh; + m_Transform = m_ProBuilderMesh.transform; + + m_FaceLength = (float) m_AnimatedSelections.Length; + + // Build the waveform ring. + m_StartingPosition = m_Transform.position; + + waveform.positionCount = k_WaveformSampleCount; + + if (bounceWaveform) + waveform.transform.parent = m_Transform; + + m_AudioSource.Play(); + } + + void Update() + { + int currentFrame = m_FrameIndex; + int previousFrame = (m_FrameIndex + 1) % 2; + + // fetch the fft spectrum + m_AudioSource.GetSpectrumData(m_FourierSamples[m_FrameIndex], 0, FFTWindow.BlackmanHarris); + + // get raw data for waveform + m_AudioSource.GetOutputData(m_RawSamples[m_FrameIndex], 0); + + // calculate root mean square (volume) + m_Rms[m_FrameIndex] = CalculateLoudness(m_RawSamples[m_FrameIndex]); + + // For each face, translate the vertices some distance depending on the frequency range assigned. + for (int i = 0; i < m_AnimatedSelections.Length; i++) + { + float normalizedIndex = (i / m_FaceLength); + + int n = (int) (normalizedIndex * fftBounds); + + Vector3 displacement = m_AnimatedSelections[i].normal * + (((m_FourierSamples[currentFrame][n] + m_FourierSamples[previousFrame][n]) * .5f) * + (frequencyCurve.Evaluate(normalizedIndex) * .5f + .5f)) * extrusion; + + foreach (int t in m_AnimatedSelections[i].indices) + { + m_DisplacedVertexPositions[t] = m_OriginalVertexPositions[t] + displacement; + } + } + + Vector3 vec = Vector3.zero; + + // Waveform ring + for (int i = 0; i < k_WaveformSampleCount; i++) + { + int n = i < k_WaveformSampleCount - 1 ? i : 0; + float travel = waveformRadius + (m_RawSamples[currentFrame][n] + m_RawSamples[previousFrame][n]) * .5f * waveformHeight; + vec.x = Mathf.Cos((float) n / k_WaveformSampleCount * k_TwoPi) * travel; + vec.z = Mathf.Sin((float) n / k_WaveformSampleCount * k_TwoPi) * travel; + vec.y = 0f; + + waveform.SetPosition(i, vec); + } + + // Ring rotation + if (rotateWaveformRing) + { + Vector3 rot = waveform.transform.localRotation.eulerAngles; + + rot.x = Mathf.PerlinNoise(Time.time * waveformSpeed, 0f) * 360f; + rot.y = Mathf.PerlinNoise(0f, Time.time * waveformSpeed) * 360f; + + waveform.transform.localRotation = Quaternion.Euler(rot); + } + + m_StartingPosition.y = -verticalBounce + ((m_Rms[currentFrame] + m_Rms[previousFrame]) * verticalBounce); + m_Transform.position = m_StartingPosition; + + // Keep copy of last FFT samples so we can average with the current. Smoothes the movement. + m_FrameIndex = (m_FrameIndex + 1) % 2; + + // Apply the new extruded vertex positions to the MeshFilter. + m_UnityMesh.vertices = m_DisplacedVertexPositions; + } + + /// <summary> + /// Root mean square is a good approximation of perceived loudness. + /// </summary> + /// <param name="arr"></param> + /// <returns></returns> + static float CalculateLoudness(float[] arr) + { + float v = 0f, + len = (float) arr.Length; + + for (int i = 0; i < len; i++) + v += Mathf.Abs(arr[i]); + + return Mathf.Sqrt(v / (float) len); + } + } +} +#endif diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Scripts/IcoBumpin.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Scripts/IcoBumpin.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..0d69a42a16e107984cf7935d812cb40b9a540dec --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Scripts/IcoBumpin.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fb8f43bff1e74ba9a71fbceaae84f50a +timeCreated: 1430416040 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox.meta new file mode 100644 index 0000000000000000000000000000000000000000..3ac3fc5d9ebcd0d89d8b3e441dfcd7fbd279290b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 062b62fea4114dceb2abad49474fd223 +folderAsset: yes +timeCreated: 1430743015 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space.mat new file mode 100644 index 0000000000000000000000000000000000000000..74d2a14249460069440f130164acf59dab696ad4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space.mat @@ -0,0 +1,199 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Space + m_Shader: {fileID: 104, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_CustomRenderQueue: -1 + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + data: + first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _FrontTex + second: + m_Texture: {fileID: 2800000, guid: b407ea087b934bf3b9f41b9f999b6eb4, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _BackTex + second: + m_Texture: {fileID: 2800000, guid: d1fca55857b844b1bed302409cc301f6, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _LeftTex + second: + m_Texture: {fileID: 2800000, guid: 9f672008281b4fd898ffb016a4ba84b5, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _RightTex + second: + m_Texture: {fileID: 2800000, guid: 3f260aca84a74e2e94a7ede7994eeb85, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _UpTex + second: + m_Texture: {fileID: 2800000, guid: 65b6b8a1fb834a9f8ed87f7da738ab75, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DownTex + second: + m_Texture: {fileID: 2800000, guid: dd8b9074a41740b48931999f45564c2d, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + data: + first: + name: _Cutoff + second: .5 + data: + first: + name: _Exposure + second: 1 + data: + first: + name: _SrcBlend + second: 1 + data: + first: + name: _DstBlend + second: 0 + data: + first: + name: _Parallax + second: .0199999996 + data: + first: + name: _ZWrite + second: 1 + data: + first: + name: _Glossiness + second: .5 + data: + first: + name: _BumpScale + second: 1 + data: + first: + name: _OcclusionStrength + second: 1 + data: + first: + name: _DetailNormalMapScale + second: 1 + data: + first: + name: _UVSec + second: 0 + data: + first: + name: _EmissionScaleUI + second: 0 + data: + first: + name: _Mode + second: 0 + data: + first: + name: _Metallic + second: 0 + data: + first: + name: _Rotation + second: 0 + m_Colors: + data: + first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + data: + first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + data: + first: + name: _EmissionColorUI + second: {r: 1, g: 1, b: 1, a: 1} + data: + first: + name: _Tint + second: {r: .5, g: .5, b: .5, a: .5} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..e5b20a16f102b42fc3e3ada9fd469ccc6bce5605 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aa276ed2be5343ab89b6523279f9747e +timeCreated: 1430743144 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_back.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_back.png new file mode 100644 index 0000000000000000000000000000000000000000..57d15c59581a8c6796736e27fb0efd06b353c09f Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_back.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_back.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_back.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..430127e3350c6e3d66cb9962850d47262bf981bf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_back.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: d1fca55857b844b1bed302409cc301f6 +timeCreated: 1430743015 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_down.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_down.png new file mode 100644 index 0000000000000000000000000000000000000000..8d6c1a5cb4e5336f4aaec80d5f74ea8b6613c292 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_down.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_down.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_down.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..c1031a62818ce7f4c55c5c4fb8f0fb494a7fc448 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_down.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: dd8b9074a41740b48931999f45564c2d +timeCreated: 1430743015 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_front.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_front.png new file mode 100644 index 0000000000000000000000000000000000000000..550a6720e91d00a18b0540205ca92fad211a12c1 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_front.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_front.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_front.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..98e2a9660bd494c308d3830f007b83fd1d85db96 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_front.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: b407ea087b934bf3b9f41b9f999b6eb4 +timeCreated: 1430743015 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_left.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_left.png new file mode 100644 index 0000000000000000000000000000000000000000..49a4ccb5d9bf9e536c9ca04a8398c83a58a6d8d9 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_left.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_left.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_left.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..decea3a761c9a8966f0848f47bb5ba46dabe842b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_left.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 9f672008281b4fd898ffb016a4ba84b5 +timeCreated: 1430743015 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_right.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_right.png new file mode 100644 index 0000000000000000000000000000000000000000..3358a068bcf835fb40858d317b9f1093822331cc Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_right.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_right.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_right.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..4fcbc0b22d434ddd5bcda8596aa85d59e80b46bd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_right.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 3f260aca84a74e2e94a7ede7994eeb85 +timeCreated: 1430743015 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_up.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_up.png new file mode 100644 index 0000000000000000000000000000000000000000..e0347c66578e8c902d100c502e924b4225a95ba1 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_up.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_up.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_up.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..95bee7e5517823c10c32691002b26ae6b9c4545a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Icosphere FFT/Skybox/Space_up.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 65b6b8a1fb834a9f8ed87f7da738ab75 +timeCreated: 1430743015 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Misc.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Misc.meta new file mode 100644 index 0000000000000000000000000000000000000000..e5b721ce3644ac9f8ccaaacd8c652ea5cd87b041 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Misc.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: a679501741f14ceeb2e2db56ee117a51 +folderAsset: yes +DefaultImporter: + userData: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Misc/CreatePolyShape.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Misc/CreatePolyShape.cs new file mode 100644 index 0000000000000000000000000000000000000000..f7a8f06b002bb1ba173033727539a7563f76dbdb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Misc/CreatePolyShape.cs @@ -0,0 +1,43 @@ +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace ProBuilder.Examples +{ + public class CreatePolyShape : MonoBehaviour + { + public float m_RadiusMin = 1.5f; + public float m_RadiusMax = 2f; + public float m_Height = 1f; + public bool m_FlipNormals = false; + + ProBuilderMesh m_Mesh; + + void Start() + { + // Create a new GameObject + var go = new GameObject(); + + // Add a ProBuilderMesh component (ProBuilder mesh data is stored here) + m_Mesh = go.gameObject.AddComponent<ProBuilderMesh>(); + + InvokeRepeating("Rebuild", 0f, .1f); + } + + void Rebuild() + { + // Create a circle of points with randomized distance from origin. + Vector3[] points = new Vector3[32]; + + for (int i = 0, c = points.Length; i < c; i++) + { + float angle = Mathf.Deg2Rad * ((i / (float)c) * 360f); + points[i] = new Vector3(Mathf.Cos(angle), 0f, Mathf.Sin(angle)) * Random.Range(m_RadiusMin, m_RadiusMax); + } + + // CreateShapeFromPolygon is an extension method that sets the pb_Object mesh data with vertices and faces + // generated from a polygon path. + m_Mesh.CreateShapeFromPolygon(points, m_Height, m_FlipNormals); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Misc/CreatePolyShape.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Misc/CreatePolyShape.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..271bf379a11d46fddb9b95a51c4214b487355466 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Misc/CreatePolyShape.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fbeb76ea9758f064f8e1e2dad5982093 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Misc/HueCube.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Misc/HueCube.cs new file mode 100644 index 0000000000000000000000000000000000000000..b6a28f4e3791f5730945760fb26e13b4e1c39212 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Misc/HueCube.cs @@ -0,0 +1,50 @@ +#if UNITY_EDITOR || UNITY_STANDALONE +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace ProBuilder.Examples +{ + /// <summary> + /// Creates a cube on start and colors it's vertices programatically. + /// </summary> + sealed class HueCube : MonoBehaviour + { + ProBuilderMesh m_Mesh; + + void Start() + { + // Create a new ProBuilder cube to work with. + m_Mesh = ShapeGenerator.CreateShape(ShapeType.Cube); + + // Cycle through each unique vertex in the cube (8 total), and assign a color + // to the index in the sharedIndices array. + int sharedVertexCount = m_Mesh.sharedVertices.Count; + + Color[] vertexColors = new Color[sharedVertexCount]; + + for(int i = 0; i < sharedVertexCount; i++) + { + vertexColors[i] = Color.HSVToRGB((i/(float)sharedVertexCount) * 360f, 1f, 1f); + } + + // Now go through each face (vertex colors are stored the pb_Face class) and + // assign the pre-calculated index color to each index in the triangles array. + var colors = m_Mesh.colors; + + for(int sharedIndex = 0; sharedIndex < m_Mesh.sharedVertices.Count; sharedIndex++) + { + foreach(int index in m_Mesh.sharedVertices[sharedIndex]) + { + colors[index] = vertexColors[sharedIndex]; + } + } + + m_Mesh.colors = colors; + + // In order for these changes to take effect, you must refresh the mesh + // object. + m_Mesh.Refresh(); + } + } +} +#endif diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Misc/HueCube.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Misc/HueCube.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6e30f150aa472b063815d3e0e3d47a8db6986d78 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Misc/HueCube.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 497d6c0bc0fc4523b012074f82fa1b31 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Procedural Mesh.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Procedural Mesh.meta new file mode 100644 index 0000000000000000000000000000000000000000..fe2f3e742474626468b7ae8d89b2890941e20fd7 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Procedural Mesh.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e6277cab0dfe41ee82e8fb3a83540df4 +folderAsset: yes +timeCreated: 1478810570 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Procedural Mesh/Extrude Random Edges.unity b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Procedural Mesh/Extrude Random Edges.unity new file mode 100644 index 0000000000000000000000000000000000000000..baf21b4a12abd52a5d4753d368a37dff0a75238d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Procedural Mesh/Extrude Random Edges.unity @@ -0,0 +1,318 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657874, g: 0.49641258, b: 0.5748172, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &231450020 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 231450022} + - component: {fileID: 231450021} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &231450021 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 231450020} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &231450022 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 231450020} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &886956891 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 886956893} + - component: {fileID: 886956892} + m_Layer: 0 + m_Name: The Mesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &886956892 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 886956891} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3f9d3b8aab0f45e99ac875ef5ebaa496, type: 3} + m_Name: + m_EditorClassIdentifier: + distance: 1 +--- !u!4 &886956893 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 886956891} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1926271974 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1926271979} + - component: {fileID: 1926271978} + - component: {fileID: 1926271976} + - component: {fileID: 1926271975} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1926271975 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1926271974} + m_Enabled: 1 +--- !u!124 &1926271976 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1926271974} + m_Enabled: 1 +--- !u!20 &1926271978 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1926271974} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.15294118, g: 0.15294118, b: 0.15294118, a: 0} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1926271979 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1926271974} + m_LocalRotation: {x: 0.16308561, y: -0.83678967, z: 0.3770185, w: 0.36199895} + m_LocalPosition: {x: 3.97, y: 6.16, z: 3.73} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Procedural Mesh/Extrude Random Edges.unity.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Procedural Mesh/Extrude Random Edges.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..17f190672bd3f4fbdf8425e27c36e39b83fb2ebe --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Procedural Mesh/Extrude Random Edges.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f5e66bdb6ec34b41bbbf0fbf00bdf203 +timeCreated: 1478810816 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Procedural Mesh/ExtrudeRandomEdges.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Procedural Mesh/ExtrudeRandomEdges.cs new file mode 100644 index 0000000000000000000000000000000000000000..dac2d16258e4b165e3056465f6c89b3c7f9be65c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Procedural Mesh/ExtrudeRandomEdges.cs @@ -0,0 +1,72 @@ +#if UNITY_EDITOR || UNITY_STANDALONE + +using UnityEngine; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.ProBuilder; +using UnityEngine.ProBuilder.MeshOperations; + +namespace ProBuilder.Examples +{ + /// <summary> + /// Do a snake-like thing with a quad and some extrudes. + /// </summary> + class ExtrudeRandomEdges : MonoBehaviour + { + ProBuilderMesh m_Mesh; + Face m_LastExtrudedFace = null; + public float distance = 1f; + + /// <summary> + /// Build a starting point (in this case, a quad) + /// </summary> + void Start() + { + m_Mesh = ShapeGenerator.GeneratePlane(PivotLocation.Center, 1, 1, 0, 0, Axis.Up); + m_Mesh.GetComponent<MeshRenderer>().sharedMaterial = BuiltinMaterials.defaultMaterial; + m_LastExtrudedFace = m_Mesh.faces[0]; + } + + void OnGUI() + { + if (GUILayout.Button("Extrude Random Edge")) + { + ExtrudeEdge(); + } + } + + void ExtrudeEdge() + { + // fetch a random perimeter edge connected to the last face extruded + List<WingedEdge> wings = WingedEdge.GetWingedEdges(m_Mesh); + IEnumerable<WingedEdge> sourceWings = wings.Where(x => x.face == m_LastExtrudedFace); + List<Edge> nonManifoldEdges = sourceWings.Where(x => x.opposite == null).Select(y => y.edge.local).ToList(); + int rand = (int) Random.Range(0, nonManifoldEdges.Count); + Edge sourceEdge = nonManifoldEdges[rand]; + + // get the direction this edge should extrude in + var edgeCenter = Math.Average(m_Mesh.positions, new[] { sourceEdge.a, sourceEdge.b }); + var faceCenter = Math.Average(m_Mesh.positions, m_LastExtrudedFace.distinctIndexes); + Vector3 dir = (edgeCenter - faceCenter).normalized; + + // this will be populated with the extruded edge + Edge[] extrudedEdges; + + // perform extrusion + extrudedEdges = m_Mesh.Extrude(new Edge[] {sourceEdge}, 0f, false, true); + + // get the last extruded face + m_LastExtrudedFace = m_Mesh.faces.Last(); + + // translate the vertices + m_Mesh.TranslateVertices(extrudedEdges, dir * distance); + + // rebuild mesh with new geometry added by extrude + m_Mesh.ToMesh(); + + // rebuild mesh normals, textures, collisions, etc + m_Mesh.Refresh(); + } + } +} +#endif diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Procedural Mesh/ExtrudeRandomEdges.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Procedural Mesh/ExtrudeRandomEdges.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4a000883a9246c83097585c1645c6895ece65db8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Procedural Mesh/ExtrudeRandomEdges.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3f9d3b8aab0f45e99ac875ef5ebaa496 +timeCreated: 1476714504 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing.meta new file mode 100644 index 0000000000000000000000000000000000000000..d2fcddd7ca443f50d213bb73d9ef6bb1636e44d3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 11d3e8f4a30f468aa171c2d898cbf96b diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons.meta new file mode 100644 index 0000000000000000000000000000000000000000..20cfe0fe031a6e34eef1a0192844252893c9f9b1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7e63926609acd43d184324eadfb004ff +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/MinusArrow.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/MinusArrow.png new file mode 100644 index 0000000000000000000000000000000000000000..56f355381b4770c6ac863bc36743523b9a7f21e4 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/MinusArrow.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/MinusArrow.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/MinusArrow.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..82f60df650851c0afbd642ec8ead5f4d80802b95 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/MinusArrow.png.meta @@ -0,0 +1,90 @@ +fileFormatVersion: 2 +guid: d6f9bfed83fc8412c878feb6204acf00 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 8 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/MoveArrow.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/MoveArrow.png new file mode 100644 index 0000000000000000000000000000000000000000..2682181c0846fe93443cc6d33be9949c7ce4963a Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/MoveArrow.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/MoveArrow.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/MoveArrow.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..388120ef15c0eadc71558f56a37089a7aabafc9a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/MoveArrow.png.meta @@ -0,0 +1,90 @@ +fileFormatVersion: 2 +guid: 1851cc976bd974a93abe4a0bde62e9ec +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 8 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/OrbitView.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/OrbitView.png new file mode 100644 index 0000000000000000000000000000000000000000..7170fdf332a4d542df9f4bb2b5826c08b71f77b6 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/OrbitView.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/OrbitView.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/OrbitView.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..df0a0943208b36febfddbc6394f9b50ba4f2c378 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/OrbitView.png.meta @@ -0,0 +1,90 @@ +fileFormatVersion: 2 +guid: 799480ee10f41421bb92f9e5a3c69787 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 8 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/PanView.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/PanView.png new file mode 100644 index 0000000000000000000000000000000000000000..de044523a7a84490f47e5122b2169de2d111cb8d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/PanView.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/PanView.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/PanView.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..df6465fad82e9de80bd34d7beb4d5be03ab7fc21 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/PanView.png.meta @@ -0,0 +1,90 @@ +fileFormatVersion: 2 +guid: d77d6fe8a9d62430ca45bba6b98e1457 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 8 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/PlusArrow.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/PlusArrow.png new file mode 100644 index 0000000000000000000000000000000000000000..9f3f5c129d895ea0703fbb3e5f840e50fd320846 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/PlusArrow.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/PlusArrow.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/PlusArrow.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..0effdfb41c48a363c50f0554645fd63dab491c5e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/PlusArrow.png.meta @@ -0,0 +1,90 @@ +fileFormatVersion: 2 +guid: 603c9fa805cb44d4b83c82566fe4f028 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 8 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/SlideArrow.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/SlideArrow.png new file mode 100644 index 0000000000000000000000000000000000000000..688a89c8759472fdd9caa25473febd737a84a173 Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/SlideArrow.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/SlideArrow.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/SlideArrow.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..1986abc1fbb2b8ce0985790a379263392f839d1a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/SlideArrow.png.meta @@ -0,0 +1,90 @@ +fileFormatVersion: 2 +guid: 77df81267d8e542c3a37878327ed4935 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 8 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/ZoomView.png b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/ZoomView.png new file mode 100644 index 0000000000000000000000000000000000000000..ac6d4a589cc61bd3b0e3e44f8136c49fc2dc88dc Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/ZoomView.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/ZoomView.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/ZoomView.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..e9ad01ec19a5e29edc8fa0a8ea86b016f43dac02 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Icons/ZoomView.png.meta @@ -0,0 +1,90 @@ +fileFormatVersion: 2 +guid: ff473b481fdc64223a2f01e41b055bb4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 8 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Material.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Material.meta new file mode 100644 index 0000000000000000000000000000000000000000..e2139ee73fe1208df4fd2ff47cd41a4493998382 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Material.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ab9e9917caf06410b8b540ccc4a5b3d1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Material/Grid.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Material/Grid.mat new file mode 100644 index 0000000000000000000000000000000000000000..f955bf839809eec31c1044d8236d315c508c25b0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Material/Grid.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Grid + m_Shader: {fileID: 4800000, guid: 24f9f312f97bd48dba1a728d58c89842, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 6344bf96fbda94141a525046d088fb23, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.6} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Material/Grid.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Material/Grid.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..82678b3e96da79279b5816b1daf369910167035f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Material/Grid.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e17031099b8f8479687f99bb93d35383 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/MeshEditorScene.unity b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/MeshEditorScene.unity new file mode 100644 index 0000000000000000000000000000000000000000..c5026074dde4e47db827fc19333b11a4e88f27ea --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/MeshEditorScene.unity @@ -0,0 +1,1344 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &2277086 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2277087} + - component: {fileID: 2277088} + m_Layer: 0 + m_Name: Handles + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2277087 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2277086} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 656536841} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2277088 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2277086} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66763c701ecd4747b117f3fd153dc4ed, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FaceHighlight: {fileID: 4800000, guid: 6f37d9e45fbae41b386f76d3bfefec4a, type: 3} + m_LineBillboard: {fileID: 4800000, guid: 4293210a3280c4283b9872316017f1f9, type: 3} + m_PointBillboard: {fileID: 4800000, guid: 8ca8b34aa013842f3b399b6961e7dc3b, type: 3} + m_VertexShader: {fileID: 4800000, guid: d6e5744ac426949ff8c0f02936689d4c, type: 3} +--- !u!1 &112140836 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 112140839} + - component: {fileID: 112140838} + - component: {fileID: 112140837} + - component: {fileID: 112140840} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &112140837 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 112140836} + m_Enabled: 1 +--- !u!20 &112140838 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 112140836} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.2784314, g: 0.2784314, b: 0.2784314, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &112140839 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 112140836} + m_LocalRotation: {x: 0.08867795, y: -0.911296, z: 0.2878992, w: 0.28069553} + m_LocalPosition: {x: 2.8687098, y: 3.2793567, z: 3.343413} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 656536841} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &112140840 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 112140836} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5c9c851079c8c42de80d622ca825a9dc, type: 3} + m_Name: + m_EditorClassIdentifier: + panCursor: {fileID: 2800000, guid: d77d6fe8a9d62430ca45bba6b98e1457, type: 3} + orbitCursor: {fileID: 2800000, guid: 799480ee10f41421bb92f9e5a3c69787, type: 3} + dollyCursor: {fileID: 2800000, guid: ff473b481fdc64223a2f01e41b055bb4, type: 3} + lookCursor: {fileID: 2800000, guid: d6f9bfed83fc8412c878feb6204acf00, type: 3} + moveSpeed: 15 + lookSpeed: 3 + orbitSpeed: 3 + scrollModifier: 50 + zoomSpeed: 0.1 +--- !u!1 &263074387 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 263074392} + - component: {fileID: 263074391} + - component: {fileID: 263074390} + - component: {fileID: 263074389} + - component: {fileID: 263074388} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!64 &263074388 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 263074387} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Convex: 0 + m_CookingOptions: 14 + m_Mesh: {fileID: 527611989} +--- !u!114 &263074389 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 263074387} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8233d90336aea43098adf6dbabd606a2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MeshFormatVersion: 1 + m_Faces: + - m_Indexes: 000000000100000002000000010000000300000002000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 0} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: -1 + m_TextureGroup: -1 + - m_Indexes: 040000000500000006000000050000000700000006000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 0} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: -1 + m_TextureGroup: -1 + - m_Indexes: 08000000090000000a000000090000000b0000000a000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 0} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: -1 + m_TextureGroup: -1 + - m_Indexes: 0c0000000d0000000e0000000d0000000f0000000e000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 0} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: -1 + m_TextureGroup: -1 + - m_Indexes: 100000001100000012000000110000001300000012000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 0} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: -1 + m_TextureGroup: -1 + - m_Indexes: 140000001500000016000000150000001700000016000000 + m_SmoothingGroup: 0 + m_Uv: + m_UseWorldSpace: 0 + m_FlipU: 0 + m_FlipV: 0 + m_SwapUV: 0 + m_Fill: 1 + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Rotation: 0 + m_Anchor: 9 + m_Material: {fileID: 0} + m_SubmeshIndex: 0 + m_ManualUV: 0 + elementGroup: -1 + m_TextureGroup: -1 + m_SharedVertices: + - m_Vertices: 000000000d00000016000000 + - m_Vertices: 010000000400000017000000 + - m_Vertices: 020000000f00000010000000 + - m_Vertices: 030000000600000011000000 + - m_Vertices: 050000000800000015000000 + - m_Vertices: 070000000a00000013000000 + - m_Vertices: 090000000c00000014000000 + - m_Vertices: 0b0000000e00000012000000 + m_SharedTextures: [] + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 1, y: 0, z: 0} + - {x: 0, y: 1, z: 0} + - {x: 1, y: 1, z: 0} + - {x: 1, y: 0, z: 0} + - {x: 1, y: 0, z: -1} + - {x: 1, y: 1, z: 0} + - {x: 1, y: 1, z: -1} + - {x: 1, y: 0, z: -1} + - {x: 0, y: 0, z: -1} + - {x: 1, y: 1, z: -1} + - {x: 0, y: 1, z: -1} + - {x: 0, y: 0, z: -1} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 1, z: -1} + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + - {x: 1, y: 1, z: 0} + - {x: 0, y: 1, z: -1} + - {x: 1, y: 1, z: -1} + - {x: 0, y: 0, z: -1} + - {x: 1, y: 0, z: -1} + - {x: 0, y: 0, z: 0} + - {x: 1, y: 0, z: 0} + m_Textures0: + - {x: 0, y: 0} + - {x: -1, y: 0} + - {x: 0, y: 1} + - {x: -1, y: 1} + - {x: 0, y: 0} + - {x: -1, y: 0} + - {x: 0, y: 1} + - {x: -1, y: 1} + - {x: 1, y: 0} + - {x: 0, y: 0} + - {x: 1, y: 1} + - {x: 0, y: 1} + - {x: 1, y: 0} + - {x: 0, y: 0} + - {x: 1, y: 1} + - {x: 0, y: 1} + - {x: 0, y: 0} + - {x: 1, y: 0} + - {x: 0, y: -1} + - {x: 1, y: -1} + - {x: 0, y: -1} + - {x: -1, y: -1} + - {x: 0, y: 0} + - {x: -1, y: 0} + m_Textures2: [] + m_Textures3: [] + m_Tangents: + - {x: -1, y: 0, z: 0, w: -1} + - {x: -1, y: 0, z: 0, w: -1} + - {x: -1, y: 0, z: 0, w: -1} + - {x: -1, y: 0, z: 0, w: -1} + - {x: 0, y: 0, z: 1, w: -1} + - {x: 0, y: 0, z: 1, w: -1} + - {x: 0, y: 0, z: 1, w: -1} + - {x: 0, y: 0, z: 1, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 0, y: 0, z: -1, w: -1} + - {x: 0, y: 0, z: -1, w: -1} + - {x: 0, y: 0, z: -1, w: -1} + - {x: 0, y: 0, z: -1, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: 1, y: 0, z: 0, w: -1} + - {x: -1, y: 0, z: 0, w: -1} + - {x: -1, y: 0, z: 0, w: -1} + - {x: -1, y: 0, z: 0, w: -1} + - {x: -1, y: 0, z: 0, w: -1} + m_Colors: [] + m_UnwrapParameters: + m_HardAngle: 88 + m_PackMargin: 20 + m_AngleError: 8 + m_AreaError: 15 + m_PreserveMeshAssetOnDestroy: 0 + assetGuid: + m_IsSelectable: 1 + m_SelectedFaces: + m_SelectedEdges: [] + m_SelectedVertices: +--- !u!23 &263074390 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 263074387} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 2 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &263074391 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 263074387} + m_Mesh: {fileID: 527611989} +--- !u!4 &263074392 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 263074387} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.5, y: 0, z: 0.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &488875049 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 488875053} + - component: {fileID: 488875052} + - component: {fileID: 488875051} + - component: {fileID: 488875050} + m_Layer: 0 + m_Name: Grid + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &488875050 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488875049} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e17031099b8f8479687f99bb93d35383, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &488875051 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488875049} + m_Mesh: {fileID: 0} +--- !u!114 &488875052 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488875049} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c5e18053250949969ca18bc5c8b35805, type: 3} + m_Name: + m_EditorClassIdentifier: + lines: 10 + scale: 1 +--- !u!4 &488875053 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488875049} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.00004839671, y: -0.00061693584, z: 0.0007453007} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 656536841} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!43 &527611989 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: pb_Mesh-21864 + serializedVersion: 10 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 36 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 24 + localAABB: + m_Center: {x: 0.5, y: 0.5, z: -0.5} + m_Extent: {x: 0.5, y: 0.5, z: 0.5} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 1 + m_KeepIndices: 1 + m_IndexFormat: 0 + m_IndexBuffer: 000001000200010003000200040005000600050007000600080009000a0009000b000a000c000d000e000d000f000e00100011001200110013001200140015001600150017001600 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 24 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 24 + format: 0 + dimension: 4 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 40 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 1152 + _typelessdata: 00000000000000000000000000000000000000000000803f000080bf0000000000000000000080bf00000000000000000000803f000000000000000000000000000000000000803f000080bf0000000000000000000080bf000080bf00000000000000000000803f0000000000000000000000000000803f000080bf0000000000000000000080bf000000000000803f0000803f0000803f0000000000000000000000000000803f000080bf0000000000000000000080bf000080bf0000803f0000803f00000000000000000000803f000000000000000000000000000000000000803f000080bf00000000000000000000803f00000000000080bf0000803f000000000000000000000000000000000000803f000080bf000080bf000000000000803f0000803f000000000000803f000000000000000000000000000000000000803f000080bf000000000000803f0000803f0000803f000080bf0000803f000000000000000000000000000000000000803f000080bf000080bf0000803f0000803f00000000000080bf0000000000000000000080bf0000803f0000000000000000000080bf0000803f000000000000000000000000000080bf0000000000000000000080bf0000803f0000000000000000000080bf00000000000000000000803f0000803f000080bf0000000000000000000080bf0000803f0000000000000000000080bf0000803f0000803f000000000000803f000080bf0000000000000000000080bf0000803f0000000000000000000080bf000000000000803f0000000000000000000080bf000080bf00000000000000000000000000000000000080bf000080bf0000803f00000000000000000000000000000000000080bf00000000000000000000000000000000000080bf000080bf0000000000000000000000000000803f000080bf000080bf00000000000000000000000000000000000080bf000080bf0000803f0000803f000000000000803f00000000000080bf00000000000000000000000000000000000080bf000080bf000000000000803f000000000000803f00000000000000000000803f000000000000803f0000000000000000000080bf00000000000000000000803f0000803f00000000000000000000803f000000000000803f0000000000000000000080bf0000803f00000000000000000000803f000080bf000000000000803f000000000000803f0000000000000000000080bf00000000000080bf0000803f0000803f000080bf000000000000803f000000000000803f0000000000000000000080bf0000803f000080bf0000000000000000000080bf00000000000080bf00000000000080bf0000000000000000000080bf00000000000080bf0000803f00000000000080bf00000000000080bf00000000000080bf0000000000000000000080bf000080bf000080bf00000000000000000000000000000000000080bf00000000000080bf0000000000000000000080bf00000000000000000000803f000000000000000000000000000080bf00000000000080bf0000000000000000000080bf000080bf00000000 + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 0.5, y: 0.5, z: -0.5} + m_Extent: {x: 0.5, y: 0.5, z: 0.5} + m_MeshUsageFlags: 0 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + m_MeshMetrics[0]: 1 + m_MeshMetrics[1]: 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + offset: 0 + size: 0 + path: +--- !u!1 &656536840 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 656536841} + m_Layer: 0 + m_Name: Editor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &656536841 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 656536840} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.00004839671, y: 0.00061693584, z: -0.0007453007} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 112140839} + - {fileID: 960534280} + - {fileID: 1816950047} + - {fileID: 488875053} + - {fileID: 1517202986} + - {fileID: 2277087} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &960534278 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 960534280} + - component: {fileID: 960534279} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &960534279 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 960534278} + m_Enabled: 1 + serializedVersion: 9 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 0.8 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &960534280 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 960534278} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: -0.00004839671, y: 1.169383, z: -7.7492547} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 656536841} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1419486695 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1419486699} + - component: {fileID: 1419486698} + - component: {fileID: 1419486697} + - component: {fileID: 1419486696} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1419486696 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1419486695} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1419486697 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1419486695} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1419486698 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1419486695} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1419486699 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1419486695} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1785512226} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1427483072 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1427483075} + - component: {fileID: 1427483074} + - component: {fileID: 1427483073} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1427483073 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1427483072} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1427483074 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1427483072} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &1427483075 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1427483072} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1517202984 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1517202986} + - component: {fileID: 1517202985} + m_Layer: 0 + m_Name: Directional Light (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1517202985 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1517202984} + m_Enabled: 1 + serializedVersion: 9 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 0.5 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1517202986 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1517202984} + m_LocalRotation: {x: -0.26756793, y: -0.8906236, z: 0.334653, w: -0.15232947} + m_LocalPosition: {x: -2.0200484, y: 1.169383, z: -0.17925471} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 656536841} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 42.658, y: -187.206, z: 30.627} +--- !u!1 &1785512225 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1785512226} + - component: {fileID: 1785512228} + - component: {fileID: 1785512227} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1785512226 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1785512225} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1419486699} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -86.48} + m_SizeDelta: {x: 723.54, y: 131.96} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1785512227 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1785512225} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9245283, g: 0.9245283, b: 0.9245283, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 18 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Click and drag to modify mesh +--- !u!222 &1785512228 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1785512225} + m_CullTransparentMesh: 0 +--- !u!1 &1816950045 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1816950047} + - component: {fileID: 1816950046} + m_Layer: 0 + m_Name: Mesh Editor + m_TagString: Untagged + m_Icon: {fileID: 3936346786652291628, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1816950046 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1816950045} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b1980aa2876b44faeb9680d0c72b418b, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1816950047 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1816950045} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.00004839671, y: -0.00061693584, z: 0.0007453007} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 656536841} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/MeshEditorScene.unity.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/MeshEditorScene.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..aa9b20d4ad0187a45306b73cf50cd71cd3f5a7b1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/MeshEditorScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 390cfe1ffd5f643cbb0c839fda60e168 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/README.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/README.md new file mode 100644 index 0000000000000000000000000000000000000000..0ef6e3e03663f84ef8a0f2e1e1ee9c486054440b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/README.md @@ -0,0 +1,7 @@ +# Important + +By default, ProBuilder scripts are removed during the build process. To enable runtime editing in Standalone builds: + +- Open the **Preferences** window +- Select the **ProBuilder** category +- Under **General**, un-check **Script Stripping** \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/README.md.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/README.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..82ccfd09faf6a4454114a7a25de084d4e6cdfe8d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 59c10d71b32084671aa7185cf2f83108 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts.meta new file mode 100644 index 0000000000000000000000000000000000000000..2b8799260298d0da8e8cd70f6e64631e73060b1b --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3d452139dec9b4425836e0039ed9ef57 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/CameraMotion.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/CameraMotion.cs new file mode 100644 index 0000000000000000000000000000000000000000..00a6d99ebfe7b9c0684b302ff1e2d6b2fe5c2481 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/CameraMotion.cs @@ -0,0 +1,379 @@ +// Partially derived from FlyThrough.js available on the Unify Wiki +// http://wiki.unity3d.com/index.php/FlyThrough + +using UnityEngine; +using UnityEngine.Assertions; +using UnityEngine.EventSystems; + +namespace ProBuilder.Examples +{ + public enum ViewTool + { + /// <value> + /// Camera is not in control of anything + /// </value> + None, + /// <value> + /// Camera is spherically rotating around target + /// </value> + Orbit, + /// <value> + /// Camera is moving right or left + /// </value> + Pan, + /// <value> + /// Camera is moving forward or backwards + /// </value> + Dolly, + /// <value> + /// Camera is looking and possibly flying + /// </value> + Look + } + + /** + * Requires InputSettings to have: + * - "Horizontal", "Vertical", "CameraUp", with Gravity and Sensitivity set to 3. + */ + [RequireComponent(typeof(Camera))] + sealed class CameraMotion : MonoBehaviour + { + public ViewTool cameraState { get; private set; } + +#pragma warning disable 649 + [SerializeField] + Texture2D panCursor; + + [SerializeField] + Texture2D orbitCursor; + + [SerializeField] + Texture2D dollyCursor; + + [SerializeField] + Texture2D lookCursor; +#pragma warning restore 649 + + Texture2D m_CurrentCursor; + + const int k_CursorIconSize = 64; + + const string k_InputMouseScrollwheel = "Mouse ScrollWheel"; + const string k_InputMouseHorizontal = "Mouse X"; + const string k_InputMouseVertical = "Mouse Y"; + + const int k_LeftMouse = 0; + const int k_RightMouse = 1; + const int k_MiddleMouse = 2; + + const float k_MinCameraDistance = 1f; + const float k_MaxCameraDistance = 100f; + +#if USE_DELTA_TIME + public float moveSpeed = 15f; + public float lookSpeed = 200f; + public float orbitSpeed = 200f; + public float scrollModifier = 100f; + public float zoomSpeed = .05f; +#else + // How fast the camera position moves. + public float moveSpeed = 15f; + + // How fast the camera rotation adjusts. + public float lookSpeed = 5f; + + // How fast the camera rotation adjusts. + public float orbitSpeed = 7f; + + // How fast the mouse scroll wheel affects distance from pivot. + public float scrollModifier = 100f; + + public float zoomSpeed = .1f; +#endif + + bool m_UseEvent; + Camera m_CameraComponent; + Transform m_Transform; + Vector3 m_ScenePivot = Vector3.zero; + float m_DistanceToCamera = 10f; + + // Store the mouse position from the last frame. Used in calculating deltas for mouse movement. + Vector3 m_PreviousMousePosition = Vector3.zero; + + Rect m_MouseCursorRect = new Rect(0, 0, k_CursorIconSize, k_CursorIconSize); + Rect m_ScreenCenterRect = new Rect(0, 0, k_CursorIconSize, k_CursorIconSize); + + bool m_CurrentActionValid = true; + + void Awake() + { + m_CameraComponent = GetComponent<Camera>(); + Assert.IsNotNull(m_CameraComponent); + m_Transform = GetComponent<Transform>(); + m_ScenePivot = m_Transform.forward * m_DistanceToCamera; + } + + void OnGUI() + { + float screenHeight = Screen.height; + + m_MouseCursorRect.x = Input.mousePosition.x - 16; + m_MouseCursorRect.y = (screenHeight - Input.mousePosition.y) - 16; + + m_ScreenCenterRect.x = Screen.width/2-32; + m_ScreenCenterRect.y = screenHeight/2-32; + + Cursor.visible = cameraState == ViewTool.None; + + if(cameraState != ViewTool.None) + { + switch(cameraState) + { + case ViewTool.Orbit: + GUI.Label(m_MouseCursorRect, orbitCursor); + break; + case ViewTool.Pan: + GUI.Label(m_MouseCursorRect, panCursor); + break; + case ViewTool.Dolly: + GUI.Label(m_MouseCursorRect, dollyCursor); + break; + case ViewTool.Look: + GUI.Label(m_MouseCursorRect, lookCursor); + break; + } + } + } + + public bool active + { + get { return cameraState != ViewTool.None || m_UseEvent || Input.GetKey(KeyCode.LeftAlt); } + } + + bool CheckMouseOverGUI() + { + return EventSystem.current == null || !EventSystem.current.IsPointerOverGameObject(); + } + + public void DoLateUpdate() + { + if(Input.GetMouseButtonUp(0) || Input.GetMouseButtonUp(1) || Input.GetMouseButtonUp(2)) + { + m_CurrentActionValid = true; + m_UseEvent = false; + } + else if(Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(1) || Input.GetMouseButtonDown(2)) + { + m_CurrentActionValid = CheckMouseOverGUI(); + } + + cameraState = ViewTool.None; + + // Camera is flying itself to a target + if(m_Zooming) + { + transform.position = Vector3.Lerp(m_PreviousPosition, m_TargetPosition, (m_ZoomProgress += Time.deltaTime)/zoomSpeed); + if( Vector3.Distance(transform.position, m_TargetPosition) < .1f) m_Zooming = false; + } + + if( (Input.GetAxis(k_InputMouseScrollwheel) != 0f || (Input.GetMouseButton(k_RightMouse) && Input.GetKey(KeyCode.LeftAlt))) && CheckMouseOverGUI()) + { + float delta = Input.GetAxis(k_InputMouseScrollwheel); + + if( Mathf.Approximately(delta, 0f) ) + { + cameraState = ViewTool.Dolly; + delta = CalcSignedMouseDelta(Input.mousePosition, m_PreviousMousePosition); + } + + m_DistanceToCamera -= delta * (m_DistanceToCamera/k_MaxCameraDistance) * scrollModifier; + m_DistanceToCamera = Mathf.Clamp(m_DistanceToCamera, k_MinCameraDistance, k_MaxCameraDistance); + m_Transform.position = m_Transform.localRotation * (Vector3.forward * -m_DistanceToCamera) + m_ScenePivot; + } + + bool viewTool = true; + + // If the current tool isn't View, or no mouse button is pressed, record the mouse position then early exit. + if (!m_CurrentActionValid || (viewTool +#if !CONTROLLER + && !Input.GetMouseButton(k_LeftMouse) + && !Input.GetMouseButton(k_RightMouse) + && !Input.GetMouseButton(k_MiddleMouse) + && !Input.GetKey(KeyCode.LeftAlt) +#endif + )) + { + Rect screen = new Rect(0, 0, Screen.width, Screen.height); + + if (screen.Contains(Input.mousePosition)) + m_PreviousMousePosition = Input.mousePosition; + + return; + } + + // FPS view camera + if (Input.GetMouseButton(k_RightMouse) && !Input.GetKey(KeyCode.LeftAlt) + ) //|| Input.GetKey(KeyCode.LeftShift) ) + { + cameraState = ViewTool.Look; + + m_UseEvent = true; + + // Rotation + float rotX = Input.GetAxis(k_InputMouseHorizontal); + float rotY = Input.GetAxis(k_InputMouseVertical); + + Vector3 eulerRotation = m_Transform.localRotation.eulerAngles; + +#if USE_DELTA_TIME + eulerRotation.x -= rot_y * lookSpeed * Time.deltaTime; // Invert Y axis + eulerRotation.y += rot_x * lookSpeed * Time.deltaTime; +#else + eulerRotation.x -= rotY * lookSpeed; + eulerRotation.y += rotX * lookSpeed; +#endif + eulerRotation.z = 0f; + m_Transform.localRotation = Quaternion.Euler(eulerRotation); + + // PositionHandle-- Always use delta time when flying + float speed = moveSpeed * Time.deltaTime; + + m_Transform.position += m_Transform.forward * speed * Input.GetAxis("Vertical"); + m_Transform.position += m_Transform.right * speed * Input.GetAxis("Horizontal"); + + try + { + m_Transform.position += m_Transform.up * speed * Input.GetAxis("CameraUp"); + } + catch + { + Debug.LogWarning( + "CameraUp input is not configured. Open \"Edit/Project Settings/Input\" and add an input named \"CameraUp\", mapping q and e to Negative and Positive buttons."); + } + + m_ScenePivot = transform.position + transform.forward * m_DistanceToCamera; + } + // Orbit + else if(Input.GetKey(KeyCode.LeftAlt) && Input.GetMouseButton(k_LeftMouse)) + { + cameraState = ViewTool.Orbit; + + m_UseEvent = true; + + float rotX = Input.GetAxis(k_InputMouseHorizontal); + float rotY = -Input.GetAxis(k_InputMouseVertical); + + Vector3 eulerRotation = transform.localRotation.eulerAngles; + + if ((Mathf.Approximately(eulerRotation.x, 90f) && rotY > 0f) || + (Mathf.Approximately(eulerRotation.x, 270f) && rotY < 0f)) + rotY = 0f; + +#if USE_DELTA_TIME + eulerRotation.x += rot_y * orbitSpeed * Time.deltaTime; + eulerRotation.y += rot_x * orbitSpeed * Time.deltaTime; +#else + eulerRotation.x += rotY * orbitSpeed; + eulerRotation.y += rotX * orbitSpeed; +#endif + + eulerRotation.z = 0f; + + transform.localRotation = Quaternion.Euler(eulerRotation); + transform.position = CalculateCameraPosition(m_ScenePivot); + } + // Pan + else if(Input.GetMouseButton(k_MiddleMouse) || (Input.GetMouseButton(k_LeftMouse) && viewTool ) ) + { + cameraState = ViewTool.Pan; + + Vector2 delta = Input.mousePosition - m_PreviousMousePosition; + + delta.x = ScreenToWorldDistance(delta.x, m_DistanceToCamera); + delta.y = ScreenToWorldDistance(delta.y, m_DistanceToCamera); + + m_Transform.position -= m_Transform.right * delta.x; + m_Transform.position -= m_Transform.up * delta.y; + + m_ScenePivot = m_Transform.position + m_Transform.forward * m_DistanceToCamera; + } + + m_PreviousMousePosition = Input.mousePosition; + } + + Vector3 CalculateCameraPosition(Vector3 target) + { + return transform.localRotation * (Vector3.forward * -m_DistanceToCamera) + target; + } + + bool m_Zooming = false; + float m_ZoomProgress = 0f; + Vector3 m_PreviousPosition = Vector3.zero; + Vector3 m_TargetPosition = Vector3.zero; + + /// <summary> + /// Lerp the camera to the current selection + /// </summary> + /// <param name="target"></param> + public void Focus(GameObject target) + { + Vector3 center = target.transform.position; + Renderer renderer = target.GetComponent<Renderer>(); + Bounds bounds = renderer != null ? renderer.bounds : new Bounds(center, Vector3.one * 10f); + + m_DistanceToCamera = CalcMinDistanceToBounds(m_CameraComponent, bounds) + 2f; + m_DistanceToCamera += m_DistanceToCamera; + center = bounds.center; + + Focus(center, m_DistanceToCamera); + } + + public void Focus(Vector3 target, float distance) + { + m_ScenePivot = target; + m_DistanceToCamera = distance; + m_PreviousPosition = transform.position; + m_TargetPosition = CalculateCameraPosition( m_ScenePivot ); + m_ZoomProgress = 0f; + m_Zooming = true; + } + + float ScreenToWorldDistance(float screenDistance, float distanceFromCamera) + { + Vector3 start = m_CameraComponent.ScreenToWorldPoint(Vector3.forward * distanceFromCamera); + Vector3 end = m_CameraComponent.ScreenToWorldPoint( new Vector3(screenDistance, 0f, distanceFromCamera)); + return CopySign(Vector3.Distance(start, end), screenDistance); + } + + static float CalcSignedMouseDelta(Vector2 lhs, Vector2 rhs) + { + float delta = Vector2.Distance(lhs, rhs); + float scale = 1f / Mathf.Min(Screen.width, Screen.height); + + // If horizontal movement is greater than vertical movement, use the X axis for sign. + if( Mathf.Abs(lhs.x - rhs.x) > Mathf.Abs(lhs.y - rhs.y) ) + return delta * scale * ( (lhs.x-rhs.x) > 0f ? 1f : -1f ); + + return delta * scale * ( (lhs.y-rhs.y) > 0f ? 1f : -1f ); + } + + static float CalcMinDistanceToBounds(Camera cam, Bounds bounds) + { + float frustumHeight = Mathf.Max(Mathf.Max(bounds.size.x, bounds.size.y), bounds.size.z); + float distance = frustumHeight * .5f / Mathf.Tan(cam.fieldOfView * .5f * Mathf.Deg2Rad); + + return distance; + } + + /// <summary> + /// Return the magnitude of X with the sign of Y. + /// </summary> + float CopySign(float x, float y) + { + if(x < 0f && y < 0f || x > 0f && y > 0f || x == 0f || y == 0f) + return x; + + return -x; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/CameraMotion.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/CameraMotion.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6311758125bba78e2671b644101aa7bc6260947c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/CameraMotion.cs.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 5c9c851079c8c42de80d622ca825a9dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - panCursor: {fileID: 2800000, guid: d77d6fe8a9d62430ca45bba6b98e1457, type: 3} + - orbitCursor: {fileID: 2800000, guid: 799480ee10f41421bb92f9e5a3c69787, type: 3} + - dollyCursor: {fileID: 2800000, guid: ff473b481fdc64223a2f01e41b055bb4, type: 3} + - lookCursor: {fileID: 2800000, guid: 1851cc976bd974a93abe4a0bde62e9ec, type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Handles.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Handles.cs new file mode 100644 index 0000000000000000000000000000000000000000..966ee3b07de6f9fb4a88f32ba2681961fc32ff66 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Handles.cs @@ -0,0 +1,136 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.ProBuilder; +using UnityEngine.Rendering; + +namespace ProBuilder.Examples +{ + class Handles : MonoBehaviour + { + static Handles s_Instance; + static bool s_Initialized; +#pragma warning disable 649 + public Shader m_FaceHighlight; + public Shader m_LineBillboard; + public Shader m_PointBillboard; + public Shader m_VertexShader; +#pragma warning restore 649 + static Material s_EdgeMaterial; + static Material s_VertMaterial; + static Material s_FaceMaterial; + static Face[] s_FaceArray = new Face[1]; + + void Awake() + { + s_Instance = this; + } + + static void Init() + { + if (s_Instance == null) + Debug.LogError("No Handles object found in scene"); + + if (s_Initialized) + return; + + s_Initialized = true; + + var lineShader = BuiltinMaterials.geometryShadersSupported ? s_Instance.m_LineBillboard : s_Instance.m_FaceHighlight; + var vertShader = BuiltinMaterials.geometryShadersSupported ? s_Instance.m_PointBillboard : s_Instance.m_VertexShader; + + s_EdgeMaterial = new Material(lineShader); + s_VertMaterial = new Material(vertShader); + s_FaceMaterial = new Material(s_Instance.m_FaceHighlight); + s_FaceMaterial.SetFloat("_Dither", 1f); + } + + public static Material edgeMaterial + { + get + { + Init(); + return s_EdgeMaterial; + } + } + + public static Material vertMaterial + { + get + { + Init(); + return s_VertMaterial; + } + } + + public static Material faceMaterial + { + get + { + Init(); + return s_FaceMaterial; + } + } + + public static void Draw(ProBuilderMesh mesh, Face face, Color color) + { + s_FaceArray[0] = face; + Draw(mesh, s_FaceArray, color); + } + + public static void Draw(ProBuilderMesh mesh, IEnumerable<Face> faces, Color color, CompareFunction compareFunction = CompareFunction.LessEqual) + { + if (mesh == null) + return; + + faceMaterial.SetColor("_Color", color); + faceMaterial.SetInt("_HandleZTest", (int) compareFunction); + + if (!faceMaterial.SetPass(0)) + return; + + GL.PushMatrix(); + GL.Begin(GL.TRIANGLES); + GL.MultMatrix(mesh.transform.localToWorldMatrix); + + var positions = mesh.positions; + + foreach (var face in faces) + { + if (face == null) + continue; + + var indices = face.indexes; + + for (int i = 0, c = indices.Count; i < c; i += 3) + { + GL.Vertex(positions[indices[i+0]]); + GL.Vertex(positions[indices[i+1]]); + GL.Vertex(positions[indices[i+2]]); + } + } + + GL.End(); + GL.PopMatrix(); + } + + public static void DrawLine(Vector3 a, Vector3 b, Color color, CompareFunction compareFunction = CompareFunction.LessEqual) + { + edgeMaterial.SetColor("_Color", color); + edgeMaterial.SetInt("_HandleZTest", (int) compareFunction); + if (BuiltinMaterials.geometryShadersSupported) + edgeMaterial.SetFloat("_Scale", .2f); + if (!edgeMaterial.SetPass(0)) + return; + + GL.PushMatrix(); + GL.Begin(GL.LINES); + + GL.Vertex(a); + GL.Vertex(b); + + GL.End(); + GL.PopMatrix(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Handles.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Handles.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..994b8aa294ddf205297c1991fb44276c74ea473f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Handles.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 66763c701ecd4747b117f3fd153dc4ed +timeCreated: 1546032641 \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/MeshEditor.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/MeshEditor.cs new file mode 100644 index 0000000000000000000000000000000000000000..8e9c0c51157917ffe046f9d0a26518fa24a42a57 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/MeshEditor.cs @@ -0,0 +1,162 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.ProBuilder; +using PMath = UnityEngine.ProBuilder.Math; + +namespace ProBuilder.Examples +{ + class MeshEditor : MonoBehaviour + { + Camera m_SceneCamera; + CameraMotion m_CameraMotion; + MeshAndFace m_Selection; + + class MeshState + { + public ProBuilderMesh mesh; + public Vector3[] vertices; + public Vector3[] origins; + public List<int> indices; + + public MeshState(ProBuilderMesh mesh, IList<int> selectedIndices) + { + this.mesh = mesh; + vertices = mesh.positions.ToArray(); + indices = mesh.GetCoincidentVertices(selectedIndices); + origins = new Vector3[indices.Count]; + + for (int i = 0, c = indices.Count; i < c; i++) + origins[i] = vertices[indices[i]]; + } + } + + class DragState + { + public bool active; + public Ray constraint; + public float offset; + public MeshState meshState; + } + + DragState m_DragState = new DragState(); + + void Awake() + { + m_SceneCamera = Camera.main; + m_CameraMotion = m_SceneCamera.GetComponent<CameraMotion>(); + Camera.onPostRender += DrawSelection; + } + + void Start() + { + m_CameraMotion.Focus(Vector3.zero, 10f); + } + + void Update() + { + if(!m_DragState.active) + m_Selection = Utility.PickFace(m_SceneCamera, Input.mousePosition); + + HandleInput(); + } + + void DrawSelection(Camera cam) + { + if (m_CameraMotion.active) + return; + + Handles.Draw(m_Selection.mesh, m_Selection.face, Color.cyan); + + if (m_DragState.active) + { + var o = m_DragState.constraint.origin; + var d = m_DragState.constraint.direction; + Handles.DrawLine(o - d * 100f, o + d * 1000f, Color.green); + } + } + + void LateUpdate() + { + if (!m_DragState.active) + m_CameraMotion.DoLateUpdate(); + } + + void HandleInput() + { + if (m_CameraMotion.active) + return; + + if (Input.GetMouseButtonDown(0) && m_Selection.face != null) + { + BeginDrag(); + } + else if (Input.GetMouseButtonUp(0)) + { + EndDrag(); + } + else if (m_DragState.active && Input.GetMouseButton(0)) + { + UpdateDrag(); + } + else if (Input.GetKeyUp(KeyCode.F)) + { + if (m_Selection.mesh != null) + m_CameraMotion.Focus(m_Selection.mesh.gameObject); + else + m_CameraMotion.Focus(Vector3.zero, 10f); + } + } + + void BeginDrag() + { + if (m_DragState.active || m_Selection.mesh == null || m_Selection.face == null) + return; + + m_DragState.active = true; + + var trs = m_Selection.mesh.transform; + + // The constraint ray is stored in world space + var origin = trs.TransformPoint(PMath.Average(m_Selection.mesh.positions, m_Selection.face.indexes)); + var direction = trs.TransformDirection(PMath.Normal(m_Selection.mesh, m_Selection.face)); + + m_DragState.constraint = new Ray(origin, direction); + m_DragState.meshState = new MeshState(m_Selection.mesh, m_Selection.face.distinctIndexes); + m_DragState.offset = GetDragDistance(); + } + + void EndDrag() + { + m_DragState.active = false; + } + + void UpdateDrag() + { + var distance = GetDragDistance() - m_DragState.offset; + + var mesh = m_Selection.mesh; + var indices = m_DragState.meshState.indices; + var vertices = m_DragState.meshState.vertices; + var origins = m_DragState.meshState.origins; + // Constraint is in world coordinates, but we need model space when applying changes to mesh values. + var direction = mesh.transform.InverseTransformDirection(m_DragState.constraint.direction); + + for (int i = 0, c = indices.Count; i < c; i++) + vertices[indices[i]] = origins[i] + direction * distance; + + mesh.positions = vertices; + mesh.ToMesh(); + mesh.Refresh(); + } + + float GetDragDistance() + { + Ray constraint = m_DragState.constraint; + Ray mouse = m_SceneCamera.ScreenPointToRay(Input.mousePosition); + Vector3 nearestPoint = PMath.GetNearestPointRayRay(constraint, mouse); + float sign = System.Math.Sign(Vector3.Dot(nearestPoint - constraint.origin, constraint.direction)); + return Vector3.Distance(constraint.origin, nearestPoint) * sign; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/MeshEditor.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/MeshEditor.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..aa3b13ca6ce38d104ea2588a8600793104ccf1f2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/MeshEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b1980aa2876b44faeb9680d0c72b418b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Selection.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Selection.cs new file mode 100644 index 0000000000000000000000000000000000000000..82aa45bd56a2203827852945e4a2bb79abcd0ef0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Selection.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using UnityEngine.ProBuilder; + +namespace ProBuilder.Examples +{ + static class Selection + { + static HashSet<ProBuilderMesh> s_Selection = new HashSet<ProBuilderMesh>(); + + public static bool Add(ProBuilderMesh mesh) + { + if(mesh == null) + throw new ArgumentNullException("mesh"); + + return s_Selection.Add(mesh); + } + + public static void Remove(ProBuilderMesh mesh) + { + if(mesh == null) + throw new ArgumentNullException("mesh"); + + if(s_Selection.Contains(mesh)) + s_Selection.Remove(mesh); + } + + public static bool Contains(ProBuilderMesh mesh) + { + return s_Selection.Contains(mesh); + } + + public static void Clear() + { + s_Selection.Clear(); + } + + public static IEnumerable<ProBuilderMesh> meshes + { + get { return s_Selection; } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Selection.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Selection.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..5d1130784a012a643e4eca041749b1c91f5acc08 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Selection.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 59747bf704554a959f6e1bcf75069a7e +timeCreated: 1546024391 \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/SimpleGrid.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/SimpleGrid.cs new file mode 100644 index 0000000000000000000000000000000000000000..c97ccb8b3afdc7302365d6939f68b993eb1be99c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/SimpleGrid.cs @@ -0,0 +1,66 @@ +using UnityEngine; + +namespace ProBuilder.Examples +{ + [RequireComponent(typeof(MeshFilter))] + [RequireComponent(typeof(MeshRenderer))] + sealed class SimpleGrid : MonoBehaviour + { + public int lines = 10; + public float scale = 1f; + + void Start() + { + GetComponent<MeshFilter>().sharedMesh = GridMesh(lines, scale); + transform.position = Vector3.zero; + } + + Mesh GridMesh(int lineCount, float scale) + { + float half = (lineCount / 2f) * scale; + + lineCount++; + + Vector3[] lines = new Vector3[lineCount * 4]; + Vector3[] normals = new Vector3[lineCount * 4]; + Vector2[] uv = new Vector2[lineCount * 4]; + int[] indices = new int[lineCount * 4]; + + int n = 0; + for (int y = 0; y < lineCount; y++) + { + indices[n] = n; + uv[n] = y % 10 == 0 ? Vector2.one : Vector2.zero; + lines[n++] = new Vector3(y * scale - half, 0f, -half); + + indices[n] = n; + uv[n] = y % 10 == 0 ? Vector2.one : Vector2.zero; + lines[n++] = new Vector3(y * scale - half, 0f, half); + + indices[n] = n; + uv[n] = y % 10 == 0 ? Vector2.one : Vector2.zero; + lines[n++] = new Vector3(-half, 0f, y * scale - half); + + indices[n] = n; + uv[n] = y % 10 == 0 ? Vector2.one : Vector2.zero; + lines[n++] = new Vector3(half, 0f, y * scale - half); + } + + for (int i = 0; i < lines.Length; i++) + { + normals[i] = Vector3.up; + } + + Mesh tm = new Mesh(); + + tm.name = "GridMesh"; + tm.vertices = lines; + tm.normals = normals; + tm.subMeshCount = 1; + tm.SetIndices(indices, MeshTopology.Lines, 0); + tm.uv = uv; + + return tm; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/SimpleGrid.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/SimpleGrid.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..afc428e4f09da1d3f9d2c10a43e4583e02f09c00 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/SimpleGrid.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c5e18053250949969ca18bc5c8b35805 +timeCreated: 1546444350 \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Utility.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Utility.cs new file mode 100644 index 0000000000000000000000000000000000000000..fdfdab5849fd12d0fe45234a5ce466633acb6c6f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Utility.cs @@ -0,0 +1,38 @@ +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace ProBuilder.Examples +{ + struct MeshAndFace + { + public ProBuilderMesh mesh; + public Face face; + } + + static class Utility + { + internal static GameObject PickObject(Camera camera, Vector2 mousePosition) + { + var ray = camera.ScreenPointToRay(mousePosition); + + RaycastHit hit; + + if (Physics.Raycast(ray, out hit)) + return hit.collider.gameObject; + + return null; + } + + internal static MeshAndFace PickFace(Camera camera, Vector3 mousePosition) + { + var res = new MeshAndFace(); + var go = PickObject(camera, mousePosition); + + if (go == null || !(res.mesh = go.GetComponent<ProBuilderMesh>())) + return res; + + res.face = SelectionPicker.PickFace(camera, mousePosition, res.mesh); + return res; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Utility.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Utility.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d729caeed76dd392731b4789d3d38622fd1284ba --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Runtime Editing/Scripts/Utility.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 69b8b316c4674f5bb32e396b7ab5cda1 +timeCreated: 1546031574 \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Unity.ProBuilder.Examples.asmdef b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Unity.ProBuilder.Examples.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..d9b5549f445d3d2de4a7b36b925d4694b69d388a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Unity.ProBuilder.Examples.asmdef @@ -0,0 +1,15 @@ +{ + "name": "Unity.ProBuilder.Examples", + "references": [ + "Unity.ProBuilder", + "Unity.ugui" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [] +} \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Unity.ProBuilder.Examples.asmdef.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Unity.ProBuilder.Examples.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..a0530efc39e783e3d585673f9023e2f153046cd6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Unity.ProBuilder.Examples.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 66e8476a6a0694b19a6ed20581be3b56 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Vertex Colors.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Vertex Colors.meta new file mode 100644 index 0000000000000000000000000000000000000000..09eb3fbbace8f4b0794eb0151f29dc6fab06e46f --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Vertex Colors.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 40ad7d6237e94ec1ba0670535dd99fe9 +folderAsset: yes +timeCreated: 1480083961 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Vertex Colors/HighlightNearestFace.cs b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Vertex Colors/HighlightNearestFace.cs new file mode 100644 index 0000000000000000000000000000000000000000..a1c0a39a7ee1f5dd4712b13392c7bfd8c156c0b3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Vertex Colors/HighlightNearestFace.cs @@ -0,0 +1,128 @@ +using UnityEngine; +using UnityEngine.ProBuilder; + +namespace ProBuilder.Examples +{ + /// <summary> + /// Move a sphere around the surface of a ProBuilder mesh, changing the + /// vertex color of the nearest face. + /// + /// Scene setup: Create a Unity Sphere primitive in a new scene, then attach + /// this script to the sphere. Press 'Play' + /// </summary> + public class HighlightNearestFace : MonoBehaviour + { + // The distance covered by the plane. + public float travel = 50f; + + // The speed at which the sphere will move. + public float speed = .2f; + + // ProBuilder mesh component + private ProBuilderMesh target; + + // The nearest face to this sphere. + private Face nearest = null; + + void Start() + { + // Generate a 50x50 plane with 25 subdivisions, facing up, with no smoothing applied. + target = ShapeGenerator.GeneratePlane(PivotLocation.Center, travel, travel, 25, 25, Axis.Up); + + target.transform.position = new Vector3(travel * .5f, 0f, travel * .5f); + + // Rebuild the mesh (apply ProBuilderMesh data to UnityEngine.Mesh) + target.ToMesh(); + + // Rebuild UVs, Colors, Collisions, Normals, and Tangents + target.Refresh(); + + // Orient the camera in a good position + Camera cam = Camera.main; + cam.transform.position = new Vector3(25f, 40f, 0f); + cam.transform.localRotation = Quaternion.Euler(new Vector3(65f, 0f, 0f)); + } + + void Update() + { + float time = Time.time * speed; + + Vector3 position = new Vector3( + Mathf.PerlinNoise(time, time) * travel, + 2, + Mathf.PerlinNoise(time + 1f, time + 1f) * travel + ); + + transform.position = position; + + if (target == null) + { + Debug.LogWarning("Missing the ProBuilder Mesh target!"); + return; + } + + // instead of testing distance by converting each face's center to world space, + // convert the world space of this object to the pb-Object local transform. + Vector3 pbRelativePosition = target.transform.InverseTransformPoint(transform.position); + + // reset the last colored face to white + if (nearest != null) + target.SetFaceColor(nearest, Color.white); + + // iterate each face in the ProBuilderMesh looking for the one nearest + // to this object. + int faceCount = target.faces.Count; + float smallestDistance = Mathf.Infinity; + nearest = target.faces[0]; + + for (int i = 0; i < faceCount; i++) + { + float distance = Vector3.Distance(pbRelativePosition, FaceCenter(target, target.faces[i])); + + if (distance < smallestDistance) + { + smallestDistance = distance; + nearest = target.faces[i]; + } + } + + // Set a single face's vertex colors. If you're updating more than one face, consider using + // the ProBuilderMesh.SetColors(Color[] colors); function instead. + target.SetFaceColor(nearest, Color.blue); + + // Apply the stored vertex color array to the Unity mesh. + target.Refresh(RefreshMask.Colors); + } + + /** + * Returns the average of each vertex position in a face. + * In local space. + */ + private Vector3 FaceCenter(ProBuilderMesh pb, Face face) + { + var vertices = pb.positions; + + Vector3 average = Vector3.zero; + + // face holds triangle data. distinctIndices is a + // cached collection of the distinct indices that + // make up the triangles. Ex: + // tris = {0, 1, 2, 2, 3, 0} + // distinct indices = {0, 1, 2, 3} + foreach (int index in face.distinctIndexes) + { + average.x += vertices[index].x; + average.y += vertices[index].y; + average.z += vertices[index].z; + } + + float len = (float) face.distinctIndexes.Count; + + average.x /= len; + average.y /= len; + average.z /= len; + + return average; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Vertex Colors/HighlightNearestFace.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Vertex Colors/HighlightNearestFace.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..4295e23a39ec1e90e3a76f6fc8597e086cf568f4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Vertex Colors/HighlightNearestFace.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6a2b3f99b3a94189ac8659e2394c65aa +timeCreated: 1480083573 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Vertex Colors/HighlightNearestFace.unity b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Vertex Colors/HighlightNearestFace.unity new file mode 100644 index 0000000000000000000000000000000000000000..8f9a93709223b73ee93fdcf7162b4f3f53243ee2 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Vertex Colors/HighlightNearestFace.unity @@ -0,0 +1,380 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 1 + m_BakeResolution: 50 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666666 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &292121580 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 292121582} + - component: {fileID: 292121581} + m_Layer: 0 + m_Name: Directional light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &292121581 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 292121580} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &292121582 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 292121580} + m_LocalRotation: {x: 0.40821794, y: -0.23456973, z: 0.10938166, w: 0.8754261} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1107377143 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1107377148} + - component: {fileID: 1107377147} + - component: {fileID: 1107377146} + - component: {fileID: 1107377144} + m_Layer: 0 + m_Name: Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1107377144 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107377143} + m_Enabled: 1 +--- !u!124 &1107377146 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107377143} + m_Enabled: 1 +--- !u!20 &1107377147 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107377143} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1107377148 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107377143} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1234896137 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1234896142} + - component: {fileID: 1234896141} + - component: {fileID: 1234896140} + - component: {fileID: 1234896139} + - component: {fileID: 1234896138} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1234896138 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1234896137} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6a2b3f99b3a94189ac8659e2394c65aa, type: 3} + m_Name: + m_EditorClassIdentifier: + travel: 50 + speed: 0.2 +--- !u!23 &1234896139 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1234896137} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!135 &1234896140 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1234896137} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1234896141 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1234896137} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1234896142 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1234896137} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Vertex Colors/HighlightNearestFace.unity.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Vertex Colors/HighlightNearestFace.unity.meta new file mode 100644 index 0000000000000000000000000000000000000000..b1bdc2532809fedcc7b28998c5aed03be904ef6a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/Runtime/Vertex Colors/HighlightNearestFace.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fe2669afe8754b78ab708f0f370eab7a +timeCreated: 1480083961 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/.sample.json b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/.sample.json new file mode 100644 index 0000000000000000000000000000000000000000..990d7fcfb9dde400f86f785c97678108576251b3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/.sample.json @@ -0,0 +1,5 @@ +{ + "displayName":"Universal Render Pipeline Support", + "description": "Shaders and materials for the Universal Render Pipeline.", + "createSeparatePackage": false +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Material.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Material.meta new file mode 100644 index 0000000000000000000000000000000000000000..67a664eeace249c191adcf7ec7ed2601ec146ce8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Material.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a87ab085704cc400587af8e4ae0899db +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Material/ProBuilder Default URP.mat b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Material/ProBuilder Default URP.mat new file mode 100644 index 0000000000000000000000000000000000000000..814b7b7811005a4cfbada0067ddba780228ffab4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Material/ProBuilder Default URP.mat @@ -0,0 +1,82 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ProBuilder Default URP + m_Shader: {fileID: 4800000, guid: a5e1047f27bee462089b2bc3104f90fd, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + MotionVector: User + disabledShaderPasses: + - MOTIONVECTORS + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - Texture2D_BF5F6835: + m_Texture: {fileID: 2800000, guid: 6344bf96fbda94141a525046d088fb23, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 6344bf96fbda94141a525046d088fb23, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + - _Color: {r: 0.5, g: 0.5, b: 0.5, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Material/ProBuilder Default URP.mat.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Material/ProBuilder Default URP.mat.meta new file mode 100644 index 0000000000000000000000000000000000000000..0fd3e102e3a1affcc739f3b2bf18dbd2b4d40062 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Material/ProBuilder Default URP.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 25a9fb42d361f46ad89221f6d301e96e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Shader.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Shader.meta new file mode 100644 index 0000000000000000000000000000000000000000..a4b60fce74f954a01fbf01f70a3615326a1cbb32 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Shader.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 864b60f9a756846af84d0a15e19d7cb4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Shader/Standard Vertex Color.shadergraph b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Shader/Standard Vertex Color.shadergraph new file mode 100644 index 0000000000000000000000000000000000000000..698a1c587ee561e80d6125dd5a1f87d0bb49995e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Shader/Standard Vertex Color.shadergraph @@ -0,0 +1,110 @@ +{ + "m_SerializedProperties": [ + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.Internal.Texture2DShaderProperty" + }, + "JSONnodeData": "{\n \"m_Guid\": {\n \"m_GuidSerialized\": \"bc2269d8-e972-49a2-bc9b-b07483d4d1af\"\n },\n \"m_Name\": \"Albedo\",\n \"m_DefaultReferenceName\": \"Texture2D_BF5F6835\",\n \"m_OverrideReferenceName\": \"_MainTex\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Precision\": 0,\n \"m_GPUInstanced\": false,\n \"m_Hidden\": false,\n \"m_Value\": {\n \"m_SerializedTexture\": \"{\\\"texture\\\":{\\\"fileID\\\":2800000,\\\"guid\\\":\\\"6344bf96fbda94141a525046d088fb23\\\",\\\"type\\\":3}}\",\n \"m_Guid\": \"\"\n },\n \"m_Modifiable\": true,\n \"m_DefaultType\": 0\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty" + }, + "JSONnodeData": "{\n \"m_Guid\": {\n \"m_GuidSerialized\": \"8e88d514-7fc0-41e0-9d37-bfe0cb7a30ba\"\n },\n \"m_Name\": \"Color\",\n \"m_DefaultReferenceName\": \"Color_349C0C25\",\n \"m_OverrideReferenceName\": \"_Color\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Precision\": 0,\n \"m_GPUInstanced\": false,\n \"m_Hidden\": false,\n \"m_Value\": {\n \"r\": 1.0,\n \"g\": 1.0,\n \"b\": 1.0,\n \"a\": 0.0\n },\n \"m_ColorMode\": 0\n}" + } + ], + "m_SerializedKeywords": [], + "m_SerializableNodes": [ + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.PropertyNode" + }, + "JSONnodeData": "{\n \"m_GuidSerialized\": \"2e8c3df0-672d-4d2c-8f2c-335cae20d4c0\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Property\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -533.0,\n \"y\": -236.0,\n \"width\": 115.0,\n \"height\": 34.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Texture2DMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"Albedo\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n },\n \"m_PropertyGuidSerialized\": \"bc2269d8-e972-49a2-bc9b-b07483d4d1af\"\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.MultiplyNode" + }, + "JSONnodeData": "{\n \"m_GuidSerialized\": \"381227c3-e64c-4cff-ab1f-6f3e0235e613\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Multiply\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": 382.0,\n \"y\": -56.0,\n \"width\": 208.0,\n \"height\": 302.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicValueMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"A\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"A\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"e00\\\": 0.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 0.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 0.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"e00\\\": 1.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 1.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 1.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 1.0\\n }\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicValueMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"B\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"B\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"e00\\\": 2.0,\\n \\\"e01\\\": 2.0,\\n \\\"e02\\\": 2.0,\\n \\\"e03\\\": 2.0,\\n \\\"e10\\\": 2.0,\\n \\\"e11\\\": 2.0,\\n \\\"e12\\\": 2.0,\\n \\\"e13\\\": 2.0,\\n \\\"e20\\\": 2.0,\\n \\\"e21\\\": 2.0,\\n \\\"e22\\\": 2.0,\\n \\\"e23\\\": 2.0,\\n \\\"e30\\\": 2.0,\\n \\\"e31\\\": 2.0,\\n \\\"e32\\\": 2.0,\\n \\\"e33\\\": 2.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"e00\\\": 1.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 1.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 1.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 1.0\\n }\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicValueMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 2,\\n \\\"m_DisplayName\\\": \\\"Out\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"e00\\\": 0.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 0.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 0.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"e00\\\": 1.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 1.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 1.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 1.0\\n }\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n }\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.PropertyNode" + }, + "JSONnodeData": "{\n \"m_GuidSerialized\": \"62d2f243-ec5e-4e28-9c9d-5aec89e69ea2\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Property\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": 170.0,\n \"y\": 171.0,\n \"width\": 107.0,\n \"height\": 34.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector4MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"Color\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n },\n \"m_PropertyGuidSerialized\": \"8e88d514-7fc0-41e0-9d37-bfe0cb7a30ba\"\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.MultiplyNode" + }, + "JSONnodeData": "{\n \"m_GuidSerialized\": \"94db3a1e-9e82-41df-b4c6-494ef89bd4b2\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Multiply\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": 68.0,\n \"y\": -164.0,\n \"width\": 208.0,\n \"height\": 302.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicValueMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"A\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"A\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"e00\\\": 0.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 0.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 0.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"e00\\\": 1.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 1.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 1.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 1.0\\n }\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicValueMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"B\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"B\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"e00\\\": 2.0,\\n \\\"e01\\\": 2.0,\\n \\\"e02\\\": 2.0,\\n \\\"e03\\\": 2.0,\\n \\\"e10\\\": 2.0,\\n \\\"e11\\\": 2.0,\\n \\\"e12\\\": 2.0,\\n \\\"e13\\\": 2.0,\\n \\\"e20\\\": 2.0,\\n \\\"e21\\\": 2.0,\\n \\\"e22\\\": 2.0,\\n \\\"e23\\\": 2.0,\\n \\\"e30\\\": 2.0,\\n \\\"e31\\\": 2.0,\\n \\\"e32\\\": 2.0,\\n \\\"e33\\\": 2.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"e00\\\": 1.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 1.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 1.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 1.0\\n }\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicValueMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 2,\\n \\\"m_DisplayName\\\": \\\"Out\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"e00\\\": 0.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 0.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 0.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"e00\\\": 1.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 1.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 1.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 1.0\\n }\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n }\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.PBRMasterNode" + }, + "JSONnodeData": "{\n \"m_GuidSerialized\": \"c14054c8-a004-44ef-8e82-df9a9face909\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"PBR Master\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": 777.0,\n \"y\": -123.0,\n \"width\": 200.0,\n \"height\": 317.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.PositionMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 9,\\n \\\"m_DisplayName\\\": \\\"Vertex Position\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Vertex Position\\\",\\n \\\"m_StageCapability\\\": 1,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_Space\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.NormalMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 10,\\n \\\"m_DisplayName\\\": \\\"Vertex Normal\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Vertex Normal\\\",\\n \\\"m_StageCapability\\\": 1,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_Space\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.TangentMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 11,\\n \\\"m_DisplayName\\\": \\\"Vertex Tangent\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Vertex Tangent\\\",\\n \\\"m_StageCapability\\\": 1,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_Space\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.ColorRGBMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"Albedo\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Albedo\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.5,\\n \\\"y\\\": 0.5,\\n \\\"z\\\": 0.5\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_ColorMode\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.NormalMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"Normal\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Normal\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_Space\\\": 3\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.ColorRGBMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 4,\\n \\\"m_DisplayName\\\": \\\"Emission\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Emission\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_ColorMode\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 2,\\n \\\"m_DisplayName\\\": \\\"Metallic\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Metallic\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.0,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 5,\\n \\\"m_DisplayName\\\": \\\"Smoothness\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Smoothness\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.5,\\n \\\"m_DefaultValue\\\": 0.5,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 6,\\n \\\"m_DisplayName\\\": \\\"Occlusion\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Occlusion\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 1.0,\\n \\\"m_DefaultValue\\\": 1.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 7,\\n \\\"m_DisplayName\\\": \\\"Alpha\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Alpha\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 1.0,\\n \\\"m_DefaultValue\\\": 1.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 8,\\n \\\"m_DisplayName\\\": \\\"AlphaClipThreshold\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"AlphaClipThreshold\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.5,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n },\n \"m_DOTSInstancing\": false,\n \"m_SerializableSubShaders\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.Rendering.Universal.UniversalPBRSubShader\"\n },\n \"JSONnodeData\": \"{}\"\n }\n ],\n \"m_ShaderGUIOverride\": \"\",\n \"m_OverrideEnabled\": false,\n \"m_Model\": 1,\n \"m_SurfaceType\": 0,\n \"m_AlphaMode\": 0,\n \"m_TwoSided\": false,\n \"m_NormalDropOffSpace\": 0\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.VertexColorNode" + }, + "JSONnodeData": "{\n \"m_GuidSerialized\": \"e2cbf0c3-a17e-4403-8e2e-77b387bc2256\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Vertex Color\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -329.0000305175781,\n \"y\": 226.00003051757813,\n \"width\": 208.00001525878907,\n \"height\": 278.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector4MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"Out\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 1.0,\\n \\\"y\\\": 1.0,\\n \\\"z\\\": 1.0,\\n \\\"w\\\": 1.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n }\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.ShaderGraph.SampleTexture2DNode" + }, + "JSONnodeData": "{\n \"m_GuidSerialized\": \"e7af99c5-ee04-4d25-8b36-8efe7042c842\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Sample Texture 2D\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -326.0472412109375,\n \"y\": -233.05679321289063,\n \"width\": 208.0,\n \"height\": 431.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector4MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"RGBA\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"RGBA\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 4,\\n \\\"m_DisplayName\\\": \\\"R\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"R\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.0,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 5,\\n \\\"m_DisplayName\\\": \\\"G\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"G\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.0,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 6,\\n \\\"m_DisplayName\\\": \\\"B\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"B\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.0,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 7,\\n \\\"m_DisplayName\\\": \\\"A\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"A\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.0,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Texture2DInputMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"Texture\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Texture\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Texture\\\": {\\n \\\"m_SerializedTexture\\\": \\\"{\\\\\\\"texture\\\\\\\":{\\\\\\\"instanceID\\\\\\\":0}}\\\",\\n \\\"m_Guid\\\": \\\"\\\"\\n },\\n \\\"m_DefaultType\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.UVMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 2,\\n \\\"m_DisplayName\\\": \\\"UV\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"UV\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\"\\n ],\\n \\\"m_Channel\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.SamplerStateMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 3,\\n \\\"m_DisplayName\\\": \\\"Sampler\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Sampler\\\",\\n \\\"m_StageCapability\\\": 3\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n },\n \"m_TextureType\": 0,\n \"m_NormalMapSpace\": 0\n}" + } + ], + "m_Groups": [], + "m_StickyNotes": [], + "m_SerializableEdges": [ + { + "typeInfo": { + "fullName": "UnityEditor.Graphing.Edge" + }, + "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"2e8c3df0-672d-4d2c-8f2c-335cae20d4c0\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 1,\n \"m_NodeGUIDSerialized\": \"e7af99c5-ee04-4d25-8b36-8efe7042c842\"\n }\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.Graphing.Edge" + }, + "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 2,\n \"m_NodeGUIDSerialized\": \"381227c3-e64c-4cff-ab1f-6f3e0235e613\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"c14054c8-a004-44ef-8e82-df9a9face909\"\n }\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.Graphing.Edge" + }, + "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"62d2f243-ec5e-4e28-9c9d-5aec89e69ea2\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 1,\n \"m_NodeGUIDSerialized\": \"381227c3-e64c-4cff-ab1f-6f3e0235e613\"\n }\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.Graphing.Edge" + }, + "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 2,\n \"m_NodeGUIDSerialized\": \"94db3a1e-9e82-41df-b4c6-494ef89bd4b2\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"381227c3-e64c-4cff-ab1f-6f3e0235e613\"\n }\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.Graphing.Edge" + }, + "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"e2cbf0c3-a17e-4403-8e2e-77b387bc2256\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 1,\n \"m_NodeGUIDSerialized\": \"94db3a1e-9e82-41df-b4c6-494ef89bd4b2\"\n }\n}" + }, + { + "typeInfo": { + "fullName": "UnityEditor.Graphing.Edge" + }, + "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"e7af99c5-ee04-4d25-8b36-8efe7042c842\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"94db3a1e-9e82-41df-b4c6-494ef89bd4b2\"\n }\n}" + } + ], + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", + "m_Guid": "" + } + }, + "m_Path": "Shader Graphs", + "m_ConcretePrecision": 0, + "m_ActiveOutputNodeGuidSerialized": "c14054c8-a004-44ef-8e82-df9a9face909" +} \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Shader/Standard Vertex Color.shadergraph.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Shader/Standard Vertex Color.shadergraph.meta new file mode 100644 index 0000000000000000000000000000000000000000..8f504c6059d783eb611288bf1919841456f58d11 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Samples~/UniversalRenderPipeline/Shader/Standard Vertex Color.shadergraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a5e1047f27bee462089b2bc3104f90fd +ScriptedImporter: + fileIDToRecycleName: + 4800000: MainAsset + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Third Party Notices.md b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Third Party Notices.md new file mode 100644 index 0000000000000000000000000000000000000000..f3a090ccab2222fb52c1b13ba4c986c24d65b32c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Third Party Notices.md @@ -0,0 +1,143 @@ +# Third-party code & licenses + +Third-party code and licenses used in ProBuilder. + +Where applicable links to ports & forks are also listed (original project +is always listed first). + +--- + +## Poly2Tri + +- https://github.com/greenm01/poly2tri +- https://github.com/MaulingMonkey/poly2tri-cs +- https://github.com/procore3d/poly2tri-cs + +Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors +http://code.google.com/p/poly2tri/ + +All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of Poly2Tri nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--- + +## csg.js + +- https://github.com/evanw/csg.js +- https://github.com/karl-/pb_CSG + +Copyright (c) 2011 Evan Wallace (http://madebyevan.com/) + +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. + +--- + +## KdTree + +- https://github.com/codeandcats/KdTree +- https://github.com/procore3d/KdTree + +The MIT License (MIT) + +Copyright (c) 2013 codeandcats + +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. + +--- + +## pb_Stl + +- https://github.com/karl-/pb_Stl + +The MIT License (MIT) + +Copyright (c) 2016 Karl Henkel + +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. + +--- + +## Unity Utilities + +- https://github.com/CapnRat/Unity-Utilities + +The MIT License (MIT) + +Copyright (c) 2016 Shawn White + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Third Party Notices.md.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Third Party Notices.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..7f21992a930db78a1e4fe42ee038a7b14b8916e9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/Third Party Notices.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 33f5a25dc64aa574bb28dbfea014849e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/package.json b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/package.json new file mode 100644 index 0000000000000000000000000000000000000000..e9d3edf7a13ecc7351c195a40cc28ea7e6d4af25 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/package.json @@ -0,0 +1,65 @@ +{ + "name": "com.unity.probuilder", + "displayName": "ProBuilder", + "version": "4.5.2", + "unity": "2018.4", + "description": "Build, edit, and texture custom geometry in Unity. Use ProBuilder for in-scene level design, prototyping, collision meshes, all with on-the-fly play-testing.\n\nAdvanced features include UV editing, vertex colors, parametric shapes, and texture blending. With ProBuilder's model export feature it's easy to tweak your levels in any external 3D modelling suite.", + "keywords": [ + "3d", + "model", + "mesh", + "modeling", + "geometry", + "shape", + "cube", + "blender", + "max", + "maya", + "fbx", + "obj", + "level", + "design", + "block", + "greybox", + "graybox", + "whitebox", + "prototype", + "probuilder" + ], + "samples": [ + { + "displayName": "Universal Render Pipeline Support", + "description": "Shaders and materials for the Light Weight Render Pipeline.", + "path": "Samples~/UniversalRenderPipeline" + }, + { + "displayName": "High Definition Render Pipeline Support", + "description": "Shaders and materials for the High Definition Render Pipeline.", + "path": "Samples~/HDRP" + }, + { + "displayName": "Editor Examples", + "description": "Scripts demonstrating how to integrate new functionality into the ProBuilder editor window.", + "path": "Samples~/Editor" + }, + { + "displayName": "Runtime Examples", + "description": "Scripts showing how to create and modify meshes at runtime.", + "path": "Samples~/Runtime" + } + ], + "dependencies": { + "com.unity.settings-manager": "1.0.3" + }, + "repository": { + "url": "https://github.com/Unity-Technologies/com.unity.probuilder.git", + "type": "git", + "revision": "27f52072e5f94638d1f81bc53df38e59d5bac785" + }, + "relatedPackages": { + "com.unity.probuilder.tests": "4.5.2" + }, + "upmCi": { + "footprint": "b2d9ef5fa00059af2a439f0742c83246d2f6cd81" + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/package.json.meta b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/package.json.meta new file mode 100644 index 0000000000000000000000000000000000000000..009f3ead2aa7b2c46f564de94d50e69882209bd3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.probuilder@4.5.2/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7958ca6fdf895ca498c5fab155f0b0f1 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/CHANGELOG.md b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..af7805d82b31b7792fb888a08e69a0a615b4bc6a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/CHANGELOG.md @@ -0,0 +1,76 @@ +# Changelog + +All notable changes to this package will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [1.0.3] - 2020-06-21 + +### Bug Fixes + +- Fixed `PackageSettingsRepository` dirtying the settings file when no changes are present. + +## [1.0.2] - 2020-02-26 + +### Bug Fixes + +- Fixed obsolete API use in Unity 2019.3. + +### Changes + +- Update Yamato configuration. + +## [1.0.1] - 2019-11-25 + +### Changes + +- Make sure version control integration grants write access before trying to save package settings. + +### Bug Fixes + +- Fixed samples not compiling with Unity 2019.3. +- Fix package settings repo potentially initializing with a null dictionary. + +## [1.0.0] - 2019-04-03 + +### Bug Fixes + +- Fixed compile errors on Unity 2018.4. + +## [0.1.0-preview.8] - 2019-03-29 + +### Features + +- Support saving multiple settings repositories within a project + +### Changes + +- Rename `ProjectSettingsRepository` -> `PackageSettingsRepository`. +- Update readme with a complete code example. +- Add additional documentation and unit tests. +- Setting repositories now have names. + +### Bug Fixes + +- Fixed missing gear icon in Settings Provider implementation. + +## [0.1.0-preview.4] - 2019-02-28 + +- Package configuration update. + +## [0.1.0-preview.3] - 2019-02-27 + +- Small code update in sample. + +## [0.1.0-preview.2] - 2019-02-22 + +- Rebuild meta files. + +## [0.1.0-preview.1] - 2019-02-01 + +- Move samples outside of main package. + +## [0.1.0-preview.0] - 2018-10-08 + +This is the first release of *Unity Package Settings Manager*. \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/CHANGELOG.md.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/CHANGELOG.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..d9ff9ba1024c1c22db8f89a88986d9bf0f8fa6a1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4774b2f29b63d2844915d86afff02b47 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/CONTRIBUTING.md b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/CONTRIBUTING.md new file mode 100644 index 0000000000000000000000000000000000000000..b94414768b1950081afbf164340894f712335469 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/CONTRIBUTING.md @@ -0,0 +1,7 @@ +# Contributing + +All contributions are subject to the [Unity Contribution Agreement(UCA)](https://unity3d.com/legal/licenses/Unity_Contribution_Agreement) + +By making a pull request, you are confirming agreement to the terms and conditions of the UCA, including that your Contributions are your original creation and that you have complete right and authority to make your Contributions. + +Once you have a change ready, simply make a pull request. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/CONTRIBUTING.md.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/CONTRIBUTING.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..de3721ce1faa208a045776069a575bb34f2ebe91 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/CONTRIBUTING.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6c3f34c4492b9ee468af6d2d1b724102 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Content.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Content.meta new file mode 100644 index 0000000000000000000000000000000000000000..cc0508da9bbb1b317f564cd61026c1864ec9f7eb --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Content.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3d9bd4cbe22e8472781b1cde707d154d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Content/Options.png b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Content/Options.png new file mode 100644 index 0000000000000000000000000000000000000000..e8a6ea968c8c1fff074fea9fa3dc6d540b7e9c6d Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Content/Options.png differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Content/Options.png.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Content/Options.png.meta new file mode 100644 index 0000000000000000000000000000000000000000..9b6200861e24f407c154d5872dd802a6fc7bb022 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Content/Options.png.meta @@ -0,0 +1,115 @@ +fileFormatVersion: 2 +guid: 9eff477e4332346818c96745043dae9e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 9 + 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: 0 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + 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 + - serializedVersion: 3 + buildTarget: iPhone + 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: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Documentation~/images/settings.gif b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Documentation~/images/settings.gif new file mode 100644 index 0000000000000000000000000000000000000000..dcc6f18d432bfe24271a8339870b91df8728b42c Binary files /dev/null and b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Documentation~/images/settings.gif differ diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Documentation~/settings-manager.md b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Documentation~/settings-manager.md new file mode 100644 index 0000000000000000000000000000000000000000..eeb310de89d14efb71331c78033587f84424d994 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Documentation~/settings-manager.md @@ -0,0 +1,87 @@ +# Settings Manager + +A framework for making any serializable field a setting, complete with a pre-built settings interface. + +## Quick Start + +Settings are stored and managed by a `Settings` instance. This class is responsible for setting and retrieving serialized values from the appropriate repository. + +Settings repositories are used to save and load settingsfor a settings scope. Two are provided with this package: one for saving User preferences (`UserSettingsRepository`, backed by the `EditorPrefs` class) and one for Project settings (`ProjecSettingsRepository`, which saves a JSON file to the `ProjectSettings` directory). + +Usually you will want to create and manage a singleton `Settings` instance. Ex: + +``` +using UnityEditor.SettingsManagement; + +namespace UnityEditor.SettingsManagement.Examples +{ + static class MySettingsManager + { + internal const string k_PackageName = "com.unity.my-settings-example"; + + static Settings s_Instance; + + internal static Settings instance + { + get + { + if (s_Instance == null) + s_Instance = new Settings(k_PackageName); + + return s_Instance; + } + } + } +} +``` + +Values are set and retrieved using generic methods on on your `Settings` instance: + +``` +MySettingsManager.instance.Get<float>("myFloatValue", SettingsScope.Project); +``` + +There are two arguments: key, and scope. The `Settings` class will handle finding an appropriate `ISettingsRepository` for the scope, while `key` and `T` are used to find the value. Setting keys are unique among types, meaning you may re-use keys as long as the setting type is different. + +Alternatively, you can use the `UserSetting<T>` class to manage settings. This is a wrapper class around the `Settings` get/set properties, and makes it very easy to make any field a saved setting. + +``` +// UserSetting<T>(Settings instance, string key, T defaultValue, SettingsScope scope = SettingsScope.Project) +Setting<int> myIntValue = new Setting<int>(MySettingsManager.instance, "int.key", 42, SettingsScope.User); +``` + +`UserSetting<T>` caches the current value, and keeps a copy of the default value so that it may be reset. `UserSetting<T>` fields are also eligible for use with the `[UserSettingAttribute]` attribute, which lets the `SettingsManagerProvider` automatically add it to a settings inspector. + +## Settings Provider + +To register your settings in the `Settings Window` you can either write your own `SettingsProvider` implementation, or use the provided `SettingsManagerProvider` and let it automatically create your interface. + +Making use of `SettingsManagerProvider` comes with many benefits, including a uniform look for your settings UI, support for search, and per-field or mass reset support. + +``` +using UnityEngine; + +namespace UnityEditor.SettingsManagement.Examples +{ + static class MySettingsProvider + { + const string k_PreferencesPath = "Preferences/My Settings"; + + [SettingsProvider] + static SettingsProvider CreateSettingsProvider() + { + // The last parameter tells the provider where to search for settings. + var provider = new SettingsManagerProvider(k_PreferencesPath, + MySettingsManager.instance, + new [] { typeof(MySettingsProvider).Assembly }); + + return provider; + } + } +} +``` + +To register a field with the `SettingsManagerProvider`, simply decorate it with `[UserSettingAttribute(string displayCategory, string key)]`. `[UserSettingAttribute]` is only valid for static fields. + +For more complex settings that require additional UI (or simply don't have a built-in editor), you can use `UserSettingBlockAttribute`. This provides access to the settings provider GUI. See `SettingsExamples.cs` for more on this. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor.meta new file mode 100644 index 0000000000000000000000000000000000000000..9fc8e21c6f179be048f4914333ee8572688d4528 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c2910bfb37c064309a7230f4175d6c3a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Attributes.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Attributes.cs new file mode 100644 index 0000000000000000000000000000000000000000..fe7556c666df745615bf36cb1ad2a228b17e2913 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Attributes.cs @@ -0,0 +1,134 @@ +using System; +using UnityEngine; + +namespace UnityEditor.SettingsManagement +{ + /// <summary> + /// Register a static field of type IUserSetting with the UserSettingsProvider window. + /// </summary> + [AttributeUsage(AttributeTargets.Field)] + public sealed class UserSettingAttribute : Attribute + { + string m_Category; + GUIContent m_Title; + bool m_VisibleInSettingsProvider; + + /// <summary> + /// Settings that are automatically scraped from assemblies are displayed in groups, organized by category. + /// </summary> + /// <value> + /// The title of the group of settings that this setting will be shown under. + /// </value> + public string category + { + get { return m_Category; } + } + + /// <value> + /// The label to show for this setting. + /// </value> + public GUIContent title + { + get { return m_Title; } + } + + /// <value> + /// True if this field should be shown in the UserSettingsProvider interface, false if not. + /// </value> + public bool visibleInSettingsProvider + { + get { return m_VisibleInSettingsProvider; } + } + + /// <summary> + /// Register a static field as a setting. Field must be of a type implementing IUserSetting. + /// </summary> + public UserSettingAttribute() + { + m_VisibleInSettingsProvider = false; + } + + /// <summary> + /// Register a static field as a setting and create an entry in the UI. Field must be of a type implementing IUserSetting. + /// </summary> + public UserSettingAttribute(string category, string title, string tooltip = null) + { + m_Category = category; + m_Title = new GUIContent(title, tooltip); + m_VisibleInSettingsProvider = true; + } + } + + /// <summary> + /// Register a field with Settings, but do not automatically create a property field in the SettingsProvider. + /// Unlike UserSettingAttribute, this attribute is valid for instance properties as well as static. These values + /// will not be shown in the SettingsProvider, but will have their stored values cleared when "Reset All" is invoked. + /// </summary> + [AttributeUsage(AttributeTargets.Field)] + public sealed class SettingsKeyAttribute : Attribute + { + string m_Key; + SettingsScope m_Scope; + + /// <value> + /// The key for this value. + /// </value> + public string key + { + get { return m_Key; } + } + + /// <value> + /// Where this setting is serialized. + /// </value> + public SettingsScope scope + { + get { return m_Scope; } + } + + /// <summary> + /// Register a field as a setting. This allows the UserSettingsProvider to reset it's value and display it's + /// value in debugging modes. + /// </summary> + /// <param name="key">The setting key.</param> + /// <param name="scope">The scope in which this setting is serialized.</param> + public SettingsKeyAttribute(string key, SettingsScope scope = SettingsScope.Project) + { + m_Key = key; + m_Scope = scope; + } + } + + /// <summary> + /// UserSettingBlock allows you add a section of settings to a category. + /// </summary> + [AttributeUsage(AttributeTargets.Method)] + public sealed class UserSettingBlockAttribute : Attribute + { + string m_Category; + + /// <summary> + /// Settings that are automatically scraped from assemblies are displayed in groups, organized by category. + /// </summary> + /// <value> + /// The title of the group of settings that this setting will be shown under. + /// </value> + public string category + { + get { return m_Category; } + } + + /// <summary> + /// Register a static method for a callback in the UserSettingsProvider editor under a category. + /// <code> + /// [UserSettingBlock("General")] + /// static void GeneralSettings(string[] searchContext) {} + /// </code> + /// </summary> + /// <param name="category">The title of the group of settings that this setting will be shown under.</param> + public UserSettingBlockAttribute(string category) + { + m_Category = category; + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Attributes.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Attributes.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..802da026d4fc6faec6beb227e60f06afe00528c9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Attributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ea67431821494cfca380c0e07258751 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/ISettingsRepository.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/ISettingsRepository.cs new file mode 100644 index 0000000000000000000000000000000000000000..b7f75f0ef959692cbaa62c41a24a8dc1b784a8df --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/ISettingsRepository.cs @@ -0,0 +1,59 @@ +namespace UnityEditor.SettingsManagement +{ + /// <summary> + /// A settings repository is responsible for implementing the saving and loading of values. + /// </summary> + public interface ISettingsRepository + { + /// <value> + /// What SettingsScope this repository applies to. + /// </value> + SettingsScope scope { get; } + + /// <summary> + /// A name to identify this repository. + /// </summary> + string name { get; } + + /// <value> + /// File path to the serialized settings data. + /// </value> + string path { get; } + + /// <summary> + /// Save all settings to their serialized state. + /// </summary> + void Save(); + + /// <summary> + /// Set a value for key of type T. + /// </summary> + /// <param name="key">The settings key.</param> + /// <param name="value">The value to set. Must be serializable.</param> + /// <typeparam name="T">Type of value.</typeparam> + void Set<T>(string key, T value); + + /// <summary> + /// Get a value with key of type T, or return the fallback value if no matching key is found. + /// </summary> + /// <param name="key">The settings key.</param> + /// <param name="fallback">If no key with a value of type T is found, this value is returned.</param> + /// <typeparam name="T">Type of value to search for.</typeparam> + T Get<T>(string key, T fallback = default(T)); + + /// <summary> + /// Does the repository contain a setting with key and type. + /// </summary> + /// <param name="key">The settings key.</param> + /// <typeparam name="T">The type of value to search for.</typeparam> + /// <returns>True if a setting matching both key and type is found, false if no entry is found.</returns> + bool ContainsKey<T>(string key); + + /// <summary> + /// Remove a key value pair from the settings repository. + /// </summary> + /// <param name="key"></param> + /// <typeparam name="T"></typeparam> + void Remove<T>(string key); + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/ISettingsRepository.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/ISettingsRepository.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..d53a3b1977e2096e68f0176e829670b2fb108d41 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/ISettingsRepository.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8707cf6fb25b1438b9a0f476f93a76fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/PackageSettingsRepository.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/PackageSettingsRepository.cs new file mode 100644 index 0000000000000000000000000000000000000000..e7db4b731628821096337f8e1931342071ed38e4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/PackageSettingsRepository.cs @@ -0,0 +1,205 @@ +using System; +using System.IO; +using UnityEngine; + +namespace UnityEditor.SettingsManagement +{ + /// <inheritdoc /> + /// <summary> + /// A settings repository that stores data local to a Unity project. + /// </summary> + [Serializable] + public sealed class PackageSettingsRepository : ISettingsRepository + { + const string k_PackageSettingsDirectory = "ProjectSettings/Packages"; + const bool k_PrettyPrintJson = true; + + bool m_Initialized; + + [SerializeField] + string m_Name; + + [SerializeField] + string m_Path; + + [SerializeField] + SettingsDictionary m_Dictionary = new SettingsDictionary(); + + string m_cachedJson; + + /// <summary> + /// Constructor sets the serialized data path. + /// </summary> + /// <param name="package"> + /// The package name. + /// </param> + /// <param name="name"> + /// A name for this settings file. Settings are saved in `ProjectSettings/Packages/{package}/{name}.json`. + /// </param> + public PackageSettingsRepository(string package, string name) + { + m_Name = name; + m_Path = GetSettingsPath(package, name); + m_Initialized = false; + + AssemblyReloadEvents.beforeAssemblyReload += Save; + EditorApplication.quitting += Save; + } + + void Init() + { + if (m_Initialized) + return; + + m_Initialized = true; + + if (File.Exists(path)) + { + m_Dictionary = null; + m_cachedJson = File.ReadAllText(path); + EditorJsonUtility.FromJsonOverwrite(m_cachedJson, this); + if (m_Dictionary == null) + m_Dictionary = new SettingsDictionary(); + } + } + + /// <value> + /// This repository implementation is relevant to the Project scope. + /// </value> + /// <inheritdoc cref="ISettingsRepository.scope"/> + public SettingsScope scope + { + get { return SettingsScope.Project; } + } + + /// <value> + /// The full path to the settings file. + /// This corresponds to `Unity Project/Project Settings/Packages/com.unity.package/name`. + /// </value> + /// <inheritdoc cref="ISettingsRepository.path"/> + public string path + { + get { return m_Path; } + } + + /// <summary> + /// The name of this settings file. + /// </summary> + public string name + { + get { return m_Name; } + } + + // Cannot call FindFromAssembly from a constructor or field initializer +// static string CreateSettingsPath(Assembly assembly, string name) +// { +// var info = PackageManager.PackageInfo.FindForAssembly(assembly); +// return string.Format("{0}/{1}/{2}.json", k_PackageSettingsDirectory, info.name, name); +// } + + /// <summary> + /// Get a path for a settings file relative to the calling assembly package directory. + /// </summary> + /// <param name="packageName">The name of the package requesting this setting.</param> + /// <param name="name">An optional name for the settings file. Default is "Settings."</param> + /// <returns>A package-scoped path to the settings file within Project Settings.</returns> + public static string GetSettingsPath(string packageName, string name = "Settings") + { + return string.Format("{0}/{1}/{2}.json", k_PackageSettingsDirectory, packageName, name); + } + + /// <summary> + /// Save all settings to their serialized state. + /// </summary> + /// <inheritdoc cref="ISettingsRepository.Save"/> + + public void Save() + { + Init(); + + if (!File.Exists(path)) + { + var directory = Path.GetDirectoryName(path); + Directory.CreateDirectory(directory); + } + + string newSettingsJson = EditorJsonUtility.ToJson(this, k_PrettyPrintJson); + bool areJsonsEqual = newSettingsJson == m_cachedJson; + +#if UNITY_2019_3_OR_NEWER + if (!AssetDatabase.IsOpenForEdit(path) && areJsonsEqual == false) + { + if (!AssetDatabase.MakeEditable(path)) + { + Debug.LogWarning($"Could not save package settings to {path}"); + return; + } + } +#endif + + try + { + if (!areJsonsEqual) + { + File.WriteAllText(path, newSettingsJson); + m_cachedJson = newSettingsJson; + } + } + catch (UnauthorizedAccessException) + { + Debug.LogWarning($"Could not save package settings to {path}"); + } + } + + /// <summary> + /// Set a value for key of type T. + /// </summary> + /// <param name="key">The settings key.</param> + /// <param name="value">The value to set. Must be serializable.</param> + /// <typeparam name="T">Type of value.</typeparam> + /// <inheritdoc cref="ISettingsRepository.Set{T}"/> + public void Set<T>(string key, T value) + { + Init(); + m_Dictionary.Set<T>(key, value); + } + + /// <summary> + /// Get a value with key of type T, or return the fallback value if no matching key is found. + /// </summary> + /// <param name="key">The settings key.</param> + /// <param name="fallback">If no key with a value of type T is found, this value is returned.</param> + /// <typeparam name="T">Type of value to search for.</typeparam> + /// <inheritdoc cref="ISettingsRepository.Get{T}"/> + public T Get<T>(string key, T fallback = default(T)) + { + Init(); + return m_Dictionary.Get<T>(key, fallback); + } + + /// <summary> + /// Does the repository contain a setting with key and type. + /// </summary> + /// <param name="key">The settings key.</param> + /// <typeparam name="T">The type of value to search for.</typeparam> + /// <returns>True if a setting matching both key and type is found, false if no entry is found.</returns> + /// <inheritdoc cref="ISettingsRepository.ContainsKey{T}"/> + public bool ContainsKey<T>(string key) + { + Init(); + return m_Dictionary.ContainsKey<T>(key); + } + + /// <summary> + /// Remove a key value pair from the settings repository. + /// </summary> + /// <param name="key"></param> + /// <typeparam name="T"></typeparam> + /// <inheritdoc cref="ISettingsRepository.Remove{T}"/> + public void Remove<T>(string key) + { + Init(); + m_Dictionary.Remove<T>(key); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/PackageSettingsRepository.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/PackageSettingsRepository.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..f0044f258ce60ee53045826e7a19c6ed322df81e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/PackageSettingsRepository.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8e2e054ed623847d29efb1262605e8ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Settings.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Settings.cs new file mode 100644 index 0000000000000000000000000000000000000000..b672ad4adc5cf1d480d2018d47f8e8bbcee0d860 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Settings.cs @@ -0,0 +1,273 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace UnityEditor.SettingsManagement +{ + /// <summary> + /// Settings manages a collection of <see cref="ISettingsRepository"/>. + /// </summary> + public sealed class Settings + { + ISettingsRepository[] m_SettingsRepositories; + + /// <value> + /// An event that is raised prior to an `ISettingsRepository` serializing it's current state. + /// </value> + public event Action beforeSettingsSaved; + + /// <value> + /// An event that is raised after an `ISettingsRepository` has serialized it's current state. + /// </value> + public event Action afterSettingsSaved; + + Settings() + { + } + + /// <summary> + /// Create a new Settings instance with a <see cref="UserSettingsRepository"/> and <see cref="PackageSettingsRepository"/>. + /// </summary> + /// <param name="package">The package name. Ex, `com.unity.my-package`.</param> + /// <param name="settingsFileName">The name of the settings file. Defaults to "Settings."</param> + public Settings(string package, string settingsFileName = "Settings") + { + m_SettingsRepositories = new ISettingsRepository[] + { + new PackageSettingsRepository(package, settingsFileName), + new UserSettingsRepository() + }; + } + + /// <summary> + /// Create a new Settings instance with a collection of <see cref="ISettingsRepository"/>. + /// </summary> + public Settings(IEnumerable<ISettingsRepository> repositories) + { + m_SettingsRepositories = repositories.ToArray(); + } + + /// <summary> + /// Find a settings repository that matches the requested scope. + /// </summary> + /// <param name="scope">The scope of the settings repository to match.</param> + /// <returns> + /// An ISettingsRepository instance that is implementing the requested scope. May return null if no + /// matching repository is found. + /// </returns> + public ISettingsRepository GetRepository(SettingsScope scope) + { + foreach (var repo in m_SettingsRepositories) + if (repo.scope == scope) + return repo; + return null; + } + + /// <summary> + /// Find a settings repository that matches the requested scope and name. + /// </summary> + /// <param name="scope">The scope of the settings repository to match.</param> + /// <param name="name">The name of the <see cref="ISettingsRepository"/> to match.</param> + /// <returns> + /// An <see cref="ISettingsRepository"/> instance that is implementing the requested scope, and matches name. + /// May return null if no matching repository is found. + /// </returns> + public ISettingsRepository GetRepository(SettingsScope scope, string name) + { + foreach (var repo in m_SettingsRepositories) + if (repo.scope == scope && string.Equals(repo.name, name)) + return repo; + return null; + } + + /// <summary> + /// Serialize the state of all settings repositories. + /// </summary> + public void Save() + { + if (beforeSettingsSaved != null) + beforeSettingsSaved(); + + foreach (var repo in m_SettingsRepositories) + repo.Save(); + + if (afterSettingsSaved != null) + afterSettingsSaved(); + } + + /// <summary> + /// Set a value for key of type T. + /// </summary> + /// <param name="key">The settings key.</param> + /// <param name="value">The value to set. Must be serializable.</param> + /// <param name="scope">Which scope this settings should be saved in.</param> + /// <typeparam name="T">Type of value.</typeparam> + public void Set<T>(string key, T value, SettingsScope scope = SettingsScope.Project) + { + bool foundScopeRepository = false; + + foreach (var repo in m_SettingsRepositories) + { + if (repo.scope == scope) + { + repo.Set<T>(key, value); + foundScopeRepository = true; + } + } + + if (!foundScopeRepository) + Debug.LogWarning("No repository for scope " + scope + " found!"); + } + + /// <summary> + /// Set a value for key of type T. + /// </summary> + /// <param name="key">The settings key.</param> + /// <param name="value">The value to set. Must be serializable.</param> + /// <param name="repositoryName">The repository name to match.</param> + /// <param name="scope">Which scope this settings should be saved in.</param> + /// <typeparam name="T">Type of value.</typeparam> + public void Set<T>(string key, T value, string repositoryName, SettingsScope scope = SettingsScope.Project) + { + bool foundScopeRepository = false; + + foreach (var repo in m_SettingsRepositories) + { + if (repo.scope == scope && string.Equals(repo.name, repositoryName)) + { + repo.Set<T>(key, value); + foundScopeRepository = true; + } + } + + if (!foundScopeRepository) + Debug.LogWarning("No repository matching name \"" + repositoryName + "\" and scope " + scope + " found in settings."); + } + + /// <summary> + /// Get a value with key of type T, or return the fallback value if no matching key is found. + /// </summary> + /// <param name="key">The settings key.</param> + /// <param name="scope">Which scope this settings should be retrieved from.</param> + /// <param name="fallback">If no key with a value of type T is found, this value is returned.</param> + /// <typeparam name="T">Type of value to search for.</typeparam> + public T Get<T>(string key, SettingsScope scope = SettingsScope.Project, T fallback = default(T)) + { + foreach (var repo in m_SettingsRepositories) + { + if (repo.scope == scope) + return repo.Get<T>(key, fallback); + } + + Debug.LogWarning("No repository for scope " + scope + " found!"); + return fallback; + } + + /// <summary> + /// Get a value with key of type T, or return the fallback value if no matching key is found. + /// </summary> + /// <param name="key">The settings key.</param> + /// <param name="repositoryName">The repository name to match.</param> + /// <param name="scope">Which scope this settings should be retrieved from.</param> + /// <param name="fallback">If no key with a value of type T is found, this value is returned.</param> + /// <typeparam name="T">Type of value to search for.</typeparam> + public T Get<T>(string key, string repositoryName, SettingsScope scope = SettingsScope.Project, T fallback = default(T)) + { + foreach (var repo in m_SettingsRepositories) + { + if (repo.scope == scope && string.Equals(repo.name, repositoryName)) + return repo.Get<T>(key, fallback); + } + + Debug.LogWarning("No repository matching name \"" + repositoryName + "\" and scope " + scope + " found in settings."); + return fallback; + } + + /// <summary> + /// Does the repository contain a setting with key and type. + /// </summary> + /// <param name="key">The settings key.</param> + /// <typeparam name="T">The type of value to search for.</typeparam> + /// <param name="scope">Which scope should be searched for matching key.</param> + /// <returns>True if a setting matching both key and type is found, false if no entry is found.</returns> + public bool ContainsKey<T>(string key, SettingsScope scope = SettingsScope.Project) + { + foreach (var repo in m_SettingsRepositories) + { + if (repo.scope == scope) + return repo.ContainsKey<T>(key); + } + + Debug.LogWarning("No repository for scope " + scope + " found!"); + return false; + } + + /// <summary> + /// Does the repository contain a setting with key and type. + /// </summary> + /// <param name="key">The settings key.</param> + /// <param name="repositoryName">The repository name to match.</param> + /// <typeparam name="T">The type of value to search for.</typeparam> + /// <param name="scope">Which scope should be searched for matching key.</param> + /// <returns>True if a setting matching both key and type is found, false if no entry is found.</returns> + public bool ContainsKey<T>(string key, string repositoryName, SettingsScope scope = SettingsScope.Project) + { + foreach (var repo in m_SettingsRepositories) + { + if (repo.scope == scope && string.Equals(repo.name, repositoryName)) + return repo.ContainsKey<T>(key); + } + + Debug.LogWarning("No repository matching name \"" + repositoryName + "\" and scope " + scope + " found in settings."); + return false; + } + + /// <summary> + /// Remove a key value pair from a settings repository. + /// </summary> + /// <param name="key">The key to remove.</param> + /// <param name="scope">Which scope should be searched for matching key.</param> + /// <typeparam name="T">The type that this key is pointing to.</typeparam> + public void DeleteKey<T>(string key, SettingsScope scope = SettingsScope.Project) + { + bool foundScopeRepository = false; + + foreach (var repo in m_SettingsRepositories) + { + if (repo.scope == scope) + { + foundScopeRepository = true; + repo.Remove<T>(key); + } + } + + if (!foundScopeRepository) + Debug.LogWarning("No repository for scope " + scope + " found!"); + } + + /// <summary> + /// Remove a key value pair from a settings repository. + /// </summary> + /// <param name="key">The key to remove.</param> + /// <param name="repositoryName">The repository name to match.</param> + /// <param name="scope">Which scope should be searched for matching key.</param> + /// <typeparam name="T">The type that this key is pointing to.</typeparam> + public void DeleteKey<T>(string key, string repositoryName, SettingsScope scope = SettingsScope.Project) + { + bool foundScopeRepository = false; + + foreach (var repo in m_SettingsRepositories) + { + if (repo.scope == scope && string.Equals(repo.name, repositoryName)) + { + foundScopeRepository = true; + repo.Remove<T>(key); + } + } + + if (!foundScopeRepository) + Debug.LogWarning("No repository matching name \"" + repositoryName + "\" and scope " + scope + " found in settings."); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Settings.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Settings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e38fffa8c850453cea79dbbda0411ed0df605652 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Settings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d3c815396f3a64c2d925a2100e08e093 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/SettingsDictionary.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/SettingsDictionary.cs new file mode 100644 index 0000000000000000000000000000000000000000..c6a5f446387977831f6751aed0c692aa9e89d079 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/SettingsDictionary.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace UnityEditor.SettingsManagement +{ + [Serializable] + sealed class SettingsDictionary : ISerializationCallbackReceiver + { + [Serializable] + struct SettingsKeyValuePair + { + public string type; + public string key; + public string value; + } + +#pragma warning disable 0649 + [SerializeField] + List<SettingsKeyValuePair> m_DictionaryValues = new List<SettingsKeyValuePair>(); +#pragma warning restore 0649 + + internal Dictionary<Type, Dictionary<string, string>> dictionary = new Dictionary<Type, Dictionary<string, string>>(); + + public bool ContainsKey<T>(string key) + { + return dictionary.ContainsKey(typeof(T)) && dictionary[typeof(T)].ContainsKey(key); + } + + public void Set<T>(string key, T value) + { + if (string.IsNullOrEmpty(key)) + throw new ArgumentNullException("key"); + + var type = typeof(T).AssemblyQualifiedName; + + SetJson(type, key, ValueWrapper<T>.Serialize(value)); + } + + internal void SetJson(string type, string key, string value) + { + var typeValue = Type.GetType(type); + + if (typeValue == null) + throw new ArgumentException("\"type\" must be an assembly qualified type name."); + + Dictionary<string, string> entries; + + if (!dictionary.TryGetValue(typeValue, out entries)) + dictionary.Add(typeValue, entries = new Dictionary<string, string>()); + + if (entries.ContainsKey(key)) + entries[key] = value; + else + entries.Add(key, value); + } + + public T Get<T>(string key, T fallback = default(T)) + { + if (string.IsNullOrEmpty(key)) + throw new ArgumentNullException("key"); + + Dictionary<string, string> entries; + + if (dictionary.TryGetValue(typeof(T), out entries) && entries.ContainsKey(key)) + { + try + { + return ValueWrapper<T>.Deserialize(entries[key]); + } + catch + { + return fallback; + } + } + + return fallback; + } + + public void Remove<T>(string key) + { + Dictionary<string, string> entries; + + if (!dictionary.TryGetValue(typeof(T), out entries) || !entries.ContainsKey(key)) + return; + + entries.Remove(key); + } + + public void OnBeforeSerialize() + { + if (m_DictionaryValues == null) + return; + + m_DictionaryValues.Clear(); + + foreach (var type in dictionary) + { + foreach (var entry in type.Value) + { + m_DictionaryValues.Add(new SettingsKeyValuePair() + { + type = type.Key.AssemblyQualifiedName, + key = entry.Key, + value = entry.Value + }); + } + } + } + + public void OnAfterDeserialize() + { + dictionary.Clear(); + + foreach (var entry in m_DictionaryValues) + { + Dictionary<string, string> entries; + + var type = Type.GetType(entry.type); + + if (type == null) + { + Debug.LogWarning("Could not instantiate type \"" + entry.type + "\". Skipping key: " + entry.key + "."); + continue; + } + + if (dictionary.TryGetValue(type, out entries)) + entries.Add(entry.key, entry.value); + else + dictionary.Add(type, new Dictionary<string, string>() { { entry.key, entry.value } }); + } + } + + public override string ToString() + { + var sb = new System.Text.StringBuilder(); + + foreach (var type in dictionary) + { + sb.AppendLine("Type: " + type.Key); + + foreach (var entry in type.Value) + { + sb.AppendLine(string.Format(" {0,-64}{1}", entry.Key, entry.Value)); + } + } + + return sb.ToString(); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/SettingsDictionary.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/SettingsDictionary.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..582827c7f45989a2152d720b2c162113ee939eb3 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/SettingsDictionary.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67c0fca06520e4f78923163f9541ba6c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/SettingsGUILayout.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/SettingsGUILayout.cs new file mode 100644 index 0000000000000000000000000000000000000000..81c3e6531f6904eb84ef0f9fcad503bc7105fddc --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/SettingsGUILayout.cs @@ -0,0 +1,587 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace UnityEditor.SettingsManagement +{ + static class SettingsGUIStyles + { + const string k_SettingsGearIcon = "Packages/" + UserSettings.packageName + "/Content/Options.png"; + + static bool s_Initialized; + public static GUIStyle s_SettingsGizmo; + public static GUIStyle s_SettingsArea; + public static GUIStyle s_IndentedSettingBlock; + + static void Init() + { + if (s_Initialized) + return; + + s_Initialized = true; + + s_SettingsGizmo = new GUIStyle() + { + normal = new GUIStyleState() + { + background = AssetDatabase.LoadAssetAtPath<Texture2D>(k_SettingsGearIcon) + }, + fixedWidth = 14, + fixedHeight = 14, + padding = new RectOffset(0, 0, 0, 0), + margin = new RectOffset(4, 4, 4, 4), + imagePosition = ImagePosition.ImageOnly + }; + + s_SettingsArea = new GUIStyle() + { + margin = new RectOffset(6, 6, 0, 0) + }; + + s_IndentedSettingBlock = new GUIStyle() + { + padding = new RectOffset(16, 0, 0, 0) + }; + } + + public static GUIStyle settingsGizmo + { + get + { + Init(); + return s_SettingsGizmo; + } + } + + public static GUIStyle settingsArea + { + get + { + Init(); + return s_SettingsArea; + } + } + + public static GUIStyle indentedSettingBlock + { + get + { + Init(); + return s_IndentedSettingBlock; + } + } + } + + /// <summary> + /// Extension methods for GUILayout that also implement settings-specific functionality. + /// </summary> + public static class SettingsGUILayout + { + /// <inheritdoc /> + /// <summary> + /// Create an indented GUI section. + /// </summary> + public class IndentedGroup : IDisposable + { + bool m_IsDisposed; + + /// <summary> + /// Create an indented GUI section. + /// </summary> + public IndentedGroup() + { + EditorGUIUtility.labelWidth -= SettingsGUIStyles.indentedSettingBlock.padding.left - 4; + GUILayout.BeginVertical(SettingsGUIStyles.indentedSettingBlock); + } + + /// <summary> + /// Create an indented GUI section with a header. + /// </summary> + public IndentedGroup(string label) + { + GUILayout.Label(label); + EditorGUIUtility.labelWidth -= SettingsGUIStyles.indentedSettingBlock.padding.left - 4; + GUILayout.BeginVertical(SettingsGUIStyles.indentedSettingBlock); + } + + /// <inheritdoc /> + /// <summary> + /// Revert the GUI indent back to it's original value. + /// </summary> + public void Dispose() + { + if (m_IsDisposed) + return; + m_IsDisposed = true; + GUILayout.EndVertical(); + EditorGUIUtility.labelWidth += SettingsGUIStyles.indentedSettingBlock.padding.left - 4; + } + } + + internal static HashSet<string> s_Keywords = null; + + internal static bool MatchSearchGroups(string searchContext, string label) + { + if (s_Keywords != null) + { + foreach (var keyword in label.Split(' ')) + s_Keywords.Add(keyword); + } + + if (searchContext == null) + return true; + + var ctx = searchContext.Trim(); + + if (string.IsNullOrEmpty(ctx)) + return true; + + var split = searchContext.Split(' '); + + return split.Any(x => !string.IsNullOrEmpty(x) && label.IndexOf(x, StringComparison.InvariantCultureIgnoreCase) > -1); + } + + internal static bool DebugModeFilter(IUserSetting pref) + { + if (!EditorPrefs.GetBool("DeveloperMode", false)) + return true; + + if (pref.scope == SettingsScope.Project && UserSettingsProvider.showProjectSettings) + return true; + + if (pref.scope == SettingsScope.User && UserSettingsProvider.showUserSettings) + return true; + + return false; + } + + /// <summary> + /// A slider that implements search filtering. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="min">The value at the left end of the slider.</param> + /// <param name="max">The value at the right end of the slider.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static float SearchableSlider(GUIContent label, float value, float min, float max, string searchContext) + { + if (!MatchSearchGroups(searchContext, label.text)) + return value; + return EditorGUILayout.Slider(label, value, min, max); + } + + /// <summary> + /// A slider that implements search filtering. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="min">The value at the left end of the slider.</param> + /// <param name="max">The value at the right end of the slider.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static float SearchableSlider(string label, float value, float min, float max, string searchContext) + { + if (!MatchSearchGroups(searchContext, label)) + return value; + return EditorGUILayout.Slider(label, value, min, max); + } + + /// <summary> + /// A float field that implements search filtering. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static float SearchableFloatField(GUIContent label, float value, string searchContext) + { + if (!MatchSearchGroups(searchContext, label.text)) + return value; + return EditorGUILayout.FloatField(label, value); + } + + /// <summary> + /// A float field that implements search filtering. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static float SearchableFloatField(string label, float value, string searchContext) + { + if (!MatchSearchGroups(searchContext, label)) + return value; + return EditorGUILayout.FloatField(label, value); + } + + /// <summary> + /// An int field that implements search filtering. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static int SearchableIntField(GUIContent label, int value, string searchContext) + { + if (!MatchSearchGroups(searchContext, label.text)) + return value; + return EditorGUILayout.IntField(label, value); + } + + /// <summary> + /// An int field that implements search filtering. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static int SearchableIntField(string label, int value, string searchContext) + { + if (!MatchSearchGroups(searchContext, label)) + return value; + return EditorGUILayout.IntField(label, value); + } + + /// <summary> + /// An toggle field that implements search filtering. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static bool SearchableToggle(GUIContent label, bool value, string searchContext) + { + if (!MatchSearchGroups(searchContext, label.text)) + return value; + return EditorGUILayout.Toggle(label, value); + } + + /// <summary> + /// An toggle field that implements search filtering. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static bool SearchableToggle(string label, bool value, string searchContext) + { + if (!MatchSearchGroups(searchContext, label)) + return value; + return EditorGUILayout.Toggle(label, value); + } + + /// <summary> + /// An text field that implements search filtering. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static string SearchableTextField(GUIContent label, string value, string searchContext) + { + if (!MatchSearchGroups(searchContext, label.text)) + return value; + return EditorGUILayout.TextField(label, value); + } + + /// <summary> + /// An text field that implements search filtering. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static string SearchableTextField(string label, string value, string searchContext) + { + if (!MatchSearchGroups(searchContext, label)) + return value; + return EditorGUILayout.TextField(label, value); + } + + /// <summary> + /// An color field that implements search filtering. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static Color SearchableColorField(GUIContent label, Color value, string searchContext) + { + if (!MatchSearchGroups(searchContext, label.text)) + return value; + return EditorGUILayout.ColorField(label, value); + } + + /// <summary> + /// An color field that implements search filtering. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static Color SearchableColorField(string label, Color value, string searchContext) + { + if (!MatchSearchGroups(searchContext, label)) + return value; + return EditorGUILayout.ColorField(label, value); + } + + /// <summary> + /// A slider that implements search filtering and context menu reset. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="min">The value at the left end of the slider.</param> + /// <param name="max">The value at the right end of the slider.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static float SettingsSlider(GUIContent label, UserSetting<float> value, float min, float max, string searchContext) + { + if (!DebugModeFilter(value) || !MatchSearchGroups(searchContext, label.text)) + return value; + var res = EditorGUILayout.Slider(label, value, min, max); + DoResetContextMenuForLastRect(value); + return res; + } + + /// <summary> + /// A slider that implements search filtering and context menu reset. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="min">The value at the left end of the slider.</param> + /// <param name="max">The value at the right end of the slider.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static float SettingsSlider(string label, UserSetting<float> value, float min, float max, string searchContext) + { + if (!DebugModeFilter(value) || !MatchSearchGroups(searchContext, label)) + return value; + var res = EditorGUILayout.Slider(label, value, min, max); + DoResetContextMenuForLastRect(value); + return res; + } + + /// <summary> + /// A slider that implements search filtering and context menu reset. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="min">The value at the left end of the slider.</param> + /// <param name="max">The value at the right end of the slider.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static int SettingsSlider(GUIContent label, UserSetting<int> value, int min, int max, string searchContext) + { + if (!DebugModeFilter(value) || !MatchSearchGroups(searchContext, label.text)) + return value; + var res = EditorGUILayout.IntSlider(label, value, min, max); + DoResetContextMenuForLastRect(value); + return res; + } + + /// <summary> + /// A slider that implements search filtering and context menu reset. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="min">The value at the left end of the slider.</param> + /// <param name="max">The value at the right end of the slider.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static int SettingsSlider(string label, UserSetting<int> value, int min, int max, string searchContext) + { + if (!DebugModeFilter(value) || !MatchSearchGroups(searchContext, label)) + return value; + var res = EditorGUILayout.IntSlider(label, value, min, max); + DoResetContextMenuForLastRect(value); + return res; + } + + /// <summary> + /// A float field that implements search filtering and context menu reset. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static float SettingsFloatField(GUIContent label, UserSetting<float> value, string searchContext) + { + if (!DebugModeFilter(value) || !MatchSearchGroups(searchContext, label.text)) + return value; + var res = EditorGUILayout.FloatField(label, value); + DoResetContextMenuForLastRect(value); + return res; + } + + /// <summary> + /// A float field that implements search filtering and context menu reset. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static float SettingsFloatField(string label, UserSetting<float> value, string searchContext) + { + if (!DebugModeFilter(value) || !MatchSearchGroups(searchContext, label)) + return value; + var res = EditorGUILayout.FloatField(label, value); + DoResetContextMenuForLastRect(value); + return res; + } + + /// <summary> + /// An integer field that implements search filtering and context menu reset. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static int SettingsIntField(GUIContent label, UserSetting<int> value, string searchContext) + { + if (!DebugModeFilter(value) || !MatchSearchGroups(searchContext, label.text)) + return value; + var res = EditorGUILayout.IntField(label, value); + DoResetContextMenuForLastRect(value); + return res; + } + + /// <summary> + /// An integer field that implements search filtering and context menu reset. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static int SettingsIntField(string label, UserSetting<int> value, string searchContext) + { + if (!DebugModeFilter(value) || !MatchSearchGroups(searchContext, label)) + return value; + var res = EditorGUILayout.IntField(label, value); + DoResetContextMenuForLastRect(value); + return res; + } + + /// <summary> + /// A boolean toggle field that implements search filtering and context menu reset. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static bool SettingsToggle(GUIContent label, UserSetting<bool> value, string searchContext) + { + if (!DebugModeFilter(value) || !MatchSearchGroups(searchContext, label.text)) + return value; + var res = EditorGUILayout.Toggle(label, value); + DoResetContextMenuForLastRect(value); + return res; + } + + /// <summary> + /// A boolean toggle field that implements search filtering and context menu reset. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static bool SettingsToggle(string label, UserSetting<bool> value, string searchContext) + { + if (!DebugModeFilter(value) || !MatchSearchGroups(searchContext, label)) + return value; + var res = EditorGUILayout.Toggle(label, value); + DoResetContextMenuForLastRect(value); + return res; + } + + /// <summary> + /// A text field that implements search filtering and context menu reset. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static string SettingsTextField(GUIContent label, UserSetting<string> value, string searchContext) + { + if (!DebugModeFilter(value) || !MatchSearchGroups(searchContext, label.text)) + return value; + var res = EditorGUILayout.TextField(label, value); + DoResetContextMenuForLastRect(value); + return res; + } + + /// <summary> + /// A text field that implements search filtering and context menu reset. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static string SettingsTextField(string label, UserSetting<string> value, string searchContext) + { + if (!DebugModeFilter(value) || !MatchSearchGroups(searchContext, label)) + return value; + var res = EditorGUILayout.TextField(label, value); + DoResetContextMenuForLastRect(value); + return res; + } + + /// <summary> + /// A color field that implements search filtering and context menu reset. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static Color SettingsColorField(GUIContent label, UserSetting<Color> value, string searchContext) + { + if (!DebugModeFilter(value) || !MatchSearchGroups(searchContext, label.text)) + return value; + var res = EditorGUILayout.ColorField(label, value); + DoResetContextMenuForLastRect(value); + return res; + } + + /// <summary> + /// A color field that implements search filtering and context menu reset. + /// </summary> + /// <param name="label">Label in front of the value field.</param> + /// <param name="value">The value to edit.</param> + /// <param name="searchContext">A string representing the current search query. Empty or null strings are to be treated as matching any value.</param> + /// <returns>The value that has been set by the user.</returns> + public static Color SettingsColorField(string label, UserSetting<Color> value, string searchContext) + { + if (!DebugModeFilter(value) || !MatchSearchGroups(searchContext, label)) + return value; + var res = EditorGUILayout.ColorField(label, value); + DoResetContextMenuForLastRect(value); + return res; + } + + /// <summary> + /// Using the last automatically layoutted rect, implement a context click menu for a user setting. + /// </summary> + /// <param name="setting">The target setting for the reset context menu.</param> + public static void DoResetContextMenuForLastRect(IUserSetting setting) + { + DoResetContextMenu(GUILayoutUtility.GetLastRect(), setting); + } + + static void DoResetContextMenu(Rect rect, IUserSetting pref) + { + var evt = Event.current; + + if (evt.type == EventType.ContextClick && rect.Contains(evt.mousePosition)) + { + var menu = new GenericMenu(); + menu.AddItem(new GUIContent("Reset [" + pref.scope + "] " + pref.key), false, () => + { + pref.Reset(true); + }); + menu.ShowAsContext(); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/SettingsGUILayout.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/SettingsGUILayout.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..915189c0ef227b73ca5eb70a942f62b8f7398e70 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/SettingsGUILayout.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 223e1a5330ab8468782152a65e857f94 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Unity.Settings.Editor.asmdef b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Unity.Settings.Editor.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..a549251497928a7012c5ef689e0344cba810133d --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Unity.Settings.Editor.asmdef @@ -0,0 +1,14 @@ +{ + "name": "Unity.Settings.Editor", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": false, + "defineConstraints": [] +} \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Unity.Settings.Editor.asmdef.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Unity.Settings.Editor.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..6dfc8d7f54d0b1d1799ddfaa8ca1aab77bb27b2c --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/Unity.Settings.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 49818357e697641afb75d2f8acaf1861 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSetting.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSetting.cs new file mode 100644 index 0000000000000000000000000000000000000000..12bb877296c3fac642e2119b4d3275f2c6c692e4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSetting.cs @@ -0,0 +1,392 @@ +using System; +using UnityEngine; + +namespace UnityEditor.SettingsManagement +{ + [Flags] + enum SettingVisibility + { + None = 0 << 0, + + /// <value> + /// Matches any static field implementing IUserSetting and tagged with [UserSettingAttribute(visibleInSettingsProvider = true)]. + /// </value> + /// <summary> + /// These fields are automatically scraped by the SettingsProvider and displayed. + /// </summary> + Visible = 1 << 0, + + /// <value> + /// Matches any static field implementing IUserSetting and tagged with [UserSettingAttribute(visibleInSettingsProvider = false)]. + /// </value> + /// <summary> + /// These fields will be reset by the "Reset All" menu in SettingsProvider, but are not shown in the interface. + /// Typically these fields require some conditional formatting or data handling, and are shown in the + /// SettingsProvider UI with a [UserSettingBlockAttribute]. + /// </summary> + Hidden = 1 << 1, + + /// <value> + /// A static or instance field tagged with [SettingsKeyAttribute]. + /// </value> + /// <summary> + /// Unlisted settings are not shown in the SettingsProvider, but are reset to default values by the "Reset All" + /// context menu. + /// </summary> + Unlisted = 1 << 2, + + /// <value> + /// A static field implementing IUserSetting that is not marked with any setting attribute. + /// </value> + /// <summary> + /// Unregistered IUserSetting fields are not affected by the SettingsProvider. + /// </summary> + Unregistered = 1 << 3, + + All = Visible | Hidden | Unlisted | Unregistered + } + + /// <summary> + /// Types implementing IUserSetting are eligible for use with <see cref="UserSettingAttribute"/>, which enables + /// fields to automatically populate the <see cref="UserSettingsProvider"/> interface. + /// </summary> + public interface IUserSetting + { + /// <value> + /// The key for this value. + /// </value> + string key { get; } + + /// <value> + /// The type of the stored value. + /// </value> + Type type { get; } + + /// <value> + /// At which scope this setting is saved. + /// </value> + SettingsScope scope { get; } + + /// <summary> + /// The name of the <see cref="ISettingsRepository"/> that this setting should be associated with. If null, the + /// first repository matching the <see cref="scope"/> will be used. + /// </summary> + string settingsRepositoryName { get; } + + /// <value> + /// The <see cref="Settings"/> instance that this setting should be saved and loaded from. + /// </value> + Settings settings { get; } + + /// <summary> + /// Get the stored value. + /// If you are implementing IUserSetting it is recommended that you cache this value. + /// </summary> + /// <returns> + /// The stored value. + /// </returns> + object GetValue(); + + /// <summary> + /// Get the default value for this setting. + /// </summary> + /// <returns> + /// The default value for this setting. + /// </returns> + object GetDefaultValue(); + + /// <summary> + /// Set the value for this setting. + /// </summary> + /// <param name="value">The new value.</param> + /// <param name="saveProjectSettingsImmediately"> + /// True to immediately serialize the ISettingsRepository that is backing this value, or false to postpone. + /// If not serializing immediately, be sure to call <see cref="Settings.Save"/>. + /// </param> + void SetValue(object value, bool saveProjectSettingsImmediately = false); + + /// <summary> + /// When the inspected type is a reference value, it is possible to change properties without affecting the + /// backing setting. ApplyModifiedProperties provides a method to force serialize these changes. + /// </summary> + void ApplyModifiedProperties(); + + /// <summary> + /// Set the current value back to the default. + /// </summary> + /// <param name="saveProjectSettingsImmediately">True to immediately re-serialize project settings.</param> + void Reset(bool saveProjectSettingsImmediately = false); + + /// <summary> + /// Delete the saved setting. Does not clear the current value. + /// </summary> + /// <see cref="Reset"/> + /// <param name="saveProjectSettingsImmediately">True to immediately re-serialize project settings.</param> + void Delete(bool saveProjectSettingsImmediately = false); + } + + /// <summary> + /// A generic implementation of IUserSetting to be used with a <see cref="Settings"/> instance. This default + /// implementation assumes the <see cref="Settings"/> instance contains two <see cref="ISettingsRepository"/>, one + /// for <see cref="SettingsScope.Project"/> and one for <see cref="SettingsScope.User"/>. + /// </summary> + /// <typeparam name="T"></typeparam> + /// <inheritdoc /> + public class UserSetting<T> : IUserSetting + { + bool m_Initialized; + string m_Key; + string m_Repository; + T m_Value; + T m_DefaultValue; + SettingsScope m_Scope; + Settings m_Settings; + + UserSetting() {} + + /// <summary> + /// Constructor for UserSetting{T} type. + /// </summary> + /// <param name="settings">The <see cref="Settings"/> instance that this setting should be saved and loaded from.</param> + /// <param name="key">The key for this value.</param> + /// <param name="value">The default value for this key.</param> + /// <param name="scope">The scope at which to save this setting.</param> + public UserSetting(Settings settings, string key, T value, SettingsScope scope = SettingsScope.Project) + { + m_Key = key; + m_Repository = null; + m_Value = value; + m_Scope = scope; + m_Initialized = false; + m_Settings = settings; + } + + /// <summary> + /// Constructor for UserSetting{T} type. + /// </summary> + /// <param name="settings">The <see cref="Settings"/> instance that this setting should be saved and loaded from.</param> + /// <param name="repository">The <see cref="ISettingsRepository"/> name that this setting should be saved and loaded from. Pass null to save to first available instance.</param> + /// <param name="key">The key for this value.</param> + /// <param name="value">The default value for this key.</param> + /// <param name="scope">The scope at which to save this setting.</param> + public UserSetting(Settings settings, string repository, string key, T value, SettingsScope scope = SettingsScope.Project) + { + m_Key = key; + m_Repository = repository; + m_Value = value; + m_Scope = scope; + m_Initialized = false; + m_Settings = settings; + } + + /// <value> + /// The key for this value. + /// </value> + /// <inheritdoc /> + public string key + { + get { return m_Key; } + } + + /// <value> + /// The name of the repository that this setting is saved in. + /// </value> + /// <inheritdoc /> + public string settingsRepositoryName + { + get { return m_Repository; } + } + + /// <value> + /// The type that this setting represents ({T}). + /// </value> + /// <inheritdoc /> + public Type type + { + get { return typeof(T); } + } + + /// <summary> + /// Get a copy of the default value. + /// </summary> + /// <returns> + /// The default value. + /// </returns> + /// <inheritdoc /> + public object GetDefaultValue() + { + return defaultValue; + } + + /// <summary> + /// Get the currently stored value. + /// </summary> + /// <returns> + /// The value that is currently set. + /// </returns> + /// <inheritdoc /> + public object GetValue() + { + return value; + } + + /// <summary> + /// The scope affects which <see cref="ISettingsRepository"/> the <see cref="settings"/> instance will save + /// it's data to. + /// </summary> + /// <value> + /// The scope at which to save this key and value. + /// </value> + /// <inheritdoc /> + public SettingsScope scope + { + get { return m_Scope; } + } + + /// <value> + /// The <see cref="Settings"/> instance that this setting will be read from and saved to. + /// </value> + /// <inheritdoc /> + public Settings settings + { + get { return m_Settings; } + } + + /// <summary> + /// Set the value for this setting. + /// </summary> + /// <param name="value">The new value.</param> + /// <param name="saveProjectSettingsImmediately"> + /// True to immediately serialize the ISettingsRepository that is backing this value, or false to postpone. + /// If not serializing immediately, be sure to call <see cref="Settings.Save"/>. + /// </param> + /// <inheritdoc /> + public void SetValue(object value, bool saveProjectSettingsImmediately = false) + { + // we do want to allow null values + if (value != null && !(value is T)) + throw new ArgumentException("Value must be of type " + typeof(T) + "\n" + key + " expecting value of type " + type + ", received " + value.GetType()); + SetValue((T)value, saveProjectSettingsImmediately); + } + + /// <summary> + /// Set the value for this setting. + /// </summary> + /// <param name="value">The new value.</param> + /// <param name="saveProjectSettingsImmediately"> + /// True to immediately serialize the ISettingsRepository that is backing this value, or false to postpone. + /// If not serializing immediately, be sure to call <see cref="Settings.Save"/>. + /// </param> + public void SetValue(T value, bool saveProjectSettingsImmediately = false) + { + Init(); + m_Value = value; + settings.Set<T>(key, m_Value, m_Scope); + + if (saveProjectSettingsImmediately) + settings.Save(); + } + + /// <summary> + /// Delete the saved setting. Does not clear the current value. + /// </summary> + /// <see cref="M:UnityEditor.SettingsManagement.UserSetting`1.Reset(System.Boolean)" /> + /// <param name="saveProjectSettingsImmediately">True to immediately re-serialize project settings.</param> + /// <inheritdoc cref="IUserSetting.Delete"/> + public void Delete(bool saveProjectSettingsImmediately = false) + { + settings.DeleteKey<T>(key, scope); + // Don't Init() because that will set the key again. We just want to reset the m_Value with default and + // pretend that this field hasn't been initialised yet. + m_Value = ValueWrapper<T>.DeepCopy(m_DefaultValue); + m_Initialized = false; + } + + /// <summary> + /// When the inspected type is a reference value, it is possible to change properties without affecting the + /// backing setting. ApplyModifiedProperties provides a method to force serialize these changes. + /// </summary> + /// <inheritdoc cref="IUserSetting.ApplyModifiedProperties"/> + public void ApplyModifiedProperties() + { + settings.Set<T>(key, m_Value, m_Scope); + settings.Save(); + } + + /// <summary> + /// Set the current value back to the default. + /// </summary> + /// <param name="saveProjectSettingsImmediately">True to immediately re-serialize project settings.</param> + /// <inheritdoc cref="IUserSetting.Reset"/> + public void Reset(bool saveProjectSettingsImmediately = false) + { + SetValue(defaultValue, saveProjectSettingsImmediately); + } + + void Init() + { + if (!m_Initialized) + { + if (m_Scope == SettingsScope.Project && settings == null) + throw new Exception("UserSetting \"" + m_Key + "\" is attempting to access SettingsScope.Project setting with no Settings instance!"); + + m_Initialized = true; + + // DeepCopy uses EditorJsonUtility which is not permitted during construction + m_DefaultValue = ValueWrapper<T>.DeepCopy(m_Value); + + if (settings.ContainsKey<T>(m_Key, m_Scope)) + m_Value = settings.Get<T>(m_Key, m_Scope); + else + settings.Set<T>(m_Key, m_Value, m_Scope); + } + } + + /// <value> + /// The default value for this setting. + /// </value> + public T defaultValue + { + get + { + Init(); + return ValueWrapper<T>.DeepCopy(m_DefaultValue); + } + } + + /// <value> + /// The currently stored value. + /// </value> + public T value + { + get + { + Init(); + return m_Value; + } + + set { SetValue(value); } + } + + /// <summary> + /// Implicit cast to backing type. + /// </summary> + /// <param name="pref">The UserSetting{T} to cast to {T}.</param> + /// <returns> + /// The currently stored <see cref="value"/>. + /// </returns> + public static implicit operator T(UserSetting<T> pref) + { + return pref.value; + } + + /// <summary> + /// Get a summary of this setting. + /// </summary> + /// <returns>A string summary of this setting.</returns> + public override string ToString() + { + return string.Format("{0} setting. Key: {1} Value: {2}", scope, key, value); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSetting.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSetting.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6d12f1ccd26100761a2b5a137287321f54ebf3d8 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSetting.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3ec6d10638d94feaa03c223b6fee2cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettings.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..6e96ff0a50672ba2c28d5350389ac57cd4d6896a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettings.cs @@ -0,0 +1,141 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEngine; + +namespace UnityEditor.SettingsManagement +{ + /// <summary> + /// A collection of utilities for working with settings. + /// </summary> + static class UserSettings + { + internal const string packageName = "com.unity.settings-manager"; + + internal static string GetSettingsString(IEnumerable<Assembly> assemblies, params SettingsScope[] scopes) + { + var settings = FindUserSettings(assemblies, SettingVisibility.All); + if (scopes != null && scopes.Length > 0) + settings = settings.Where(x => scopes.Contains(x.scope)); + var sb = new System.Text.StringBuilder(); + Type t = null; + + foreach (var pref in settings.OrderBy(x => x.type.ToString())) + { + if (pref.type != t) + { + if (t != null) + sb.AppendLine(); + t = pref.type; + sb.AppendLine(pref.type.ToString()); + } + + var val = pref.GetValue(); + sb.AppendLine(string.Format("{0,-4}{1,-24}{2,-64}{3}", "", pref.scope, pref.key, val != null ? val.ToString() : "null")); + } + + return sb.ToString(); + } + + /// <summary> + /// Collect all registered UserSetting and HiddenSetting attributes. + /// </summary> + /// <returns></returns> + public static IEnumerable<IUserSetting> FindUserSettings(IEnumerable<Assembly> assemblies, SettingVisibility visibility, BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static) + { + var loadedTypes = assemblies.SelectMany(x => x.GetTypes()); + var loadedFields = loadedTypes.SelectMany(x => x.GetFields(flags)); + var settings = new List<IUserSetting>(); + + if ((visibility & (SettingVisibility.Visible | SettingVisibility.Unlisted)) > 0) + { + var attributes = loadedFields.Where(prop => Attribute.IsDefined(prop, typeof(UserSettingAttribute))); + + foreach (var field in attributes) + { + var userSetting = (UserSettingAttribute)Attribute.GetCustomAttribute(field, typeof(UserSettingAttribute)); + + if (!field.IsStatic || !typeof(IUserSetting).IsAssignableFrom(field.FieldType)) + { + Debug.LogError("[UserSetting] is only valid on static fields of a type implementing `interface IUserSetting`. \"" + field.Name + "\" (" + field.FieldType + ")\n" + field.DeclaringType); + continue; + } + + bool visible = userSetting.visibleInSettingsProvider; + + if (visible && (visibility & SettingVisibility.Visible) == SettingVisibility.Visible) + settings.Add((IUserSetting)field.GetValue(null)); + else if (!visible && (visibility & SettingVisibility.Hidden) == SettingVisibility.Hidden) + settings.Add((IUserSetting)field.GetValue(null)); + } + } + + if ((visibility & SettingVisibility.Unlisted) == SettingVisibility.Unlisted) + { + var settingsKeys = loadedFields.Where(y => Attribute.IsDefined(y, typeof(SettingsKeyAttribute))); + + foreach (var field in settingsKeys) + { + if (field.IsStatic) + { + settings.Add((IUserSetting)field.GetValue(null)); + } + else + { + var settingAttribute = (SettingsKeyAttribute)Attribute.GetCustomAttribute(field, typeof(SettingsKeyAttribute)); + var pref = CreateGenericPref(settingAttribute.key, settingAttribute.scope, field); + if (pref != null) + settings.Add(pref); + else + Debug.LogWarning("Failed adding [SettingsKey] " + field.FieldType + "\"" + settingAttribute.key + "\" in " + field.DeclaringType); + } + } + } + + if ((visibility & SettingVisibility.Unregistered) == SettingVisibility.Unregistered) + { + var unregisterd = loadedFields.Where(y => typeof(IUserSetting).IsAssignableFrom(y.FieldType) + && !Attribute.IsDefined(y, typeof(SettingsKeyAttribute)) + && !Attribute.IsDefined(y, typeof(UserSettingAttribute))); + + foreach (var field in unregisterd) + { + if (field.IsStatic) + { + settings.Add((IUserSetting)field.GetValue(null)); + } + else + { +#if PB_DEBUG + Log.Warning("Found unregistered instance field: " + + field.FieldType + + " " + + field.Name + + " in " + field.DeclaringType); +#endif + } + } + } + + return settings; + } + + static IUserSetting CreateGenericPref(string key, SettingsScope scope, FieldInfo field) + { + try + { + var type = field.FieldType; + if (typeof(IUserSetting).IsAssignableFrom(type) && type.IsGenericType) + type = type.GetGenericArguments().FirstOrDefault(); + var genericPrefClass = typeof(UserSetting<>).MakeGenericType(type); + var defaultValue = type.IsValueType ? Activator.CreateInstance(type) : null; + return (IUserSetting)Activator.CreateInstance(genericPrefClass, new object[] { key, defaultValue, scope }); + } + catch + { + return null; + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettings.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..60275e73ee131d8bed8fef2b5f61dee752599c74 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c24f57f3f3c554e51ab791526e33e337 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettingsProvider.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettingsProvider.cs new file mode 100644 index 0000000000000000000000000000000000000000..7f9d4583ba2d5b0f64ffc008862471d191137747 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettingsProvider.cs @@ -0,0 +1,603 @@ +#if UNITY_2018_3_OR_NEWER +#define SETTINGS_PROVIDER_ENABLED +#endif + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using UnityEngine; +#if SETTINGS_PROVIDER_ENABLED +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +#endif +#endif + +namespace UnityEditor.SettingsManagement +{ + /// <summary> + /// A <see cref="UnityEditor.SettingsProvider"/> implementation that creates an interface from settings reflected + /// from a collection of assemblies. + /// </summary> +#if SETTINGS_PROVIDER_ENABLED + public sealed class UserSettingsProvider : SettingsProvider +#else + public sealed class UserSettingsProvider +#endif + { + public const string developerModeCategory = "Developer Mode"; + + const string k_SettingsName = "UserSettingsProviderSettings"; + +#if SETTINGS_PROVIDER_ENABLED + const int k_LabelWidth = 240; + + static int labelWidth + { + get + { + if (s_DefaultLabelWidth != null) + return (int)((float)s_DefaultLabelWidth.GetValue(null, null)); + + return k_LabelWidth; + } + } + + static int defaultLayoutMaxWidth + { + get + { + if (s_DefaultLayoutMaxWidth != null) + return (int)((float)s_DefaultLayoutMaxWidth.GetValue(null, null)); + + return 0; + } + } +#else + const int k_LabelWidth = 180; + + int labelWidth + { + get { return k_LabelWidth; } + } + + int defaultLayoutMaxWidth + { + get { return 0; } + } +#endif + + List<string> m_Categories; + Dictionary<string, List<PrefEntry>> m_Settings; + Dictionary<string, List<MethodInfo>> m_SettingBlocks; +#if !SETTINGS_PROVIDER_ENABLED + HashSet<string> keywords = new HashSet<string>(); +#endif + static readonly string[] s_SearchContext = new string[1]; + EventType m_SettingsBlockKeywordsInitialized; + Assembly[] m_Assemblies; + static Settings s_Settings; + Settings m_SettingsInstance; + +#if SETTINGS_PROVIDER_ENABLED + static PropertyInfo s_DefaultLabelWidth; + static PropertyInfo s_DefaultLayoutMaxWidth; +#endif + + static Settings userSettingsProviderSettings + { + get + { + if (s_Settings == null) + s_Settings = new Settings(new [] { new UserSettingsRepository() }); + + return s_Settings; + } + } + + internal static UserSetting<bool> showHiddenSettings = new UserSetting<bool>(userSettingsProviderSettings, "settings.showHidden", false, SettingsScope.User); + internal static UserSetting<bool> showUnregisteredSettings = new UserSetting<bool>(userSettingsProviderSettings, "settings.showUnregistered", false, SettingsScope.User); + internal static UserSetting<bool> listByKey = new UserSetting<bool>(userSettingsProviderSettings, "settings.listByKey", false, SettingsScope.User); + internal static UserSetting<bool> showUserSettings = new UserSetting<bool>(userSettingsProviderSettings, "settings.showUserSettings", true, SettingsScope.User); + internal static UserSetting<bool> showProjectSettings = new UserSetting<bool>(userSettingsProviderSettings, "settings.showProjectSettings", true, SettingsScope.User); + +#if SETTINGS_PROVIDER_ENABLED + /// <summary> + /// Create a new UserSettingsProvider. + /// </summary> + /// <param name="path">The settings menu path.</param> + /// <param name="settings">The Settings instance that this provider is inspecting.</param> + /// <param name="assemblies">A collection of assemblies to scan for <see cref="UserSettingAttribute"/> and <see cref="UserSettingBlockAttribute"/> attributes.</param> + /// <param name="scopes">Which scopes this provider is valid for.</param> + /// <exception cref="ArgumentNullException">Thrown if settings or assemblies is null.</exception> + public UserSettingsProvider(string path, Settings settings, Assembly[] assemblies, SettingsScope scopes = SettingsScope.User) + : base(path, scopes) +#else + /// <summary> + /// Create a new UserSettingsProvider. + /// </summary> + /// <param name="settings">The Settings instance that this provider is inspecting.</param> + /// <param name="assemblies">A collection of assemblies to scan for <see cref="UserSettingAttribute"/> and <see cref="UserSettingBlockAttribute"/> attributes.</param> + public UserSettingsProvider(Settings settings, Assembly[] assemblies) +#endif + { + if (settings == null) + throw new ArgumentNullException("settings"); + + if (assemblies == null) + throw new ArgumentNullException("assemblies"); + + m_SettingsInstance = settings; + m_Assemblies = assemblies; + +#if !SETTINGS_PROVIDER_ENABLED + SearchForUserSettingAttributes(); +#endif + } + +#if SETTINGS_PROVIDER_ENABLED + /// <summary> + /// Invoked by the SettingsProvider when activated in the Editor. + /// </summary> + /// <param name="searchContext"></param> + /// <param name="rootElement"></param> + public override void OnActivate(string searchContext, VisualElement rootElement) + { + SearchForUserSettingAttributes(); + + var window = GetType().GetProperty("settingsWindow", BindingFlags.Instance | BindingFlags.NonPublic); + + if (window != null) + { + s_DefaultLabelWidth = window.PropertyType.GetProperty("s_DefaultLabelWidth", BindingFlags.Public | BindingFlags.Static); + s_DefaultLayoutMaxWidth = window.PropertyType.GetProperty("s_DefaultLayoutMaxWidth", BindingFlags.Public | BindingFlags.Static); + } + } +#endif + + struct PrefEntry + { + GUIContent m_Content; + IUserSetting m_Pref; + + public GUIContent content + { + get { return m_Content; } + } + + public IUserSetting pref + { + get { return m_Pref; } + } + + public PrefEntry(GUIContent content, IUserSetting pref) + { + m_Content = content; + m_Pref = pref; + } + } + + void SearchForUserSettingAttributes() + { + var isDeveloperMode = EditorPrefs.GetBool("DeveloperMode", false); + var keywordsHash = new HashSet<string>(); + + if (m_Settings != null) + m_Settings.Clear(); + else + m_Settings = new Dictionary<string, List<PrefEntry>>(); + + if (m_SettingBlocks != null) + m_SettingBlocks.Clear(); + else + m_SettingBlocks = new Dictionary<string, List<MethodInfo>>(); + + var types = m_Assemblies.SelectMany(x => x.GetTypes()); + + // collect instance fields/methods too, but only so we can throw a warning that they're invalid. + var fields = types.SelectMany(x => + x.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static) + .Where(prop => Attribute.IsDefined(prop, typeof(UserSettingAttribute)))); + + var methods = types.SelectMany(x => x.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) + .Where(y => Attribute.IsDefined(y, typeof(UserSettingBlockAttribute)))); + + foreach (var field in fields) + { + if (!field.IsStatic) + { + Debug.LogWarning("Cannot create setting entries for instance fields. Skipping \"" + field.Name + "\"."); + continue; + } + + var attrib = (UserSettingAttribute)Attribute.GetCustomAttribute(field, typeof(UserSettingAttribute)); + + if (!attrib.visibleInSettingsProvider) + continue; + + var pref = (IUserSetting)field.GetValue(null); + + if (pref == null) + { + Debug.LogWarning("[UserSettingAttribute] is only valid for types implementing the IUserSetting interface. Skipping \"" + field.Name + "\""); + continue; + } + + var category = string.IsNullOrEmpty(attrib.category) ? "Uncategorized" : attrib.category; + var content = listByKey ? new GUIContent(pref.key) : attrib.title; + + if (developerModeCategory.Equals(category) && !isDeveloperMode) + continue; + + List<PrefEntry> settings; + + if (m_Settings.TryGetValue(category, out settings)) + settings.Add(new PrefEntry(content, pref)); + else + m_Settings.Add(category, new List<PrefEntry>() { new PrefEntry(content, pref) }); + } + + foreach (var method in methods) + { + var attrib = (UserSettingBlockAttribute)Attribute.GetCustomAttribute(method, typeof(UserSettingBlockAttribute)); + var category = string.IsNullOrEmpty(attrib.category) ? "Uncategorized" : attrib.category; + + if (developerModeCategory.Equals(category) && !isDeveloperMode) + continue; + + List<MethodInfo> blocks; + + var parameters = method.GetParameters(); + + if (!method.IsStatic || parameters.Length < 1 || parameters[0].ParameterType != typeof(string)) + { + Debug.LogWarning("[UserSettingBlockAttribute] is only valid for static functions with a single string parameter. Ex, `static void MySettings(string searchContext)`. Skipping \"" + method.Name + "\""); + continue; + } + + if (m_SettingBlocks.TryGetValue(category, out blocks)) + blocks.Add(method); + else + m_SettingBlocks.Add(category, new List<MethodInfo>() { method }); + } + + if (showHiddenSettings) + { + var unlisted = new List<PrefEntry>(); + m_Settings.Add("Unlisted", unlisted); + foreach (var pref in UserSettings.FindUserSettings(m_Assemblies, SettingVisibility.Unlisted | SettingVisibility.Hidden)) + unlisted.Add(new PrefEntry(new GUIContent(pref.key), pref)); + } + + if (showUnregisteredSettings) + { + var unregistered = new List<PrefEntry>(); + m_Settings.Add("Unregistered", unregistered); + foreach (var pref in UserSettings.FindUserSettings(m_Assemblies, SettingVisibility.Unregistered)) + unregistered.Add(new PrefEntry(new GUIContent(pref.key), pref)); + } + + foreach (var cat in m_Settings) + { + foreach (var entry in cat.Value) + { + var content = entry.content; + + if (content != null && !string.IsNullOrEmpty(content.text)) + { + foreach (var word in content.text.Split(' ')) + keywordsHash.Add(word); + } + } + } + + keywords = keywordsHash; + m_Categories = m_Settings.Keys.Union(m_SettingBlocks.Keys).ToList(); + m_Categories.Sort(); + } + +#if SETTINGS_PROVIDER_ENABLED + /// <summary> + /// Invoked by the SettingsProvider container when drawing the UI header. + /// </summary> + public override void OnTitleBarGUI() + { + if (GUILayout.Button(GUIContent.none, SettingsGUIStyles.settingsGizmo)) + DoContextMenu(); + } +#endif + + void InitSettingsBlockKeywords() + { + // Have to let the blocks run twice - one for Layout, one for Repaint. + if (m_SettingsBlockKeywordsInitialized == EventType.Repaint) + return; + + m_SettingsBlockKeywordsInitialized = Event.current.type; + + // Allows SettingsGUILayout.SettingsField to populate keywords + SettingsGUILayout.s_Keywords = new HashSet<string>(keywords); + + // Set a dummy value so that GUI blocks with conditional foldouts will behave as though searching. + s_SearchContext[0] = "Search"; + + foreach (var category in m_SettingBlocks) + { + foreach (var block in category.Value) + block.Invoke(null, s_SearchContext); + } + + keywords = SettingsGUILayout.s_Keywords; + SettingsGUILayout.s_Keywords = null; + s_SearchContext[0] = ""; + } + + void DoContextMenu() + { + var menu = new GenericMenu(); + + menu.AddItem(new GUIContent("Reset All"), false, () => + { + if (!UnityEditor.EditorUtility.DisplayDialog("Reset All Settings", "Reset all settings? This is not undo-able.", "Reset", "Cancel")) + return; + + // Do not reset SettingVisibility.Unregistered + foreach (var pref in UserSettings.FindUserSettings(m_Assemblies, SettingVisibility.Visible | SettingVisibility.Hidden | SettingVisibility.Unlisted)) + pref.Reset(); + + m_SettingsInstance.Save(); + }); + + if (EditorPrefs.GetBool("DeveloperMode", false)) + { + menu.AddSeparator(""); + + menu.AddItem(new GUIContent("Developer/List Settings By Key"), listByKey, () => + { + listByKey.SetValue(!listByKey, true); + SearchForUserSettingAttributes(); + }); + + menu.AddSeparator("Developer/"); + + menu.AddItem(new GUIContent("Developer/Show User Settings"), showUserSettings, () => + { + showUserSettings.SetValue(!showUserSettings, true); + SearchForUserSettingAttributes(); + }); + + menu.AddItem(new GUIContent("Developer/Show Project Settings"), showProjectSettings, () => + { + showProjectSettings.SetValue(!showProjectSettings, true); + SearchForUserSettingAttributes(); + }); + + menu.AddSeparator("Developer/"); + + menu.AddItem(new GUIContent("Developer/Show Unlisted Settings"), showHiddenSettings, () => + { + showHiddenSettings.SetValue(!showHiddenSettings, true); + SearchForUserSettingAttributes(); + }); + + menu.AddItem(new GUIContent("Developer/Show Unregistered Settings"), showUnregisteredSettings, () => + { + showUnregisteredSettings.SetValue(!showUnregisteredSettings, true); + SearchForUserSettingAttributes(); + }); + + menu.AddSeparator("Developer/"); + + menu.AddItem(new GUIContent("Developer/Open Project Settings File"), false, () => + { + var project = m_SettingsInstance.GetRepository(SettingsScope.Project); + + if (project != null) + { + var path = Path.GetFullPath(project.path); + System.Diagnostics.Process.Start(path); + } + }); + + menu.AddItem(new GUIContent("Developer/Print All Settings"), false, () => + { + Debug.Log(UserSettings.GetSettingsString(m_Assemblies)); + }); + +#if UNITY_2019_1_OR_NEWER + menu.AddSeparator("Developer/"); +#if UNITY_2019_3_OR_NEWER + menu.AddItem(new GUIContent("Developer/Recompile Scripts"), false, EditorUtility.RequestScriptReload); +#else + menu.AddItem(new GUIContent("Developer/Recompile Scripts"), false, UnityEditorInternal.InternalEditorUtility.RequestScriptReload); +#endif +#endif + } + + menu.ShowAsContext(); + } + +#if SETTINGS_PROVIDER_ENABLED + /// <summary> + /// Invoked by the Settings editor. + /// </summary> + /// <param name="searchContext"> + /// A string containing the contents of the search bar. + /// </param> + public override void OnGUI(string searchContext) +#else + /// <summary> + /// Invoked by the Settings editor. + /// </summary> + /// <param name="searchContext"> + /// A string containing the contents of the search bar. + /// </param> + public void OnGUI(string searchContext) +#endif + { +#if !SETTINGS_PROVIDER_ENABLED + var evt = Event.current; + if (evt.type == EventType.ContextClick) + DoContextMenu(); +#endif + InitSettingsBlockKeywords(); + + EditorGUIUtility.labelWidth = labelWidth; + + EditorGUI.BeginChangeCheck(); + + var maxWidth = defaultLayoutMaxWidth; + + if (maxWidth != 0) + GUILayout.BeginVertical(SettingsGUIStyles.settingsArea, GUILayout.MaxWidth(maxWidth)); + else + GUILayout.BeginVertical(SettingsGUIStyles.settingsArea); + + var hasSearchContext = !string.IsNullOrEmpty(searchContext); + s_SearchContext[0] = searchContext; + if (hasSearchContext) + { + // todo - Improve search comparison + var searchKeywords = searchContext.Split(' '); + + foreach (var settingField in m_Settings) + { + foreach (var setting in settingField.Value) + { + if (searchKeywords.Any(x => !string.IsNullOrEmpty(x) && setting.content.text.IndexOf(x, StringComparison.InvariantCultureIgnoreCase) > -1)) + DoPreferenceField(setting.content, setting.pref); + } + } + + foreach (var settingsBlock in m_SettingBlocks) + { + foreach (var block in settingsBlock.Value) + { + block.Invoke(null, s_SearchContext); + } + } + } + else + { + foreach (var key in m_Categories) + { + GUILayout.Label(key, EditorStyles.boldLabel); + + List<PrefEntry> settings; + + if (m_Settings.TryGetValue(key, out settings)) + foreach (var setting in settings) + DoPreferenceField(setting.content, setting.pref); + + List<MethodInfo> blocks; + + if (m_SettingBlocks.TryGetValue(key, out blocks)) + foreach (var block in blocks) + block.Invoke(null, s_SearchContext); + + GUILayout.Space(8); + } + } + + EditorGUIUtility.labelWidth = 0; + + GUILayout.EndVertical(); + + if (EditorGUI.EndChangeCheck()) + { + m_SettingsInstance.Save(); + } + } + + void DoPreferenceField(GUIContent title, IUserSetting pref) + { + if (EditorPrefs.GetBool("DeveloperMode", false)) + { + if (pref.scope == SettingsScope.Project && !showProjectSettings) + return; + if (pref.scope == SettingsScope.User && !showUserSettings) + return; + } + + if (pref is UserSetting<float>) + { + var cast = (UserSetting<float>)pref; + cast.value = EditorGUILayout.FloatField(title, cast.value); + } + else if (pref is UserSetting<int>) + { + var cast = (UserSetting<int>)pref; + cast.value = EditorGUILayout.IntField(title, cast.value); + } + else if (pref is UserSetting<bool>) + { + var cast = (UserSetting<bool>)pref; + cast.value = EditorGUILayout.Toggle(title, cast.value); + } + else if (pref is UserSetting<string>) + { + var cast = (UserSetting<string>)pref; + cast.value = EditorGUILayout.TextField(title, cast.value); + } + else if (pref is UserSetting<Color>) + { + var cast = (UserSetting<Color>)pref; + cast.value = EditorGUILayout.ColorField(title, cast.value); + } +#if UNITY_2018_3_OR_NEWER + else if (pref is UserSetting<Gradient>) + { + var cast = (UserSetting<Gradient>)pref; + cast.value = EditorGUILayout.GradientField(title, cast.value); + } +#endif + else if (pref is UserSetting<Vector2>) + { + var cast = (UserSetting<Vector2>)pref; + cast.value = EditorGUILayout.Vector2Field(title, cast.value); + } + else if (pref is UserSetting<Vector3>) + { + var cast = (UserSetting<Vector3>)pref; + cast.value = EditorGUILayout.Vector3Field(title, cast.value); + } + else if (pref is UserSetting<Vector4>) + { + var cast = (UserSetting<Vector4>)pref; + cast.value = EditorGUILayout.Vector4Field(title, cast.value); + } + else if (typeof(Enum).IsAssignableFrom(pref.type)) + { + Enum val = (Enum)pref.GetValue(); + EditorGUI.BeginChangeCheck(); + if (Attribute.IsDefined(pref.type, typeof(FlagsAttribute))) + val = EditorGUILayout.EnumFlagsField(title, val); + else + val = EditorGUILayout.EnumPopup(title, val); + if (EditorGUI.EndChangeCheck()) + pref.SetValue(val); + } + else if (typeof(UnityEngine.Object).IsAssignableFrom(pref.type)) + { + var obj = (UnityEngine.Object)pref.GetValue(); + EditorGUI.BeginChangeCheck(); + obj = EditorGUILayout.ObjectField(title, obj, pref.type, false); + if (EditorGUI.EndChangeCheck()) + pref.SetValue(obj); + } + else + { + GUILayout.BeginHorizontal(); + GUILayout.Label(title, GUILayout.Width(EditorGUIUtility.labelWidth - EditorStyles.label.margin.right * 2)); + var obj = pref.GetValue(); + GUILayout.Label(obj == null ? "null" : pref.GetValue().ToString()); + GUILayout.EndHorizontal(); + } + + SettingsGUILayout.DoResetContextMenuForLastRect(pref); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettingsProvider.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettingsProvider.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..430f14945ee2ac7f40b51f602b0d7e16d4a18f46 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettingsProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0dc75b34a006d47f48c004031e6ef14d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettingsRepository.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettingsRepository.cs new file mode 100644 index 0000000000000000000000000000000000000000..8882d7e7465e80d8ffe11b611bc1470d88cb2f83 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettingsRepository.cs @@ -0,0 +1,141 @@ +namespace UnityEditor.SettingsManagement +{ + /// <summary> + /// A settings repository backed by the UnityEditor.EditorPrefs class. + /// </summary> + public class UserSettingsRepository : ISettingsRepository + { + static string GetEditorPrefKey<T>(string key) + { + return GetEditorPrefKey(typeof(T).FullName, key); + } + + static string GetEditorPrefKey(string fullName, string key) + { + return fullName + "::" + key; + } + + static void SetEditorPref<T>(string key, T value) + { + var k = GetEditorPrefKey<T>(key); + + if (typeof(T) == typeof(string)) + EditorPrefs.SetString(k, (string)(object)value); + else if (typeof(T) == typeof(bool)) + EditorPrefs.SetBool(k, (bool)(object)value); + else if (typeof(T) == typeof(float)) + EditorPrefs.SetFloat(k, (float)(object)value); + else if (typeof(T) == typeof(int)) + EditorPrefs.SetInt(k, (int)(object)value); + else + EditorPrefs.SetString(k, ValueWrapper<T>.Serialize(value)); + } + + static T GetEditorPref<T>(string key, T fallback = default(T)) + { + var k = GetEditorPrefKey<T>(key); + + if (!EditorPrefs.HasKey(k)) + return fallback; + + var o = (object)fallback; + + if (typeof(T) == typeof(string)) + o = EditorPrefs.GetString(k, (string)o); + else if (typeof(T) == typeof(bool)) + o = EditorPrefs.GetBool(k, (bool)o); + else if (typeof(T) == typeof(float)) + o = EditorPrefs.GetFloat(k, (float)o); + else if (typeof(T) == typeof(int)) + o = EditorPrefs.GetInt(k, (int)o); + else + return ValueWrapper<T>.Deserialize(EditorPrefs.GetString(k)); + + return (T)o; + } + + /// <value> + /// What SettingsScope this repository applies to. + /// </value> + /// <inheritdoc cref="ISettingsRepository.scope"/> + public SettingsScope scope + { + get { return SettingsScope.User; } + } + + /// <summary> + /// An identifying name for this repository. User settings are named "EditorPrefs." + /// </summary> + public string name + { + get { return "EditorPrefs"; } + } + + /// <value> + /// File path to the serialized settings data. + /// </value> + /// <remarks> + /// This property returns an empty string. + /// </remarks> + /// <inheritdoc cref="ISettingsRepository.path"/> + public string path + { + get { return string.Empty; } + } + + /// <summary> + /// Save all settings to their serialized state. + /// </summary> + /// <inheritdoc cref="ISettingsRepository.Save"/> + public void Save() + { + } + + /// <inheritdoc /> + /// <summary> + /// Set a value for key of type T. + /// </summary> + /// <param name="key">The settings key.</param> + /// <param name="value">The value to set. Must be serializable.</param> + /// <typeparam name="T">Type of value.</typeparam> + public void Set<T>(string key, T value) + { + SetEditorPref<T>(key, value); + } + + /// <inheritdoc /> + /// <summary> + /// Get a value with key of type T, or return the fallback value if no matching key is found. + /// </summary> + /// <param name="key">The settings key.</param> + /// <param name="fallback">If no key with a value of type T is found, this value is returned.</param> + /// <typeparam name="T">Type of value to search for.</typeparam> + public T Get<T>(string key, T fallback = default(T)) + { + return GetEditorPref<T>(key, fallback); + } + + /// <inheritdoc /> + /// <summary> + /// Does the repository contain a setting with key and type. + /// </summary> + /// <param name="key">The settings key.</param> + /// <typeparam name="T">The type of value to search for.</typeparam> + /// <returns>True if a setting matching both key and type is found, false if no entry is found.</returns> + public bool ContainsKey<T>(string key) + { + return EditorPrefs.HasKey(GetEditorPrefKey<T>(key)); + } + + /// <inheritdoc /> + /// <summary> + /// Remove a key value pair from the settings repository. + /// </summary> + /// <param name="key"></param> + /// <typeparam name="T"></typeparam> + public void Remove<T>(string key) + { + EditorPrefs.DeleteKey(GetEditorPrefKey<T>(key)); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettingsRepository.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettingsRepository.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..6358f3e3aa35266941d7abf0a45f8a6acb8caaf0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/UserSettingsRepository.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6965211c873de4048aa9043e5e287c73 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/ValueWrapper.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/ValueWrapper.cs new file mode 100644 index 0000000000000000000000000000000000000000..cd354a6fedd42e3501a9eebde81919577777fecf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/ValueWrapper.cs @@ -0,0 +1,39 @@ +using System; +using UnityEngine; + +namespace UnityEditor.SettingsManagement +{ + [Serializable] + sealed class ValueWrapper<T> + { +#if PRETTY_PRINT_JSON + const bool k_PrettyPrintJson = true; +#else + const bool k_PrettyPrintJson = false; +#endif + + [SerializeField] + T m_Value; + + public static string Serialize(T value) + { + var obj = new ValueWrapper<T>() { m_Value = value }; + return EditorJsonUtility.ToJson(obj, k_PrettyPrintJson); + } + + public static T Deserialize(string json) + { + var value = (object)Activator.CreateInstance<ValueWrapper<T>>(); + EditorJsonUtility.FromJsonOverwrite(json, value); + return ((ValueWrapper<T>)value).m_Value; + } + + public static T DeepCopy(T value) + { + if (typeof(ValueType).IsAssignableFrom(typeof(T))) + return value; + var str = Serialize(value); + return Deserialize(str); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/ValueWrapper.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/ValueWrapper.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..47677fd1a5f5d6750cfda6f84d36c3177e731ddf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Editor/ValueWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d65bb50aabd144ed9c1a4c2bc6d072e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/LICENSE.md b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/LICENSE.md new file mode 100644 index 0000000000000000000000000000000000000000..48eb0cb6c575cc7215b4017e8272fdde84f40efe --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/LICENSE.md @@ -0,0 +1,5 @@ +Settings-Manager copyright © 2019 Unity Technologies ApS + +Licensed under the Unity Companion License for Unity-dependent projects--see [Unity Companion License](http://www.unity3d.com/legal/licenses/Unity_Companion_License). + +Unless expressly provided otherwise, the Software under this license is made available strictly on an “AS IS” BASIS WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. Please review the license for details on these and other terms and conditions. diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/LICENSE.md.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/LICENSE.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..7068080676450b7dd5fd9d4ea7bc4b2aa648f729 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 27264456a8bbc094d9479c5d5f9b0aa5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/README.md b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b95b30848c90cd1372d532c9a9c103d6fc32f174 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/README.md @@ -0,0 +1,108 @@ +# Settings Manager + +A framework for making any serializable field a setting, complete with an procedurally popuplated Settings Provider. + + + +## Quick Start + +Settings are saved in `ISettingsRepository` instances. Two default implementations are provided, one for saving user settings (`UserSettingsRepository`) and one for per-project settings (`ProjectSettingsRepository`). Settings repositories are responsible for saving and loading preferences. + +You may work directly with `ISettingsRepository`, or create a `Settings` instance to manage them. Creating a `Settings` is convenient because it allows you to make use of the `UserSetting` class and attribute. + +The most common case will be for packages to create a `Settings` manager with two repositories, one for user settings (`SettingsScope.User`) and one for per-project settings (`SettingsScope.Project`). + +Below is an example of how most packages will use this api. + +``` +using UnityEditor; +using UnityEditor.SettingsManagement; +using UnityEngine; + +public class MySettings +{ + static Settings s_SettingsInstance; + + public static Settings instance + { + get + { + if(s_SettingsInstance == null) + s_SettingsInstance = new Settings("com.unity.my-package"); + return s_SettingsInstance; + } + } + + // Register a new SettingsProvider that will scrape the owning assembly for [UserSetting] marked fields. + [SettingsProvider] + static SettingsProvider CreateSettingsProvider() + { + var provider = new UserSettingsProvider("Preferences/My Settings", + instance, + new [] { typeof(MySettings).Assembly }); + + return provider; + } +} + +public class Test +{ + [UserSetting("User Settings", "My User Int Value")] + static UserSetting<int> userSetting = new UserSetting<int>(MySettings.instance, "MyInteger", 42, SettingsScope.User); + + [UserSetting("Project Settings", "My Project Int Value")] + static UserSetting<int> projectSetting = new UserSetting<int>(MySettings.instance, "MyInteger", 42, SettingsScope.Project); + + [MenuItem("Debug/Print Settings Values")] + static void PrintValues() + { + Debug.Log($"User integer is: {(int) userSetting}, and project integer is {(int) projectSetting}"); + } +} +``` + +Values are set and retrieved using generic methods on on your `Settings` instance: + +``` +MySettingsManager.instance.Get<float>("myFloatValue", SettingsScopes.Project); +``` + +The `Settings` class will handle finding an appropriate `ISettingsRepository` for the scope (and optional repository name), while `key` and `T` are used to find the value. Setting keys are unique among types, meaning you may re-use keys as long as the setting type is different. + +``` +// UserSetting<T> is a wrapper class that handles saving and loading serializable values. It is compatible with the `[UserSetting]` attribute, which is used to automatically populate a settings provider. +UserSetting<int> myIntValue = new UserSetting<int>(MySettingsManager.instance, "MyIntegerKey", 42, SettingsScopes.User); +``` + +`UserSetting<T>` caches the current value, and keeps a copy of the default value so that it may be reset. `UserSetting<T>` fields are also eligible for use with the `[UserSetting]` attribute, which lets the `UserSettingsProvider` automatically add it to a settings inspector. + +## Settings Provider + +To register your settings in the `Settings Window` you can either write your own `SettingsProvider` implementation, or use the provided `UserSettingsProvider` and let it automatically create your interface. + +Making use of `UserSettingsProvider` comes with many benefits, including a uniform look for your settings UI, support for search, and per-field or mass reset support. + +``` +using UnityEngine; + +namespace UnityEditor.SettingsManagement.Examples +{ + static class MySettingsProvider + { + [SettingsProvider] + static SettingsProvider CreateSettingsProvider() + { + var provider = new UserSettingsProvider("Preferences/My Settings", + MySettingsManager.instance, + new [] { typeof(MySettingsProvider).Assembly }); + + return provider; + } + } +} +``` + +To register a field with `UserSettingsProvider`, simply decorate it with `[UserSetting(string displayCategory, string key)]`. `[SettingAttribute]` is only valid for static fields. + +For more complex settings that require additional UI (or simply don't have a built-in editor), you can use `UserSettingBlockAttribute`. This provides access to the settings provider GUI. See `SettingsExamples.cs` for more on this. + diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/README.md.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/README.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..66abc0d356b746ffd66d53d752f6211d78629ca9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 561e43493ab773746acefbe0f624795e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/.sample.json b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/.sample.json new file mode 100644 index 0000000000000000000000000000000000000000..bf7c475f7de88c54429a0b9be5a6f0a0ec916340 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/.sample.json @@ -0,0 +1,5 @@ +{ + "displayName":"User Settings Example", + "description": "Example code showing use of the Settings Manager attributes.", + "createSeparatePackage": false +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/MultipleProjectSettingFiles/PlatformSpecificTool.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/MultipleProjectSettingFiles/PlatformSpecificTool.cs new file mode 100644 index 0000000000000000000000000000000000000000..eb371798fb41ef406b105d4d09afffe4450d11dd --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/MultipleProjectSettingFiles/PlatformSpecificTool.cs @@ -0,0 +1,94 @@ +using UnityEditor.EditorTools; +using UnityEngine; + +namespace UnityEditor.SettingsManagement.Examples +{ + /// <summary> + /// This example shows how to access multiple project setting repositories without making use of + /// <see cref="UserSetting{T}"/>. + /// </summary> + [EditorTool("Editor Tool Settings Example")] + class PerPlatformSettingsTool : EditorTool + { +#if !UNITY_2019_2_OR_NEWER + public override GUIContent toolbarIcon + { + get { return new GUIContent("Settings Example Tool", "Settings Manager Example Tool"); } + } +#endif + + // This example creates two project settings repositories, A and B. + static readonly string[] k_ProjectRepositories = new[] + { + "Settings A", + "Settings B" + }; + + // The settings manager. + static Settings s_Settings; + + // This is the key that is used to store the color setting. + const string k_ToolColorSetting = "ToolColor"; + + // Current tool color + Color m_ToolColor; + + // The repository that color is read from and written to. + int m_Repository; + + Vector3 m_HandlePosition; + + // Get the color value from a repository, setting a default value if the key does not already exist. This is + // handled for you if using UserSetting{T}. + Color GetToolColor(string repository, Color defaultColor) + { + if (!s_Settings.ContainsKey<Color>(k_ToolColorSetting, repository)) + s_Settings.Set<Color>(k_ToolColorSetting, defaultColor, repository); + + return s_Settings.Get<Color>(k_ToolColorSetting, k_ProjectRepositories[m_Repository]); + } + + void OnEnable() + { + s_Settings = new Settings(new ISettingsRepository[] + { + new UserSettingsRepository(), + new PackageSettingsRepository("com.unity.settings-manager-examples", k_ProjectRepositories[0]), + new PackageSettingsRepository("com.unity.settings-manager-examples", k_ProjectRepositories[1]) + }); + + m_Repository = s_Settings.Get<int>("ToolColorRepositoryName", SettingsScope.User); + + m_ToolColor = GetToolColor(k_ProjectRepositories[m_Repository], Color.blue); + } + + public override void OnToolGUI(EditorWindow window) + { + Handles.BeginGUI(); + + GUILayout.BeginVertical(GUILayout.MaxWidth(300)); + + EditorGUI.BeginChangeCheck(); + m_Repository = EditorGUILayout.IntPopup(m_Repository, k_ProjectRepositories, new int[] { 0, 1 }); + if (EditorGUI.EndChangeCheck()) + m_ToolColor = GetToolColor(k_ProjectRepositories[m_Repository], Color.blue); + + EditorGUI.BeginChangeCheck(); + m_ToolColor = EditorGUILayout.ColorField(m_ToolColor); + if (EditorGUI.EndChangeCheck()) + { + s_Settings.Set<Color>(k_ToolColorSetting, m_ToolColor, k_ProjectRepositories[m_Repository]); + s_Settings.Save(); + } + + GUILayout.EndVertical(); + + Handles.EndGUI(); + + using (new Handles.DrawingScope(m_ToolColor)) + { + m_HandlePosition = Handles.Slider(m_HandlePosition, Vector3.right); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/PackageWithProjectAndUserSettings/MySettingsManager.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/PackageWithProjectAndUserSettings/MySettingsManager.cs new file mode 100644 index 0000000000000000000000000000000000000000..279dc8a384ff38f8843d035ba782f3175beb1186 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/PackageWithProjectAndUserSettings/MySettingsManager.cs @@ -0,0 +1,49 @@ +using UnityEditor.SettingsManagement; + +namespace UnityEditor.SettingsManagement.Examples +{ + /// <summary> + /// This class will act as a manager for the <see cref="Settings"/> singleton. + /// </summary> + static class MySettingsManager + { + // Replace this with your own package name. Project settings will be stored in a JSON file in a directory matching + // this name. + internal const string k_PackageName = "com.unity.settings-manager-examples"; + + static Settings s_Instance; + + internal static Settings instance + { + get + { + if (s_Instance == null) + s_Instance = new Settings(k_PackageName); + + return s_Instance; + } + } + + // The rest of this file is just forwarding the various setting methods to the instance. + + public static void Save() + { + instance.Save(); + } + + public static T Get<T>(string key, SettingsScope scope = SettingsScope.Project, T fallback = default(T)) + { + return instance.Get<T>(key, scope, fallback); + } + + public static void Set<T>(string key, T value, SettingsScope scope = SettingsScope.Project) + { + instance.Set<T>(key, value, scope); + } + + public static bool ContainsKey<T>(string key, SettingsScope scope = SettingsScope.Project) + { + return instance.ContainsKey<T>(key, scope); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/PackageWithProjectAndUserSettings/MySettingsProvider.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/PackageWithProjectAndUserSettings/MySettingsProvider.cs new file mode 100644 index 0000000000000000000000000000000000000000..d08f8f1f5c8c4f8a8ceccb5877930cb13a1c255a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/PackageWithProjectAndUserSettings/MySettingsProvider.cs @@ -0,0 +1,43 @@ +using System; +using UnityEngine; + +namespace UnityEditor.SettingsManagement.Examples +{ + /// <summary> + /// To create an entry in the Preferences window, define a new SettingsProvider inheriting <see cref="UserSettingsProvider"/>. + /// You can also choose to implement your own SettingsProvider and ignore this implementation. The benefit of using + /// <see cref="UserSettingsProvider"/> is that all <see cref="UserSetting{T}"/> fields in the assembly are automatically + /// populated within the preferences, with support for search and resetting default values. + /// </summary> + static class MySettingsProvider + { + const string k_PreferencesPath = "Preferences/Package With Project and User Settings"; + +#if UNITY_2018_3_OR_NEWER + [SettingsProvider] + static SettingsProvider CreateSettingsProvider() + { + var provider = new UserSettingsProvider(k_PreferencesPath, + MySettingsManager.instance, + new [] { typeof(MySettingsProvider).Assembly }); + + return provider; + } +#else + + // For backwards compatibility it is possible to create an instance of UserSettingsProvider and invoke OnGUI manually. + [NonSerialized] + static UserSettingsProvider s_SettingsProvider; + + [PreferenceItem("ProBuilder")] + static void ProBuilderPreferencesGUI() + { + if (s_SettingsProvider == null) + s_SettingsProvider = new UserSettingsProvider(MySettingsManager.instance, new[] { typeof(MySettingsProvider).Assembly }); + + s_SettingsProvider.OnGUI(null); + } + +#endif + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/PackageWithProjectAndUserSettings/MySettingsWrapper.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/PackageWithProjectAndUserSettings/MySettingsWrapper.cs new file mode 100644 index 0000000000000000000000000000000000000000..c24da9c7d157a521f2980936f1553318098ec1e9 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/PackageWithProjectAndUserSettings/MySettingsWrapper.cs @@ -0,0 +1,16 @@ +using UnityEditor.SettingsManagement; + +namespace UnityEditor.SettingsManagement.Examples +{ + // Usually you will only have a single Settings instance, so it is convenient to define a UserSetting<T> implementation + // that points to your instance. In this way you avoid having to pass the Settings parameter in setting field definitions. + class MySetting<T> : UserSetting<T> + { + public MySetting(string key, T value, SettingsScope scope = SettingsScope.Project) + : base(MySettingsManager.instance, key, value, scope) + {} + + MySetting(Settings settings, string key, T value, SettingsScope scope = SettingsScope.Project) + : base(settings, key, value, scope) { } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/PackageWithProjectAndUserSettings/SettingsExamples.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/PackageWithProjectAndUserSettings/SettingsExamples.cs new file mode 100644 index 0000000000000000000000000000000000000000..9b4e11b8fb7732407145baf761ae661d6d33f6cf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/PackageWithProjectAndUserSettings/SettingsExamples.cs @@ -0,0 +1,104 @@ +using System; +using UnityEngine; + +namespace UnityEditor.SettingsManagement.Examples +{ + [Serializable] + class FooClass + { + public int intValue; + public string stringValue; + + public FooClass() + { + intValue = 42; + stringValue = "I'm some text"; + } + } + + class MySettingsExamples : EditorWindow + { +#pragma warning disable 414 + // [UserSetting] attribute registers this setting with the UserSettingsProvider so that it can be automatically + // shown in the UI. + [UserSetting("General Settings", "Days Without Incident")] + static MySetting<int> s_NumberOfDaysWithoutIncident = new MySetting<int>("general.daysWithoutIncident", 0, SettingsScope.User); + + [UserSetting("General Settings", "Favorite Color")] + static MySetting<Color> s_FavoriteColor = new MySetting<Color>("general.favoriteColor", Color.magenta); + + [UserSetting("General Settings", "Vector2 Field")] + static MySetting<Vector2> s_Vector2Value = new MySetting<Vector2>("general.vector2Value", new Vector2(2f, 4f)); + + [UserSetting("General Settings", "Editor Flags")] + static MySetting<StaticEditorFlags> s_EditorFlags = new MySetting<StaticEditorFlags>("general.editorFlags", StaticEditorFlags.BatchingStatic); +#pragma warning restore 414 + + // [UserSetting] with no arguments simply registers the key with UserSettingsProvider so that it can be included + // in debug views and reset with the options gizmo. Usually this is used in conjunction with [UserSettingsBlock]. + [UserSetting] + static MySetting<FooClass> s_Foo = new MySetting<FooClass>("general.foo", new FooClass(), SettingsScope.Project); + + [UserSetting] + static MySetting<int> s_NumberWithSlider = new MySetting<int>("general.conditionalValue", 5, SettingsScope.Project); + + // A UserSettingBlock is a callback invoked from the UserSettingsProvider. It allows you to draw more complicated + // UI elements without the need to create a new SettingsProvider. Parameters are "category" and "search keywords." + // For maximum compatibility, use `SettingsGUILayout` searchable and settings fields to get features like search + // and per-setting reset with a context click. + [UserSettingBlock("Custom GUI Settings")] + static void ConditionalValueGUI(string searchContext) + { + EditorGUI.BeginChangeCheck(); + + s_NumberWithSlider.value = SettingsGUILayout.SettingsSlider("Number With Slider", s_NumberWithSlider, 0, 10, searchContext); + + var foo = s_Foo.value; + + using(new SettingsGUILayout.IndentedGroup("Foo Class")) + { + EditorGUI.BeginChangeCheck(); + + foo.intValue = SettingsGUILayout.SearchableIntField("Int Value", foo.intValue, searchContext); + foo.stringValue = SettingsGUILayout.SearchableTextField("String Value", foo.stringValue, searchContext); + + // Because FooClass is a reference type, we need to apply the changes to the backing repository (SetValue + // would also work here). + if (EditorGUI.EndChangeCheck()) + s_Foo.ApplyModifiedProperties(); + } + + SettingsGUILayout.DoResetContextMenuForLastRect(s_Foo); + + if (EditorGUI.EndChangeCheck()) + MySettingsManager.Save(); + } + + const string k_ColorInstanceFieldKey = "MySettingsExamples.m_ColorField"; + + // It is also possible to forego the UserSetting<T> wrapper and use a settings instance directly. To register + // a setting with the "Reset All" option of UserSettingsProvider, apply the [UserSetting] (or for instance fields [SettingsKey]) attribute. + Color m_ColorField; + + [MenuItem("Window/Show Settings Examples")] + static void Init() + { + GetWindow<MySettingsExamples>(); + } + + void OnEnable() + { + m_ColorField = MySettingsManager.Get<Color>(k_ColorInstanceFieldKey); + } + + void OnGUI() + { + EditorGUI.BeginChangeCheck(); + + m_ColorField = EditorGUILayout.ColorField("Color", m_ColorField); + + if (EditorGUI.EndChangeCheck()) + MySettingsManager.Set<Color>(k_ColorInstanceFieldKey, m_ColorField); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/Unity.Settings.Example.asmdef b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/Unity.Settings.Example.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..920d178b30cf941a7f6c16307dc3214f525298ed --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Samples~/Unity.Settings.Example.asmdef @@ -0,0 +1,16 @@ +{ + "name": "Unity.Settings.Example", + "references": [ + "Unity.Settings.Editor" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": false, + "defineConstraints": [] +} \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests.meta new file mode 100644 index 0000000000000000000000000000000000000000..870a3cbf4c65ee48cc6076c91aa0a4f763e460ef --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8f491bec7bcc4db45ad9590a6158e0fd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/.test.json b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/.test.json new file mode 100644 index 0000000000000000000000000000000000000000..a6aae4db24b42a2ce877c124f14205e913f9b41e --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/.test.json @@ -0,0 +1,3 @@ +{ + "createSeparatePackage": true +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor.meta new file mode 100644 index 0000000000000000000000000000000000000000..e286a312e5e4d16c074b3e1ff0124f940349c390 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9563dd1f3643cc54ba60086d957fcd78 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/MultipleProjectSettings.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/MultipleProjectSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..123a4c9eeecb7a43e14e6dc6b6bc31963d918fa4 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/MultipleProjectSettings.cs @@ -0,0 +1,86 @@ +using System.IO; +using NUnit.Framework; +using UnityEditor.SettingsManagement; + +namespace UnityEngine.SettingsManagement.EditorTests +{ + class MultipleProjectSettings + { + const string k_MultipleSettingFilesPackageName = "com.unity.settings-manager.tests"; + const string k_SettingsFileA = "FileA"; + const string k_SettingsFileB = "FileB"; + + [TearDown] + public void Teardown() + { + var expectedPath = PackageSettingsRepository.GetSettingsPath(k_MultipleSettingFilesPackageName); + var expectedPathA = PackageSettingsRepository.GetSettingsPath(k_MultipleSettingFilesPackageName, k_SettingsFileA); + var expectedPathB = PackageSettingsRepository.GetSettingsPath(k_MultipleSettingFilesPackageName, k_SettingsFileB); + + if(File.Exists(expectedPath)) + File.Delete(expectedPath); + + if(File.Exists(expectedPathA)) + File.Delete(expectedPathA); + + if(File.Exists(expectedPathB)) + File.Delete(expectedPathB); + } + + [Test] + public void NewSettingsInstance_CreatesUserAndProjectSettings() + { + var expectedPath = PackageSettingsRepository.GetSettingsPath(k_MultipleSettingFilesPackageName); + + Assume.That(File.Exists(expectedPath), Is.False); + + var settings = new Settings(k_MultipleSettingFilesPackageName); + settings.Save(); + + Assert.That(File.Exists(expectedPath), Is.True); + } + + [Test] + public void NewSettingsInstance_SupportsMultipleProjectRepositories() + { + var expectedPathA = PackageSettingsRepository.GetSettingsPath(k_MultipleSettingFilesPackageName, "FileA"); + var expectedPathB = PackageSettingsRepository.GetSettingsPath(k_MultipleSettingFilesPackageName, "FileB"); + + Assume.That(File.Exists(expectedPathA), Is.False); + Assume.That(File.Exists(expectedPathB), Is.False); + + var settings = new Settings(new ISettingsRepository[] + { + new PackageSettingsRepository(k_MultipleSettingFilesPackageName, "FileA"), + new PackageSettingsRepository(k_MultipleSettingFilesPackageName, "FileB") + }); + + settings.Save(); + + Assert.That(File.Exists(expectedPathA), Is.True); + Assert.That(File.Exists(expectedPathB), Is.True); + } + + [Test] + public void MultipleNamedProjectSettings_StoreSettingsSeparately() + { + var expectedPathA = PackageSettingsRepository.GetSettingsPath(k_MultipleSettingFilesPackageName, "FileA"); + var expectedPathB = PackageSettingsRepository.GetSettingsPath(k_MultipleSettingFilesPackageName, "FileB"); + + Assume.That(File.Exists(expectedPathA), Is.False); + Assume.That(File.Exists(expectedPathB), Is.False); + + var settings = new Settings(new ISettingsRepository[] + { + new PackageSettingsRepository(k_MultipleSettingFilesPackageName, "FileA"), + new PackageSettingsRepository(k_MultipleSettingFilesPackageName, "FileB") + }); + + settings.Set<int>("value_a", 32, "FileA"); + settings.Set<int>("value_a", 64, "FileB"); + + Assert.That(settings.Get<int>("value_a", "FileA"), Is.EqualTo(32)); + Assert.That(settings.Get<int>("value_a", "FileB"), Is.EqualTo(64)); + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/MultipleProjectSettings.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/MultipleProjectSettings.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..a421b5eb672667826ccc9c67f882e4554001c7b6 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/MultipleProjectSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 018f1adb8258a4133b73805294498947 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/SettingsTests.cs b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/SettingsTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..152e59b5f2cf4a5c4cdbcfaf30fa72283d953959 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/SettingsTests.cs @@ -0,0 +1,445 @@ +using UnityEngine; +using System; +using System.IO; +using NUnit.Framework; +using UnityEditor; +using UnityEditor.SettingsManagement; +using UnityEngine.TestTools; + +namespace UnityEngine.SettingsManagement.EditorTests +{ + class SettingsTests : IPrebuildSetup, IPostBuildCleanup + { + const string k_PackageName = "com.unity.settings-manager"; + const string k_SettingsFile = "SettingsTests"; + + static Settings s_Settings; + + static string projectSettingsPath + { + get { return PackageSettingsRepository.GetSettingsPath(k_PackageName, k_SettingsFile); } + } + + static Settings settings + { + get + { + if (s_Settings == null) + s_Settings = new Settings(k_PackageName); + return s_Settings; + } + } + + public void Setup() + { + } + + public void Cleanup() + { + foreach (var v in s_AllPreferences) + v.Delete(); + + if (File.Exists(projectSettingsPath)) + File.Delete(projectSettingsPath); + } + + [Serializable] + struct DummyStruct : IEquatable<DummyStruct> + { + public string stringValue; + public int intValue; + + public DummyStruct(string s, int i) + { + stringValue = s; + intValue = i; + } + + public static DummyStruct defaultValue + { + get { return new DummyStruct("I'm a string!", 42); } + } + + public bool Equals(DummyStruct other) + { + return string.Equals(stringValue, other.stringValue) && intValue == other.intValue; + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) + return false; + return obj is DummyStruct && Equals((DummyStruct)obj); + } + + public override int GetHashCode() + { + unchecked + { + return ((stringValue != null ? stringValue.GetHashCode() : 0) * 397) ^ intValue; + } + } + + public static bool operator ==(DummyStruct left, DummyStruct right) + { + return left.Equals(right); + } + + public static bool operator !=(DummyStruct left, DummyStruct right) + { + return !left.Equals(right); + } + + public override string ToString() + { + return stringValue + " " + intValue; + } + } + + [Serializable] + class DummyClass : IEquatable<DummyClass> + { + public string stringValue; + public int intValue; + + public DummyClass(string s, int i) + { + stringValue = s; + intValue = i; + } + + public static DummyClass defaultValue + { + get { return new DummyClass("I'm a string!", 42); } + } + + public bool Equals(DummyClass other) + { + return string.Equals(stringValue, other.stringValue) && intValue == other.intValue; + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) + return false; + return obj is DummyClass && Equals((DummyClass)obj); + } + + public override int GetHashCode() + { + unchecked + { + return ((stringValue != null ? stringValue.GetHashCode() : 0) * 397) ^ intValue; + } + } + + public static bool operator ==(DummyClass left, DummyClass right) + { + return left.Equals(right); + } + + public static bool operator !=(DummyClass left, DummyClass right) + { + return !left.Equals(right); + } + + public override string ToString() + { + return stringValue + " " + intValue; + } + } + + static UserSetting<bool> s_StaticBoolUser = new UserSetting<bool>(settings, "tests.user.static.bool", true, SettingsScope.User); + static UserSetting<bool> s_StaticBoolProject = new UserSetting<bool>(settings, "tests.project.static.bool", true, SettingsScope.Project); + + static UserSetting<string> s_StaticStringUser = new UserSetting<string>(settings, "tests.user.static.string", "Hello, world!", SettingsScope.User); + static UserSetting<string> s_StaticStringProject = new UserSetting<string>(settings, "tests.project.static.string", "Goodbye, world!", SettingsScope.Project); + + static UserSetting<DummyStruct> s_StaticStructUser = new UserSetting<DummyStruct>(settings, "tests.user.static.struct", DummyStruct.defaultValue, SettingsScope.User); + static UserSetting<DummyStruct> s_StaticStructProject = new UserSetting<DummyStruct>(settings, "tests.project.static.struct", DummyStruct.defaultValue, SettingsScope.Project); + + static UserSetting<DummyClass> s_StaticClassUser = new UserSetting<DummyClass>(settings, "tests.user.static.class", DummyClass.defaultValue, SettingsScope.User); + static UserSetting<DummyClass> s_StaticClassProject = new UserSetting<DummyClass>(settings, "tests.project.static.class", DummyClass.defaultValue, SettingsScope.Project); + + static IUserSetting[] s_AllPreferences = new IUserSetting[] + { + s_StaticBoolUser, + s_StaticBoolProject, + s_StaticStringUser, + s_StaticStringProject, + s_StaticStructUser, + s_StaticStructProject, + s_StaticClassUser, + s_StaticClassProject + }; + + [Test] + public static void DefaultsAreCorrect() + { + try + { + foreach (var pref in s_AllPreferences) + pref.Reset(); + + Assert.IsTrue((bool)s_StaticBoolUser, s_StaticBoolUser.ToString()); + Assert.IsTrue((bool)s_StaticBoolProject, s_StaticBoolProject.ToString()); + + Assert.AreEqual("Hello, world!", (string)s_StaticStringUser, s_StaticStringUser.ToString()); + Assert.AreEqual("Goodbye, world!", (string)s_StaticStringProject, s_StaticStringProject.ToString()); + + Assert.AreEqual(DummyStruct.defaultValue, (DummyStruct)s_StaticStructUser, s_StaticStructUser.ToString()); + Assert.AreEqual(DummyStruct.defaultValue, (DummyStruct)s_StaticStructProject, s_StaticStructProject.ToString()); + + Assert.AreEqual(DummyClass.defaultValue, (DummyClass)s_StaticClassUser, s_StaticClassUser.ToString()); + Assert.AreEqual(DummyClass.defaultValue, (DummyClass)s_StaticClassProject, s_StaticClassProject.ToString()); + } + catch (Exception e) + { + Debug.LogError(e.ToString()); + } + } + + [Test] + public static void SetValue() + { + try + { + // BOOl + s_StaticBoolUser.value = false; + s_StaticBoolProject.value = false; + + Assert.IsFalse((bool)s_StaticBoolUser); + Assert.IsFalse((bool)s_StaticBoolProject); + + // STRING + s_StaticStringUser.value = "Some more text"; + s_StaticStringProject.value = "Some text here"; + + Assert.AreEqual("Some more text", (string)s_StaticStringUser); + Assert.AreEqual("Some text here", (string)s_StaticStringProject); + + // STRUCT + var userStruct = new DummyStruct("Changed text", 23); + var projectStruct = new DummyStruct("Slightly different text", -9825); + + s_StaticStructUser.SetValue(userStruct); + s_StaticStructProject.SetValue(projectStruct); + + Assert.AreEqual(userStruct, (DummyStruct)s_StaticStructUser); + Assert.AreEqual(projectStruct, (DummyStruct)s_StaticStructProject); + + // CLASS + var userClass = new DummyClass("Changed text", 23); + var projectClass = new DummyClass("Slightly different text", -9825); + + s_StaticClassUser.SetValue(userClass); + s_StaticClassProject.SetValue(projectClass); + + Assert.AreEqual(userClass, (DummyClass)s_StaticClassUser); + Assert.AreEqual(projectClass, (DummyClass)s_StaticClassProject); + } + catch (Exception e) + { + Debug.LogError(e.ToString()); + } + } + + [Test] + public static void SetAndReset() + { + try + { + // BOOL + s_StaticBoolUser.value = false; + s_StaticBoolProject.value = false; + + // STRING + s_StaticStringUser.value = "Some more text"; + s_StaticStringProject.value = "Some text here"; + + // STRUCT + s_StaticStructUser.SetValue(new DummyStruct("Changed text", 23)); + s_StaticStructProject.SetValue(new DummyStruct("Slightly different text", -9825)); + + // CLASS + s_StaticClassUser.SetValue(new DummyClass("Changed text", 23)); + s_StaticClassProject.SetValue(new DummyClass("Slightly different text", -9825)); + + Assert.IsFalse((bool)s_StaticBoolUser); + Assert.IsFalse((bool)s_StaticBoolProject); + + Assert.AreNotEqual("Hello, world!", (string)s_StaticStringUser); + Assert.AreNotEqual("Goodbye, world!", (string)s_StaticStringProject); + + Assert.AreNotEqual(DummyStruct.defaultValue, (DummyStruct)s_StaticStructUser); + Assert.AreNotEqual(DummyStruct.defaultValue, (DummyStruct)s_StaticStructProject); + + Assert.AreNotEqual(DummyClass.defaultValue, (DummyClass)s_StaticClassUser); + Assert.AreNotEqual(DummyClass.defaultValue, (DummyClass)s_StaticClassProject); + + foreach (var pref in s_AllPreferences) + pref.Reset(); + + Assert.IsTrue((bool)s_StaticBoolUser); + Assert.IsTrue((bool)s_StaticBoolProject); + + Assert.AreEqual("Hello, world!", (string)s_StaticStringUser); + Assert.AreEqual("Goodbye, world!", (string)s_StaticStringProject); + + Assert.AreEqual(DummyStruct.defaultValue, (DummyStruct)s_StaticStructUser); + Assert.AreEqual(DummyStruct.defaultValue, (DummyStruct)s_StaticStructProject); + + Assert.AreEqual(DummyClass.defaultValue, (DummyClass)s_StaticClassUser); + Assert.AreEqual(DummyClass.defaultValue, (DummyClass)s_StaticClassProject); + } + catch (Exception e) + { + Debug.LogError(e.ToString()); + } + } + + [Test] + public static void SerializeAndLoad() + { + try + { + foreach (var pref in s_AllPreferences) + pref.Reset(); + settings.Save(); + + var instance = new Settings(k_PackageName); + + Assert.AreEqual((bool)s_StaticBoolUser, instance.Get<bool>(s_StaticBoolUser.key, s_StaticBoolUser.scope)); + Assert.AreEqual((bool)s_StaticBoolProject, instance.Get<bool>(s_StaticBoolProject.key, s_StaticBoolProject.scope)); + Assert.AreEqual((string)s_StaticStringUser, instance.Get<string>(s_StaticStringUser.key, s_StaticStringUser.scope)); + Assert.AreEqual((string)s_StaticStringProject, instance.Get<string>(s_StaticStringProject.key, s_StaticStringProject.scope)); + Assert.AreEqual((DummyStruct)s_StaticStructUser, instance.Get<DummyStruct>(s_StaticStructUser.key, s_StaticStructUser.scope)); + Assert.AreEqual((DummyStruct)s_StaticStructProject, instance.Get<DummyStruct>(s_StaticStructProject.key, s_StaticStructProject.scope)); + Assert.AreEqual((DummyClass)s_StaticClassUser, instance.Get<DummyClass>(s_StaticClassUser.key, s_StaticClassUser.scope)); + Assert.AreEqual((DummyClass)s_StaticClassProject, instance.Get<DummyClass>(s_StaticClassProject.key, s_StaticClassProject.scope)); + } + catch (Exception e) + { + Debug.LogError(e.ToString()); + } + } + + [Test] + public static void DeleteKeys() + { + try + { + foreach (var pref in s_AllPreferences) + pref.Delete(); + + settings.Save(); + + var instance = new Settings(k_PackageName); + + Assert.IsFalse(instance.ContainsKey<bool>("tests.user.static.bool", SettingsScope.User), "tests.user.static.bool"); + Assert.IsFalse(instance.ContainsKey<bool>("tests.project.static.bool", SettingsScope.Project), "tests.project.static.bool"); + Assert.IsFalse(instance.ContainsKey<string>("tests.user.static.string", SettingsScope.User), "tests.user.static.string"); + Assert.IsFalse(instance.ContainsKey<string>("tests.project.static.string", SettingsScope.Project), "tests.project.static.string"); + Assert.IsFalse(instance.ContainsKey<DummyStruct>("tests.user.static.struct", SettingsScope.User), "tests.user.static.struct"); + Assert.IsFalse(instance.ContainsKey<DummyStruct>("tests.project.static.struct", SettingsScope.Project), "tests.project.static.struct"); + Assert.IsFalse(instance.ContainsKey<DummyClass>("tests.user.static.class", SettingsScope.User), "tests.user.static.class"); + Assert.IsFalse(instance.ContainsKey<DummyClass>("tests.project.static.class", SettingsScope.Project), "tests.project.static.class"); + } + catch (Exception e) + { + Debug.LogError(e.ToString()); + } + } + + [Test] + public static void KeysExistInSettingsInstance() + { + try + { + foreach (var pref in s_AllPreferences) + pref.Reset(); + + settings.Save(); + + Assert.IsTrue(settings.ContainsKey<bool>("tests.user.static.bool", SettingsScope.User), "tests.user.static.bool"); + Assert.IsTrue(settings.ContainsKey<bool>("tests.project.static.bool", SettingsScope.Project), "tests.project.static.bool"); + Assert.IsTrue(settings.ContainsKey<string>("tests.user.static.string", SettingsScope.User), "tests.user.static.string"); + Assert.IsTrue(settings.ContainsKey<string>("tests.project.static.string", SettingsScope.Project), "tests.project.static.string"); + Assert.IsTrue(settings.ContainsKey<DummyStruct>("tests.user.static.struct", SettingsScope.User), "tests.user.static.struct"); + Assert.IsTrue(settings.ContainsKey<DummyStruct>("tests.project.static.struct", SettingsScope.Project), "tests.project.static.struct"); + Assert.IsTrue(settings.ContainsKey<DummyClass>("tests.user.static.class", SettingsScope.User), "tests.user.static.class"); + Assert.IsTrue(settings.ContainsKey<DummyClass>("tests.project.static.class", SettingsScope.Project), "tests.project.static.class"); + } + catch (Exception e) + { + Debug.LogError(e.ToString()); + } + } + + [Test] + public static void KeysExistInSerializedForm() + { + try + { + foreach (var pref in s_AllPreferences) + pref.Reset(); + + settings.Save(); + + var instance = new Settings(k_PackageName); + + Assert.IsTrue(instance.ContainsKey<bool>("tests.user.static.bool", SettingsScope.User), "tests.user.static.bool"); + Assert.IsTrue(instance.ContainsKey<bool>("tests.project.static.bool", SettingsScope.Project), "tests.project.static.bool"); + Assert.IsTrue(instance.ContainsKey<string>("tests.user.static.string", SettingsScope.User), "tests.user.static.string"); + Assert.IsTrue(instance.ContainsKey<string>("tests.project.static.string", SettingsScope.Project), "tests.project.static.string"); + Assert.IsTrue(instance.ContainsKey<DummyStruct>("tests.user.static.struct", SettingsScope.User), "tests.user.static.struct"); + Assert.IsTrue(instance.ContainsKey<DummyStruct>("tests.project.static.struct", SettingsScope.Project), "tests.project.static.struct"); + Assert.IsTrue(instance.ContainsKey<DummyClass>("tests.user.static.class", SettingsScope.User), "tests.user.static.class"); + Assert.IsTrue(instance.ContainsKey<DummyClass>("tests.project.static.class", SettingsScope.Project), "tests.project.static.class"); + } + catch (Exception e) + { + Debug.LogError(e.ToString()); + } + } + + [Test] + public static void ChangingClassValuesSaves() + { + try + { + s_StaticClassUser.Reset(); + s_StaticClassProject.Reset(); + + Assert.AreEqual(DummyClass.defaultValue, (DummyClass)s_StaticClassUser); + Assert.AreEqual(DummyClass.defaultValue, (DummyClass)s_StaticClassProject); + + var userReference = s_StaticClassUser.value; + var projectReference = s_StaticClassProject.value; + + userReference.intValue = 200; + projectReference.intValue = 200; + + s_StaticClassProject.ApplyModifiedProperties(); + s_StaticClassUser.ApplyModifiedProperties(); + + Assert.IsTrue(ReferenceEquals(s_StaticClassProject.value, projectReference)); + Assert.IsTrue(ReferenceEquals(s_StaticClassUser.value, userReference)); + + Assert.AreEqual(200, s_StaticClassUser.value.intValue, "After ApplyModifiedProperties"); + Assert.AreEqual(200, s_StaticClassProject.value.intValue, "After ApplyModifiedProperties"); + + settings.Save(); + + var instance = new Settings(k_PackageName); + + Assert.AreEqual(200, instance.Get<DummyClass>(s_StaticClassUser.key, s_StaticClassUser.scope).intValue, "Reload Settings Instance"); + Assert.AreEqual(200, instance.Get<DummyClass>(s_StaticClassProject.key, s_StaticClassProject.scope).intValue, "Reload Settings Instance"); + } + catch (Exception e) + { + Debug.LogError(e.ToString()); + } + } + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/SettingsTests.cs.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/SettingsTests.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..3429bc1574d4427853522a2d0f7a2d725fa0ac3a --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/SettingsTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 767365db77168f744af8685807ad7f4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/Unity.Settings.Editor.Tests.asmdef b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/Unity.Settings.Editor.Tests.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..783ee4716efc5fa537ae82272904bcea3cc55842 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/Unity.Settings.Editor.Tests.asmdef @@ -0,0 +1,22 @@ +{ + "name": "Unity.Settings.Tests", + "references": [ + "Unity.Settings.Editor" + ], + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [] +} \ No newline at end of file diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/Unity.Settings.Editor.Tests.asmdef.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/Unity.Settings.Editor.Tests.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..c231895ec27f1722840a1deb737da8b9157f48c0 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Tests/Editor/Unity.Settings.Editor.Tests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b8c9b6a82a342504c8e4a2747471d23c +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Third Party Notices.md b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Third Party Notices.md new file mode 100644 index 0000000000000000000000000000000000000000..905e56b4a3b56418f1ca0b5ecbd6165b5b0601cf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Third Party Notices.md @@ -0,0 +1,2 @@ +This package contains third-party software components governed by the license(s) indicated below: +--------- diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Third Party Notices.md.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Third Party Notices.md.meta new file mode 100644 index 0000000000000000000000000000000000000000..34075a1e0cb168e438b1033fc674276478669d71 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/Third Party Notices.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6664064444cb0fb449eab6cbf9e57f11 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/package.json b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/package.json new file mode 100644 index 0000000000000000000000000000000000000000..1bddaf660a12c554526855959f05f31adab1c9bf --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/package.json @@ -0,0 +1,23 @@ +{ + "name": "com.unity.settings-manager", + "displayName": "Settings Manager", + "version": "1.0.3", + "unity": "2018.3", + "description": "A framework for making any serializable field a setting, complete with a pre-built settings interface.", + "samples": [ + { + "displayName": "User Settings Example", + "description": "Example code showing use of the Settings Manager attributes.", + "path": "Samples~" + } + ], + "hideInEditor": true, + "upmCi": { + "footprint": "8626270bc9561a33f85ba977df88266621679de6" + }, + "repository": { + "url": "https://github.com/Unity-Technologies/com.unity.settings-manager.git", + "type": "git", + "revision": "473664ccba1496294b741cf169740a5d54b3d0b6" + } +} diff --git a/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/package.json.meta b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/package.json.meta new file mode 100644 index 0000000000000000000000000000000000000000..0a26410bb51bf66a0aba87592f09644810b181a1 --- /dev/null +++ b/[AIOLOS]/Library/PackageCache/com.unity.settings-manager@1.0.3/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3001f7491ac66e34a9694543d9f8b1ee +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/[AIOLOS]/Library/PackageManager/ProjectCache b/[AIOLOS]/Library/PackageManager/ProjectCache index dcf408e163827898ce2c7fa69632d3aac2001887..148d8a80dd5f073f3c1a7bd3dd7274a84489ad7e 100644 --- a/[AIOLOS]/Library/PackageManager/ProjectCache +++ b/[AIOLOS]/Library/PackageManager/ProjectCache @@ -5,16 +5,16 @@ m_ProjectFiles: m_ContentTrackingEnabled: 1 m_ModificationDate: serializedVersion: 2 - ticks: 637804307542914875 - m_Hash: 2974628459 + ticks: 637810435596593614 + m_Hash: 411620734 m_LockFileStatus: m_FilePath: C:/Users/patri/OneDrive/Documents/Repository/aiolos-array/[AIOLOS]/Packages/packages-lock.json m_PathExists: 1 m_ContentTrackingEnabled: 1 m_ModificationDate: serializedVersion: 2 - ticks: 637804307543114348 - m_Hash: 476679926 + ticks: 637810435596723362 + m_Hash: 102217815 m_EmbeddedPackageManifests: m_ManifestsStatus: {} m_PackageAssets: @@ -233,11 +233,13 @@ m_PackageAssets: - 1.14.7 - 1.14.9 - 1.14.12 + - 1.14.13 - 1.15.1 - 1.15.4 - 1.15.7 - 1.15.9 - 1.15.12 + - 1.15.13 - 2.0.0-preview.6 - 2.0.0-preview.8 - 2.0.0-preview.15 @@ -261,6 +263,7 @@ m_PackageAssets: - 1.14.7 - 1.14.9 - 1.14.12 + - 1.14.13 - 2.0.0-preview.6 - 2.0.0-preview.8 - 2.0.0-preview.15 @@ -700,6 +703,148 @@ m_PackageAssets: url: git+https://github.com/Unity-Technologies/InputSystem.git revision: 041def76515febb36a83d1f928cfb7aefb85176c path: + - packageId: com.unity.probuilder@4.5.2 + testable: 0 + isDirectDependency: 1 + version: 4.5.2 + source: 1 + resolvedPath: C:\Users\patri\OneDrive\Documents\Repository\aiolos-array\[AIOLOS]\Library\PackageCache\com.unity.probuilder@4.5.2 + assetPath: Packages/com.unity.probuilder + name: com.unity.probuilder + displayName: ProBuilder + author: + name: + email: + url: + category: + type: + description: 'Build, edit, and texture custom geometry in Unity. Use ProBuilder + for in-scene level design, prototyping, collision meshes, all with on-the-fly + play-testing. + + + Advanced features include UV editing, vertex colors, + parametric shapes, and texture blending. With ProBuilder''s model export + feature it''s easy to tweak your levels in any external 3D modelling suite.' + status: 4 + errors: [] + versions: + all: + - 3.0.0 + - 3.0.1 + - 3.0.2 + - 3.0.3 + - 3.0.6 + - 3.0.8 + - 3.0.9 + - 3.10.1 + - 4.0.2 + - 4.0.3 + - 4.0.4 + - 4.0.5 + - 4.1.0 + - 4.1.2 + - 4.2.1 + - 4.2.2-preview.1 + - 4.2.2-preview.2 + - 4.2.3 + - 4.2.4-preview.0 + - 4.3.0-preview.0 + - 4.3.0-preview.1 + - 4.3.0-preview.2 + - 4.3.0-preview.4 + - 4.3.0-preview.6 + - 4.3.0-preview.7 + - 4.3.0-preview.8 + - 4.3.0-preview.9 + - 4.3.1 + - 4.4.0-preview.1 + - 4.4.0 + - 4.5.0 + - 4.5.2 + - 5.0.0-pre.7 + - 5.0.0-pre.10 + - 5.0.1 + - 5.0.3 + - 5.0.4 + compatible: + - 4.0.2 + - 4.0.3 + - 4.0.4 + - 4.0.5 + - 4.1.0 + - 4.1.2 + - 4.2.1 + - 4.2.2-preview.1 + - 4.2.2-preview.2 + - 4.2.3 + - 4.2.4-preview.0 + - 4.3.0-preview.0 + - 4.3.0-preview.1 + - 4.3.0-preview.2 + - 4.3.0-preview.4 + - 4.3.0-preview.6 + - 4.3.0-preview.7 + - 4.3.0-preview.8 + - 4.3.0-preview.9 + - 4.3.1 + - 4.4.0-preview.1 + - 4.4.0 + - 4.5.0 + - 4.5.2 + - 5.0.0-pre.7 + - 5.0.0-pre.10 + - 5.0.1 + - 5.0.3 + - 5.0.4 + verified: 4.5.2 + dependencies: + - name: com.unity.settings-manager + version: 1.0.3 + resolvedDependencies: + - name: com.unity.settings-manager + version: 1.0.3 + keywords: + - 3d + - model + - mesh + - modeling + - geometry + - shape + - cube + - blender + - max + - maya + - fbx + - obj + - level + - design + - block + - greybox + - graybox + - whitebox + - prototype + - probuilder + registry: + id: main + name: + url: https://packages.unity.com + scopes: [] + isDefault: 1 + capabilities: 7 + hasRegistry: 1 + hideInEditor: 1 + entitlements: + isAllowed: 1 + isAssetStorePackage: 0 + datePublishedTicks: 637613656650000000 + documentationUrl: + hasRepository: 1 + repository: + type: git + url: https://github.com/Unity-Technologies/com.unity.probuilder.git + revision: 27f52072e5f94638d1f81bc53df38e59d5bac785 + path: - packageId: com.unity.test-framework@1.1.24 testable: 0 isDirectDependency: 1 @@ -3000,6 +3145,64 @@ m_PackageAssets: url: https://github.cds.internal.unity3d.com/unity/com.unity.ext.nunit.git revision: 29ea4d6504a5f58fb3a6934db839aa80ae6d9d88 path: + - packageId: com.unity.settings-manager@1.0.3 + testable: 0 + isDirectDependency: 0 + version: 1.0.3 + source: 1 + resolvedPath: C:\Users\patri\OneDrive\Documents\Repository\aiolos-array\[AIOLOS]\Library\PackageCache\com.unity.settings-manager@1.0.3 + assetPath: Packages/com.unity.settings-manager + name: com.unity.settings-manager + displayName: Settings Manager + author: + name: + email: + url: + category: + type: + description: A framework for making any serializable field a setting, complete + with a pre-built settings interface. + status: 4 + errors: [] + versions: + all: + - 0.1.0-preview.4 + - 0.1.0-preview.8 + - 1.0.0 + - 1.0.1 + - 1.0.2 + - 1.0.3 + compatible: + - 0.1.0-preview.4 + - 0.1.0-preview.8 + - 1.0.0 + - 1.0.1 + - 1.0.2 + - 1.0.3 + verified: 1.0.3 + dependencies: [] + resolvedDependencies: [] + keywords: [] + registry: + id: main + name: + url: https://packages.unity.com + scopes: [] + isDefault: 1 + capabilities: 7 + hasRegistry: 1 + hideInEditor: 1 + entitlements: + isAllowed: 1 + isAssetStorePackage: 0 + datePublishedTicks: 0 + documentationUrl: + hasRepository: 1 + repository: + type: git + url: https://github.com/Unity-Technologies/com.unity.settings-manager.git + revision: 473664ccba1496294b741cf169740a5d54b3d0b6 + path: m_LocalPackages: m_LocalFileStatus: [] m_ProjectPath: C:/Users/patri/OneDrive/Documents/Repository/aiolos-array/[AIOLOS]/Packages diff --git a/[AIOLOS]/Library/PackageManager/ProjectCache.md5 b/[AIOLOS]/Library/PackageManager/ProjectCache.md5 index e872e02814af09fbeffbc200c93da14de3d3ba2c..047cdaff72f1b9cd68cdc711c7de3dbfa84bcddc 100644 --- a/[AIOLOS]/Library/PackageManager/ProjectCache.md5 +++ b/[AIOLOS]/Library/PackageManager/ProjectCache.md5 @@ -1 +1 @@ -caea29e3683740b3f8db18aaed23e65d \ No newline at end of file +efd26009969bfdcec49e0c2d465dfc3b \ No newline at end of file diff --git a/[AIOLOS]/Library/SceneVisibilityState.asset b/[AIOLOS]/Library/SceneVisibilityState.asset index 6f7752ef28eb06601e4c8c1884aaacb7c88664ac..a6d1761b71ac678258382337fa3e8606e1cea45d 100644 Binary files a/[AIOLOS]/Library/SceneVisibilityState.asset and b/[AIOLOS]/Library/SceneVisibilityState.asset differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Assembly-CSharp.dll b/[AIOLOS]/Library/ScriptAssemblies/Assembly-CSharp.dll index 2d562dc4699a3c2c1191eb7f90d07fb869e621c6..0f3f0b06ffecab5ef91ebdd73704889f506513aa 100644 Binary files a/[AIOLOS]/Library/ScriptAssemblies/Assembly-CSharp.dll and b/[AIOLOS]/Library/ScriptAssemblies/Assembly-CSharp.dll differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Assembly-CSharp.pdb b/[AIOLOS]/Library/ScriptAssemblies/Assembly-CSharp.pdb index 4a352b5de722db97500f1aca4ed2f8b60a030969..4964de0a050c48c05234e6bdada197f7a3c35655 100644 Binary files a/[AIOLOS]/Library/ScriptAssemblies/Assembly-CSharp.pdb and b/[AIOLOS]/Library/ScriptAssemblies/Assembly-CSharp.pdb differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.AddOns.Editor.dll b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.AddOns.Editor.dll new file mode 100644 index 0000000000000000000000000000000000000000..4d3de6b7fc7b9a7c11578df551b220697c437969 Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.AddOns.Editor.dll differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.AddOns.Editor.pdb b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.AddOns.Editor.pdb new file mode 100644 index 0000000000000000000000000000000000000000..7820ea826c42c99dd884cea81e1124a3111aee3e Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.AddOns.Editor.pdb differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.AssetIdRemapUtility.dll b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.AssetIdRemapUtility.dll new file mode 100644 index 0000000000000000000000000000000000000000..13cfe9ce3f96176c0baa5bdd147e615d57de2694 Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.AssetIdRemapUtility.dll differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.AssetIdRemapUtility.pdb b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.AssetIdRemapUtility.pdb new file mode 100644 index 0000000000000000000000000000000000000000..5ec7012e92af31e35607f65c548bfb69cfb2057e Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.AssetIdRemapUtility.pdb differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Csg.dll b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Csg.dll new file mode 100644 index 0000000000000000000000000000000000000000..5acc3c06bba777f95f2084d0d00859a4d87b7df9 Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Csg.dll differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Csg.pdb b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Csg.pdb new file mode 100644 index 0000000000000000000000000000000000000000..4f6c41ce84ad67e5ff3122496134d832a1752500 Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Csg.pdb differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Editor.dll b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Editor.dll new file mode 100644 index 0000000000000000000000000000000000000000..bba258dee7e06c5877f7146fcd1e4ec015710396 Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Editor.dll differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Editor.pdb b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Editor.pdb new file mode 100644 index 0000000000000000000000000000000000000000..273310dc5bcb8c46b0e660380b5a21c06b823e54 Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Editor.pdb differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.KdTree.dll b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.KdTree.dll new file mode 100644 index 0000000000000000000000000000000000000000..eee16dabeb94844cebaba41d6ff2b8fde5ec4244 Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.KdTree.dll differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.KdTree.pdb b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.KdTree.pdb new file mode 100644 index 0000000000000000000000000000000000000000..031daadedb5e609b1d54fa41e8e0fcf7f5c4751e Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.KdTree.pdb differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Poly2Tri.dll b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Poly2Tri.dll new file mode 100644 index 0000000000000000000000000000000000000000..8b17b569a1dd61250f26b493043bd9b0f41c42fb Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Poly2Tri.dll differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Poly2Tri.pdb b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Poly2Tri.pdb new file mode 100644 index 0000000000000000000000000000000000000000..4072ec341eed0b2d76eb4d9cc0e3e9d917c26f43 Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Poly2Tri.pdb differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Stl.dll b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Stl.dll new file mode 100644 index 0000000000000000000000000000000000000000..6b7d185eea4555efbec92bdf179cb2131704568f Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Stl.dll differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Stl.pdb b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Stl.pdb new file mode 100644 index 0000000000000000000000000000000000000000..af92323b953c69bd26b17f283ba8b37a817b768d Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.Stl.pdb differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.dll b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.dll new file mode 100644 index 0000000000000000000000000000000000000000..c43030c9c31ee7f07a79002513878f98d7dd078f Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.dll differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.pdb b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.pdb new file mode 100644 index 0000000000000000000000000000000000000000..3e206e642c3fbb6c13fea3ddf570b4960df57964 Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.ProBuilder.pdb differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.Settings.Editor.dll b/[AIOLOS]/Library/ScriptAssemblies/Unity.Settings.Editor.dll new file mode 100644 index 0000000000000000000000000000000000000000..53943db9fbbeeb6a9ba9ab3a38e2d3a491b04641 Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.Settings.Editor.dll differ diff --git a/[AIOLOS]/Library/ScriptAssemblies/Unity.Settings.Editor.pdb b/[AIOLOS]/Library/ScriptAssemblies/Unity.Settings.Editor.pdb new file mode 100644 index 0000000000000000000000000000000000000000..8e02c391e1c7e4f2d8c46d1bc3b6ec7cd2388cfe Binary files /dev/null and b/[AIOLOS]/Library/ScriptAssemblies/Unity.Settings.Editor.pdb differ diff --git a/[AIOLOS]/Library/ScriptMapper b/[AIOLOS]/Library/ScriptMapper index e5afc5c43af602fc2f0c6cc2c387f2f97eed2307..a4deaa8f694b6add00d9f9038389d780f3773faa 100644 Binary files a/[AIOLOS]/Library/ScriptMapper and b/[AIOLOS]/Library/ScriptMapper differ diff --git a/[AIOLOS]/Library/ShaderCache.db b/[AIOLOS]/Library/ShaderCache.db index 2353ca7a0d194346312d5b195c07676098057019..66ea2da6b9a58f2ed207715caddd56f0efb8ba2b 100644 Binary files a/[AIOLOS]/Library/ShaderCache.db and b/[AIOLOS]/Library/ShaderCache.db differ diff --git a/[AIOLOS]/Library/ShaderCache/0/00e03cddeca65063b6c40757bf51e516.bin b/[AIOLOS]/Library/ShaderCache/0/00e03cddeca65063b6c40757bf51e516.bin new file mode 100644 index 0000000000000000000000000000000000000000..05fd0ae9dc53f1de8b8692cb3979deab60f13b35 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/0/00e03cddeca65063b6c40757bf51e516.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/0/0135e9f8e670955bacfeb25361163241.bin b/[AIOLOS]/Library/ShaderCache/0/0135e9f8e670955bacfeb25361163241.bin new file mode 100644 index 0000000000000000000000000000000000000000..8fbb9684d8d0adb47b829bc09d52ef9f3bd509f3 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/0/0135e9f8e670955bacfeb25361163241.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/0/01498a469fff3e5dc9be6d216ecf525e.bin b/[AIOLOS]/Library/ShaderCache/0/01498a469fff3e5dc9be6d216ecf525e.bin new file mode 100644 index 0000000000000000000000000000000000000000..de951806326aff7941fae40c3019a31e4a1dd290 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/0/01498a469fff3e5dc9be6d216ecf525e.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/0/03232f44c743693edc401dbf2c936c69.bin b/[AIOLOS]/Library/ShaderCache/0/03232f44c743693edc401dbf2c936c69.bin new file mode 100644 index 0000000000000000000000000000000000000000..e269d14c267e7d112e053e5b1238f97d1ce892d7 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/0/03232f44c743693edc401dbf2c936c69.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/0/076b0439f51b2572d0a332df2cca6a21.bin b/[AIOLOS]/Library/ShaderCache/0/076b0439f51b2572d0a332df2cca6a21.bin new file mode 100644 index 0000000000000000000000000000000000000000..2baa026c9063f0be57e1362fa90e2fbbf24c4540 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/0/076b0439f51b2572d0a332df2cca6a21.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/0/0a3fe86920e1a326b3335faddc47cd9f.bin b/[AIOLOS]/Library/ShaderCache/0/0a3fe86920e1a326b3335faddc47cd9f.bin new file mode 100644 index 0000000000000000000000000000000000000000..9a31a50b2acd1d5628fc1ad0bb79400e62297cdb Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/0/0a3fe86920e1a326b3335faddc47cd9f.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/0/0b1bbd95d98cbbc251926eec54a6165c.bin b/[AIOLOS]/Library/ShaderCache/0/0b1bbd95d98cbbc251926eec54a6165c.bin new file mode 100644 index 0000000000000000000000000000000000000000..2ebb499c70d7131f68e0649ef951bf9fbb2eee5e Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/0/0b1bbd95d98cbbc251926eec54a6165c.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/0/0bc03eee55054c99f2257c4db3e20de3.bin b/[AIOLOS]/Library/ShaderCache/0/0bc03eee55054c99f2257c4db3e20de3.bin new file mode 100644 index 0000000000000000000000000000000000000000..35ec03dc43c6ec7921d07e5391908aa48c22cb9f Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/0/0bc03eee55054c99f2257c4db3e20de3.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/0/0f8734f9b90f68c99c9c90523e8a7891.bin b/[AIOLOS]/Library/ShaderCache/0/0f8734f9b90f68c99c9c90523e8a7891.bin new file mode 100644 index 0000000000000000000000000000000000000000..c83d080b60c368c56a2432ed55593fa43cd4e39c Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/0/0f8734f9b90f68c99c9c90523e8a7891.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/0/0fe832952b97f515643da97d74ff617f.bin b/[AIOLOS]/Library/ShaderCache/0/0fe832952b97f515643da97d74ff617f.bin new file mode 100644 index 0000000000000000000000000000000000000000..9cbbef9c440b74f88cb00a043ceb2b6b3540d85b Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/0/0fe832952b97f515643da97d74ff617f.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/1/12362e408919c41cd720e7a69ce280b6.bin b/[AIOLOS]/Library/ShaderCache/1/12362e408919c41cd720e7a69ce280b6.bin new file mode 100644 index 0000000000000000000000000000000000000000..b3ab2b1e8e5f1efc9c2619004130bc79443d56b7 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/1/12362e408919c41cd720e7a69ce280b6.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/1/153ec875cc6dc398d687a5a8161c87d0.bin b/[AIOLOS]/Library/ShaderCache/1/153ec875cc6dc398d687a5a8161c87d0.bin new file mode 100644 index 0000000000000000000000000000000000000000..1223fe80028d602d0249821b6d3d5852010f45e0 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/1/153ec875cc6dc398d687a5a8161c87d0.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/1/18295fb3a0065dcee6cd13f2e11cfc29.bin b/[AIOLOS]/Library/ShaderCache/1/18295fb3a0065dcee6cd13f2e11cfc29.bin new file mode 100644 index 0000000000000000000000000000000000000000..07ecbf74d6051c694322df4bd4744d46703e237b Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/1/18295fb3a0065dcee6cd13f2e11cfc29.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/1/194d0e5ec2ee5709cbe852b9b02ef148.bin b/[AIOLOS]/Library/ShaderCache/1/194d0e5ec2ee5709cbe852b9b02ef148.bin new file mode 100644 index 0000000000000000000000000000000000000000..426af1de8c10ef5f3719898b39e3dbd3cf6168c8 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/1/194d0e5ec2ee5709cbe852b9b02ef148.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/1/1dd393934a9596f877391720ff6a3435.bin b/[AIOLOS]/Library/ShaderCache/1/1dd393934a9596f877391720ff6a3435.bin new file mode 100644 index 0000000000000000000000000000000000000000..9a31a50b2acd1d5628fc1ad0bb79400e62297cdb Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/1/1dd393934a9596f877391720ff6a3435.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/2/20aa4f9b6900c7a816b128b60c1a53f3.bin b/[AIOLOS]/Library/ShaderCache/2/20aa4f9b6900c7a816b128b60c1a53f3.bin new file mode 100644 index 0000000000000000000000000000000000000000..20b87297c30d188e3a9effb9f58cbe84abac1739 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/2/20aa4f9b6900c7a816b128b60c1a53f3.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/2/20aae99b5b025e58003cdfcb079e4cbf.bin b/[AIOLOS]/Library/ShaderCache/2/20aae99b5b025e58003cdfcb079e4cbf.bin new file mode 100644 index 0000000000000000000000000000000000000000..0f8b0fb69a09d6f8daca7274a82ad61cda69a30e Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/2/20aae99b5b025e58003cdfcb079e4cbf.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/2/2295bd26771c68b18c9fd1652dbe59a9.bin b/[AIOLOS]/Library/ShaderCache/2/2295bd26771c68b18c9fd1652dbe59a9.bin new file mode 100644 index 0000000000000000000000000000000000000000..139c07c200bbb04e52661e79290e79805e157009 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/2/2295bd26771c68b18c9fd1652dbe59a9.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/2/25920c8b0fed06d74bc0e734cfeab443.bin b/[AIOLOS]/Library/ShaderCache/2/25920c8b0fed06d74bc0e734cfeab443.bin new file mode 100644 index 0000000000000000000000000000000000000000..a83729c306fab6f25d79fd77799d1ab147497ff5 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/2/25920c8b0fed06d74bc0e734cfeab443.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/2/26adf67262afd5c82f12a0bc073b1038.bin b/[AIOLOS]/Library/ShaderCache/2/26adf67262afd5c82f12a0bc073b1038.bin new file mode 100644 index 0000000000000000000000000000000000000000..20b87297c30d188e3a9effb9f58cbe84abac1739 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/2/26adf67262afd5c82f12a0bc073b1038.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/2/28cdfc187d93f846b7c0216b5dff888c.bin b/[AIOLOS]/Library/ShaderCache/2/28cdfc187d93f846b7c0216b5dff888c.bin new file mode 100644 index 0000000000000000000000000000000000000000..27e7ca4b3a53b8ae5ea98cfa3ecd3ee9e8c34cfb Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/2/28cdfc187d93f846b7c0216b5dff888c.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/2/28d2891315e2c1ad91d43a080895999e.bin b/[AIOLOS]/Library/ShaderCache/2/28d2891315e2c1ad91d43a080895999e.bin new file mode 100644 index 0000000000000000000000000000000000000000..c6ea2a2ebcae94b076ad7b1511b6686e4dd71d79 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/2/28d2891315e2c1ad91d43a080895999e.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/2/2a953f20831323f6dd62af0c6393ed42.bin b/[AIOLOS]/Library/ShaderCache/2/2a953f20831323f6dd62af0c6393ed42.bin new file mode 100644 index 0000000000000000000000000000000000000000..0bc3d64b4163351c0a40bb30bab7fa8450e26974 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/2/2a953f20831323f6dd62af0c6393ed42.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/3/303d54750b0a79f413566e02e319e540.bin b/[AIOLOS]/Library/ShaderCache/3/303d54750b0a79f413566e02e319e540.bin new file mode 100644 index 0000000000000000000000000000000000000000..1cc8bf30362491f25304cf649c4471c227fa903f Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/3/303d54750b0a79f413566e02e319e540.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/3/3245f3d1842ac3a29fd3e71ef182b6ef.bin b/[AIOLOS]/Library/ShaderCache/3/3245f3d1842ac3a29fd3e71ef182b6ef.bin new file mode 100644 index 0000000000000000000000000000000000000000..a1a9d417716103ec91112fa92eea1bda41256a7f Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/3/3245f3d1842ac3a29fd3e71ef182b6ef.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/3/3bf58b0bf147cc81f0dd1c9e66450c37.bin b/[AIOLOS]/Library/ShaderCache/3/3bf58b0bf147cc81f0dd1c9e66450c37.bin new file mode 100644 index 0000000000000000000000000000000000000000..391a5a87544687146fb4936da6aafe6d08b42955 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/3/3bf58b0bf147cc81f0dd1c9e66450c37.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/3/3f1520db6c5891d46fcdae157fbbda49.bin b/[AIOLOS]/Library/ShaderCache/3/3f1520db6c5891d46fcdae157fbbda49.bin new file mode 100644 index 0000000000000000000000000000000000000000..8513873dde9eeff5ce701ef5fcfbedbfd99fc87a Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/3/3f1520db6c5891d46fcdae157fbbda49.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/4/41b10d53d98c9b56051fa4376cb925b0.bin b/[AIOLOS]/Library/ShaderCache/4/41b10d53d98c9b56051fa4376cb925b0.bin new file mode 100644 index 0000000000000000000000000000000000000000..20b87297c30d188e3a9effb9f58cbe84abac1739 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/4/41b10d53d98c9b56051fa4376cb925b0.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/4/4260833f7bcd0e9f53d02f7dd08b050a.bin b/[AIOLOS]/Library/ShaderCache/4/4260833f7bcd0e9f53d02f7dd08b050a.bin new file mode 100644 index 0000000000000000000000000000000000000000..e14e6084d67507be07808a375d8276380b1a8d32 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/4/4260833f7bcd0e9f53d02f7dd08b050a.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/4/4ce00c596c467824a199818c8450e272.bin b/[AIOLOS]/Library/ShaderCache/4/4ce00c596c467824a199818c8450e272.bin new file mode 100644 index 0000000000000000000000000000000000000000..35490bc647e41db9201fd45ea8bd8deade45ba00 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/4/4ce00c596c467824a199818c8450e272.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/4/4edc9a9c6ac28c9e84de451b91ec0c3f.bin b/[AIOLOS]/Library/ShaderCache/4/4edc9a9c6ac28c9e84de451b91ec0c3f.bin new file mode 100644 index 0000000000000000000000000000000000000000..8672738c6c67104c377a56e3ad88aef4f16ee4c0 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/4/4edc9a9c6ac28c9e84de451b91ec0c3f.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/5/5484e484a84cca0a81c775ea64815fef.bin b/[AIOLOS]/Library/ShaderCache/5/5484e484a84cca0a81c775ea64815fef.bin new file mode 100644 index 0000000000000000000000000000000000000000..20b87297c30d188e3a9effb9f58cbe84abac1739 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/5/5484e484a84cca0a81c775ea64815fef.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/5/54d406dbb1457ad4738ebd91f881d16f.bin b/[AIOLOS]/Library/ShaderCache/5/54d406dbb1457ad4738ebd91f881d16f.bin new file mode 100644 index 0000000000000000000000000000000000000000..8061ef8c782ac03268e092ce903da54f318d75e8 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/5/54d406dbb1457ad4738ebd91f881d16f.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/5/557fbc1d59ed832b606304b89a53f6ac.bin b/[AIOLOS]/Library/ShaderCache/5/557fbc1d59ed832b606304b89a53f6ac.bin new file mode 100644 index 0000000000000000000000000000000000000000..1df852f6b00fa8265a9e13060fb2ad71e65b3b06 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/5/557fbc1d59ed832b606304b89a53f6ac.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/5/593832b8c548ee36388786a6b57856f3.bin b/[AIOLOS]/Library/ShaderCache/5/593832b8c548ee36388786a6b57856f3.bin new file mode 100644 index 0000000000000000000000000000000000000000..8f56b841512df61bdbb44df73c915fc825f23ae2 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/5/593832b8c548ee36388786a6b57856f3.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/5/59f7dd3892cecd337853b00f786529ee.bin b/[AIOLOS]/Library/ShaderCache/5/59f7dd3892cecd337853b00f786529ee.bin new file mode 100644 index 0000000000000000000000000000000000000000..e4cfaf3b62bb08ea753d3bc127c9d66894484b59 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/5/59f7dd3892cecd337853b00f786529ee.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/5/59fccb6f707dc26b7f6089de0f8baaf3.bin b/[AIOLOS]/Library/ShaderCache/5/59fccb6f707dc26b7f6089de0f8baaf3.bin new file mode 100644 index 0000000000000000000000000000000000000000..223e635c979c0194e57907b384c222e60654ba6d Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/5/59fccb6f707dc26b7f6089de0f8baaf3.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/5/5a4b8920fd4cea75c78b44261c5cdeac.bin b/[AIOLOS]/Library/ShaderCache/5/5a4b8920fd4cea75c78b44261c5cdeac.bin new file mode 100644 index 0000000000000000000000000000000000000000..ff09c9403e7207ea1c06f503038ff5320f47b555 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/5/5a4b8920fd4cea75c78b44261c5cdeac.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/5/5c0c995202632bbb281410408171bc4b.bin b/[AIOLOS]/Library/ShaderCache/5/5c0c995202632bbb281410408171bc4b.bin new file mode 100644 index 0000000000000000000000000000000000000000..e9976e9f3ce3b00240d57f8f81487f3e3cc1fd4d Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/5/5c0c995202632bbb281410408171bc4b.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/5/5f7dc267352efa007a48c9a8c6789b68.bin b/[AIOLOS]/Library/ShaderCache/5/5f7dc267352efa007a48c9a8c6789b68.bin new file mode 100644 index 0000000000000000000000000000000000000000..cffc314abf7bf67d41407b9d8006bf5f5439fd3b Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/5/5f7dc267352efa007a48c9a8c6789b68.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/6/635162b5edb50479d210a63c7390b276.bin b/[AIOLOS]/Library/ShaderCache/6/635162b5edb50479d210a63c7390b276.bin new file mode 100644 index 0000000000000000000000000000000000000000..8135f24e382f56edcece765b1f2314cd0756523e Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/6/635162b5edb50479d210a63c7390b276.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/6/63e4a439684f14541780adacdfd2b4d4.bin b/[AIOLOS]/Library/ShaderCache/6/63e4a439684f14541780adacdfd2b4d4.bin new file mode 100644 index 0000000000000000000000000000000000000000..fcaf7a9a3dd243ffe5ae4b1629639ed89ee70d7d Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/6/63e4a439684f14541780adacdfd2b4d4.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/6/66e76446e05613f4a895838e4360538c.bin b/[AIOLOS]/Library/ShaderCache/6/66e76446e05613f4a895838e4360538c.bin new file mode 100644 index 0000000000000000000000000000000000000000..1eeab06e1a9a72050c60a2dc0c7a407da2dee417 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/6/66e76446e05613f4a895838e4360538c.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/6/686068a236864a8101576653db472e4c.bin b/[AIOLOS]/Library/ShaderCache/6/686068a236864a8101576653db472e4c.bin new file mode 100644 index 0000000000000000000000000000000000000000..27e7ca4b3a53b8ae5ea98cfa3ecd3ee9e8c34cfb Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/6/686068a236864a8101576653db472e4c.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/6/6e4cef7873c0dc424c89f6e33e56910a.bin b/[AIOLOS]/Library/ShaderCache/6/6e4cef7873c0dc424c89f6e33e56910a.bin new file mode 100644 index 0000000000000000000000000000000000000000..959c5059d8a62f42f54b49710a37224a14d34259 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/6/6e4cef7873c0dc424c89f6e33e56910a.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/6/6f0c2b6dcc61f4542cdab55faec5bef2.bin b/[AIOLOS]/Library/ShaderCache/6/6f0c2b6dcc61f4542cdab55faec5bef2.bin new file mode 100644 index 0000000000000000000000000000000000000000..e03f18f47cf658b4ee2612758daab14430172ca0 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/6/6f0c2b6dcc61f4542cdab55faec5bef2.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/7/7168fae271ec7731133c78a193ba41b5.bin b/[AIOLOS]/Library/ShaderCache/7/7168fae271ec7731133c78a193ba41b5.bin new file mode 100644 index 0000000000000000000000000000000000000000..9cbbef9c440b74f88cb00a043ceb2b6b3540d85b Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/7/7168fae271ec7731133c78a193ba41b5.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/7/748bd210534f723c4900bb3cea133cf8.bin b/[AIOLOS]/Library/ShaderCache/7/748bd210534f723c4900bb3cea133cf8.bin new file mode 100644 index 0000000000000000000000000000000000000000..78291918e120bd7ffccc50095b3c315852b3dedb Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/7/748bd210534f723c4900bb3cea133cf8.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/7/74a04e4b2e45cb585abd19bfa56694f0.bin b/[AIOLOS]/Library/ShaderCache/7/74a04e4b2e45cb585abd19bfa56694f0.bin new file mode 100644 index 0000000000000000000000000000000000000000..27ab50367f4479a990bb65f04022a0be9760135e Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/7/74a04e4b2e45cb585abd19bfa56694f0.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/7/760740ab34e3fd247732b37d2b2e1448.bin b/[AIOLOS]/Library/ShaderCache/7/760740ab34e3fd247732b37d2b2e1448.bin new file mode 100644 index 0000000000000000000000000000000000000000..9707d153673d9291499a9a97014cb1b24e75a076 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/7/760740ab34e3fd247732b37d2b2e1448.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/7/76a0672c7ca3a4132e741b0ed9d9c7e2.bin b/[AIOLOS]/Library/ShaderCache/7/76a0672c7ca3a4132e741b0ed9d9c7e2.bin new file mode 100644 index 0000000000000000000000000000000000000000..d63a8aa96cf31a82902ec13077231f8379d710f0 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/7/76a0672c7ca3a4132e741b0ed9d9c7e2.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/7/796b7044b5f7256c4ab480dfacc8908b.bin b/[AIOLOS]/Library/ShaderCache/7/796b7044b5f7256c4ab480dfacc8908b.bin new file mode 100644 index 0000000000000000000000000000000000000000..7ca521215f4cb9f2fa280df8c402f29a5d0d09e4 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/7/796b7044b5f7256c4ab480dfacc8908b.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/7/7e86d527bc192e311920b3cc3fb1ce39.bin b/[AIOLOS]/Library/ShaderCache/7/7e86d527bc192e311920b3cc3fb1ce39.bin new file mode 100644 index 0000000000000000000000000000000000000000..7d8c9bd338880631c28e23ce090a22d4b4205c41 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/7/7e86d527bc192e311920b3cc3fb1ce39.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/8/84b187b7f652f6ac4dbd3879d15b5d41.bin b/[AIOLOS]/Library/ShaderCache/8/84b187b7f652f6ac4dbd3879d15b5d41.bin new file mode 100644 index 0000000000000000000000000000000000000000..b04ba3c4a97f2a6c0143104b25b22f82aa4619c2 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/8/84b187b7f652f6ac4dbd3879d15b5d41.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/8/86cf244065ba9f8e762c29596016fbd3.bin b/[AIOLOS]/Library/ShaderCache/8/86cf244065ba9f8e762c29596016fbd3.bin new file mode 100644 index 0000000000000000000000000000000000000000..4577fca07f7e6e3ecf57621bf42d34b9bcc30dfe Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/8/86cf244065ba9f8e762c29596016fbd3.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/8/8799b8d23b80eb0367a90d0def03b8df.bin b/[AIOLOS]/Library/ShaderCache/8/8799b8d23b80eb0367a90d0def03b8df.bin new file mode 100644 index 0000000000000000000000000000000000000000..e0d3778f48adfadb79131691f694b7af3de83736 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/8/8799b8d23b80eb0367a90d0def03b8df.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/8/8815440c6f2ad86577fe06ca748f5513.bin b/[AIOLOS]/Library/ShaderCache/8/8815440c6f2ad86577fe06ca748f5513.bin new file mode 100644 index 0000000000000000000000000000000000000000..6f8e55593be8b85960d2d5717bc2f15b03cd2ce7 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/8/8815440c6f2ad86577fe06ca748f5513.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/8/8b107a92cfa731cd2c23a38a53f7900c.bin b/[AIOLOS]/Library/ShaderCache/8/8b107a92cfa731cd2c23a38a53f7900c.bin new file mode 100644 index 0000000000000000000000000000000000000000..f900a47de348123e80aa7ad83657655542c29214 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/8/8b107a92cfa731cd2c23a38a53f7900c.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/8/8d06a1ae2f604c9dd15e2e96241d2fff.bin b/[AIOLOS]/Library/ShaderCache/8/8d06a1ae2f604c9dd15e2e96241d2fff.bin new file mode 100644 index 0000000000000000000000000000000000000000..393eaa6dfbe0bc1530c6303bf1b8c793bb6ffd89 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/8/8d06a1ae2f604c9dd15e2e96241d2fff.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/9/900f5cc21db64b855d951632c39fdeff.bin b/[AIOLOS]/Library/ShaderCache/9/900f5cc21db64b855d951632c39fdeff.bin new file mode 100644 index 0000000000000000000000000000000000000000..b95d46acdd83dbc3b02e4ebd5a446184d1fbafca Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/9/900f5cc21db64b855d951632c39fdeff.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/9/91e19ea1e72f133c57c68255439a0e45.bin b/[AIOLOS]/Library/ShaderCache/9/91e19ea1e72f133c57c68255439a0e45.bin new file mode 100644 index 0000000000000000000000000000000000000000..35490bc647e41db9201fd45ea8bd8deade45ba00 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/9/91e19ea1e72f133c57c68255439a0e45.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/9/94489b0c0a488a7df79efad677225a0b.bin b/[AIOLOS]/Library/ShaderCache/9/94489b0c0a488a7df79efad677225a0b.bin new file mode 100644 index 0000000000000000000000000000000000000000..722d1506277c354d8d80495a87459902618046a9 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/9/94489b0c0a488a7df79efad677225a0b.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/9/955c71ef38ebb09855e65ae985d97bec.bin b/[AIOLOS]/Library/ShaderCache/9/955c71ef38ebb09855e65ae985d97bec.bin new file mode 100644 index 0000000000000000000000000000000000000000..5f79227cf8e567a712369202cfb891c11ddbb38b Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/9/955c71ef38ebb09855e65ae985d97bec.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/9/95ba00bddeeb2739a4b1a6eefd9bf6b9.bin b/[AIOLOS]/Library/ShaderCache/9/95ba00bddeeb2739a4b1a6eefd9bf6b9.bin new file mode 100644 index 0000000000000000000000000000000000000000..2b175e09046973d7e891e43616de808d605528f7 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/9/95ba00bddeeb2739a4b1a6eefd9bf6b9.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/9/961034e4d9dd101a8086229ca94e2059.bin b/[AIOLOS]/Library/ShaderCache/9/961034e4d9dd101a8086229ca94e2059.bin new file mode 100644 index 0000000000000000000000000000000000000000..cdb5b03cf5cb803ed721090171925fe8f17ec4dc Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/9/961034e4d9dd101a8086229ca94e2059.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/9/9a522d6b5ba6ad175e81657cc16418bb.bin b/[AIOLOS]/Library/ShaderCache/9/9a522d6b5ba6ad175e81657cc16418bb.bin new file mode 100644 index 0000000000000000000000000000000000000000..20b87297c30d188e3a9effb9f58cbe84abac1739 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/9/9a522d6b5ba6ad175e81657cc16418bb.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/9/9a8fb343cc6058a1108a6c95370bce1f.bin b/[AIOLOS]/Library/ShaderCache/9/9a8fb343cc6058a1108a6c95370bce1f.bin new file mode 100644 index 0000000000000000000000000000000000000000..e095cea1be4246dea7ec4a692ad9a267caa0e428 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/9/9a8fb343cc6058a1108a6c95370bce1f.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/9/9b0a33c8cab484e03f3aeffee0521824.bin b/[AIOLOS]/Library/ShaderCache/9/9b0a33c8cab484e03f3aeffee0521824.bin new file mode 100644 index 0000000000000000000000000000000000000000..c86b44433e669ff17a611afdb861cb0363d1db83 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/9/9b0a33c8cab484e03f3aeffee0521824.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/9/9d86c755fb2156bb7eaa151ab83bfd1c.bin b/[AIOLOS]/Library/ShaderCache/9/9d86c755fb2156bb7eaa151ab83bfd1c.bin new file mode 100644 index 0000000000000000000000000000000000000000..87f32799402d64570efc20c885269a7e69211769 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/9/9d86c755fb2156bb7eaa151ab83bfd1c.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/EditorEncounteredVariants b/[AIOLOS]/Library/ShaderCache/EditorEncounteredVariants index 0465ff92773bc6cfb2a6d37d5213f2f816b7e710..d63156b412127690e6164976ba404391b9b63101 100644 Binary files a/[AIOLOS]/Library/ShaderCache/EditorEncounteredVariants and b/[AIOLOS]/Library/ShaderCache/EditorEncounteredVariants differ diff --git a/[AIOLOS]/Library/ShaderCache/a/a273a3d805b4c637c7b053c2cb91de86.bin b/[AIOLOS]/Library/ShaderCache/a/a273a3d805b4c637c7b053c2cb91de86.bin new file mode 100644 index 0000000000000000000000000000000000000000..0ff58d981b5ccbd94b1cc618bd3ca4f7a0333d4a Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/a/a273a3d805b4c637c7b053c2cb91de86.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/a/a65f0062129692576b24b3ec58f89cdc.bin b/[AIOLOS]/Library/ShaderCache/a/a65f0062129692576b24b3ec58f89cdc.bin new file mode 100644 index 0000000000000000000000000000000000000000..1cc20add14342237b6b484a71c0cbf659231ee92 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/a/a65f0062129692576b24b3ec58f89cdc.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/a/a6a9bc4d0e3fb02b8444ca8411720d35.bin b/[AIOLOS]/Library/ShaderCache/a/a6a9bc4d0e3fb02b8444ca8411720d35.bin new file mode 100644 index 0000000000000000000000000000000000000000..b43e6d352cb6eeaa90f7b553e5b15a147f637190 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/a/a6a9bc4d0e3fb02b8444ca8411720d35.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/a/a725edb16fed315ca23b7db8092f01a0.bin b/[AIOLOS]/Library/ShaderCache/a/a725edb16fed315ca23b7db8092f01a0.bin new file mode 100644 index 0000000000000000000000000000000000000000..94d826223b5b84e2e517e359cf29acdb6b84f13e Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/a/a725edb16fed315ca23b7db8092f01a0.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/a/adcf57e6b9aef94768aecbb092d9da6f.bin b/[AIOLOS]/Library/ShaderCache/a/adcf57e6b9aef94768aecbb092d9da6f.bin new file mode 100644 index 0000000000000000000000000000000000000000..517f61448e93ce8732c725b7961511acc3aa4712 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/a/adcf57e6b9aef94768aecbb092d9da6f.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/a/afd04066c03f277a3efbc761d6fb4fa5.bin b/[AIOLOS]/Library/ShaderCache/a/afd04066c03f277a3efbc761d6fb4fa5.bin new file mode 100644 index 0000000000000000000000000000000000000000..ebdd446118cc88baea211ae930ec74b3a2262ca9 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/a/afd04066c03f277a3efbc761d6fb4fa5.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/a/afd38778b68701a9799f3f1c0d897906.bin b/[AIOLOS]/Library/ShaderCache/a/afd38778b68701a9799f3f1c0d897906.bin new file mode 100644 index 0000000000000000000000000000000000000000..772d53964d3e35f41bb99c6c54d2ffdc14ab6193 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/a/afd38778b68701a9799f3f1c0d897906.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/b/b652d7c5fa2b497c1f5d16f05632130d.bin b/[AIOLOS]/Library/ShaderCache/b/b652d7c5fa2b497c1f5d16f05632130d.bin new file mode 100644 index 0000000000000000000000000000000000000000..8061ef8c782ac03268e092ce903da54f318d75e8 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/b/b652d7c5fa2b497c1f5d16f05632130d.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/b/b705183a7fbb9609addbcb3d6bc71e66.bin b/[AIOLOS]/Library/ShaderCache/b/b705183a7fbb9609addbcb3d6bc71e66.bin new file mode 100644 index 0000000000000000000000000000000000000000..796d06fabc26ef08be16181d354d82326c0576a6 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/b/b705183a7fbb9609addbcb3d6bc71e66.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/b/b82d911e72ff81c994d0e7c92e70f8b2.bin b/[AIOLOS]/Library/ShaderCache/b/b82d911e72ff81c994d0e7c92e70f8b2.bin new file mode 100644 index 0000000000000000000000000000000000000000..b126eb611cffa01b7f0a77e1aef6cb531c86778b Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/b/b82d911e72ff81c994d0e7c92e70f8b2.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/b/bc73829677f08b759d49e2099788b6c9.bin b/[AIOLOS]/Library/ShaderCache/b/bc73829677f08b759d49e2099788b6c9.bin new file mode 100644 index 0000000000000000000000000000000000000000..5e4f2a3e58f4ebeabbc48b08d352bff0ce88a725 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/b/bc73829677f08b759d49e2099788b6c9.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/b/bfb4518a6d0e79b4adf999f4b28ea325.bin b/[AIOLOS]/Library/ShaderCache/b/bfb4518a6d0e79b4adf999f4b28ea325.bin new file mode 100644 index 0000000000000000000000000000000000000000..0fb15031b2f24ea4d41a4e1d1f4f73ef42b62252 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/b/bfb4518a6d0e79b4adf999f4b28ea325.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/c/c482cdba4aac49f6cb87b847b4824f0c.bin b/[AIOLOS]/Library/ShaderCache/c/c482cdba4aac49f6cb87b847b4824f0c.bin new file mode 100644 index 0000000000000000000000000000000000000000..fd501625006d69046b0e0853a103a1f5758b9504 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/c/c482cdba4aac49f6cb87b847b4824f0c.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/c/c4ab88ce94b19e4d9fa2780b43c257b0.bin b/[AIOLOS]/Library/ShaderCache/c/c4ab88ce94b19e4d9fa2780b43c257b0.bin new file mode 100644 index 0000000000000000000000000000000000000000..8061ef8c782ac03268e092ce903da54f318d75e8 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/c/c4ab88ce94b19e4d9fa2780b43c257b0.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/c/c4acd5a85c4f78494e44a19f7d745b15.bin b/[AIOLOS]/Library/ShaderCache/c/c4acd5a85c4f78494e44a19f7d745b15.bin new file mode 100644 index 0000000000000000000000000000000000000000..3629480ead8483b63212aed58fad1d78aad5d4c2 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/c/c4acd5a85c4f78494e44a19f7d745b15.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/c/c4f19222541a401feb929b5572236c2b.bin b/[AIOLOS]/Library/ShaderCache/c/c4f19222541a401feb929b5572236c2b.bin new file mode 100644 index 0000000000000000000000000000000000000000..2dfe00312c17f3eee55e4ae7c8bff248504fb2ac Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/c/c4f19222541a401feb929b5572236c2b.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/c/ca043abbd081a1d97d01d896ab491fa5.bin b/[AIOLOS]/Library/ShaderCache/c/ca043abbd081a1d97d01d896ab491fa5.bin new file mode 100644 index 0000000000000000000000000000000000000000..ebdd446118cc88baea211ae930ec74b3a2262ca9 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/c/ca043abbd081a1d97d01d896ab491fa5.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/d/d3e6d678a1e073658d732bbb636a6f4b.bin b/[AIOLOS]/Library/ShaderCache/d/d3e6d678a1e073658d732bbb636a6f4b.bin new file mode 100644 index 0000000000000000000000000000000000000000..393eaa6dfbe0bc1530c6303bf1b8c793bb6ffd89 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/d/d3e6d678a1e073658d732bbb636a6f4b.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/e/e51047c7a4ebae69bc236bd889797d58.bin b/[AIOLOS]/Library/ShaderCache/e/e51047c7a4ebae69bc236bd889797d58.bin new file mode 100644 index 0000000000000000000000000000000000000000..386f960babb21c6ffdd92d67821011d96623f706 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/e/e51047c7a4ebae69bc236bd889797d58.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/e/e6a6a46e842dffe09aa59bab1e370cdb.bin b/[AIOLOS]/Library/ShaderCache/e/e6a6a46e842dffe09aa59bab1e370cdb.bin new file mode 100644 index 0000000000000000000000000000000000000000..75cd80c62001161af8afded5155d0926a1efaf42 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/e/e6a6a46e842dffe09aa59bab1e370cdb.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/e/e77551fc53e9e98daa5d43279ec48e12.bin b/[AIOLOS]/Library/ShaderCache/e/e77551fc53e9e98daa5d43279ec48e12.bin new file mode 100644 index 0000000000000000000000000000000000000000..8061ef8c782ac03268e092ce903da54f318d75e8 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/e/e77551fc53e9e98daa5d43279ec48e12.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/e/e852aed7ba7c0103a5c367b0eb58469f.bin b/[AIOLOS]/Library/ShaderCache/e/e852aed7ba7c0103a5c367b0eb58469f.bin new file mode 100644 index 0000000000000000000000000000000000000000..053ae9902afb3f48831f176a55175d344e542693 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/e/e852aed7ba7c0103a5c367b0eb58469f.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/e/e9ab8083085c7ace19e6bb3835097b9a.bin b/[AIOLOS]/Library/ShaderCache/e/e9ab8083085c7ace19e6bb3835097b9a.bin new file mode 100644 index 0000000000000000000000000000000000000000..0098ee07343def4a17ab3ca8adaa7f87eb3aea2c Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/e/e9ab8083085c7ace19e6bb3835097b9a.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/e/eda35059897652a9864edce0e98f1c8f.bin b/[AIOLOS]/Library/ShaderCache/e/eda35059897652a9864edce0e98f1c8f.bin new file mode 100644 index 0000000000000000000000000000000000000000..4ee756bc75de2a08b9243291bcc340173915eba6 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/e/eda35059897652a9864edce0e98f1c8f.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/f/f2662281273552857d2d014fd12e7d20.bin b/[AIOLOS]/Library/ShaderCache/f/f2662281273552857d2d014fd12e7d20.bin new file mode 100644 index 0000000000000000000000000000000000000000..517f61448e93ce8732c725b7961511acc3aa4712 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/f/f2662281273552857d2d014fd12e7d20.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/f/f6c73dfcbb8063cfa109eace9f029e3d.bin b/[AIOLOS]/Library/ShaderCache/f/f6c73dfcbb8063cfa109eace9f029e3d.bin new file mode 100644 index 0000000000000000000000000000000000000000..a6c38c3ea918526904ef5f9e051fd752c883a8a3 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/f/f6c73dfcbb8063cfa109eace9f029e3d.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/f/f925f6f4dda0e141d717b9a654f062ca.bin b/[AIOLOS]/Library/ShaderCache/f/f925f6f4dda0e141d717b9a654f062ca.bin new file mode 100644 index 0000000000000000000000000000000000000000..133ee35f652d6ec6473a66647f29b9b1f465400f Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/f/f925f6f4dda0e141d717b9a654f062ca.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/f/ff0992a74c5842e709ff96dd984741f5.bin b/[AIOLOS]/Library/ShaderCache/f/ff0992a74c5842e709ff96dd984741f5.bin new file mode 100644 index 0000000000000000000000000000000000000000..24fb04a8b0e9db321ccd6dd5737d84e136c41ff5 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/f/ff0992a74c5842e709ff96dd984741f5.bin differ diff --git a/[AIOLOS]/Library/ShaderCache/f/ff9d94881fbf6bfe9384202cad40d4e9.bin b/[AIOLOS]/Library/ShaderCache/f/ff9d94881fbf6bfe9384202cad40d4e9.bin new file mode 100644 index 0000000000000000000000000000000000000000..eeb45500a1b2eac49856a0b4810dba25ce865cd7 Binary files /dev/null and b/[AIOLOS]/Library/ShaderCache/f/ff9d94881fbf6bfe9384202cad40d4e9.bin differ diff --git a/[AIOLOS]/Library/SourceAssetDB b/[AIOLOS]/Library/SourceAssetDB index 25faebfc6cbed3f8865738842de121c733ffae84..3b341db9b6cc20c91eab30c5f515089754d49836 100644 Binary files a/[AIOLOS]/Library/SourceAssetDB and b/[AIOLOS]/Library/SourceAssetDB differ diff --git a/[AIOLOS]/Library/StateCache/SceneView/a9/a9a0eab2cb9f9cfb1fcd16c796f65998.json b/[AIOLOS]/Library/StateCache/SceneView/a9/a9a0eab2cb9f9cfb1fcd16c796f65998.json index ff9edc3037b0751b4e68b80db1d9efa791cf453e..b2ed42841da6cf8b0229eb32f329352e2a24772c 100644 --- a/[AIOLOS]/Library/StateCache/SceneView/a9/a9a0eab2cb9f9cfb1fcd16c796f65998.json +++ b/[AIOLOS]/Library/StateCache/SceneView/a9/a9a0eab2cb9f9cfb1fcd16c796f65998.json @@ -1 +1 @@ -{"cameraMode":{"drawMode":0,"name":"Shaded","section":"Shading Mode"},"sceneLighting":true,"audioPlay":false,"sceneViewState":{"m_AlwaysRefresh":false,"showFog":true,"showSkybox":true,"showFlares":true,"showImageEffects":true,"showParticleSystems":true,"showVisualEffectGraphs":true,"m_FxEnabled":true},"in2DMode":false,"pivot":{"x":0.2147843837738037,"y":0.6477646827697754,"z":1.319262981414795},"rotation":{"x":-0.23140087723731996,"y":0.22718779742717744,"z":-0.05567128583788872,"w":-0.9443197846412659},"size":4.507394790649414,"orthographic":false} \ No newline at end of file +{"cameraMode":{"drawMode":0,"name":"Shaded","section":"Shading Mode"},"sceneLighting":true,"audioPlay":false,"sceneViewState":{"m_AlwaysRefresh":false,"showFog":true,"showSkybox":true,"showFlares":true,"showImageEffects":true,"showParticleSystems":true,"showVisualEffectGraphs":true,"m_FxEnabled":true},"in2DMode":false,"pivot":{"x":0.2147843837738037,"y":0.6477646827697754,"z":1.319262981414795},"rotation":{"x":-0.23140087723731996,"y":0.22718779742717744,"z":-0.05567128583788872,"w":-0.9443197846412659},"size":77.90927124023438,"orthographic":false} \ No newline at end of file diff --git a/[AIOLOS]/Library/UIElements/EditorWindows/UnityEditor.PackageManager.UI.PackageManagerWindow.pref b/[AIOLOS]/Library/UIElements/EditorWindows/UnityEditor.PackageManager.UI.PackageManagerWindow.pref new file mode 100644 index 0000000000000000000000000000000000000000..716eeb3b1b205dd5b01ee6dc9925bd4fcd669f91 --- /dev/null +++ b/[AIOLOS]/Library/UIElements/EditorWindows/UnityEditor.PackageManager.UI.PackageManagerWindow.pref @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 12386, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Keys: + - __PanelContainer__rootVisualContainer__package-list-scrollview-key__HorizontalScroller__Slider__UnityEngine.UIElements.Slider + - __PanelContainer__rootVisualContainer__package-list-scrollview-key__VerticalScroller__Slider__UnityEngine.UIElements.Slider + m_Values: + - '{"m_Value":0.0,"m_LowValue":0.0,"m_HighValue":2147483648.0}' + - '{"m_Value":727.0,"m_LowValue":0.0,"m_HighValue":1015.0}' diff --git a/[AIOLOS]/Logs/AssetImportWorker0.log b/[AIOLOS]/Logs/AssetImportWorker0.log index 82f4e4f3795e53eadb9baa18970bb8f2a5232b2b..4cc234c3a0b96811b348eecd988879618b5604b2 100644 --- a/[AIOLOS]/Logs/AssetImportWorker0.log +++ b/[AIOLOS]/Logs/AssetImportWorker0.log @@ -15,11 +15,11 @@ C:/Users/patri/OneDrive/Documents/Repository/aiolos-array/[AIOLOS] -logFile Logs/AssetImportWorker0.log -srvPort -64376 +56878 Successfully changed project path to: C:/Users/patri/OneDrive/Documents/Repository/aiolos-array/[AIOLOS] C:/Users/patri/OneDrive/Documents/Repository/aiolos-array/[AIOLOS] Using Asset Import Pipeline V2. -Refreshing native plugins compatible for Editor in 65.26 ms, found 0 plugins. +Refreshing native plugins compatible for Editor in 51.85 ms, found 0 plugins. Preloading 0 native plugins for Editor in 0.00 ms. Initialize engine version: 2020.3.4f1 (0abb6314276a) [Subsystems] Discovering subsystems at path C:/Program Files/Unity/Hub/Editor/2020.3.4f1/Editor/Data/Resources/UnitySubsystems @@ -35,96 +35,264 @@ Initialize mono Mono path[0] = 'C:/Program Files/Unity/Hub/Editor/2020.3.4f1/Editor/Data/Managed' Mono path[1] = 'C:/Program Files/Unity/Hub/Editor/2020.3.4f1/Editor/Data/MonoBleedingEdge/lib/mono/unityjit' Mono config path = 'C:/Program Files/Unity/Hub/Editor/2020.3.4f1/Editor/Data/MonoBleedingEdge/etc' -Using monoOptions --debugger-agent=transport=dt_socket,embedding=1,server=y,suspend=n,address=127.0.0.1:56460 +Using monoOptions --debugger-agent=transport=dt_socket,embedding=1,server=y,suspend=n,address=127.0.0.1:56560 Begin MonoManager ReloadAssembly Registering precompiled unity dll's ... Register platform support module: C:/Program Files/Unity/Hub/Editor/2020.3.4f1/Editor/Data/PlaybackEngines/WebGLSupport/UnityEditor.WebGL.Extensions.dll Register platform support module: C:/Program Files/Unity/Hub/Editor/2020.3.4f1/Editor/Data/PlaybackEngines/WindowsStandaloneSupport/UnityEditor.WindowsStandalone.Extensions.dll -Registered in 0.005757 seconds. +Registered in 0.005487 seconds. Native extension for WindowsStandalone target not found Native extension for WebGL target not found -Refreshing native plugins compatible for Editor in 133.39 ms, found 0 plugins. +Refreshing native plugins compatible for Editor in 64.79 ms, found 0 plugins. Preloading 0 native plugins for Editor in 0.00 ms. Mono: successfully reloaded assembly -- Completed reload, in 3.688 seconds +- Completed reload, in 2.561 seconds Platform modules already initialized, skipping Registering precompiled user dll's ... -Registered in 0.001996 seconds. +Registered in 0.002000 seconds. Begin MonoManager ReloadAssembly Native extension for WindowsStandalone target not found Native extension for WebGL target not found -Refreshing native plugins compatible for Editor in 95.15 ms, found 0 plugins. +Refreshing native plugins compatible for Editor in 83.79 ms, found 0 plugins. Preloading 0 native plugins for Editor in 0.00 ms. Mono: successfully reloaded assembly -- Completed reload, in 3.846 seconds +- Completed reload, in 3.019 seconds Platform modules already initialized, skipping ======================================================================== Worker process is ready to serve import requests -Launched and connected shader compiler UnityShaderCompiler.exe after 0.14 seconds -Refreshing native plugins compatible for Editor in 0.43 ms, found 0 plugins. +Launched and connected shader compiler UnityShaderCompiler.exe after 0.13 seconds +Refreshing native plugins compatible for Editor in 0.53 ms, found 0 plugins. Preloading 0 native plugins for Editor in 0.00 ms. -Unloading 1576 Unused Serialized files (Serialized files now loaded: 0) -System memory in use before: 74.3 MB. -System memory in use after: 74.4 MB. +Unloading 1936 Unused Serialized files (Serialized files now loaded: 0) +System memory in use before: 90.3 MB. +System memory in use after: 90.3 MB. -Unloading 13 unused Assets to reduce memory usage. Loaded Objects now: 2020. -Total: 23.995300 ms (FindLiveObjects: 0.512600 ms CreateObjectMapping: 0.171300 ms MarkObjects: 23.072500 ms DeleteObjects: 0.235400 ms) +Unloading 14 unused Assets to reduce memory usage. Loaded Objects now: 2380. +Total: 4.911500 ms (FindLiveObjects: 0.625400 ms CreateObjectMapping: 0.468300 ms MarkObjects: 3.554200 ms DeleteObjects: 0.260900 ms) ======================================================================== Received Import Request. path: Assets/StarterAssets/ThirdPersonController/Scripts/ThirdPersonController.cs artifactKey: Guid(26e54e5a728a9234ab24fcf1460ed8a2) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -Start importing Assets/StarterAssets/ThirdPersonController/Scripts/ThirdPersonController.cs using Guid(26e54e5a728a9234ab24fcf1460ed8a2) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: '1faa761cd4db91034e1c25eaa498307b') in 0.143378 seconds - Import took 0.151663 seconds . +Start importing Assets/StarterAssets/ThirdPersonController/Scripts/ThirdPersonController.cs using Guid(26e54e5a728a9234ab24fcf1460ed8a2) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: '45a6c8c250f5175b1a7692b3dd96ebf2') in 0.104490 seconds + Import took 0.118884 seconds . ======================================================================== Received Prepare Registering precompiled user dll's ... -Registered in 0.002195 seconds. +Registered in 0.001164 seconds. Begin MonoManager ReloadAssembly Native extension for WindowsStandalone target not found Native extension for WebGL target not found +Refreshing native plugins compatible for Editor in 0.42 ms, found 0 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Mono: successfully reloaded assembly +- Completed reload, in 1.416 seconds +Platform modules already initialized, skipping Refreshing native plugins compatible for Editor in 0.45 ms, found 0 plugins. Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 1904 Unused Serialized files (Serialized files now loaded: 0) +System memory in use before: 87.8 MB. +System memory in use after: 87.9 MB. + +Unloading 7 unused Assets to reduce memory usage. Loaded Objects now: 2383. +Total: 3.349500 ms (FindLiveObjects: 0.305500 ms CreateObjectMapping: 0.092900 ms MarkObjects: 2.818100 ms DeleteObjects: 0.131400 ms) + +======================================================================== +Received Import Request. + Time since last request: 150.356906 seconds. + path: Assets/StarterAssets/ThirdPersonController/Scripts/ThirdPersonController.cs + artifactKey: Guid(26e54e5a728a9234ab24fcf1460ed8a2) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/StarterAssets/ThirdPersonController/Scripts/ThirdPersonController.cs using Guid(26e54e5a728a9234ab24fcf1460ed8a2) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: 'b1022247631dd7af1ef4574bafab1276') in 0.006192 seconds + Import took 0.010069 seconds . + +======================================================================== +Received Prepare +Registering precompiled user dll's ... +Registered in 0.001668 seconds. +Begin MonoManager ReloadAssembly +Native extension for WindowsStandalone target not found +Native extension for WebGL target not found +Refreshing native plugins compatible for Editor in 0.36 ms, found 0 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Mono: successfully reloaded assembly +- Completed reload, in 1.272 seconds +Platform modules already initialized, skipping +Refreshing native plugins compatible for Editor in 0.40 ms, found 0 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 1904 Unused Serialized files (Serialized files now loaded: 0) +System memory in use before: 87.9 MB. +System memory in use after: 87.9 MB. + +Unloading 7 unused Assets to reduce memory usage. Loaded Objects now: 2386. +Total: 3.343800 ms (FindLiveObjects: 0.402300 ms CreateObjectMapping: 0.213900 ms MarkObjects: 2.557800 ms DeleteObjects: 0.168500 ms) + +======================================================================== +Received Prepare +Registering precompiled user dll's ... +Registered in 0.003103 seconds. +Begin MonoManager ReloadAssembly +Native extension for WindowsStandalone target not found +Native extension for WebGL target not found +Refreshing native plugins compatible for Editor in 0.41 ms, found 0 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. Mono: successfully reloaded assembly -- Completed reload, in 1.963 seconds +- Completed reload, in 1.510 seconds Platform modules already initialized, skipping +Refreshing native plugins compatible for Editor in 0.39 ms, found 0 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 1904 Unused Serialized files (Serialized files now loaded: 0) +System memory in use before: 87.9 MB. +System memory in use after: 87.9 MB. + +Unloading 7 unused Assets to reduce memory usage. Loaded Objects now: 2389. +Total: 2.516800 ms (FindLiveObjects: 0.179300 ms CreateObjectMapping: 0.068600 ms MarkObjects: 2.137400 ms DeleteObjects: 0.130300 ms) + +======================================================================== +Received Prepare +Registering precompiled user dll's ... +Registered in 0.001218 seconds. +Begin MonoManager ReloadAssembly +Native extension for WindowsStandalone target not found +Native extension for WebGL target not found Refreshing native plugins compatible for Editor in 0.36 ms, found 0 plugins. Preloading 0 native plugins for Editor in 0.00 ms. -Unloading 1566 Unused Serialized files (Serialized files now loaded: 0) -System memory in use before: 74.1 MB. -System memory in use after: 74.2 MB. +Mono: successfully reloaded assembly +- Completed reload, in 1.189 seconds +Platform modules already initialized, skipping +Refreshing native plugins compatible for Editor in 0.64 ms, found 0 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 1904 Unused Serialized files (Serialized files now loaded: 0) +System memory in use before: 87.9 MB. +System memory in use after: 88.0 MB. + +Unloading 7 unused Assets to reduce memory usage. Loaded Objects now: 2392. +Total: 2.720400 ms (FindLiveObjects: 0.257500 ms CreateObjectMapping: 0.114100 ms MarkObjects: 2.230800 ms DeleteObjects: 0.116500 ms) + +======================================================================== +Received Prepare +Registering precompiled user dll's ... +Registered in 0.001123 seconds. +Begin MonoManager ReloadAssembly +Native extension for WindowsStandalone target not found +Native extension for WebGL target not found +Refreshing native plugins compatible for Editor in 0.43 ms, found 0 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Mono: successfully reloaded assembly +- Completed reload, in 1.281 seconds +Platform modules already initialized, skipping +Refreshing native plugins compatible for Editor in 0.43 ms, found 0 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 1904 Unused Serialized files (Serialized files now loaded: 0) +System memory in use before: 87.9 MB. +System memory in use after: 88.0 MB. + +Unloading 7 unused Assets to reduce memory usage. Loaded Objects now: 2395. +Total: 2.796600 ms (FindLiveObjects: 0.305400 ms CreateObjectMapping: 0.097300 ms MarkObjects: 2.270800 ms DeleteObjects: 0.121600 ms) + +======================================================================== +Received Prepare +Registering precompiled user dll's ... +Registered in 0.001024 seconds. +Begin MonoManager ReloadAssembly +Native extension for WindowsStandalone target not found +Native extension for WebGL target not found +Refreshing native plugins compatible for Editor in 0.35 ms, found 0 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Mono: successfully reloaded assembly +- Completed reload, in 1.254 seconds +Platform modules already initialized, skipping +Refreshing native plugins compatible for Editor in 0.39 ms, found 0 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 1904 Unused Serialized files (Serialized files now loaded: 0) +System memory in use before: 87.9 MB. +System memory in use after: 88.0 MB. -Unloading 6 unused Assets to reduce memory usage. Loaded Objects now: 2023. -Total: 5.263600 ms (FindLiveObjects: 0.473800 ms CreateObjectMapping: 0.134100 ms MarkObjects: 4.535300 ms DeleteObjects: 0.117600 ms) +Unloading 7 unused Assets to reduce memory usage. Loaded Objects now: 2398. +Total: 4.267500 ms (FindLiveObjects: 0.383400 ms CreateObjectMapping: 0.099500 ms MarkObjects: 3.637400 ms DeleteObjects: 0.145600 ms) ======================================================================== Received Prepare Registering precompiled user dll's ... -Registered in 0.001300 seconds. +Registered in 0.001634 seconds. Begin MonoManager ReloadAssembly Native extension for WindowsStandalone target not found Native extension for WebGL target not found -Refreshing native plugins compatible for Editor in 0.46 ms, found 0 plugins. +Refreshing native plugins compatible for Editor in 0.41 ms, found 0 plugins. Preloading 0 native plugins for Editor in 0.00 ms. Mono: successfully reloaded assembly -- Completed reload, in 1.603 seconds +- Completed reload, in 1.513 seconds Platform modules already initialized, skipping +Refreshing native plugins compatible for Editor in 0.44 ms, found 0 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 1904 Unused Serialized files (Serialized files now loaded: 0) +System memory in use before: 87.9 MB. +System memory in use after: 88.0 MB. + +Unloading 7 unused Assets to reduce memory usage. Loaded Objects now: 2401. +Total: 3.160900 ms (FindLiveObjects: 0.307400 ms CreateObjectMapping: 0.095600 ms MarkObjects: 2.602600 ms DeleteObjects: 0.153400 ms) + +======================================================================== +Received Prepare +Registering precompiled user dll's ... +Registered in 0.001028 seconds. +Begin MonoManager ReloadAssembly +Native extension for WindowsStandalone target not found +Native extension for WebGL target not found Refreshing native plugins compatible for Editor in 0.33 ms, found 0 plugins. Preloading 0 native plugins for Editor in 0.00 ms. -Unloading 1566 Unused Serialized files (Serialized files now loaded: 0) -System memory in use before: 74.1 MB. -System memory in use after: 74.2 MB. +Mono: successfully reloaded assembly +- Completed reload, in 1.280 seconds +Platform modules already initialized, skipping +Refreshing native plugins compatible for Editor in 0.47 ms, found 0 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 1904 Unused Serialized files (Serialized files now loaded: 0) +System memory in use before: 88.0 MB. +System memory in use after: 88.0 MB. -Unloading 6 unused Assets to reduce memory usage. Loaded Objects now: 2026. -Total: 2.742200 ms (FindLiveObjects: 0.220200 ms CreateObjectMapping: 0.089600 ms MarkObjects: 2.331500 ms DeleteObjects: 0.099500 ms) +Unloading 7 unused Assets to reduce memory usage. Loaded Objects now: 2404. +Total: 3.944000 ms (FindLiveObjects: 0.418700 ms CreateObjectMapping: 0.155700 ms MarkObjects: 3.155500 ms DeleteObjects: 0.212500 ms) ======================================================================== -Received Import Request. - Time since last request: 7709.725846 seconds. - path: Assets/StarterAssets/InputSystem/StarterAssets.inputactions - artifactKey: Guid(4419d82f33d36e848b3ed5af4c8da37e) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -Start importing Assets/StarterAssets/InputSystem/StarterAssets.inputactions using Guid(4419d82f33d36e848b3ed5af4c8da37e) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: '7dba81d87105f5c3ff3c35127a228e62') in 0.051454 seconds - Import took 0.057948 seconds . +Received Prepare +Registering precompiled user dll's ... +Registered in 0.001669 seconds. +Begin MonoManager ReloadAssembly +Native extension for WindowsStandalone target not found +Native extension for WebGL target not found +Refreshing native plugins compatible for Editor in 0.41 ms, found 0 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Mono: successfully reloaded assembly +- Completed reload, in 1.363 seconds +Platform modules already initialized, skipping +Refreshing native plugins compatible for Editor in 0.77 ms, found 0 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 1904 Unused Serialized files (Serialized files now loaded: 0) +System memory in use before: 88.0 MB. +System memory in use after: 88.0 MB. + +Unloading 7 unused Assets to reduce memory usage. Loaded Objects now: 2407. +Total: 2.521400 ms (FindLiveObjects: 0.205200 ms CreateObjectMapping: 0.077800 ms MarkObjects: 2.121600 ms DeleteObjects: 0.115800 ms) + +======================================================================== +Received Prepare +Registering precompiled user dll's ... +Registered in 0.001039 seconds. +Begin MonoManager ReloadAssembly +Native extension for WindowsStandalone target not found +Native extension for WebGL target not found +Refreshing native plugins compatible for Editor in 0.49 ms, found 0 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Mono: successfully reloaded assembly +- Completed reload, in 1.065 seconds +Platform modules already initialized, skipping +Refreshing native plugins compatible for Editor in 0.57 ms, found 0 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 1904 Unused Serialized files (Serialized files now loaded: 0) +System memory in use before: 88.0 MB. +System memory in use after: 88.0 MB. + +Unloading 7 unused Assets to reduce memory usage. Loaded Objects now: 2410. +Total: 3.508200 ms (FindLiveObjects: 0.255800 ms CreateObjectMapping: 0.084500 ms MarkObjects: 2.982600 ms DeleteObjects: 0.183500 ms) AssetImportWorkerClient::OnTransportError - code=2 error=End of file diff --git a/[AIOLOS]/Packages/manifest.json b/[AIOLOS]/Packages/manifest.json index 02cf5d0294a700ab280764e38c2ef525814600bb..d059d8621be6cdb4e25cd3f8470a323b01d47024 100644 --- a/[AIOLOS]/Packages/manifest.json +++ b/[AIOLOS]/Packages/manifest.json @@ -6,6 +6,7 @@ "com.unity.ide.visualstudio": "2.0.7", "com.unity.ide.vscode": "1.2.3", "com.unity.inputsystem": "1.0.2", + "com.unity.probuilder": "4.5.2", "com.unity.test-framework": "1.1.24", "com.unity.textmeshpro": "3.0.4", "com.unity.timeline": "1.4.7", diff --git a/[AIOLOS]/Packages/packages-lock.json b/[AIOLOS]/Packages/packages-lock.json index d8448777275949ceba5206c2d60644a7f7297b66..6ed8c2dfd59d6f057fe4e45c6a676de9555024ae 100644 --- a/[AIOLOS]/Packages/packages-lock.json +++ b/[AIOLOS]/Packages/packages-lock.json @@ -53,6 +53,22 @@ "dependencies": {}, "url": "https://packages.unity.com" }, + "com.unity.probuilder": { + "version": "4.5.2", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.settings-manager": "1.0.3" + }, + "url": "https://packages.unity.com" + }, + "com.unity.settings-manager": { + "version": "1.0.3", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, "com.unity.test-framework": { "version": "1.1.24", "depth": 0, diff --git a/[AIOLOS]/ProjectSettings/Packages/com.unity.probuilder/Settings.json b/[AIOLOS]/ProjectSettings/Packages/com.unity.probuilder/Settings.json new file mode 100644 index 0000000000000000000000000000000000000000..6995093c6e7380c08c7cda1741d4ed54416cf8d9 --- /dev/null +++ b/[AIOLOS]/ProjectSettings/Packages/com.unity.probuilder/Settings.json @@ -0,0 +1,123 @@ +{ + "m_Name": "Settings", + "m_Path": "ProjectSettings/Packages/com.unity.probuilder/Settings.json", + "m_Dictionary": { + "m_DictionaryValues": [ + { + "type": "UnityEngine.ProBuilder.LogLevel, Unity.ProBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", + "key": "log.level", + "value": "{\"m_Value\":3}" + }, + { + "type": "UnityEngine.ProBuilder.LogOutput, Unity.ProBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", + "key": "log.output", + "value": "{\"m_Value\":1}" + }, + { + "type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "log.path", + "value": "{\"m_Value\":\"ProBuilderLog.txt\"}" + }, + { + "type": "UnityEngine.ProBuilder.SemVer, Unity.ProBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", + "key": "about.identifier", + "value": "{\"m_Value\":{\"m_Major\":4,\"m_Minor\":5,\"m_Patch\":2,\"m_Build\":-1,\"m_Type\":\"\",\"m_Metadata\":\"\",\"m_Date\":\"\"}}" + }, + { + "type": "UnityEngine.ProBuilder.SemVer, Unity.ProBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", + "key": "preferences.version", + "value": "{\"m_Value\":{\"m_Major\":4,\"m_Minor\":5,\"m_Patch\":2,\"m_Build\":-1,\"m_Type\":\"\",\"m_Metadata\":\"\",\"m_Date\":\"\"}}" + }, + { + "type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "UnityEngine.ProBuilder.ProBuilderEditor-isUtilityWindow", + "value": "{\"m_Value\":false}" + }, + { + "type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "editor.backFaceSelectEnabled", + "value": "{\"m_Value\":false}" + }, + { + "type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "editor.toolbarIconGUI", + "value": "{\"m_Value\":false}" + }, + { + "type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "editor.showSceneInfo", + "value": "{\"m_Value\":false}" + }, + { + "type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "lightmapping.autoUnwrapLightmapUV", + "value": "{\"m_Value\":true}" + }, + { + "type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "mesh.newShapesSnapToGrid", + "value": "{\"m_Value\":true}" + }, + { + "type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "editor.autoRecalculateCollisions", + "value": "{\"m_Value\":false}" + }, + { + "type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "mesh.meshColliderIsConvex", + "value": "{\"m_Value\":false}" + }, + { + "type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "editor.closeWindowAfterShapeCreation", + "value": "{\"m_Value\":false}" + }, + { + "type": "UnityEngine.ProBuilder.SelectionModifierBehavior, Unity.ProBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", + "key": "editor.rectSelectModifier", + "value": "{\"m_Value\":2}" + }, + { + "type": "UnityEngine.ProBuilder.RectSelectMode, Unity.ProBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", + "key": "editor.dragSelectRectMode", + "value": "{\"m_Value\":0}" + }, + { + "type": "UnityEngine.ProBuilder.SelectMode, Unity.ProBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", + "key": "editor.selectMode", + "value": "{\"m_Value\":1}" + }, + { + "type": "UnityEngine.ProBuilder.PivotLocation, Unity.ProBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", + "key": "mesh.newShapePivotLocation", + "value": "{\"m_Value\":1}" + }, + { + "type": "UnityEngine.Rendering.ShadowCastingMode, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", + "key": "mesh.shadowCastingMode", + "value": "{\"m_Value\":1}" + }, + { + "type": "UnityEngine.Material, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", + "key": "mesh.userMaterial", + "value": "{\"m_Value\":{\"instanceID\":0}}" + }, + { + "type": "UnityEditor.StaticEditorFlags, UnityEditor.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", + "key": "mesh.defaultStaticEditorFlags", + "value": "{\"m_Value\":0}" + }, + { + "type": "UnityEngine.ProBuilder.ColliderType, Unity.ProBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", + "key": "mesh.newShapeColliderType", + "value": "{\"m_Value\":2}" + }, + { + "type": "UnityEngine.ProBuilder.UnwrapParameters, Unity.ProBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", + "key": "lightmapping.defaultLightmapUnwrapParameters", + "value": "{\"m_Value\":{\"m_HardAngle\":88.0,\"m_PackMargin\":20.0,\"m_AngleError\":8.0,\"m_AreaError\":15.0}}" + } + ] + } +} \ No newline at end of file diff --git a/[AIOLOS]/obj/Debug/Assembly-CSharp-Editor.csproj.CoreCompileInputs.cache b/[AIOLOS]/obj/Debug/Assembly-CSharp-Editor.csproj.CoreCompileInputs.cache index 79483efde43e853fe80b5312324b2c8570511772..fd7e20f00b368f283645c0ed0d16aff919eac4aa 100644 --- a/[AIOLOS]/obj/Debug/Assembly-CSharp-Editor.csproj.CoreCompileInputs.cache +++ b/[AIOLOS]/obj/Debug/Assembly-CSharp-Editor.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -193fd1c4adc55176cc38a19b42bcd1ee8652b07c +1bc0b9d0b071b6a95b4bfbddf5073068d574b6ee diff --git a/[AIOLOS]/obj/Debug/Assembly-CSharp-Editor.csprojAssemblyReference.cache b/[AIOLOS]/obj/Debug/Assembly-CSharp-Editor.csprojAssemblyReference.cache index b55f2991fe2108831ed82cbbed85843f94656fa6..fe7f195932dc9f4f5e7c5ce6b6637bdb1a9b8ce6 100644 Binary files a/[AIOLOS]/obj/Debug/Assembly-CSharp-Editor.csprojAssemblyReference.cache and b/[AIOLOS]/obj/Debug/Assembly-CSharp-Editor.csprojAssemblyReference.cache differ diff --git a/[AIOLOS]/obj/Debug/Assembly-CSharp.csproj.CoreCompileInputs.cache b/[AIOLOS]/obj/Debug/Assembly-CSharp.csproj.CoreCompileInputs.cache index a9c302bef724452f347e4ee9c32ae35b0a3115a4..096911292eab457ea63bcdda9fd70781c2f757b2 100644 --- a/[AIOLOS]/obj/Debug/Assembly-CSharp.csproj.CoreCompileInputs.cache +++ b/[AIOLOS]/obj/Debug/Assembly-CSharp.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -fa08a8780fb9dfa2a5b498cab686b69bf3428c97 +c8b5af85a1fe9d0f3520ee97873632876b995018 diff --git a/[AIOLOS]/obj/Debug/Assembly-CSharp.csprojAssemblyReference.cache b/[AIOLOS]/obj/Debug/Assembly-CSharp.csprojAssemblyReference.cache index cb7e69f8882a812c7cd7a057b67719f493d4ae8e..3b21b8709f45f1a24465826fe613f5af03e68b4e 100644 Binary files a/[AIOLOS]/obj/Debug/Assembly-CSharp.csprojAssemblyReference.cache and b/[AIOLOS]/obj/Debug/Assembly-CSharp.csprojAssemblyReference.cache differ